OpenCV3.4.2で始める浅いディープラーニング (その8 遅いのでOpenVINO有効化)
前回、OpenCV-dnnのHalideはまだ早すぎたんだ、ということが分かりました。今回は、手間を掛けずに高速化できそうなもう一方の手段OpenVINOを試してみたいと思います。基本的にはIntelCPU限定で使うことができます。
準備
事前に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
ダウンロード
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
Halideを使って実行。5827.15ms
OpenCV(CPU)を使って実行。2897.94ms
おお、これは効果がありましたね!CPU(Core i7-4770S)に比べて2倍程速くなっています。んー、ほんとかなぁ。