cvl-robot's diary

研究ノート メモメモ https://github.com/dotchang/

OpenCV3.4.2で始める浅いディープラーニング (その8 遅いのでOpenVINO有効化)

前回、OpenCV-dnnのHalideはまだ早すぎたんだ、ということが分かりました。今回は、手間を掛けずに高速化できそうなもう一方の手段OpenVINOを試してみたいと思います。基本的にはIntelCPU限定で使うことができます。

github.com

準備

事前にPython3.5以降とIntelGPUの有効化をしておく必要があります。

64ビット版python3.5以降のインストール

Python3.7が最新版です。3.7でも多分問題ないですが、安定志向の人はPython3.5もしくはPython3.6シリーズのどれか好きなのをインストールしてください。必ず64ビット版を選んでください。
www.python.org
Python2.7等もインストールしている人は、Pathに注意してください。cmdプロンプトでpythonと打った時、Python3.5~が呼ばれていることを確認しておいてください。
パスの例:
C:\Users\cvl\AppData\Local\Programs\Python\Python36
C:\Users\cvl\AppData\Local\Programs\Python\Python36\Scripts
今回の記事では特にいらないけれど、モデルのダウンロード等に使うpythonライブラリのダウンロードしておくと便利。

> pip install pyyaml
> pip install requests

IntelGPUの有効化

比較的最近のマザーボードでは、BIOS設定によりnVidiaGeForce等を使いつつ、IntelGPU(統合グラフィックス)も共存できるようになっています。これを有効にしてください。
f:id:cvl-robot:20180723203726j:plain

ダウンロード

IntelのWebサイトで個人情報を登録の上、ダウンロードしてください。商用にも使える緩いライセンスだそうですが、気になる人はライセンス規定も調べておいてください。
software.seek.intel.com

ダウンロード完了後、ダイアログに従ってインストールを進めてください。規定ではc:\Intel\computer_vision_sdk_2018.2.304などにインストールされます。後ろの数字は、バージョン番号です。

OpenCVのリビルド

OpenVINOのインストール完了後、OpenCVのビルドをCMakeからやり直す必要があります。CMakeは2回に分けてConfigureします。

  • 1回目

WITH_INF_ENGINE check

  • 2回目

INF_ENGINE_INCLUDE_DIRS C:/Intel/computer_vision_sdk_2018.2.304/inference_engine/include 勝手に入っているはず
INF_ENGINE_ROOT_DIR C:/Intel/computer_vision_sdk_2018.2.304/inference_engine 勝手に入っているはず
inference_engine C:/Intel/computer_vision_sdk_2018.2.304/deployment_tools/inference_engine/lib/intel64/Release/inference_engine.lib 入れる

Configureを通して、Generateして、OpenCVをリビルドしてください。リビルド完了後、dllファイルおよびdnn関連のexeファイルをopencv_extra/testdata/dnnに上書きコピーしてください。inference_engineのdllのコピーは必要ありません。ライブラリのインストール時にパスが通されています。
(dllをコピーするのは、今の作業はテストのつもりなので環境にコンフリクトが起こさないように配慮しているためで、もちろんdllをコピーする代わりにパスをちゃんと通しても構いません。)

実行テスト

inference_engineを使って実行。1263.91ms

example_dnn_segmentation.exe --model=fcn8s-heavy-pascal.caffemodel --config=fcn8s-heavy-pascal.prototxt --scale=1.0 --width=500 --height=500 --mean=0 0 0 --classes=segmentation_classes_pascal_voc.txt --backend=2 --input=dog416.png

f:id:cvl-robot:20180724141159p:plain
Halideを使って実行。5827.15ms
f:id:cvl-robot:20180724141331p:plain
OpenCV(CPU)を使って実行。2897.94ms
f:id:cvl-robot:20180724141456p:plain

おお、これは効果がありましたね!CPU(Core i7-4770S)に比べて2倍程速くなっています。んー、ほんとかなぁ。