※こちらはPythonデータ分析勉強会#03の発表資料です。
前回、前々回とYOLOv3を使った物体検出をやってきました。
今回から、ラズパイで将棋駒を物体検出するチャレンジを開始します。
※本記事は古い内容が含まれます。NCSDKは現在はあまり使われていないものと思われます。
2019/1/25現在の情報は、こちらをご参照ください。
#最終目標
最終的に「ラズパイで将棋駒を高速に物体検出させる」ことを目標にします。
高速に動かすために、USB型のGPUであるMovidiusを使用します。
ただ、このMovidius、なかなか一筋縄ではいかない曲者です。
以下に、目標達成までの手順を示します。
(手順)
1.ラズパイにMovidiusをインストール
2.ラズパイで標準のYOLOを動かしてみる
3.自作のYOLOv3(kerasモデル)を用意する(←済)
4.自作のYOLOv3をMovidiusで動くようにする(←難題)
5.ラズパイで将棋駒を高速に認識させる
本稿では、とりあえず太字部分を行います。
4.については、次回以降Intel-Movidius-NCS-Keras使って、kerasモデルをgraphモデルに変換します。
ただ、失敗しそうな気配満載なので、最終的に5.まで到達しないかもしれません。
#Movidiusについて
MovidiusはUSB型のGPUで、ラズパイに装着すればある程度速く
ディープラーニングモデルを動かすことができます。
最近、「Neural Compute Stick v2」が発売されましたが、
今回は従来品の「Neural Compute Stick v1」を使います。
また、以下の記事によると、「LattePanda Alpha 864」を使えば
「Neural Compute Stick v2」を使わなくても、高速に演算できるらしいです。
#NCSDK(v1)のインストール
Movidiusを動かすためには、NCSDKをインストールする必要があります。
最新版はv2ですが、諸事情によりv1をインストールしました。
諸事情が気になる方は「おまけ」をご覧ください。
NCSDK(v1)のインストールは以下の記事を参考に進めました。
#yoloNCSのインストール
YOLOもバージョンがありますが、NCSDK(v1)対応を考えると
YOLOv1(yoloNCS)をインストールすることにしました。
以下のリンクを見ればインストールできますが、ちょっと変更が必要でした。
https://nonnoise.github.io/MovidiusSetting/Sphinx/build/html/rst/Yolo_Caffe_NCS.html
リンク内で、「Caffe ModelをNCS用にコンパイル」の後にできた「graph」ファイルを
yoloNCS/py_examples ディレクトリに移す必要がありました。
#yoloNCSの実行結果
yoloNCSインストール後は、USBカメラをラズパイに装着して以下のコマンドを打ちます。
cd yoloNCs/py_examples
次のコマンドを打てば、リアルタイムで物体検出が始まります。
python3 object_detection_app.py
#おまけ
Movidiusは全然まともに動きませんでした。今回は紆余曲折を経て、ようやくYOLOv1が動きました。
ここでは、ボツ案をご紹介します。誰かの参考になれば幸いです。
##【ボツ案1】OpenVINOのインストール
こちらによるとNCSDK v1 / v2 はバグだらけで、まともに動かないモデルも存在するとのこと。
しかし、OpenVINOを使えば動くこともあるらしいです。
意気揚々とラズパイでインストールを進めると、エラーが出て止まりました。
以下のリンクによると、ラズパイではインストールできないようです。残念。
https://software.intel.com/en-us/forums/computer-vision/topic/781076
##【ボツ案2】NCSDK(v2)のインストール
NCSDKの最新版はv2です。一応、以下のコマンドでインストールはできました。
※結論を先に書くと、YoloV2NCSが動かなかったため、v2は不採用となりました。
まずは、スワップサイズを大きくします。
$ sudo nano /etc/dphys-swapfile
CONF_SWAPSIZE=2048
その後、ラズパイを再起動し、以下のコマンドでmvnc(v2)をインストールします。
$ git clone -b ncsdk2 http://github.com/Movidius/ncsdk && cd ncsdk && make install && make examples
ここは、6時間くらいかかります。
$ sudo nano /etc/dphys-swapfile
CONF_SWAPSIZE=100
スワップサイズを元に戻して、ラズパイを再起動すればインストール完了です。
###サンプルを動かす
サンプルを動かしてみます。
$ cd ncsdk/examples/tensorflow/inception_v3
$ python3 run.py
以下のようにエレキギターと出たら、インストールは完了しています。
Number of categories: 1001
Start download to NCS...
*******************************************************************************
inception-v3 on NCS
*******************************************************************************
547 electric guitar 0.98828
403 acoustic guitar 0.0077209
715 pick, plectrum, plectron 0.0015087
421 banjo 0.00092602
820 stage 0.00065947
*******************************************************************************
Finished
###YoloV2NCSのインストール
問題はココです。
YoloV2NCSはNCSDK(v2)に対応しているとのことで、以下のリンクを見てインストールを進めました。
https://github.com/ctchuang/YoloV2NCS
しかし、Cafeeモデルをgraphモデルに変換しようとしたところ、以下のエラーが出て止まりました。
[Error 44] Toolkit Error: Unsupported: Multiple graph inputs or Malformed graph connections
あえなく断念。
#まとめ
- Movidiusは闇が深いとは聞いていたが、**想像以上に深かった。**エラーが出まくりです。
- 現状はNCSDK v1で動かしていますが、今後、自作のYOLOv3モデルが動くかどうか非常に不安です。
- 「NCSDK v1だと絶対に無理!」等、見識がある方がいらっしゃれば、ご助言をお願いします。