Intel® Neural Compute Stick 2 (Movidius™ Myriad™X)を入手しましたので、OpenBlocks IoT VX2にてNCS2に対応したOpenVINO™ Toolkit R4を使うためのdockerコンテナを作成しました。
OpenVINO ToolkitをOpenBlocks IoT VX2シリーズで利用するにあたり、VX2のハードウェアに最適化したOpenCV 3.4.3およびtensorflowをbuildするとともに、dockerコンテナのイメージとして、dockerhubにてpublic公開しました。
今回は、dockerコンテナイメージをOpenBlocks IoT VX2で利用する方法と合わせて、Toolkitを公式サポート外のdebian stretch(amd64)に導入するための方法を紹介します。
・改めてハードウェア構成を見直した上でテストを行ったところ、現状ではFIFOエラーなどは起きていません。
また、Myriad-Xによる処理が30fpsを超えることにより、CPU側の負荷も増しており、vmstatの結果も違いますので、計測値を書き直しました。
・Pythonの環境変数などが設定されていませんでしたので、修正したコンテナイメージをpushしました
Dockerコンテナイメージの使い方
dockerコンテナイメージは以下の場所で公開しています。
OpenBlocks IoT VX2に拡張機能として、docker (WebUI付き)をインストールし、WebUIより検索しダウンロードするか、コンソールから、以下の様にpullしてください。
docker pull goto2048/obxvx2_openvino_r4_420
上記ページのDescriptionにも記述していますが、初期起動のオプションは、
-ti --name openvino --privileged --net=host -v /dev:/dev --restart always
となります。
サンプルのアプリケーションを利用するにあたり、Linux版のOpenCVの場合は、X11の環境が必要となりますが、OpenBlocks IoTシリーズには基本ディスプレイはつきませんので、別にXサーバを用意する必要があります。Linuxデスクトップ環境をお持ちであれば、それを、Windows環境の場合は、VcXsrvなどをインストールして下さい。
コンテナへ入るには、以下のコマンドおよびオプションを使います
docker exec -ti --privileged openvino /bin/bash
XサーバのIPアドレス(もしくはサーバ名)を指定してください。
export DISPLAY=xxx.xxx.xxx.xxx:0<br>
Toolkit全般は/opt/intelに展開されており、buildしたsampleは、~/inference_engine_samples/intel64/Releaseの下にあります。
顔認識のプログラムの実行例は以下の通り。
CPUを使用
./interactive_face_detection_demo -i cam -m /opt/intel/computer_vision_sdk/deployment_tools/intel_models/face-detection-retail-0004/FP32/face-detection-retail-0004.xml -d CPU
Myriad(VPU)を使用
./interactive_face_detection_demo -i cam -m /opt/intel/computer_vision_sdk/deployment_tools/intel_models/face-detection-retail-0004/FP16/face-detection-retail-0004.xml -d MYRIAD
vmstatを見るとわかりますが、VPU(Myriad-X)使用時はCPU負荷が4割程度となっています。
root@obsiot:~# vmstat 5 procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 3 0 0 3089192 38840 456684 0 0 0 2 11635 2578 92 8 0 0 0 2 0 0 3089696 38840 456684 0 0 0 0 11584 2414 91 8 0 0 0 4 0 0 3088888 38840 456684 0 0 0 0 11636 2461 91 8 0 0 0 2 0 0 3090544 38840 456684 0 0 0 0 11578 2483 91 8 0 0 0 --------- 上側がCPU、下側がMyriad ------------------------ 2 0 0 2986524 49552 529084 0 0 0 6 11907 3538 25 18 58 0 0 1 0 0 2986280 49552 529084 0 0 0 0 11858 3537 25 17 59 0 0 1 0 0 2986804 49552 529084 0 0 0 1 11831 3449 25 17 58 0 0 1 0 0 2986068 49556 529084 0 0 0 17 11808 3433 24 18 58 0 0 1 0 0 2986068 49556 529084 0 0 0 0 11722 3463 25 17 58 0 0
security_barrier_camera_demoの入力例と実行画面です。
./security_barrier_camera_demo -i /opt/intel/computer_vision_sdk/deployment_tools/demo/car_1.bmp -d MYRIAD -m /opt/intel/computer_vision_sdk/deployment_tools/intel_models/vehicle-license-plate-detection-barrier-0106/FP16/vehicle-license-plate-detection-barrier-0106.xml -d_va MYRIAD -m_va /opt/intel/computer_vision_sdk/deployment_tools/intel_models/vehicle-attributes-recognition-barrier-0039/FP16/vehicle-attributes-recognition-barrier-0039.xml -d_lpr MYRIAD -m_lpr /opt/intel/computer_vision_sdk/deployment_tools/intel_models/license-plate-recognition-barrier-0001/FP16/license-plate-recognition-barrier-0001.xml
なお、本コンテナイメージは3GBを超えており、OpenBlocks IoT VX1シリーズで使用する場合は、eMMCサイズが非常に厳しい状況となります。VX2でのご利用をお勧めします。
ソースコードからのビルドに関してのTips
上記コンテナを構築するにあたり、OpenCV 3.4.3をOpenBlocks IoT VX2のCPUに対応したビルドおよび、tensorflowのビルド、OpenVINO Toolkitのインストールおよびデモ環境の構築を行いました。
すべての手順はここでは書きませんが、構築にともなうTipsについてそれぞれ書いておきます。
opencv 3.4.3
前回の記事にありますのでご参照下さい。
tensorflow
tensorflowも、pip3で導入できるパッケージでは、CPUがAVX命令をサポートしていないため利用できません。OBDNマガジンにてビルド方法について解説していますので、参考にしてください。
OpenVINO Toolkit
OpenVINO Toolkitは、以下のサイトからダウンロードできます。
Choose & DownloadからLinuxを選んで、Register&Downloadから名前やE-mail Addressなどの情報を入れるのですが、Companyの部分に、スペースで区切った入力をすると(CompanyName Co., LTDのように)、Errorとなりダウンロード出来ませんでした。
インストールはGUIで行う場合は、X環境をご用意ください。
ベースのコンテナで上記の作業を行ったあと、インストールを行うと、cpioがないといわれますので、apt-getします。
デモ環境の構築は、以下のスクリプトを修正して、実行します。
/opt/intel/computer_vision_sdk/deployment_tools/demodemo_squeezenet_download_convert_run.sh /opt/intel/computer_vision_sdk_2018.4.420/deployment_tools/inference_engine/share/InferenceEngineConfig.cmake
どちらも、os_nameに関する分岐を行っていますので、事前にos_nameをUbuntu 16.04にすることで回避しています。修正して以下のスクリプトを起動して下さい。
cd /opt/intel/computer_vision_sdk/deployment_tools/demo ./demodemo_squeezenet_download_convert_run.sh
最後に
今回は、主としてdockerhubにpushしたdockerコンテナイメージの使い方について説明しました。
ビルドに関しては、VX2の標準の状態では、/tmpのサイズへの対策など、細かい対応が必要になります(VX2では、eMMCの保護のため、標準ではtmpfileによるメモリ割り当てとなっています)。
またtensorflowもopencvもVX2での処理では時間がかかりますので、別のdebian stretch(amd64)のPCにて一部の処理を行っています。
今回は、そういった細かいところまでは解説せず、大まかな手順と、変更点についてのTipsのみとなります。
お問い合わせはこちらから
※本記事は弊社後藤がQiitaにも投稿しています。よろしければこちらもご覧ください。
コメント