Intel® Neural Compute Stick 2 (Movidius™ Myriad™X)をOpenBlocks IoT VX2で利用するためのdockerコンテナイメージの使い方と、OpenVINO™ toolkitの導入に関して

Intel® Neural Compute Stick 2 (Movidius™ Myriad™X)を入手しましたので、OpenBlocks IoT VX2にてNCS2に対応したOpenVINO™ Toolkit R4を使うためのdockerコンテナを作成しました。

ncs2.jpg
Intel® Neural Compute Stick 2 (Movidius™ Myriad™X)


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コンテナイメージは以下の場所で公開しています。

https://hub.docker.com/r/goto2048/obxvx2_openvino_r4_420_fixed2/

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
carj2pg.png

なお、本コンテナイメージは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マガジンにてビルド方法について解説していますので、参考にしてください。

[VX2] Movidius Neural Compute Stick (Myriad2) NCSDK2の導入方法
Movidius Neural Compute Stickは、VPUと呼ばれる、ディープラーニング推論のためのアクセラレータです。 本製品は、Movidius Myriad2 VPUを使用したもので、...

OpenVINO Toolkit

OpenVINO Toolkitは、以下のサイトからダウンロードできます。

Access Denied

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のみとなります。

お問い合わせはこちらから

お問い合わせ窓口 | ぷらっとホーム株式会社
ぷらっとホーム株式会社のお問い合わせ窓口のページです。製品や各種サービス、会社に関するお問い合わせなど、専用フォームやメール、お電話からご利用いただけます。
OpenBlocks IoT VX2 | ぷらっとホーム株式会社
OpenBlocks IoT VX2は、主要企業の重要IoTシステムで利用されています。堅牢で壊れにくく、ノンコードでセンサーやクラウドと接続でき、長年のノウハウが詰まっており、The Linux F...

※本記事は弊社後藤がQiitaにも投稿しています。よろしければこちらもご覧ください。

Intel® Neural Compute Stick 2 (Movidius™ Myriad™X)をOpenBlocks IoT VX2で利用するためのdockerコンテナイメージの使い方と、OpenVINO™ toolkitの導入に関するメモ - Qiita
Intel® Neural Compute Stick 2 (Movidius™ Myriad™X)を入手しましたので、OpenBlocks IoT VX2にてNCS2に対応したOpenVINO™ …
星 賢志

1985年生まれ、2児のパパです。
日頃、マーケティング部署でメンバーと試行錯誤しています。ブログ記事を一番書いているのは僕だったりします。
マーケティングは奥が深すぎて日々勉強の毎日ですが、子どもからプレゼントされたポケモンカードも奥が深すぎて参っています(笑)
移住するなら、宮古島できれいな海を見て、美味しいものを食べて生活したいですね(^O^)

IoTゲートウェイ
シェアする
ぷらっとブログ

コメント

タイトルとURLをコピーしました