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でもある程度高速な深層学習の計算を実現できるようになります。

https://software.seek.intel.com/openvino-toolkit からユーザ登録をし、ライブラリをダウンロード、インストールします。 インストール手順については、

を参照してください。上記リンクに示されている通り、demoを動かすところまでを確認しましょう。

openvinoのバージョンに合わせて、opencvを自前でmakeできます。手順は ubuntu と同じでOKです。 sampleのビルドもできます。実際にbackendを inference engineに変更すると 2倍弱くらいでobject_detectionが動くことが 確認できます。

うまく行っていません。

OpenVINOを含んだopencv2.frameworkを作成しようとしていますが。うまく行っていません。だれか助けて。

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<cv::Ptr<cv::dnn::dnn4_v20190122::BackendWrapper>, 

なるエラーが100個以上でる。これはdnnモジュールでもvino側にあるライブラリなので、そっちを参照すればよい。

Xcodeの Link Binary with Library に inference_engineのlibを渡してみた。

ビルドは上手くいくが、実行すると   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をじっくり見るしかなし。。 — Tetsuaki Baba 2019/06/11 09:13

  • opencv_dnn/環境構築/openvino.txt
  • 最終更新: 2019/07/30 17:26
  • by baba