====== OpenVINO ======
OpenVINO はIntelが提供する深層学習用ライブラリとツール郡のことを指します。OpenVINOの中に、Intel's Deep Learning Inference Engineが含まれており、OpenVINOをインストールすることで、intelチップ上で最適化されたネットワークフォワードが可能になり、OpenCVのデフォルト(CPU演算)よりも高速にフォワーディングが可能になります。すでにWindows、Linuxでは提供されてきた機能ですが、2019年5月からMac用も提供が開始されました。MacはNvidiaチップがオンボードな製品がないため、深層学習においてはcoremlを使うがあり、この点がlinux,windowsに比べて使いづらいところでした。OpenVinoを利用することで、Macでもある程度高速な深層学習の計算を実現できるようになります。
===== Install =====
https://software.seek.intel.com/openvino-toolkit からユーザ登録をし、ライブラリをダウンロード、インストールします。
インストール手順については、
* https://docs.openvinotoolkit.org/2019_R1/_docs_install_guides_installing_openvino_macos.html
を参照してください。上記リンクに示されている通り、demoを動かすところまでを確認しましょう。
===== opencv自前でmake =====
openvinoのバージョンに合わせて、opencvを自前でmakeできます。手順は ubuntu と同じでOKです。
sampleのビルドもできます。実際にbackendを inference engineに変更すると 2倍弱くらいでobject_detectionが動くことが
確認できます。
* opencvをopenvinoでbuild: https://github.com/opencv/opencv/wiki/Intel%27s-Deep-Learning-Inference-Engine-backend
===== Frameworkの作成 =====
うまく行っていません。
OpenVINOを含んだopencv2.frameworkを作成しようとしていますが。うまく行っていません。だれか助けて。
* https://github.com/opencv/opencv/wiki/Intel%27s-Deep-Learning-Inference-Engine-backend のページに従い cmakeのコンパイルオプションを追加する。ただしosxの build_framework.py ではなく、 ios/build_framework.py に修正すべき記述がある。
def getCMakeArgs(self, arch, target):
args = [
"cmake",
"-GXcode",
"-DAPPLE_FRAMEWORK=ON",
"-DCMAKE_INSTALL_PREFIX=install",
"-DCMAKE_BUILD_TYPE=Release",
"-DOPENCV_INCLUDE_INSTALL_PATH=include",
"-DOPENCV_3P_LIB_INSTALL_PATH=lib/3rdparty",
"-DWITH_INF_ENGINE=ON", # 追加
"-DENABLE_CXX11=ON" # 追加
] + ([
"-DBUILD_SHARED_LIBS=ON",
"-DCMAKE_MACOSX_BUNDLE=ON",
"-DCMAKE_XCODE_ATTRIBUTE_CODE_SIGNING_REQUIRED=NO",
] if self.dynamic else []) + ([
"-DOPENCV_ENABLE_NONFREE=ON"
] if self.enablenonfree else [])
if len(self.exclude) > 0:
args += ["-DBUILD_opencv_world=OFF"] if not self.dynamic else []
args += ["-DBUILD_opencv_%s=OFF" % m for m in self.exclude]
return args
これでビルドは成功するが、実際にframeworkを読み込みませて、object_detectionやってみたところ、
ndefined symbols for architecture x86_64:
"InferenceEngine::Builder::MVNLayer::setAcrossChannels(bool)", referenced from:
cv::dnn::MVNLayerImpl::initInfEngine(std::__1::vector,
なるエラーが100個以上でる。これはdnnモジュールでもvino側にあるライブラリなので、そっちを参照すればよい。
Xcodeの Link Binary with Library に inference_engineのlibを渡してみた。
{{ :opencv_dnn:環境構築:スクリーンショット_2019-06-11_9.15.12.png?direct&300 |}}
ビルドは上手くいくが、実行すると
dyld: Library not loaded: @rpath/libcpu_extension.dylib
となる。これは dylib からの参照先に @rpath があるため、これで見つからずにロードできないとのこと。そもそも絶対パスで入っていれば
間違いないのだけれど、intelからはバイナリでしか配布されていないので、困る。
install_name_tool を利用するとこの @rpath ごと変更できるとのことで、やってみたけど修正できなかった。
bugle-1831:test baba$ otool -L libinference_engine.dylib
libinference_engine.dylib:
@rpath/libinference_engine.dylib (compatibility version 0.0.0, current version 0.0.0)
@rpath/libtbb.dylib (compatibility version 0.0.0, current version 0.0.0)
/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 400.9.4)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1252.200.5)
bugle-1831:test baba$ install_name_tool -change @rpath/libinference_engine.dylib /opt/intel//openvino_2019.1.133/deployment_tools/inference_engine/lib/opt/intel//openvino_2019.1.133/deployment_tools/inference_engine libinference_engine.dylib
bugle-1831:test baba$ otool -L libinference_engine.dylib
libinference_engine.dylib:
@rpath/libinference_engine.dylib (compatibility version 0.0.0, current version 0.0.0)
@rpath/libtbb.dylib (compatibility version 0.0.0, current version 0.0.0)
/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 400.9.4)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1252.200.5)
opencv側のMakefileをじっくり見るしかなし。。
--- //[[baba@tmu.ac.jp|Tetsuaki Baba]] 2019/06/11 09:13//