Intel Neural Compute Stick 2 (Intel NCS2) は、2018 年 11 月 14 日(現地時間)に中国の北京で開幕された AI 開発者向けカンファレンスで発表されました [3]。同社の Movidius Myriad X Vision Processing Unit を、コンピュータに挿入できる USB アクセサリに組み込んだ製品で、USB に挿入してディープニューラルネットワーク (DNN) のアクセラレータとして使えるとのことです。
Vision Processing Unit (VPU) とは、ASCII.jpデジタル用語辞典によると、
高速で高解像度のグラフィック処理が可能なハイエンド向けのビデオチップの総称。カナダの ATI Technologies 社が名付けた。代表的なものに、DirectX 9 に対応した RADEON 9700 シリーズがある。とあります。日本語の Wikipedia のサイトで VPU を検索すると GPU のページに転送されるので、双方は同じような意味なのでしょう。
手ごろな値段だったので、これはぜひ試してみたいと衝動的に Amazon.jp で買ってしまいました [2020-03-20]。
動作確認にてこずる
ハードウェア的には USB ポートに挿入するだけで手軽に利用できるのですが、ソフトウェア的にちゃんと動くのか確信を持てるまでに大変時間が掛かってしまいました。とは言え、発売から一年以上経過しており、出回っている情報が多いことにずいぶんと助けられました。ここでは、ようやくまともに動いた結果を整理しました。スクリプトの実行状況をやや冗長に記載していますがご容赦ください。
動作環境
Intel NCS2 を動かすために必要となる、Intel OpenVINO Toolkit は、Windows / Linux / Mac OS に対応していますが、Linux のディストリビューションに制約があります。Ubuntu 16.04/18.04, CentOS 7.4 および Yocto Project v3.0(いずれも 64bit 版)が対応しているということで、扱いなれている Ubuntu 18.04 と CentOS 7.4 のイメージを書き込んだ USB メモリを用意しました。最初はうまくいかず、何度も懲りずに Ubuntu と Fedora を代わる代わるテスト機にインストールし直して試行錯誤した結果、最終的にもっともスムーズにインストールできた Ubuntu 18.04 に落ち着きました。うまくいかなかった個所は後述します。
OS | Ubuntu 18.04 (x86_64) | ubuntu-18.04.4-desktop-amd64.iso |
Windows にも対応しているので試してみたかったのですが、自宅にあるのは C ドライブが 32GB しかないチープな PC だけで、Windows OS だけで半分以上のストレージ領域を占有していたので試すのを諦めました。
OpenVINO Toolkit のインストールと確認
OpenVINO toolkit (Open Visual Inference and Neural network Optimization toolkit) は、動画像データからディープラーニングによる推論を容易に実施できるようにするためのツールキットで、Intel が自社の CPU 向けに使えるように開発したものです。購入した Intel NCS2 を試すには、この OpenVINO Toolkit をインストールして、使える環境を準備する必要があります。
パッケージのダウンロード
下記 OpenVINO Toolkit をダウンロードするページで、右側の Linux* をクリックすると Linux ベースのプラットフォーム向けのダウンロードのサイトに移ります。
Register & Download をクリックすると登録ページが表示されるので必要事項を入力後 Submit をクリックすると、ダウンロードのページに辿り着きます。ここで、最新の 2020.1 の Full Package l_openvino_toolkit_p_2020.1.023.tgz をダウンロードしました。
インストール
OpenVINO のインストールは、ダウンロードしたバージョン 2020.1 に対応している下記のサイトに沿って進めます。
まず、ダウンロードしたパッケージを下記のように展開して、展開したフォルダ内にディレクトリを移します。
[bitwalk@ubuntu-pc ダウンロード]$ tar zxvf l_openvino_toolkit_p_2020.1.023.tgz l_openvino_toolkit_p_2020.1.023/ l_openvino_toolkit_p_2020.1.023/pset/ l_openvino_toolkit_p_2020.1.023/pset/32e/ l_openvino_toolkit_p_2020.1.023/pset/32e/libz/ ... (途中省略) ... l_openvino_toolkit_p_2020.1.023/EULA.txt l_openvino_toolkit_p_2020.1.023/PUBLIC_KEY.PUB l_openvino_toolkit_p_2020.1.023/install.sh l_openvino_toolkit_p_2020.1.023/install_GUI.sh l_openvino_toolkit_p_2020.1.023/install_openvino_dependencies.sh l_openvino_toolkit_p_2020.1.023/silent.cfg [bitwalk@ubuntu-pc ダウンロード]$ cd l_openvino_toolkit_p_2020.1.023 [bitwalk@ubuntu-pc l_openvino_toolkit_p_2020.1.023]$ ls EULA.txt install.sh install_openvino_dependencies.sh rpm PUBLIC_KEY.PUB install_GUI.sh pset silent.cfg [bitwalk@ubuntu-pc l_openvino_toolkit_p_2020.1.023]$
sudo で GUI インストーラを起動します。
bitwalk@ubuntu-pc:~/ダウンロード/l_openvino_toolkit_p_2020.1.023$ sudo ./install_GUI.sh
GUI が起動するので、表示に従って画面を進めてインストールします。特にカスタマイズをする個所はありません。インストール先は /opt/intel 以下になります。
インストールが終了すると、インターネットブラウザが起動されて、Install Intel® Distribution of OpenVINO™ toolkit for Linux* - OpenVINO™ Toolkit が表示されます。
依存するパッケージのインストール
依存するパッケージを次のようにしてインストールします。
bitwalk@ubuntu-pc:~/ダウンロード/l_openvino_toolkit_p_2020.1.023$ cd /opt/intel/openvino/install_dependencies bitwalk@ubuntu-pc:/opt/intel/openvino/install_dependencies$ sudo -E ./install_openvino_dependencies.sh [sudo] bitwalk のパスワード: This script installs the following OpenVINO 3rd-party dependencies: 1. GTK+, FFmpeg and GStreamer libraries used by OpenCV 2. libusb library required for Myriad plugin for Inference Engine 3. build dependencies for OpenVINO samples 無視:1 http://dl.google.com/linux/chrome/deb stable InRelease ヒット:2 http://dl.google.com/linux/chrome/deb stable Release ... (途中省略) ... gstreamer1.0-plugins-bad はすでに最新バージョン (1.14.5-0ubuntu1~18.04.1) です。 アップグレード: 0 個、新規インストール: 0 個、削除: 0 個、保留: 0 個。 bitwalk@ubuntu-pc:/opt/intel/openvino/install_dependencies$
環境変数の設定
まず、下記のようにして OpenVINO の環境を初期化します。
bitwalk@ubuntu-pc:/opt/intel/openvino/install_dependencies$ cd ~/ bitwalk@ubuntu-pc:~$ source /opt/intel/openvino/bin/setupvars.sh [setupvars.sh] OpenVINO environment initialized bitwalk@ubuntu-pc:~$
.bashrc を vi などのテキストエディタで読み込んで、末尾の行に source /opt/intel/openvino/bin/setupvars.sh を追加して保存します。
モデルオプティマイザの設定
Caffe, TensorFlow, MXNet, Kaldi および ONNX 全てのディープラーニングのフレームワークに対するモデルオプティマイザを設定するスクリプトを実行します。
bitwalk@ubuntu-pc:~$ cd /opt/intel/openvino/deployment_tools/model_optimizer/install_prerequisites bitwalk@ubuntu-pc:/opt/intel/openvino/deployment_tools/model_optimizer/install_prerequisites$ sudo ./install_prerequisites.sh [sudo] bitwalk のパスワード: 無視:1 http://dl.google.com/linux/chrome/deb stable InRelease ヒット:2 http://dl.google.com/linux/chrome/deb stable Release ... (途中省略) ... 以下のパッケージが新たにインストールされます: dh-python gcc-6-base libexpat1-dev libgfortran3 libpython3-dev libpython3.6-dev python-pip-whl python3-dev python3-distutils python3-lib2to3 python3-pip python3-setuptools python3-venv python3-wheel python3.6-dev python3.6-venv アップグレード: 0 個、新規インストール: 16 個、削除: 0 個、保留: 0 個。 ... (途中省略) ... Collecting tensorflow<2.0.0,>=1.2.0 (from -r /opt/intel/openvino_2020.1.023/deployment_tools/model_optimizer/install_prerequisites/../requirements.txt (line 1)) Downloading https://files.pythonhosted.org/packages/de/f0/96fb2e0412ae9692dbf400e5b04432885f677ad6241c088ccc5fe7724d69/tensorflow-1.14.0-cp36-cp36m-manylinux1_x86_64.whl (109.2MB) 100% |████████████████████████████████| 109.2MB 5.6kB/s ... (途中省略) ... /opt/intel/openvino_2020.1.023/deployment_tools/model_optimizer/install_prerequisites/../requirements.txt (line 2)) Installing collected packages: absl-py, numpy, markdown, protobuf, grpcio, werkzeug, tensorboard, keras-preprocessing, google-pasta, termcolor, h5py, keras-applications, tensorflow-estimator, wrapt, astor, gast, tensorflow, requests, graphviz, mxnet, decorator, networkx, typing-extensions, onnx, defusedxml Running setup.py install for absl-py ... done Found existing installation: protobuf 3.0.0 Not uninstalling protobuf at /usr/lib/python3/dist-packages, outside environment /usr Running setup.py install for termcolor ... done Running setup.py install for wrapt ... done Found existing installation: requests 2.18.4 Not uninstalling requests at /usr/lib/python3/dist-packages, outside environment /usr Successfully installed absl-py-0.9.0 astor-0.8.1 decorator-4.4.2 defusedxml-0.6.0 gast-0.3.3 google-pasta-0.2.0 graphviz-0.8.4 grpcio-1.27.2 h5py-2.10.0 keras-applications-1.0.8 keras-preprocessing-1.1.0 markdown-3.2.1 mxnet-1.5.1 networkx-2.4 numpy-1.18.2 onnx-1.6.0 protobuf-3.6.1 requests-2.23.0 tensorboard-1.14.0 tensorflow-1.14.0 tensorflow-estimator-1.14.0 termcolor-1.1.0 typing-extensions-3.7.4.1 werkzeug-1.0.0 wrapt-1.12.1 [WARNING] All Model Optimizer dependencies are installed globally. [WARNING] If you want to keep Model Optimizer in separate sandbox [WARNING] run install_prerequisites.sh venv {caffe|tf|mxnet|kaldi|onnx} bitwalk@ubuntu-pc:/opt/intel/openvino/deployment_tools/model_optimizer/install_prerequisites$
正常にインストールできているか検証
検証用のスクリプトを実行して、OpenVINO Toolkit と関連パッケージが正しくインストールされているか、実際に画像を推論して検証します。ここでは PC に搭載されている CPU を使います。
この検証スクリプトは SqueezeNet の学習済みモデルをダウンロードして、モデルオプティマイザで .bin と .xml の中間表現 (IR) のファイルに変換します。推論エンジンが Intel のハードウェア上で IR をインプット情報にして最適化されたパフォーマンスを達成するために、このモデル変換をする処理が必要になります。
さらに、非同期で画像を分類するサンプルアプリケーション (the Image Classification Sample Async) をビルドして、同じディレクトリにあるイメージ car.png に対してビルドしたアプリケーションを実行します。このプログラムが終了すると、分類したトップ 10 のカテゴリーの分類ラベルとその確からしさ(信頼度)が出力されます。
pip でグローバルな環境に python のパッケージをインストールしたくない場合は、python の仮想環境で実行してください。その場合、必要なパッケージのインストールは手動で行う必要があります。まっさらの状態で仮想環境を作って実行したところ、次のパッケージ(および依存パッケージ)を pip でインストールする必要がありました。
pyyaml, requests, numpy, networkx, defusedxml, protobuf
bitwalk@ubuntu-pc:/opt/intel/openvino/deployment_tools/model_optimizer/install_prerequisites$ cd /opt/intel/openvino/deployment_tools/demo bitwalk@ubuntu-pc:/opt/intel/openvino/deployment_tools/demo$ ./demo_squeezenet_download_convert_run.sh target_precision = FP16 [setupvars.sh] OpenVINO environment initialized ################################################### Downloading the Caffe model and the prototxt Installing dependencies [sudo] bitwalk のパスワード: 無視:1 http://dl.google.com/linux/chrome/deb stable InRelease ヒット:2 http://dl.google.com/linux/chrome/deb stable Release ... (途中省略) ... 以下のパッケージが新たにインストールされます: autoconf automake autopoint autotools-dev debhelper dh-autoreconf dh-strip-nondeterminism gir1.2-gtk-2.0 gir1.2-harfbuzz-0.0 icu-devtools libarchive-cpio-perl libatk1.0-dev libavcodec-dev libavformat-dev libavutil-dev libcairo-script-interpreter2 libcairo2-dev libfile-stripnondeterminism-perl libfontconfig1-dev libfreetype6-dev libgdk-pixbuf2.0-dev libglib2.0-dev libglib2.0-dev-bin libgraphite2-dev libgtk2.0-dev libharfbuzz-dev libharfbuzz-gobject0 libice-dev libicu-dev libicu-le-hb-dev libicu-le-hb0 libiculx60 libltdl-dev libmail-sendmail-perl libpango1.0-dev libpcre16-3 libpcre3-dev libpcre32-3 libpcrecpp0v5 libpixman-1-dev libpng-dev libpng-tools libpthread-stubs0-dev libsigsegv2 libsm-dev libswresample-dev libswscale-dev libsys-hostname-long-perl libtool libx11-dev libx11-doc libxau-dev libxcb-render0-dev libxcb-shm0-dev libxcb1-dev libxcomposite-dev libxcursor-dev libxdamage-dev libxdmcp-dev libxext-dev libxfixes-dev libxft-dev libxi-dev libxinerama-dev libxml2-utils libxrandr-dev libxrender-dev m4 pkg-config po-debconf python3-virtualenv virtualenv x11proto-composite-dev x11proto-core-dev x11proto-damage-dev x11proto-dev x11proto-fixes-dev x11proto-input-dev x11proto-randr-dev x11proto-xext-dev x11proto-xinerama-dev xorg-sgml-doctools xtrans-dev zlib1g-dev アップグレード: 0 個、新規インストール: 84 個、削除: 0 個、保留: 0 個。 ... (途中省略) ... 状態情報を読み取っています... 完了 libpng-dev はすでに最新バージョン (1.6.34-1ubuntu0.18.04.2) です。 libpng-dev は手動でインストールしたと設定されました。 アップグレード: 0 個、新規インストール: 0 個、削除: 0 個、保留: 0 個。 The directory '/home/bitwalk/.cache/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag. ... (途中省略) ... Run python3 /opt/intel/openvino_2020.1.023/deployment_tools/open_model_zoo/tools/downloader/downloader.py --name squeezenet1.1 --output_dir /home/bitwalk/openvino_models/models --cache_dir /home/bitwalk/openvino_models/cache ################|| Downloading models ||################ ========== Downloading /home/bitwalk/openvino_models/models/public/squeezenet1.1/squeezenet1.1.prototxt ... 100%, 9 KB, 9457 KB/s, 0 seconds passed ========== Downloading /home/bitwalk/openvino_models/models/public/squeezenet1.1/squeezenet1.1.caffemodel ... 100%, 4834 KB, 10314 KB/s, 0 seconds passed ################|| Post-processing ||################ ========== Replacing text in /home/bitwalk/openvino_models/models/public/squeezenet1.1/squeezenet1.1.prototxt ################################################### Install Model Optimizer dependencies ヒット:1 http://jp.archive.ubuntu.com/ubuntu bionic InRelease ... (途中省略) ... python3-venv はすでに最新バージョン (3.6.7-1~18.04) です。 アップグレード: 0 個、新規インストール: 0 個、削除: 0 個、保留: 0 個。 The directory '/home/bitwalk/.cache/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag. ... (途中省略) ... ################################################### Convert a model with Model Optimizer Run python3 /opt/intel/openvino_2020.1.023/deployment_tools/open_model_zoo/tools/downloader/converter.py --mo /opt/intel/openvino_2020.1.023/deployment_tools/model_optimizer/mo.py --name squeezenet1.1 -d /home/bitwalk/openvino_models/models -o /home/bitwalk/openvino_models/ir --precisions FP16 ========= Converting squeezenet1.1 to IR (FP16) Conversion command: /usr/bin/python3 -- /opt/intel/openvino_2020.1.023/deployment_tools/model_optimizer/mo.py --framework=caffe --data_type=FP16 --output_dir=/home/bitwalk/openvino_models/ir/public/squeezenet1.1/FP16 --model_name=squeezenet1.1 '--input_shape=[1,3,227,227]' --input=data '--mean_values=data[104.0,117.0,123.0]' --output=prob --input_model=/home/bitwalk/openvino_models/models/public/squeezenet1.1/squeezenet1.1.caffemodel --input_proto=/home/bitwalk/openvino_models/models/public/squeezenet1.1/squeezenet1.1.prototxt Model Optimizer arguments: Common parameters: - Path to the Input Model: /home/bitwalk/openvino_models/models/public/squeezenet1.1/squeezenet1.1.caffemodel - Path for generated IR: /home/bitwalk/openvino_models/ir/public/squeezenet1.1/FP16 - IR output name: squeezenet1.1 - Log level: ERROR - Batch: Not specified, inherited from the model - Input layers: data - Output layers: prob - Input shapes: [1,3,227,227] - Mean values: data[104.0,117.0,123.0] - Scale values: Not specified - Scale factor: Not specified - Precision of IR: FP16 - Enable fusing: True - Enable grouped convolutions fusing: True - Move mean values to preprocess section: False - Reverse input channels: False Caffe specific parameters: - Path to Python Caffe* parser generated from caffe.proto: /opt/intel/openvino_2020.1.023/deployment_tools/model_optimizer/mo/front/caffe/proto - Enable resnet optimization: True - Path to the Input prototxt: /home/bitwalk/openvino_models/models/public/squeezenet1.1/squeezenet1.1.prototxt - Path to CustomLayersMapping.xml: Default - Path to a mean file: Not specified - Offsets for a mean file: Not specified Model Optimizer version: 2020.1.0-61-gd349c3ba4a [ WARNING ] Detected not satisfied dependencies: protobuf: installed: 3.0.0, required: == 3.6.1 Please install required versions of components or use install_prerequisites script /opt/intel/openvino_2020.1.023/deployment_tools/model_optimizer/install_prerequisites/install_prerequisites_caffe.sh Note that install_prerequisites scripts may install additional components. [ SUCCESS ] Generated IR version 10 model. [ SUCCESS ] XML file: /home/bitwalk/openvino_models/ir/public/squeezenet1.1/FP16/squeezenet1.1.xml [ SUCCESS ] BIN file: /home/bitwalk/openvino_models/ir/public/squeezenet1.1/FP16/squeezenet1.1.bin [ SUCCESS ] Total execution time: 22.41 seconds. [ SUCCESS ] Memory consumed: 84 MB. ################################################### Build Inference Engine samples -- The C compiler identification is GNU 7.5.0 ... (途中省略) ... -- Build files have been written to: /home/bitwalk/inference_engine_samples_build Scanning dependencies of target gflags_nothreads_static Scanning dependencies of target format_reader [ 9%] Building CXX object thirdparty/gflags/CMakeFiles/gflags_nothreads_static.dir/src/gflags.cc.o ... (途中省略) ... [100%] Built target classification_sample_async ################################################### Run Inference Engine classification sample Run ./classification_sample_async -d CPU -i /opt/intel/openvino/deployment_tools/demo/car.png -m /home/bitwalk/openvino_models/ir/public/squeezenet1.1/FP16/squeezenet1.1.xml [ INFO ] InferenceEngine: API version ............ 2.1 Build .................. 37988 Description ....... API [ INFO ] Parsing input parameters [ INFO ] Parsing input parameters [ INFO ] Files were added: 1 [ INFO ] /opt/intel/openvino/deployment_tools/demo/car.png [ INFO ] Creating Inference Engine CPU MKLDNNPlugin version ......... 2.1 Build ........... 37988 [ INFO ] Loading network files ... (途中省略) ... [ INFO ] Completed 10 async request execution [ INFO ] Processing output blobs Top 10 results: Image /opt/intel/openvino/deployment_tools/demo/car.png classid probability label ------- ----------- ----- 817 0.6853041 sports car, sport car 479 0.1835186 car wheel 511 0.0917199 convertible 436 0.0200693 beach wagon, station wagon, wagon, estate car, beach waggon, station waggon, waggon 751 0.0069604 racer, race car, racing car 656 0.0044177 minivan 717 0.0024739 pickup, pickup truck 581 0.0017788 grille, radiator grille 468 0.0013083 cab, hack, taxi, taxicab 661 0.0007443 Model T [ INFO ] Execution successful [ INFO ] This sample is an API example, for any performance measurements please use the dedicated benchmark_app tool ################################################### Demo completed successfully. bitwalk@ubuntu-pc:/opt/intel/openvino/deployment_tools/demo$
推論の対象になっていた画像 car.png を下記に示しました。参考サイト [7] によると、ダウンロードした SqueezeNet の学習済みモデルは、ImageNet の画像を学習していて、そこにはセダンの分類がないため、最も形状が近いスポーツカーが選ばれたのだろうとコメントされています。
推論パイプラインの検証スクリプトの実行
このスクリプトは、IR 形式の学習済みのモデルをダウンロードして、防犯カメラデモのアプリケーションをビルドします。ビルド後、同じディレクトリにあるイメージ car_1.bmp を、ダウンロードしたモデルをパイプラインで次々と、車と特定するところから、さらに車の特性に絞った推論へ進みます。
最初のモデルによる推論は、物体を車だと特定すること。特定した情報は次のモデルのインプット情報になり、この情報から車の特徴(ナンバープレートなど)を特定します。最後のモデルでは、ナンバープレートと特定された情報から、特定の文字列を認識します。
スクリプトの実行が終わると、推論で検出(認識)された部分を縁取った矩形と文字が追加された画像がビューアで表示されます。
bitwalk@ubuntu-pc:/opt/intel/openvino/deployment_tools/demo$ ./demo_security_barrier_camera.sh
[sudo] bitwalk のパスワード:
無視:1 http://dl.google.com/linux/chrome/deb stable InRelease
...
(途中省略)
...
[setupvars.sh] OpenVINO environment initialized
###################################################
Downloading Intel models
target_precision = FP16
Run python3 /opt/intel/openvino_2020.1.023/deployment_tools/open_model_zoo/tools/downloader/downloader.py --name vehicle-license-plate-detection-barrier-0106 --output_dir /home/bitwalk/openvino_models/ir --cache_dir /home/bitwalk/openvino_models/cache
################|| Downloading models ||################
========== Downloading /home/bitwalk/openvino_models/ir/intel/vehicle-license-plate-detection-barrier-0106/FP32/vehicle-license-plate-detection-barrier-0106.xml
... 100%, 199 KB, 1543 KB/s, 0 seconds passed
========== Downloading /home/bitwalk/openvino_models/ir/intel/vehicle-license-plate-detection-barrier-0106/FP32/vehicle-license-plate-detection-barrier-0106.bin
... 100%, 2513 KB, 6976 KB/s, 0 seconds passed
========== Downloading /home/bitwalk/openvino_models/ir/intel/vehicle-license-plate-detection-barrier-0106/FP16/vehicle-license-plate-detection-barrier-0106.xml
... 100%, 199 KB, 2082 KB/s, 0 seconds passed
========== Downloading /home/bitwalk/openvino_models/ir/intel/vehicle-license-plate-detection-barrier-0106/FP16/vehicle-license-plate-detection-barrier-0106.bin
... 100%, 1256 KB, 10745 KB/s, 0 seconds passed
========== Downloading /home/bitwalk/openvino_models/ir/intel/vehicle-license-plate-detection-barrier-0106/FP32-INT8/vehicle-license-plate-detection-barrier-0106.xml
... 100%, 506 KB, 2378 KB/s, 0 seconds passed
========== Downloading /home/bitwalk/openvino_models/ir/intel/vehicle-license-plate-detection-barrier-0106/FP32-INT8/vehicle-license-plate-detection-barrier-0106.bin
... 100%, 2580 KB, 21320 KB/s, 0 seconds passed
################|| Post-processing ||################
Run python3 /opt/intel/openvino_2020.1.023/deployment_tools/open_model_zoo/tools/downloader/downloader.py --name license-plate-recognition-barrier-0001 --output_dir /home/bitwalk/openvino_models/ir --cache_dir /home/bitwalk/openvino_models/cache
################|| Downloading models ||################
========== Downloading /home/bitwalk/openvino_models/ir/intel/license-plate-recognition-barrier-0001/FP32/license-plate-recognition-barrier-0001.xml
... 100%, 47 KB, 642 KB/s, 0 seconds passed
========== Downloading /home/bitwalk/openvino_models/ir/intel/license-plate-recognition-barrier-0001/FP32/license-plate-recognition-barrier-0001.bin
... 100%, 4757 KB, 19380 KB/s, 0 seconds passed
========== Downloading /home/bitwalk/openvino_models/ir/intel/license-plate-recognition-barrier-0001/FP16/license-plate-recognition-barrier-0001.xml
... 100%, 47 KB, 841 KB/s, 0 seconds passed
========== Downloading /home/bitwalk/openvino_models/ir/intel/license-plate-recognition-barrier-0001/FP16/license-plate-recognition-barrier-0001.bin
... 100%, 2378 KB, 22212 KB/s, 0 seconds passed
========== Downloading /home/bitwalk/openvino_models/ir/intel/license-plate-recognition-barrier-0001/FP32-INT8/license-plate-recognition-barrier-0001.xml
... 100%, 102 KB, 989 KB/s, 0 seconds passed
========== Downloading /home/bitwalk/openvino_models/ir/intel/license-plate-recognition-barrier-0001/FP32-INT8/license-plate-recognition-barrier-0001.bin
... 100%, 4768 KB, 19780 KB/s, 0 seconds passed
################|| Post-processing ||################
Run python3 /opt/intel/openvino_2020.1.023/deployment_tools/open_model_zoo/tools/downloader/downloader.py --name vehicle-attributes-recognition-barrier-0039 --output_dir /home/bitwalk/openvino_models/ir --cache_dir /home/bitwalk/openvino_models/cache
################|| Downloading models ||################
========== Downloading /home/bitwalk/openvino_models/ir/intel/vehicle-attributes-recognition-barrier-0039/FP32/vehicle-attributes-recognition-barrier-0039.xml
... 100%, 32 KB, 3033 KB/s, 0 seconds passed
========== Downloading /home/bitwalk/openvino_models/ir/intel/vehicle-attributes-recognition-barrier-0039/FP32/vehicle-attributes-recognition-barrier-0039.bin
... 100%, 2445 KB, 16956 KB/s, 0 seconds passed
========== Downloading /home/bitwalk/openvino_models/ir/intel/vehicle-attributes-recognition-barrier-0039/FP16/vehicle-attributes-recognition-barrier-0039.xml
... 100%, 32 KB, 316 KB/s, 0 seconds passed
========== Downloading /home/bitwalk/openvino_models/ir/intel/vehicle-attributes-recognition-barrier-0039/FP16/vehicle-attributes-recognition-barrier-0039.bin
... 100%, 1222 KB, 28955 KB/s, 0 seconds passed
========== Downloading /home/bitwalk/openvino_models/ir/intel/vehicle-attributes-recognition-barrier-0039/FP32-INT8/vehicle-attributes-recognition-barrier-0039.xml
... 100%, 85 KB, 838 KB/s, 0 seconds passedd
========== Downloading /home/bitwalk/openvino_models/ir/intel/vehicle-attributes-recognition-barrier-0039/FP32-INT8/vehicle-attributes-recognition-barrier-0039.bin
... 100%, 2453 KB, 24421 KB/s, 0 seconds passed
################|| Post-processing ||################
###################################################
Build Inference Engine demos
-- The C compiler identification is GNU 7.5.0
...
(途中省略)
...
-- Build files have been written to: /home/bitwalk/inference_engine_demos_build
Scanning dependencies of target gflags_nothreads_static
Scanning dependencies of target monitors
[ 10%] Building CXX object thirdparty/gflags/CMakeFiles/gflags_nothreads_static.dir/src/gflags_reporting.cc.o
...
(途中省略)
...
[ 80%] Built target monitors
Scanning dependencies of target security_barrier_camera_demo
[ 90%] Building CXX object security_barrier_camera_demo/CMakeFiles/security_barrier_camera_demo.dir/main.cpp.o
[100%] Linking CXX executable ../intel64/Release/security_barrier_camera_demo
[100%] Built target security_barrier_camera_demo
###################################################
Run Inference Engine security_barrier_camera demo
Run ./security_barrier_camera_demo -d CPU -d_va CPU -d_lpr CPU -i /opt/intel/openvino/deployment_tools/demo/car_1.bmp -m /home/bitwalk/openvino_models/ir/intel/vehicle-license-plate-detection-barrier-0106/FP16/vehicle-license-plate-detection-barrier-0106.xml -m_lpr /home/bitwalk/openvino_models/ir/intel/license-plate-recognition-barrier-0001/FP16/license-plate-recognition-barrier-0001.xml -m_va /home/bitwalk/openvino_models/ir/intel/vehicle-attributes-recognition-barrier-0039/FP16/vehicle-attributes-recognition-barrier-0039.xml
[ INFO ] InferenceEngine: 0x7fd95c5fd040
[ INFO ] Files were added: 1
[ INFO ] /opt/intel/openvino/deployment_tools/demo/car_1.bmp
[ INFO ] Loading device CPU
CPU
MKLDNNPlugin version ......... 2.1
Build ........... 37988
[ INFO ] Loading detection model to the CPU plugin
[ INFO ] Loading Vehicle Attribs model to the CPU plugin
[ INFO ] Loading Licence Plate Recognition (LPR) model to the CPU plugin
[ INFO ] Number of InferRequests: 1 (detection), 3 (classification), 3 (recognition)
[ INFO ] 1 streams for CPU
[ INFO ] Display resolution: 1920x1080
[ INFO ] Number of allocated frames: 3
[ INFO ] Resizable input with support of ROI crop and auto resize is disabled
0.0FPS for (1 / 1) frames
Detection InferRequests usage: 100.0%
[ INFO ] Execution successful
###################################################
Demo completed successfully.
bitwalk@ubuntu-pc:/opt/intel/openvino/deployment_tools/demo$
3.1 FPS と妙に低いフレームレートですが、これは使用したテスト PC の CPU が Celeron N3050 という大変非力なものだからです。
NCS2 の導入
OpenVINO toolkit の環境が整ったので、いよいよ NCS2 の導入です。NCS2 を USB3 ポートに挿入して、デバイスが認識されているか確認しました。名前は表示されませんが、ID 03e7:2485 が挿入した NCS2 です。
bitwalk@ubuntu-pc:~$ lsusb Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 001 Device 005: ID 8087:0a2a Intel Corp. Bus 001 Device 004: ID 0c45:651b Microdia Bus 001 Device 003: ID 03e7:2485 Bus 001 Device 002: ID 0b95:772b ASIX Electronics Corp. AX88772B Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub bitwalk@ubuntu-pc:~$
Intel Neural Compute Stick 2 (NCS2) の設定
使っているユーザーアカウントにグループ users を追加します。
bitwalk@ubuntu-pc:~$ id bitwalk uid=1000(bitwalk) gid=1000(bitwalk) groups=1000(bitwalk),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),116(lpadmin),126(sambashare) bitwalk@ubuntu-pc:~$ sudo usermod -a -G users "$(whoami)" [sudo] bitwalk のパスワード: bitwalk@ubuntu-pc:~$ id bitwalk uid=1000(bitwalk) gid=1000(bitwalk) groups=1000(bitwalk),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),100(users),116(lpadmin),126(sambashare)
NCS2 をグループ users でアクセスできるようにパーミッションを設定した udev のルールを登録します。
bitwalk@ubuntu-pc:~$ cat /opt/intel/openvino/inference_engine/external/97-myriad-usbboot.rules SUBSYSTEM=="usb", ATTRS{idProduct}=="2150", ATTRS{idVendor}=="03e7", GROUP="users", MODE="0660", ENV{ID_MM_DEVICE_IGNORE}="1" SUBSYSTEM=="usb", ATTRS{idProduct}=="2485", ATTRS{idVendor}=="03e7", GROUP="users", MODE="0660", ENV{ID_MM_DEVICE_IGNORE}="1" SUBSYSTEM=="usb", ATTRS{idProduct}=="f63b", ATTRS{idVendor}=="03e7", GROUP="users", MODE="0660", ENV{ID_MM_DEVICE_IGNORE}="1" bitwalk@ubuntu-pc:~$ sudo cp /opt/intel/openvino/inference_engine/external/97-myriad-usbboot.rules /etc/udev/rules.d/ bitwalk@ubuntu-pc:~$ sudo udevadm control --reload-rules bitwalk@ubuntu-pc:~$ sudo udevadm trigger bitwalk@ubuntu-pc:~$ sudo ldconfig bitwalk@ubuntu-pc:~$ sudo reboot
該当する ipProduct だけ登録しておけば良いようにも思いましたが、とりあえずそのままにしました。
Movidius Myriad X VPU にアクセスするデバイスドライバのビルドとインストール
スクリプト install_IVAD_VPU_dependencies.sh を実行して、デバイスドライバをビルドするために必要な依存するパッケージをインストールします。
bitwalk@ubuntu-pc:~$ source /opt/intel/openvino/bin/setupvars.sh [setupvars.sh] OpenVINO environment initialized bitwalk@ubuntu-pc:~$ ${HDDL_INSTALL_DIR}/install_IVAD_VPU_dependencies.sh Ubuntu18.04 [sudo] bitwalk のパスワード: パッケージリストを読み込んでいます... 完了 依存関係ツリーを作成しています 状態情報を読み取っています... 完了 libjson-c3 はすでに最新バージョン (0.12.1-1.3) です。 ... (途中省略) ... libc-bin (2.27-3ubuntu1) のトリガを処理しています ... Copying to /etc/udev/rules.d/98-hddlbsl.rules kill: 使用法: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... または kill -l [sigspec] Running install for component drv_ion if [[ "" != "" ]]; then sudo rmmod myd_ion; fi; make[1]: ディレクトリ '/opt/intel/openvino_2020.1.023/deployment_tools/inference_engine/external/hddl/drivers/drv_ion' に入ります ... (途中省略) ... make[2]: ディレクトリ '/usr/src/linux-headers-5.3.0-42-generic' から出ます >>> end building NODEBUG ION driver <<< make[1]: ディレクトリ '/opt/intel/openvino_2020.1.023/deployment_tools/inference_engine/external/hddl/drivers/drv_ion' から出ます mkdir -p /lib/modules/5.3.0-42-generic/kernel/drivers/myd/ cp myd_ion.ko /lib/modules/5.3.0-42-generic/kernel/drivers/myd/myd_ion.ko sudo depmod filename: /lib/modules/5.3.0-42-generic/kernel/drivers/myd/myd_ion.ko license: GPL license: GPL license: GPL license: GPL license: GPL description: ION Driver porting author: eason license: GPL license: GPL license: GPL srcversion: 85DD42C691D12BB4D463C3B depends: retpoline: Y name: myd_ion vermagic: 5.3.0-42-generic SMP mod_unload mkdir -p /etc/modules-load.d/ cat /etc/modules-load.d/myd_ion.conf myd_ion Driver myd_ion.ko is installed to /lib/modules/5.3.0-42-generic/kernel/drivers/myd/myd_ion.ko /etc/modules-load.d/myd_ion.conf is created for auto-load at boot time Running install for component drv_vsc if [[ "" != "" ]]; then sudo rmmod myd_vsc; fi; make[1]: ディレクトリ '/opt/intel/openvino_2020.1.023/deployment_tools/inference_engine/external/hddl/drivers/drv_vsc' に入ります ... (途中省略) ... mkdir -p /lib/modules/5.3.0-42-generic/kernel/drivers/myd/ cp myd_vsc.ko /lib/modules/5.3.0-42-generic/kernel/drivers/myd/myd_vsc.ko Driver myd_vsc.ko is installed to /lib/modules/5.3.0-42-generic/kernel/drivers/myd/myd_vsc.ko sudo depmod filename: /lib/modules/5.3.0-42-generic/kernel/drivers/myd/myd_vsc.ko license: GPL srcversion: 43AE0E7C58AE1F604AA1D61 alias: usb:v03E7pF63Bd*dc*dsc*dp*ic*isc*ip*in* depends: retpoline: Y name: myd_vsc vermagic: 5.3.0-42-generic SMP mod_unload mkdir -p /etc/modules-load.d/ /etc/modules-load.d/myd_vsc.conf is created for auto-load at boot time '/opt/intel/openvino_2020.1.023/deployment_tools/inference_engine/external/hddl/../97-myriad-usbboot.rules' -> '/etc/udev/rules.d/97-myriad-usbboot.rules' '/opt/intel/openvino_2020.1.023/deployment_tools/inference_engine/external/hddl/etc/udev/rules.d/99-hddl-ion.rules' -> '/etc/udev/rules.d/99-hddl-ion.rules' '/opt/intel/openvino_2020.1.023/deployment_tools/inference_engine/external/hddl/etc/udev/rules.d/99-myriad-vsc.rules' -> '/etc/udev/rules.d/99-myriad-vsc.rules' ======================================= Install HDDL dependencies sucessful Please reboot
'Please reboot' のメッセージが出てスクリプトが終了したので再起動します。
再起動後、下記のようにデバイスドライバをビルドしてインストールします。
bitwalk@ubuntu-pc:~$ cd ${HDDL_INSTALL_DIR}/drivers bitwalk@ubuntu-pc:/opt/intel/openvino_2020.1.023/deployment_tools/inference_engine/external/hddl/drivers$ sudo ./setup.sh install Running install for component drv_ion if [[ "myd_ion 53248 0" != "" ]]; then sudo rmmod myd_ion; fi; make[1]: ディレクトリ '/opt/intel/openvino_2020.1.023/deployment_tools/inference_engine/external/hddl/drivers/drv_ion' に入ります ... (途中省略) ... mkdir -p /lib/modules/5.3.0-42-generic/kernel/drivers/myd/ cp myd_ion.ko /lib/modules/5.3.0-42-generic/kernel/drivers/myd/myd_ion.ko sudo depmod filename: /lib/modules/5.3.0-42-generic/kernel/drivers/myd/myd_ion.ko license: GPL license: GPL license: GPL license: GPL license: GPL description: ION Driver porting author: eason license: GPL license: GPL license: GPL srcversion: 85DD42C691D12BB4D463C3B depends: retpoline: Y name: myd_ion vermagic: 5.3.0-42-generic SMP mod_unload mkdir -p /etc/modules-load.d/ cat /etc/modules-load.d/myd_ion.conf myd_ion Driver myd_ion.ko is installed to /lib/modules/5.3.0-42-generic/kernel/drivers/myd/myd_ion.ko /etc/modules-load.d/myd_ion.conf is created for auto-load at boot time Running install for component drv_vsc if [[ "myd_vsc 20480 0" != "" ]]; then sudo rmmod myd_vsc; fi; make[1]: ディレクトリ '/opt/intel/openvino_2020.1.023/deployment_tools/inference_engine/external/hddl/drivers/drv_vsc' に入ります ... (途中省略) ... mkdir -p /lib/modules/5.3.0-42-generic/kernel/drivers/myd/ cp myd_vsc.ko /lib/modules/5.3.0-42-generic/kernel/drivers/myd/myd_vsc.ko Driver myd_vsc.ko is installed to /lib/modules/5.3.0-42-generic/kernel/drivers/myd/myd_vsc.ko sudo depmod filename: /lib/modules/5.3.0-42-generic/kernel/drivers/myd/myd_vsc.ko license: GPL srcversion: 43AE0E7C58AE1F604AA1D61 alias: usb:v03E7pF63Bd*dc*dsc*dp*ic*isc*ip*in* depends: retpoline: Y name: myd_vsc vermagic: 5.3.0-42-generic SMP mod_unload mkdir -p /etc/modules-load.d/ /etc/modules-load.d/myd_vsc.conf is created for auto-load at boot time bitwalk@ubuntu-pc:/opt/intel/openvino_2020.1.023/deployment_tools/inference_engine/external/hddl/drivers$
検証用のサンプルスクリプトを再実行
NCS2 のデバイスドライバをビルドしてインストールしたので、OpenVINO toolkit をインストールした後に検証用に実行した 2 つのデモプログラムを、-d オプションでデバイスを指定してもう一度実行します。
ダウンロードした OpenVINO toolkit バージョン 2020.1 に対応しているインストールガイド Install Intel® Distribution of OpenVINO™ toolkit for Linux* - OpenVINO™ Toolkit によると、Steps for Intel® Vision Accelerator Design with Intel® Movidius™ VPUs のセクションで、デバイスの指定は -d HDDL となっています。ところが、HDDL というデバイス名を認識しませんでした。
何度インストールし直しても状況は改善されず、諦めかけたところ、参考サイト [8] に -d MYRIAD で動作したという記事を見つけました。ダメ元で試してみたところ、無事認識されたのでした。ということで、以下はインストールガイドと異なり、NCS2 のデバイス指定を -d MYRIAD としています。
bitwalk@ubuntu-pc:~$ cd /opt/intel/openvino/deployment_tools/demo bitwalk@ubuntu-pc:/opt/intel/openvino/deployment_tools/demo$ ./demo_squeezenet_download_convert_run.sh -d MYRIAD target = MYRIAD target_precision = FP16 [setupvars.sh] OpenVINO environment initialized ... (途中省略) ... Top 10 results: Image /opt/intel/openvino/deployment_tools/demo/car.png classid probability label ------- ----------- ----- 817 0.6708984 sports car, sport car 479 0.1922607 car wheel 511 0.0936890 convertible 436 0.0216064 beach wagon, station wagon, wagon, estate car, beach waggon, station waggon, waggon 751 0.0075760 racer, race car, racing car 656 0.0049667 minivan 717 0.0027428 pickup, pickup truck 581 0.0019779 grille, radiator grille 468 0.0014219 cab, hack, taxi, taxicab 661 0.0008636 Model T [ INFO ] Execution successful [ INFO ] This sample is an API example, for any performance measurements please use the dedicated benchmark_app tool ################################################### Demo completed successfully. bitwalk@ubuntu-pc:/opt/intel/openvino/deployment_tools/demo$
前回 PC の CPU で実行した時と確からしさ(信頼度)の数字が同一ではありませんが、同じ傾向の結果が出ました。
次に、防犯カメラのデモサンプルも実行してみます。
bitwalk@ubuntu-pc:/opt/intel/openvino/deployment_tools/demo$ ./demo_security_barrier_camera.sh -d MYRIAD
target = MYRIAD
ヒット:1 http://jp.archive.ubuntu.com/ubuntu bionic InRelease
...
(途中省略)
...
[ INFO ] Resizable input with support of ROI crop and auto resize is disabled
0.1FPS for (2 / 1) frames
Detection InferRequests usage: 100.0%
[ INFO ] Execution successful
###################################################
Demo completed successfully.
bitwalk@ubuntu-pc:/opt/intel/openvino/deployment_tools/demo$
FPS (frame per second) が処理速度の指標だとすれば NSC2 の VPU のパフォーマンスは VPU / CPU (N3050) = 13.5 / 3.1 ~ 4.4 になります。Celeron N3050 という非力な CPU と比べて NCS2 の VPU は 4 倍ちょっとのパフォーマンスなのかとなんとなくがっかりの結果です。しかし、動作確認用のプログラムをベンチマークにみたてたのが適当なのかどうかも疑問です。
ベンチマーク
サンプルを実行した同じディレクトリに demo_benchmark_app.sh というベンチマーク用のスクリプトらしきものがあったので、これで評価してみました。
まず、なにも指定せず(つまり PC の CPU で)実行しました。
bitwalk@ubuntu-pc:~$ cd /opt/intel/openvino/deployment_tools/demo bitwalk@ubuntu-pc:/opt/intel/openvino/deployment_tools/demo$ ls README.txt demo_speech_recognition.sh car.png demo_squeezenet_download_convert_run.sh car_1.bmp how_are_you_doing.wav demo_benchmark_app.sh squeezenet1.1.labels demo_security_barrier_camera.conf utils.sh demo_security_barrier_camera.sh bitwalk@ubuntu-pc:/opt/intel/openvino/deployment_tools/demo$ ./demo_benchmark_app.sh target_precision = FP16 [setupvars.sh] OpenVINO environment initialized ################################################### Downloading the Caffe model and the prototxt Installing dependencies [sudo] bitwalk のパスワード: ... (途中省略) ... Total time: 61694 microseconds Full device name: Intel(R) Celeron(R) CPU N3050 @ 1.60GHz Count: 1000 iterations Duration: 61927.52 ms Latency: 57.69 ms Throughput: 16.15 FPS Peak Virtual Memory (VmPeak) Size, kBytes: 408600 Peak Resident Memory (VmHWM) Size, kBytes: 61360 ################################################### Inference Engine benchmark app completed successfully. bitwalk@ubuntu-pc:/opt/intel/openvino/deployment_tools/demo$
次に -d MYRIAD を付けて NCS2 の VPU に対してベンチマークを実行しました。
bitwalk@ubuntu-pc:/opt/intel/openvino/deployment_tools/demo$ ./demo_benchmark_app.sh -d MYRIAD target = MYRIAD target_precision = FP16 [setupvars.sh] OpenVINO environment initialized ################################################### Downloading the Caffe model and the prototxt Installing dependencies ... (途中省略) ... Total time: 6895 microseconds Full device name: Intel Movidius Myriad X VPU Count: 1000 iterations Duration: 8451.89 ms Latency: 33.82 ms Throughput: 118.32 FPS Peak Virtual Memory (VmPeak) Size, kBytes: 706488 Peak Resident Memory (VmHWM) Size, kBytes: 33936 ################################################### Inference Engine benchmark app completed successfully. bitwalk@ubuntu-pc:/opt/intel/openvino/deployment_tools/demo$
このベンチマークの指標が FPS (frame per second) だとすれば、VPU / CPU (N3050) = 118.32 / 16.15 ~ 7.3 と Celeron N3050 と比べて NCS2 の VPU は 7 倍ちょっとのパフォーマンスです。数字だけでは目を見張るほどの凄さを感じません。しかし、消費電力を考慮すれば評価が変わりそうです。
ベンチマークの比較は継続的に続けるとして、まずは使いこなせるようになりたいです。Intel NCS2 あるいは OpenVINO に関しては Intel Developer Zone をはじめ、いろいろなサイトから情報を入手できそうですので、そういった情報の助けを借りて勉強します。
参考サイト
- インテル、AIにフォーカスしたVPU「Movidius Myriad X」を発表 - ZDNet Japan [2017-08-29]
- IntelがMovidius Myriad Xを発表、ディープラーニング機能が組み込まれたコンピュータービジョンチップだ | TechCrunch Japan [2017-08-29]
- Intel、AI開発者向けの小型デバイス「Intel Neural Compute Stick 2」を発表:手ごろなコストでDNN推論アプリケーションの開発を支援 - @IT [2018-11-16]
- Intel® Neural Compute Stick 2 | Intel® Software
- Deep Learning推論用デバイスその1 Intel NCS2 - Qiita [2019-07-03]
- Intel® Distribution of OpenVINO™ Toolkit for Linux* | Intel® Distribution of OpenVINO™ Toolkit | Intel® Software
- AIを始めよう!OpenVINOのインストールからデモの実行まで[R4対応] - Qiita [2018-12-18]
- getting error when i run openVINO demo application(on ubuntu ) with "-d HDDL" option on UP2 board
- Intel® Distribution of OpenVINO™ Toolkit
にほんブログ村