OKI  AI エッジコンピューター「AE2100」でOpenVINOのサンプルプログラムを動かしてみよう Ubuntuコンテナ版 (2)

<font size=4 color="Red">**※この記事はAE2100のUbuntuコンテナ(ubuntu_openvino_2020R3.tar)を対象としています。**</font>
# 要約
- この記事では、OKI  AI エッジコンピューター「AE2100」の設定方法について説明します。
- AE2100上で人物の姿勢推定を行うデモプログラムを実行します。

# はじめに
OpenVINOにはSamplesとDemosアプリケーションのソースが付属しています。
このうちDemosには、様々なユースケースに対する推論エンジンの使用例であるアプリケーションが含まれています(例: 人物の姿勢推定, 物体検出, 顔検出, 視線推定など)。
[Inference Engine Demosの一覧](https://docs.openvinotoolkit.org/2020.3/_demos_README.html)

今回はDemosのビルドを行い、AE2100上で人物の姿勢推定を行うプログラム(Human Pose Estimation C++ Demo)を実行します。
[”Human Pose Estimation”デモの詳細](https://docs.openvinotoolkit.org/2020.3/_demos_human_pose_estimation_demo_README.html)

なお、Ubuntu版での2回目となるこの記事での「OKI AIエッジコンピューター「AE2100」でOpenVINOのサンプルを動かしてみよう(2)」からの主な変更箇所は、Demosのビルド方法です。
（OpenVINO2020では、build_demos.shの編集やibcpu_extension.soが不要になりました）

また、human_pose_estimation_demoが非同期実行に対応されましたので、同期実行と非同期実行での動作の比較を行っています。

# 環境
AE2100のコンテナバージョンは「ubuntu_openvino_2020R3.tar」とします。
開発環境でDemosのビルドをおこない、AE2100で実行します。

開発環境の構築は「AE2100 シリーズ SDK 取扱説明書 ―DeepLearning 編―」(版数: 1.2) P.10を参考にしてください。

開発環境のメモリは4GB以上をご用意ください。
メモリが少ないと、ビルドが途中で止まってしまうことがあるのでご注意ください。

なお、第1回の記事に従ってウインドウズPC上にVcXsrvの導入が済んでいることを前提とします。
[OKI AI エッジコンピューター「AE2100」でOpenVINOのサンプルプログラムを動かしてみよう Ubuntuコンテナ版 (1)](https://qiita.com/TWAT/items/7398105a9e64178a84d7)

# Demosのビルド(開発環境側)
開発環境でOpenVINO付属のDemosのビルドをおこないます。

OpenVINOをデフォルトのままインストールした場合、Demosは以下の場所に存在します。
/opt/intel/openvino/inference_engine/demos

OpenVINOの環境変数を設定します。

```
# source /opt/intel/openvino/bin/setupvars.sh
```

build_demos.shを実行し、ビルドをおこないます。

```
# cd /opt/intel/openvino/inference_engine/demos
# ./build_demos.sh
```

ビルドをおこなうと実行ファイルが以下のディレクトリに出力されます。
/root/omz_demos_build/intel64/Release　

# モデルファイルのダウンロード(開発環境側)
ここではOpenVINO付属のmodel_downloaderを使ってモデルファイルのダウンロードをおこないます。
※下記サイトからブラウザで直接モデルファイルをダウンロードしても構いません。
https://download.01.org/opencv/2020/openvinotoolkit/2020.3/open_model_zoo/models_bin/1/human-pose-estimation-0001/FP16/

model_downloaderがあるディレクトリに移動します。

```
# cd /opt/intel/openvino/deployment_tools/tools/model_downloader
```

python の仮想環境をアクティブにします。　
※「AE2100 シリーズ SDK 取扱説明書 ―DeepLearning 編―」(版数: 1.2) P.13でPythonの仮想環境を作成した場合。

```
# source /opt/intel/openvino/deployment_tools/model_optimizer/venv/bin/activate
```

model_downloaderの動作に必要なpythonパッケージの導入をおこないます。

```
(venv)# pip3 install -r requirements.in
```

OpenVINOの環境変数を設定します。

```
(venv)# source /opt/intel/openvino/bin/setupvars.sh
```

model_downloaderで取得可能なモデルファイルの一覧を出力してみます。

```
(venv)# python3 downloader.py --print_all
action-recognition-0001-decoder
action-recognition-0001-encoder
age-gender-recognition-retail-0013
driver-action-recognition-adas-0002-decoder
driver-action-recognition-adas-0002-encoder
emotions-recognition-retail-0003
face-detection-adas-0001
face-detection-adas-binary-0001
face-detection-retail-0004
face-detection-retail-0005
face-reidentification-retail-0095
(以下省略)
```

今回は姿勢推定を行うためのモデルである”human-pose-estimation-0001”をダウンロードしてみます。

```
(venv)# python3 downloader.py --name human-pose-estimation-0001  --precisions FP16
(venv)# deactivate
```

モデルファイルは以下の場所に出力されます。
./intel/human-pose-estimation-0001

# AE2100へのファイルコピー
ここでは開発環境で用意した実行ファイルやモデルファイルを、AE2100へ移動します。

まず開発環境側でビルドを行った実行ファイルとモデルをフォルダに移動させます。

```
# cd
# mkdir human_pose
# cd human_pose
# cp /root/omz_demos_build/intel64/Release/human_pose_estimation_demo ./
# cp /opt/intel/openvino/deployment_tools/tools/model_downloader/intel/human-pose-estimation-0001/FP16/* ./
```

続いて姿勢推定の対象とする動画ファイルをダウンロードします。

```
# wget https://github.com/intel-iot-devkit/sample-videos/raw/master/one-by-one-person-detection.mp4
```

用意したファイルを確認します。

```
# ls
human-pose-estimation-0001.bin  human-pose-estimation-0001.xml  human_pose_estimation_demo  one-by-one-person-detection.mp4
```

tarアーカイブを作成します。

```
# cd ..
# tar cvf human_pose.tar  human_pose
```

TeraTermでAE2100にログインし、開発環境側で作成した上記のtarファイルを、ドラッグ&ドロップでAE2100に転送します。

AE2100にtarファイルの転送が行えたら、コンテナ内へtarファイルのコピーをおこないます。

```
root@ae2100:~# docker cp human_pose.tar ubuntu-openvino:/root/
```

以下のコマンドでコンテナに入ります。
（コンテナが起動していない場合、「AE2100 シリーズ SDK 取扱説明書 ―DeepLearning 編―」(版数: 1.2) P.20を参考に起動させてください。）

```
root@ae2100:~# docker exec -it ubuntu-openvino /bin/bash
```

コンテナ内でtarファイルを展開します。

```
# cd
# tar xvf human_pose.tar
```

# 依存パッケージのインストール（AE2100側）
※既に実施済みでしたら読み飛ばしてください。

デモ実行にffmpegやGTK+が必要なため、依存パッケージの導入をおこなっていないようでしたらインストールをおこないます。
インターネットへの接続が必要です。

```
# cd /opt/intel/openvino/install_dependencies
# apt-get clean
# ./install_openvino_dependencies.sh
```

# Human Pose Estimationの実行（AE2100側）
いよいよAE2100上でデモプログラム"Human Pose Estimation"を実行します。

実行環境のコンテナ内でOpenVINOの環境変数を設定します。

```
# source /opt/intel/openvino/bin/setupvars.sh
```

ウインドウ表示を行う必要があるため、前回の記事に従ってウインドウズPC側のXlaunchを起動してください。
ウインドウ表示先であるウインドウズPCのIPアドレスを指定します。

```
# export DISPLAY=192.168.100.101:0.0
```

準備が整いましたので”Human Pose Estimation”を実行してみたいと思います。

「OKI AI エッジコンピューター「AE2100」でOpenVINOのサンプルプログラムを動かしてみよう(2)」ではGPUとHDDL（Myriad X 2チップ）での動作を比較してみましたが、今回はHDDLでの、同期処理と非同期処理を比較してみます。

同期処理では画像を1フレームずつ処理しますが、非同期処理では複数のフレームを並列に処理するため、非同期処理による実行のほうが速くなることが期待されます。
今回のデモプログラムにおいての非同期処理では、2フレームが並列に処理されます。

実行ウインドウ上でTabキーを押すことで、同期処理・非同期処理を切り替えることができます。
また、Escキーを押すと終了します。

実行ディレクトリに移動します。

```
# cd 
# cd human_pose
```

下記のコマンドによって、先ほどダウンロードした動画に対して姿勢推定が行われ、その結果がウイン
ドウに表示されます。

```
# ./human_pose_estimation_demo -i one-by-one-person-detection.mp4 -m human-pose-estimation-0001.xml -d HDDL
```

下図は実行結果のウインドウです。
同期処理が行われている状態だと、画面上にSYNCと表示されます。
スループットは約4fpsとなりました。

![images_article-2_hddl.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669998/f3e3f252-fa51-11eb-248c-82a252a1cea9.png)

続いてウインドウ上でTabキーを押し、非同期処理に切り替えます。
非同期処理が行われている状態だと、画面上にASYNCと表示されます。
非同期処理でのスループットは約11fpsとなりました。
 
![images_article-2_hddl-async.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669998/9b3077e7-8c2d-8b88-7e3a-1364c90d336f.png)

非同期処理のほうが同期処理よりも速くなることが確認できました。
実行結果が確認できたら、Escキーを押してウインドウを閉じます。

非同期処理の実装方法については今後機会を設けて紹介したいと思います。

# まとめ

今回はDomosのビルド方法とAE2100上での実行をおこないました。
次回はAE2100にWebカメラを接続して物体検出に挑戦してみます。

- [OKI AI エッジコンピューター「AE2100」でOpenVINOのサンプルプログラムを動かしてみよう Ubuntuコンテナ版 (1)](https://qiita.com/TWAT/items/7398105a9e64178a84d7)
- [OKI AI エッジコンピューター「AE2100」でOpenVINOのサンプルプログラムを動かしてみよう Ubuntuコンテナ版 (3)](https://qiita.com/TWAT/items/9c607be6af887ec3a044)