OpenVINO:モデルのダウンロード、中間表現への変換、そして推論

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

推 論

  • では、ダウンロードしたモデルのいくつかを使って推論してみよう。
  • 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
    • 出力画像:out0.png
  • Human Pose Estimation Demo
    • $ cd ~/omz_demos_build/intel64/Release
    • 画像
      • $ ./multi-channel-human-pose-estimation-demo -i ~/Desktop/images/ike2.jpg -m ~/openvino_models/intel/human-pose-estimation-0001/FP32/human-pose-estimation-0001.xml
      • 出力として以下のようなウインドウが開く。CPUで12.53 fpsなのでまずまずの速さ。GPUの場合は15.4fpsと若干速くなった。
    • Webカメラ
      • $ ./multi-channel-human-pose-estimation-demo -i  /dev/video0  -m ~/openvino_models/intel/human-pose-estimation-0001/FP32/human-pose-estimation-0001.xml
        • Webカメラを使用するときは-iの後にカメラのデバイスファイル名を入れる。多くの場合はノートパソコン内臓のカメラのファイル名は/dev/video0。
      • 出力として以下のようなウインドウが開く。GPUの場合は約15fps、CPUの場合は1fpsぐらい遅くなるがほとんど変わらない。
  • 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歳と推定された。
        • 自分を試すと。27歳男性、驚き。年齢が倍ぐらい違う。感情も違う。この学習済み重みでは、年齢と感情はかなり違うが、それ以外は結構使えるかもしれない。

多くの学習済みモデルをCPUで推論しても、ロボットのアプリケーションで使えるレベルだと思う。次は、オリジナルデータで学習したモデルをOpenVINOで推論してみたい。

終わり

コメント

タイトルとURLをコピーしました