Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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

ncs2.jpg
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マガジンにてビルド方法について解説していますので、参考にしてください。

http://obdnmagazine.blogspot.com/2018/06/vx2-movidius-neural-compute-stick.html

OpenVINO Toolkit

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

https://software.intel.com/en-us/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のみとなります。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした