本製品は、Movidius Myriad2 VPUを使用したもので、開発用としてUSBスティックタイプのものが用意されています。
今回の記事は、本製品のSDKである、NCSDKの最新バージョンである、V2.04をOpenBlocks IoT VX2(VX1)で利用するためのTipsとなります。
( 2018/7/11 時点では、2.0.5がリリースされており、Bug Fixに記述がありませんが、アプリケーション実行後の再起動時にdevice Stalledの状態になった場合、デバイスが復帰するようになりました。
2018/7/15 追記 2.05においては、別の致命的なエラーが出ることを確認しています。現状では1.x系を使った方がいいかもしれません。
)
Intel® Movidius | Neural Compute Stick | AI Programming
OBDN技術ブログによる動作検証は、該当するデバイスやソフトウェアの動作について、保証およびサポートを行うものではありません。
内容に関するご指摘などありましたら、ブログ記事の担当までご連絡下さい。
内容に関するご指摘などありましたら、ブログ記事の担当までご連絡下さい。
<検証環境>
OpenBlocks IoT VX2 FW3.1
1. ncsdk2のインストール
ncsdk v2のブランチを利用するには、以下のように指定します。
git clone -b ncsdk2 https://github.com/movidius/ncsdk.git
先に、ncsdkディレクトリ下で
./install.sh
とするのですが、NCSDKは、Ubuntu16.04またはRasbian9に対応していますが、debian9などの他のディストリビューションには対応していません。
そのため、今回はRasbian9と認識させてインストールさせます。
install.shの以下の部分(30行目以降)に変更を加えます。
# OS_DISTRO="${DISTRO:-INVALID}"
# OS_VERSION="${VERSION:-255}"
OS_DISTRO="raspbian"
OS_VERSION="91"
このスクリプトが終了したら、api/src の下で、
make install
として、sdkをインストールしてください。
・tensorflowについて
インストールは一通り終わりますが、インストールされたpython用のtensorflowはno gpuバージョンであっても、現在配布されているバージョンのモジュールはAVX命令をenableとしてビルドしているため、そのままでは使用できません。
tensorflowは別途SSE2のみでビルドする必要があります。
(VX2でセルフコンパイルをするのはリソース的に厳しいため、他のdebian/amd64のPCなどでwhlファイルを作成することをおすすめします)
bazelを使ったインストールはtensorflowのサイトのfrom Sourcesに従って行います。
Installing TensorFlow from Sources
bazelをAPT repositoryよりインストールした場合は、0.14.1がインストールされますが、tensorflowのサイトサンプルのようにgit checkout r1.0のように指定すると、古いリリースのものがcheckoutされてbazelの古いバージョンのものが必要となります。
git clone https://github.com/tensorflow/tensorflow
cd tensorflow
git checkout v1.9.0
tensorflow-hubなども使えるよう、新しいリリースのものをcheckoutします。
bazelのオプションは今回は以下のように設定しました。
bazel build -c opt --copt=-msse4.2 //tensorflow/tools/pip_package:build_pip_package
ビルド、パッケージ作成、インストールが終わったら、以下のスクリプトがエラーなく動作することを確認してください。
# Python3
import tensorflow as tf
hello = tf.constant('Hello, TensorFlow!')
sess = tf.Session()
print(sess.run(hello))
ここで、warningが出る場合は以下のモジュールアップデートが必要です。
・OpenCVについて
opencvもそのままでは不完全にインストールされるため、別途ソースコードからインストールしなおすか、暫定でpython対応だけでよいならば、
pip3 install opencv-python
としてインストールしてください。
opencvをビルドする場合のcmakeのオプションのサンプルは以下の通りです。
cmake -G "Unix Makefiles" --build . -D BUILD_CUDA_STUBS=OFF -D BUILD_DOCS=OFF \
-D BUILD_EXAMPLES=OFF -D BUILD_JASPER=OFF -D BUILD_JPEG=OFF -D BUILD_OPENEXR=OFF \
-D BUILD_PACKAGE=ON -D BUILD_PERF_TESTS=OFF -D BUILD_PNG=OFF -D BUILD_SHARED_LIBS=ON \
-D BUILD_TBB=OFF -D BUILD_TESTS=OFF -D BUILD_TIFF=OFF -D BUILD_WITH_DEBUG_INFO=ON \
-D BUILD_ZLIB=OFF -D BUILD_WEBP=OFF -D BUILD_opencv_apps=ON -D BUILD_opencv_calib3d=ON \
-D BUILD_opencv_core=ON -D BUILD_opencv_cudaarithm=OFF -D BUILD_opencv_cudabgsegm=OFF \
-D BUILD_opencv_cudacodec=OFF -D BUILD_opencv_cudafeatures2d=OFF -D BUILD_opencv_cudafilters=OFF \
-D BUILD_opencv_cudaimgproc=OFF -D BUILD_opencv_cudalegacy=OFF -D BUILD_opencv_cudaobjdetect=OFF \
-D BUILD_opencv_cudaoptflow=OFF -D BUILD_opencv_cudastereo=OFF -D BUILD_opencv_cudawarping=OFF \
-D BUILD_opencv_cudev=OFF -D BUILD_opencv_features2d=ON -D BUILD_opencv_flann=ON \
-D BUILD_opencv_highgui=ON -D BUILD_opencv_imgcodecs=ON -D BUILD_opencv_imgproc=ON \
-D BUILD_opencv_java=OFF -D BUILD_opencv_ml=ON -D BUILD_opencv_objdetect=ON \
-D BUILD_opencv_photo=ON -D BUILD_opencv_python2=OFF -D BUILD_opencv_python3=ON \
-D BUILD_opencv_shape=ON -D BUILD_opencv_stitching=ON -D BUILD_opencv_superres=ON \
-D BUILD_opencv_ts=ON -D BUILD_opencv_video=ON -D BUILD_opencv_videoio=ON \
-D BUILD_opencv_videostab=ON -D BUILD_opencv_viz=OFF -D BUILD_opencv_world=OFF \
-D CMAKE_BUILD_TYPE=RELEASE -D WITH_1394=ON -D WITH_CUBLAS=OFF -D WITH_CUDA=OFF \
-D WITH_CUFFT=OFF -D WITH_EIGEN=ON -D WITH_FFMPEG=ON -D WITH_GDAL=OFF -D WITH_GPHOTO2=OFF \
-D WITH_GIGEAPI=ON -D WITH_GSTREAMER=OFF -D WITH_GTK=ON -D WITH_INTELPERC=OFF -D WITH_IPP=ON \
-D WITH_IPP_A=OFF -D WITH_JASPER=ON -D WITH_JPEG=ON -D WITH_LIBV4L=ON -D WITH_OPENCL=ON \
-D WITH_OPENCLAMDBLAS=OFF -D WITH_OPENCLAMDFFT=OFF -D WITH_OPENCL_SVM=OFF -D WITH_OPENEXR=ON \
-D WITH_OPENGL=ON -D WITH_OPENMP=OFF -D WITH_OPENNI=OFF -D WITH_PNG=ON -D WITH_PTHREADS_PF=OFF \
-D WITH_PVAPI=OFF -D WITH_QT=ON -D WITH_TBB=ON -D WITH_TIFF=ON -D WITH_UNICAP=OFF \
-D WITH_V4L=ON -D WITH_VTK=OFF -D WITH_WEBP=ON -D WITH_XIMEA=OFF -D WITH_XINE=OFF \
-D WITH_LAPACKE=ON -D WITH_MATLAB=OFF ..
・NCSの動作確認
NCSデバイスを認識すると、hello_ncs.pyの結果が以下のように表示されます。
#cd ~/ncsdk/examples/apps/hello_ncs_py
# python3 hello_ncs.py
D: [ 0] ncDeviceCreate:221 ncDeviceCreate index 0
D: [ 0] ncDeviceCreate:221 ncDeviceCreate index 1
D: [ 0] ncDeviceOpen:415 File path /usr/local/lib/mvnc/MvNCAPI-ma2450.mvcmd
I: [ 0] ncDeviceOpen:421 ncDeviceOpen() XLinkBootRemote returned success 0
I: [ 0] ncDeviceOpen:450 XLinkConnect done - link Id 0
D: [ 0] ncDeviceOpen:464 done
I: [ 0] ncDeviceOpen:466 Booted 1.1-ma2450 -> VSC
I: [ 0] getDevAttributes:287 Device attributes
I: [ 0] getDevAttributes:290 Device FW version: 2.4.2450.e4
I: [ 0] getDevAttributes:292 mvTensorVersion 2.4
I: [ 0] getDevAttributes:293 Maximum graphs: 10
I: [ 0] getDevAttributes:294 Maximum fifos: 20
I: [ 0] getDevAttributes:296 Maximum graph option class: 1
I: [ 0] getDevAttributes:298 Maximum device option class: 1
I: [ 0] getDevAttributes:299 Device memory capacity: 522081584
Hello NCS! Device opened normally.
I: [ 0] ncDeviceClose:656 closing device
Goodbye NCS! Device closed normally.
NCS device working.
2.ncappzooのv2用ブランチの入手
ncappzooもv2用のブランチが用意されています。
以下のオプションにてgit cloneしてください。
git clone -b ncsdk2 https://github.com/movidius/ncappzoo.git
READMEに従って必要なgraphファイルを作成するとともに、gstreamerなど、要求されるモジュールは別途インストールしてください。
また、opencvは、linuxで利用する場合は、ディスプレイとしてXを使います。
OpenBlocks IoT VX2(VX1)にはディスプレイヘッドはありませんので、Xサーバを別に用意する必要があります。
NCSデバイスを認識すると、hello_ncs.pyの結果が以下のように表示されます。
#cd ~/ncsdk/examples/apps/hello_ncs_py
# python3 hello_ncs.py
D: [ 0] ncDeviceCreate:221 ncDeviceCreate index 0
D: [ 0] ncDeviceCreate:221 ncDeviceCreate index 1
D: [ 0] ncDeviceOpen:415 File path /usr/local/lib/mvnc/MvNCAPI-ma2450.mvcmd
I: [ 0] ncDeviceOpen:421 ncDeviceOpen() XLinkBootRemote returned success 0
I: [ 0] ncDeviceOpen:450 XLinkConnect done - link Id 0
D: [ 0] ncDeviceOpen:464 done
I: [ 0] ncDeviceOpen:466 Booted 1.1-ma2450 -> VSC
I: [ 0] getDevAttributes:287 Device attributes
I: [ 0] getDevAttributes:290 Device FW version: 2.4.2450.e4
I: [ 0] getDevAttributes:292 mvTensorVersion 2.4
I: [ 0] getDevAttributes:293 Maximum graphs: 10
I: [ 0] getDevAttributes:294 Maximum fifos: 20
I: [ 0] getDevAttributes:296 Maximum graph option class: 1
I: [ 0] getDevAttributes:298 Maximum device option class: 1
I: [ 0] getDevAttributes:299 Device memory capacity: 522081584
Hello NCS! Device opened normally.
I: [ 0] ncDeviceClose:656 closing device
Goodbye NCS! Device closed normally.
NCS device working.
2.ncappzooのv2用ブランチの入手
ncappzooもv2用のブランチが用意されています。
以下のオプションにてgit cloneしてください。
git clone -b ncsdk2 https://github.com/movidius/ncappzoo.git
READMEに従って必要なgraphファイルを作成するとともに、gstreamerなど、要求されるモジュールは別途インストールしてください。
また、opencvは、linuxで利用する場合は、ディスプレイとしてXを使います。
OpenBlocks IoT VX2(VX1)にはディスプレイヘッドはありませんので、Xサーバを別に用意する必要があります。
stream_inferの実行例
( 液晶モニタがmonitorとして認識されている )
( 液晶モニタがmonitorとして認識されている )
3.最後に
ストレージ(eMMC)の制約から、VX2でなくVX1を使う場合は、外付けのUSB HDDなどを使用して環境のビルドを行ってください。
また、セルフビルドを行う場合、以下のようにTMPDIRの設定が必要な場合があります。
export TMPDIR=/var/tmp
なお、本SDKおよびサンプルアプリケーションであるncappzooをインストールしたdockerコンテナを作成しておりますので、別途公開する予定です。
ストレージ(eMMC)の制約から、VX2でなくVX1を使う場合は、外付けのUSB HDDなどを使用して環境のビルドを行ってください。
また、セルフビルドを行う場合、以下のようにTMPDIRの設定が必要な場合があります。
export TMPDIR=/var/tmp
なお、本SDKおよびサンプルアプリケーションであるncappzooをインストールしたdockerコンテナを作成しておりますので、別途公開する予定です。