🐾

OpenCVのInference Engine backendとしてOpenVINOを使用する

2022/07/12に公開

概要

 OpenCVのDNNモジュールのbackendとしてIntel Inference Engineを使用するときの設定手順です。
 C++のOpenCVから、YuNetによるdetectionを行う際に、ONNXではなくOpenVINO形式のモデルを使用します。

環境

 本記事の実行環境です。

Windows 10

準備

 以下のリンクからOpenCV 4.5.5(relase binaries)のpackageをダウンロードします。

Intel's Deep Learning Inference Engine backend

 ダウンロード後、任意の場所に展開します。今回は、\C:直下に展開します。
 同様に以下のリンクからOpenVINOのRuntimeもダウンロード&インストールします。

Intel® Distribution of OpenVINO™ Toolkitへのリンク

手順

C++での呼び出し

 今回はFaceDetectorYNに対して、OpenVINO形式のbinとxmlファイルを指定します。基本的に以下の引数の設定だけです。FaceDetectorYNは内部でreadNetを呼んでいるので、readNetへの引数と同じものが渡せます。当然ながらyunetの公式?として公開されているONNX形式も渡せます。
 以下のように第1・2引数にそれぞれのファイルのパスを渡します。第7引数のbackend_idを2に指定するとIntel's Inference Engineを指定できます。デフォルトは0(CPU)です。

cv::FaceDetectorYN::create(
                            "</path/to/bin_file>",
                            "</path/to/xml_file>",
                            <DETECT_IMAGE_SIZE>,
                            <score_threshold>,
                            <nms_threshold>,
                            <top_k>,
                            <backend_id>,
                            <target_id>
)

CMakeLists.txtの設定

 今回対象の部分としては、以下になります。既存のCMakeLists.txtに以下を部分的に追加するだけで動作すると思います。

set(OpenCV_DIR "C:\\opencv\\build\\cmake")
find_package(OpenCV REQUIRED)
set(InferenceEngine_DIR "C:\\Program Files (x86)\\Intel\\openvino_2022.1.0.643\\runtime\\cmake")
find_package(InferenceEngine REQUIRED)

target_link_libraries(<bin_name> PRIVATE ${OpenCV_LIBS} ${InferenceEngine_LIBRARIES})

最後に

 OpenVINO形式のモデルをOpenCVで実行するのに、OpenVINO形式へのモデル変換を事前にやっていたのですが、Unknown model format!というエラーが出てモデル読み込みができない状態でした。原因としては、OpenVINOのバージョンが揃っていなかったというものでした。現時点では、OpenCV 4.5.5のOpenVINOと同じバージョンのOpenVINOでモデル変換を行う必要があると思います。OpenCV 4.6を使用する場合は、ビルドする必要があると思います。OpenCV 4.6でOPENCV_DNN_OPENVINOとWITH_OPENVINOオプションを有効にしてビルドしてみましたが、うまく動作しませんでした。もっとよくわからなかったのがInferenceEngineで指定するOpenVINOは最新版(2022)で問題なく動作したいう点。まだまだ、OpenVINOへの理解が必要なんだと思いました。

Discussion