Neural Compute Stick 2でリアルタイムオブジェクト検出 (4) ~ Raspberry Piで使う
NCS2購入当時はSDKがIntel x64にしか対応していなかったため、前回まではIntel PC上でのテストの話をしてきた。しかし最近Raspberry Pi対応のSDKがリリースされたので追加で試してみることにした。
NCS2をRPiに挿すとこんな感じになる。USBポートに直接挿すと他のポートを全部塞いでしまうので、筆者はこういうL字型アダプタを使ってみた。
結論から言うと、Intel PCの2/3程度のパフォーマンスになるがちゃんと動く。パフォーマンスが落ちるのはUSBまわりのI/Oの遅さ故だろうか。ただこれでもMobileNet SSDが20FPSで動くわけで、大したものである。
MobileNet SSD
百聞は一見に如かず、前々回のテスト3と同等のMobileNet SSDの実行例を見てもらおう。RPiで動画のデコードやスクリーンキャプチャを実行すると遅くて話にならないので、WebCamで別PCの動画再生画面を撮影して入力とし、デジカメで出力画面を撮影して録画している。画質は悪いが、RPiでもこのくらの速度で動くということはしっかり体感してもらえるだろう。
なおこの画面の数字は15FPS程度に見えるが、これは描画時間も含めたもので、検出処理の時間だけ測るとと50ms弱≒20FPSである。Intel PCで30FPS程度だったので、約2/3の性能である。
顔検出
次は前々回のテスト1と同等の顔検出である。顔検出だけなら20FPS、さらに表情・性別・顔の向き等の推定を加えると6FPSほど出ている。Intel PCではそれぞれ30FPS、10FPS程度だったのでやはり約2/3の性能である。
なお、うちのRPiにはUnicorn Hat (フルカラーLEDマトリックス)を搭載しているので、せっかくなので表情と性別の検出結果を表示してみることにした。
インストール方法や叩き方など
インストールは公式ドキュメント通りの手順で特に問題はなかった。
Install the Intel® Distribution of OpenVINO™ Toolkit for Raspbian* OS | Intel® Software
筆者のようにRaspbianのバージョンがJessieのままの人はまずStretchへのアップグレードが必要。時間はかかるがこれも特に問題なし。
Intel x64版との違いが幾つか:
- インストーラはないので手動でセットアップする手順がある。たいしたことはない。
- 顔検出など基本的なサンプルプログラム用の学習済みモデルが自動的にインストールされない。自分で彼らのWebサイトから取って来る必要がある。筆者はこういうダウンロードスクリプトを書いて使っている。
- MobileNet SSDのモデルを作るのに必要だったmodel_downloaderやmodel_optimizerがない。筆者は前々回Intel PC上で作ったものをコピーして使った。
- CPU処理用のライブラリがインストールされず、NCS2とCPUとを切り替えて処理速度を比較するような真似はできない。サンプルプログラムの-dオプションは常に
MYRIAD
にする。
筆者が使ったスクリプト群をこのGISTに置いておくのでご参考に。
model_downloader.sh
: サンプル用モデルのダウンロードmobilenet-ssd.sh
: 前々回と同等のMobileNet SSD(前々回作ったモデルファイルをmobilenet-ssdに置いておくこと)face.sh
: 前々回と同等の顔検出face_display.sh
: 顔検出+Unicorn HATへの顔表示
ドローンの制御ボックスとして使えるか?
RPiでMobileNet SSDが動くなら、Intel PCではなくRPiをドローンの制御ボックスとして使いたくなってくる。RPi上のomxplayerでドローンのRTSPストリームはそこそこきれいに再生できたので、前回ffmpegで回避したように、パケット落ちに耐えられるプログラムさえ書けば原理的には可能だと思う。前回と同様のffmpeg (avconv)+ffserverの構成はちょっとだけ試してみたが、Intel PCのようにスムーズには行かなかったので、性能の制約に合わせてもう少し工夫が必要な気がする。