Intel Movidius(Movidius Neural Compute Stick NCS)とは
Intelが出したAIに特化したプロセッサです。これをつければ、Raspberry Piでもサクサクとディープラーニングでの画像認識が動くという優れものです。「欲しいなぁ」と思い悩んでいたら、ディープラーニングおじさんがポイっとくれたので、早速夜中に家でゴソゴソ試してみました。

Movidius Neural Compute Stick - NCS ニューラル ディープラーニング USB スティック
- 出版社/メーカー: Intel
- メディア: Personal Computers
- この商品を含むブログを見る
また、カメラは、Open CVから呼び出しやすいUSBのWebカメラを使います。私が使ったのは、以下ですが多分どの機種でも大丈夫だと思います。

【2012年モデル】ELECOM WEBカメラ 200万画素 1/5インチCMOSセンサ マイク内蔵 コンパクトタイプ ブラック UCAM-C0220FBBK
- 出版社/メーカー: エレコム
- 発売日: 2012/06/14
- メディア: Personal Computers
- この商品を含むブログを見る
ネットに情報も出回っていたので楽勝だと思っていたのですが、案の定色々詰まったので自分へのメモとしてセットアップ方法残しておきます。誰かの役に立つことを願います。
Raspberry PiのIntel Movidius用セットアップ
ディープラーニングではいつものことですが、バージョンが重要です。特にncsdk(MovidiusのSDK)とTensorFlowとKerasのバージョンは超重要です。うまく動かない場合は、バージョンダウンする勇気(?)を持つことも大切かもしれません。
今回は以下のバージョンでセットアップしました。
python==3.5.3 ncsdk==1.12 tensorflow==1.4.1 keras==2.1.2 opencv==3.4.0
主な流れは以下です。
- Raspberry Piの基本セットアップ
- TensorFlow + Kerasインストール
- Intel Movidius Neural Compute SDKセットアップ
- Open CV3 インストール
Raspberry Piの基本セットアップ
使用するOSはRaspbian StretchでOKです。てっきりUbuntu入れないとダメだと思っていたのですが、Raspbian Stretch Desktopに正式対応したみたいです。Raspbianのセットアップに関しては下記記事参照下さい。
注意点としては、以下2点です。
- SDカードの容量は32GB以上にする
- 上記事の「スワップファイル増大」の項目を必ず実施する
偉大なる先人の知恵に感謝です。スワップファイルは、上記の記事では1GBに設定していますが、成功している人は大体2GBの設定にしているようだったので、以下のとおりに設定しました。
CONF_SWAPSIZE=2048
TensorFlow + Kerasインストール
以下のとおりコマンド実行してインストールします。TensorFlowはバイナリパッケージを使うので、10分もあればインストールできます。Kerasは、Intel Movidiusには対応していないので、入れなくても良いです(今回は、Intel Movidius無しの場合との比較に使うために入れています)。
$ pip3 install numpy==1.13 $ sudo apt-get install libblas-dev liblapack-dev python3-dev libatlas-base-dev gfortran python3-setuptools $ sudo pip3 install https://github.com/lhelontra/tensorflow-on-arm/releases/download/v1.4.1/tensorflow-1.4.1-cp35-none-linux_armv7l.whl $ sudo apt-get install python3-h5py $ sudo pip3 install keras==2.1.2 $ pip3 install -U numpy
インストールできたかの確認は以下のようにライブラリをインポートして確認しましょう。
$ python3 Python 3.5.3 (default, Jan 19 2017, 14:11:04) [GCC 6.3.0 20170124] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import tensorflow /usr/lib/python3/dist-packages/h5py/__init__.py:34: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`. from ._conv import register_converters as _register_converters >>> import keras Using TensorFlow backend. >>>
上記のようにエラーでなければOKです(warningは出ますが、無視して良いそうです)。
Intel Movidius Neural Compute SDKセットアップ
以下コマンドでSDKをインストールできます。3行目は実行するとビルドが始まり、終わるまでに4時間くらいかかります。リモートだと切断してしまう可能性があるので、Raspberry Pi本体のターミナルで実行するのが良いでしょう。byobuなどの仮想端末使っても良いかもしれませんね。
$ git clone http://github.com/Movidius/ncsdk
$ cd ncsdk
$ make install && make examples
OpenCV3インストール
参考サイトによると、Intel MovidiusのSDKをインストールすると、一緒にOpenCV3のインストールされると書いてありましたが、そんなことは無かったです。SDKのリポジトリに./install-opencv.sh
というファイルがあるので、このスクリプトを実行してインストールするように仕様が変わったのかもしれません。
ただ、OpenCVビルドをRaspberry Piでやるとまた数時間かかってしまうので、今回は以下コマンドでバイナリパッケージでインストールしました、。ものの2,3分でインストールできます。
$ wget https://github.com/mt08xx/files/raw/master/opencv-rpi/libopencv3_3.4.0-20180115.1_armhf.deb
$ sudo apt install -y ./libopencv3_3.4.0-20180115.1_armhf.deb
$ sudo ldconfig
Intel Movidiusのテスト
Intel Movidiusがちゃんと動くか確認します。以下実行します。
$ cd ~/ncsdk/examples/tensorflow/inception_v3
$ python3 run.py
以下のように electric guitar が認識されればOKです。
Number of categories: 1001 Start download to NCS... ******************************************************************************* inception-v3 on NCS ******************************************************************************* 547 electric guitar 0.9883 403 acoustic guitar 0.00772 715 pick, plectrum, plectron 0.001509 421 banjo 0.000926 820 stage 0.0006595 ******************************************************************************* Finished
Intel Movidius有り無しでRaspberry Piでの画像認識性能の比較
Intel Movidius無し
まずは、Intel Movidius無しの状態で試してみましょう。
Intel Movidius無し
試すのは、以下と同じ内容ですね。
以下コマンド実行すると、画像認識が動きます。
$ git clone https://github.com/karaage0703/tensorflow-pi
$ cd tensorflow-pi
$ python3 inspect_camera.py
あくびが出るくらい遅い(2倍速程度の速さです)
Intel Movidius有り
次にIntel Movidius有りの状態で試してみましょう。
Intel Movidius有り
以下コマンドで、@pon_dat さん作成のスクリプトをダウンロードします。
$ cd cd ~/ncsdk/examples/tensorflow/inception_v3 $ wget https://gist.githubusercontent.com/PonDad/bc185bdf81735dfd018bda6ce0b37fea/raw/85652b5b2b03dd6c37fc5b5de220546d431be444/app.py
以下実行すると画像認識が動きます。
$ python3 app.py
めっちゃ早い。というか認識速度にカメラ表示がついてこれない感じ(2倍速程度の速さです)
まとめ
Intel Movidiusを使ってRaspberry Piで画像認識を試してみました。Intel Movidiusで画像認識自体はかなり高速化されましたが、カメラの表示など他の部分がついてこれないので、使いどころは限られてきそうだなという印象です。また、高速化のためにはモデルの変換や、プログラムの修正が必要で、USBを刺したら自動的に高速化というわけではないので注意が必要です。ここらへんはハードウェアのアクセラレータなので、当たり前といえば当たり前なのですが、普通のPCでのGPU使用の有無のようにもっと簡単に切り替えられると楽なのになと思いました。
Intel Movidiusを使えば、ラズパイで高速に「ヒューマンシーケンサー2.0」を動かせるかなと目論んでいたのですが、ソフトを変更するのが中々大変そうなのと、映像表示などの部分がボトルネックになりそうなので、一旦ペンディングしたいと思います。
Google Vision Kit
Google製のAIカメラキット「Vision Kit」は、Raspberry Pi Zero WHとIntel Movidiusと同じチップが搭載された画像処理基板の組み合わせのキットとなっています。こちらも、ディープラーニングでの画像認識に興味ある方だと楽しめると思います。
Vision Kitに関しては、ラズパイマガジンの2018年10月号、12月号に記事を書いています。基本的な使い方から、自前データの学習のさせ方まで解説していますので、もしよろしければ参考にしてみて下さい。詳細は以下記事参照下さい。
参考リンク
Movidius で画像認識高速化 for ラズパイ | AI coordinator
MovidiusをRaspberryPi3で動かしてみた(執筆途中) - Qiita
Raspbian Jessie+ROS Kinetic+samba4.2.14+Python3.4.7+Tensorflow1.3.0+Keras2.1.2+OpenCV3.3.1+Jupyter Notebook+Single Shot Multibox Detector(SSD)環境の構築 - Qiita
Accessing the Raspberry Pi Camera with OpenCV and Python - PyImageSearch