OpenVINO+Movidius事始め(たぶん最新版)

#0.あいさつ
今年のゴールデンウィークは10連休みたいですが、うちの学校は初日と最終日が学校で8連休になるらしいです。改元の関係でうんぬんと言っていたのですが理由になってないだろそれ...

おはようございます
RHEMS技研荒木です


今回はOpenVINOをインストール→サンプルを実行するうえで詰まったところが多々あったのでまとめます

参考にしたサイト
https://software.intel.com/en-us/articles/OpenVINO-Install-Linux
https://qiita.com/ammo0613/items/a9bb3b7f20dc02a8d758

いずれもOpenVINOのアップデートにともない若干手順等が変わっています



#1.環境構築
自分はMacBookProでVirtualBoxにUbuntu16.04をいれて行いました
なので今回の記事はUbuntuで環境を作る人向けになります

まずOpenVINOのインストーラーをダウンロードします
https://software.intel.com/en-us/openvino-toolkit/choose-download
今回はUbuntuなのでLinux版をダウンロードします
<img width="1368" alt="スクリーンショット 2019-04-06 11.53.37.png" src="https://qiita-image-store.s3.amazonaws.com/0/269207/f0824601-435b-a464-4c04-7c8fdc2a750d.png">
Register&Downloadをクリック
すると以下のページに飛びます
<img width="1182" alt="スクリーンショット 2019-04-06 11.55.01.png" src="https://qiita-image-store.s3.amazonaws.com/0/269207/55b7fc9c-7d38-7b28-baa4-7594f042e11c.png">
フォームに必要事項を入力します
<img width="1021" alt="スクリーンショット 2019-04-06 11.58.25.png" src="https://qiita-image-store.s3.amazonaws.com/0/269207/cc16c4dd-ba08-978f-76ba-8bf3c314e04f.png">
Linuxを選択します
僕はFullPackage版をダウンロードしました
FullPackage版で問題ないと思います

```
cd ダウンロード
ls
 l_openvino_toolkit_p_2018.4.420
tar -zxf l_openvino_toolkit_p_2018.4.420.tgz
cd l_openvino_toolkit_p_4.420
```
ダウンロードしたファイルがあるところまで移動して解凍したのち、解凍したフォルダに移動します

```
 ./install_GUI.sh
```
移動したらシェルを実行します
するとインストーラーが立ち上がります
<img width="690" alt="スクリーンショット 2019-04-06 13.04.32.png" src="https://qiita-image-store.s3.amazonaws.com/0/269207/f22060d0-5eaa-d60d-e1a9-9b3c55ae06e0.png">
全部NEXTで大丈夫です

インストールが完了したら環境変数を追加します

```
source intel/openvino/bin/setupvars.sh
```
これはOpenVINOをつかう場合毎回実行しないといけません
今後エラー吐いたら大体これです、マジで。
なのでbashrcに追加します

```
nano .bashrc
```

モデルオプティマイザーをあれやこれやします

```
cd intel/computer_vision_sdk/deployment_tools/model_optimizer/install_prerequisites
sudo ./install_prerequisites.sh
```

最後です
以下らを実行すると環境が出来上がります

```
cd intel/computer_vision_sdk/deployment_tools/demo
sudo ./demo_squeezenet_download_convert_run.sh
```
バーってターミナルが流れて最後にSuccessesfulyがあれば環境が出来上がっています

今回はMovidiusを使いたいので追加の設定をします
Movidiusはrootユーザーでないと使えないみたいなのでユーザーアカウントでも使えるようにします

```
cat <<EOF > 97-usbboot.rules
SUBSYSTEM=="usb", ATTRS{idProduct}=="2150", ATTRS{idVendor}=="03e7", GROUP="users", MODE="0666", ENV{ID_MM_DEVICE_IGNORE}="1"
SUBSYSTEM=="usb", ATTRS{idProduct}=="2485", ATTRS{idVendor}=="03e7", GROUP="users", MODE="0666", ENV{ID_MM_DEVICE_IGNORE}="1"
SUBSYSTEM=="usb", ATTRS{idProduct}=="f63b", ATTRS{idVendor}=="03e7", GROUP="users", MODE="0666", ENV{ID_MM_DEVICE_IGNORE}="1"
EOF

sudo cp 97-usbboot.rules /etc/udev/rules.d/
sudo udevadm control --reload-rules
sudo udevadm trigger
sudo ldconfig
rm 97-usbboot.rules
```
これでユーザーからMovidiusを使えるようになりました

#3.サンプル実行
先人に習ってWebカメラを使うサンプルを実行してOpenVINOに触れたいと思います
というかデフォでついてくるサンプルはWebカメラを使うサンプルしかなかったです

```
cd ~/inference_engine_samples/intel64/Release
./human_pose_estimation_demo -h
InferenceEngine: 
	API version ............ 1.4
	Build .................. 17328

human_pose_estimation_demo [OPTION]
Options:

    -h                         Print a usage message.
    -i "<path>"                Required. Path to a video. Default value is "cam" to work with camera.
    -m "<path>"                Required. Path to the Human Pose Estimation model (.xml) file.
    -d "<device>"              Optional. Specify the target device for Human Pose Estimation (CPU, GPU, FPGA or MYRIAD is acceptable). Default value is "CPU".
    -pc                        Optional. Enable per-layer performance report.
    -no_show                   Optional. Do not show processed video.
    -r                         Optional. Output inference results as raw values.
```
必須になるのはカメラのパスと使用するモデルです
またオプションとしてCPUかGPUかMovidius(MYRIAD)が選択できます、デフォルトはCPUです
あとのオプションはおそらく使うことはないと思います

```
 ./human_pose_estimation_demo -i /dev/video0 -m /home/USER/intel/computer_vision_sdk/deployment_tools/intel_models/human-pose-estimation-0001/FP16/human-pose-estimation-0001.xml -d MYRIAD
```
モデル等のパスは相対パスでもいいらしいのですが、自分はうまく行かなかったので絶対パスにしました
Movidiusを使う場合はFP16、CPU・GPUを使う場合はFP32のモデルを使わないとコアダンプが出るので注意しましょう
Movidiusで実行すると、
<img width="1123" alt="スクリーンショット 2019-04-06 22.32.45.png" src="https://qiita-image-store.s3.amazonaws.com/0/269207/73bad3b0-4e8c-aa22-3efa-2936bacdba79.png">
CPUで実行すると、
<img width="961" alt="スクリーンショット 2019-04-06 22.45.16.png" src="https://qiita-image-store.s3.amazonaws.com/0/269207/eff77e7d-739a-5457-b4b5-a88615a3df11.png">
こんな感じです
体の姿勢を出力してくれます
Movidiusを使ってもなおFPSが満足に出ないのは仕方のないことだと思います
並列させるとどのくらい早くなるのか試してみたいですね
CPUのほうがFPSが出るのはなんかなんとも言えない気持ちになります
Movidius2が無印に比べ8倍すごいらしいのでどの程度変わるか楽しみですね

#4.さいごに
いかがでしたでしょうか
おそらく環境構築の記事では最新になるとおもいます(2019/04/07現在)
詰まった場合はコメントもらえると対処できるとおもいます

拙い記事でしたが最後まで読んでいただきありがとうございました