====== 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//