OpenVINOはDNNの推論に特化したツールキット。学習済みのいろいろモデルをダウンロードしてから、OpenVINOで使える中間表現(IR)フォーマットに変換してから、推論までの作業メモ。以下のサイトに基づいている。
open_model_zoo: Model Downloader and other automation tools
環 境
- Razer Blade 15 (2018)
- Ubuntu 18.04
- Kernel 5.3.0-40-generic
- Python 3.6.9
- OpenVINO:2019.3.376 (2019R3.1) :DockerでインストールしたCVATで使っているOpenVinoと普通にインストールするOpenVINOのバージョンを合わせる必要がある。2020年3月8日時点だと不具合があったのでOpenVINOのバージョンを2019R3.1にしている。
モデルのダウンロード
- Open Model Zoo repositoryからモデルをダウンロードする。
- $ cd ~/src
- $ git clone https://github.com/opencv/open_model_zoo.git
- OpenVINO 2019R3.1のバージョンに合わせるため2019ブランチでチェックアウトする。これをしないとデモアプリのビルドで失敗する。
- $ cd ~/src/open_model_zoo
- $ git checkout 2019
- デモアプリのビルド
- $ cd ~/src/open_model_zoo/demos
- $ ./build_demos.sh
- ビルドが成功すると~/omz_demos_build/intel64/Releaseにバイナリが保存される。
- 準備
- OpenVINO 2019R3.1はインストールしておく。インストールしていない場合はここを参照。
- $ cd /opt/intel/openvino_2019.3.376/deployment_tools/tools/model_downloader
- 必要なツールのインストール
- $ python3 -mpip install –user -r ./requirements.in
- $ python3 -mpip install –user -r ./requirements-pytorch.in
- $ python3 -mpip install –user -r ./requirements-caffe2.in
- モデルのダウンロード
- ダウンロードできるモデルを知るには次のコマンドを実行する。
- $ cd /opt/intel/openvino_2019.3.376/deployment_tools/tools/model_downloader
$ ./downloader.py --print_all
- モデルをダウンロードする。全部ダウンロードすると約15GBになり、中間表現フォーマットに変換するとさらに約12GB、合計約27GBが必要になる。
- 全部ダウンロード:ディスク容量に余裕がある場合は、次のコマンドで全てダウンロードする。
- $ mkdir -p ~/openvino_models
$ ./downloader.py --all --output_dir ~/openvino_models
- 一部のモデルだけダウンロード:次のコマンドを一部のモデルだけを実行する。ここでは、この記事で推論のテストを行う7個のモデルだけをインストールする。
$ ./downloader.py --name mask_rcnn_inception_resnet_v2_atrous_coco --output_dir ~/openvino_models
- あと6個のモデルを一つずつダウンロードしてもよいがファイルに書くとまとめてダウンロードできるので、次のファイルをmodels.lstという名前で作成する。各行に1個のモデルを書いて改行する。
human-pose-estimation-0001 face-detection-adas-0001 age-gender-recognition-retail-0013 head-pose-estimation-adas-0001 emotions-recognition-retail-0003 facial-landmarks-35-adas-0002
$ ./downloader.py --list models.lst --output_dir ~/openvino_models
- 全部ダウンロード:ディスク容量に余裕がある場合は、次のコマンドで全てダウンロードする。
- ダウンロードできるモデルを知るには次のコマンドを実行する。
- 中間表現への変換
- 全部ダウンロードした場合:全モデルを以下のコマンドで推論エンジン用IRフォーマットに変換する。
- $ cd /opt/intel/openvino_2019.3.376/deployment_tools/tools/model_downloader
$ ./converter.py --all --download_dir ~/openvino_models
- 一部だけダウンロードした場合:次のコマンドを一部のモデルだけ変換する。
- $ cd /opt/intel/openvino_2019.3.376/deployment_tools/tools/model_downloader
$ ./converter.py --name mask_rcnn_inception_resnet_v2_atrous_coco --download_dir ~/openvino_models
- あと6個のモデルを一つずつ変換してもよいがダウンロードと同様にファイルを指定するとまとめてできる。
$ ./converter.py --list models.lst --download_dir ~/openvino_models
- 全部ダウンロードした場合:全モデルを以下のコマンドで推論エンジン用IRフォーマットに変換する。
推 論
- では、ダウンロードしたモデルのいくつかを使って推論してみよう。
- Mask R-CNN Demo
- $ cd ~/omz_demos_build/intel64/Release
- $ ./mask_rcnn_demo -i ~/Desktop/images/ike2.jpg -m ~/openvino_models/public/mask_rcnn_inception_resnet_v2_atrous_coco/FP32/mask_rcnn_inception_resnet_v2_atrous_coco.xml
- ここで、必ず必要となるオプションは-iと-m。-i:入力画像、-m:IRフォーマットの学習済みモデル。なお、-dのオプションでCPU、GPU、FPGA等を選択できるが私の環境ではGPUにすると処理時間が遅くなった。
- 上記コマンドの実行結果。出力はout0.png。処理に約6秒かかったことがわかる。
- 入力画像:ike2.jpg
- Human Pose Estimation Demo
- $ cd ~/omz_demos_build/intel64/Release
- 画像
- Webカメラ
- Interactive Face Detection Demo
- このデモは、顔検出、年齢・性別識別、頭の姿勢推定、感情識別、顔の特徴点が表示される。フレームレートもCPUで23fpsとかなり高速である。
- $ cd ~/omz_demos_build/intel64/Release
- Webカメラ
- ./interactive_face_detection_demo -i cam -m ~/openvino_models/intel/face-detection-adas-0001/FP32/face-detection-adas-0001.xml -m_ag ~/openvino_models/intel/age-gender-recognition-retail-0013/FP32/age-gender-recognition-retail-0013.xml -m_hp ~/openvino_models/intel/head-pose-estimation-adas-0001/FP32/head-pose-estimation-adas-0001.xml -m_em ~/openvino_models/intel/emotions-recognition-retail-0003/FP32/emotions-recognition-retail-0003.xml -m_lm ~/openvino_models/intel/facial-landmarks-35-adas-0002/FP32/facial-landmarks-35-adas-0002.xml
- 出力として以下のようなウインドウが開く。
- 例として風船を持つ少女の画像を試すと感情Happyは当たっているように思えるが年齢が23歳と推定された。
- 例として風船を持つ少女の画像を試すと感情Happyは当たっているように思えるが年齢が23歳と推定された。
多くの学習済みモデルをCPUで推論しても、ロボットのアプリケーションで使えるレベルだと思う。次は、オリジナルデータで学習したモデルをOpenVINOで推論してみたい。
終わり
コメント