OpenVINOを使ってみる

タグ
学習ディープラーニング
公開日
May 18, 2023

OpenVINOを使ってみる

ちょっとお仕事でOpenVINOというものを触る機会があったので調べたことをまとめてみます。

ちなみに、私はディープラーニングについては初心者、というよりほぼ初見です。

すっごく昔にOpenCVで顔検出をちょっとだけ試したことがあるくらいです。(モデルはなんかサンプルだったか何を使った気がするけど覚えてない)

OpenVINOについて

OpenVINO (Open Visual Inference and Neural network Optimization) は、Intelが提供するディープラーニングモデルの最適化とデバイスへの展開を行うためのオープンソースツールキットです。OpenVINOは、CPU、GPU、VPU、FPGAなどのバックエンドに対応しており、高速かつ効率的に推論を行うことができる、そうです。

OpenVINOの主な機能は以下

  • ディープラーニングモデルの最適化
  • 推論エンジンの作成
  • デバイスへの展開

OpenVINOは、PythonやC++などのプログラミング言語に対応しており簡単に利用することができる、だそうです。

image

…なんのこっちゃ。。

というわけで、ハンズオンをやってみます!

※環境構築等の詳しい内容はハンズオンの中で学んでください。ここでは簡単に触りだけ説明します。

OpenVINO™ ツールキット基礎知識

OpenVINO™ ツールキットは「インテルのエッジデバイスでディープラーニング推論を高速に実行するソフトウェアライブラリー」です。

image

OpenVINO™ ツールキット・パッケージ構成

runtimeパッケージ - いくつか種類があります。OpenVINO™ ツールキットを利用するプログラムを実行するのに必要となります。 ⚫ Python runtime (pip) : pipでインストール。C++開発をしないのならこれでもOK。Windowsでも使えます。 ⚫ C++ runtime (インストーラー) : runtimeといいつつ、C++開発に必要なincludeファイルなどはこのパッケージに含まれている。今回はこの方法を紹介します。 ⚫ C++ runtime (yum/apt) : yum/aptでインストール。Ubuntu / RHELなどで利用可能 (当然ですがWindowsでは使えません)

Development tools(開発者)パッケージ - OpenVINO™ ツールキットを使ったプログラム開発に必要。モデル変換ツール、モデルダウンロードツール、モデル最適化 (量子化など) ツール、ベンチマークツールなどが付属しています。

OpenVINO™ ツールキットをインストール

すべて書くとかなり長くなるので手順だけ記載します。

  • OpenVINO™ ツールキット C++ runtime パッケージのダウンロード
  • 必要ツール類、オプションツール類のダウンロード、インストール o CMake、Python、Microsoft Visual Studio 2019、Git
  • OpenVINO™ ツールキット C++ runtime のインストール
  • OpenCV のダウンロード、インストール
  • OpenVINO™ 開発ツール(development tools) のインストール (pip)

途中、色々と注意事項があるので公式のハンズオンの動画を見ながらインストールされることをおすすめします。

全ての準備できたら、「Developer Command Prompt for VS2019」というツールがインストールされているはずですのでそれを立ち上げます。

image

ここからはOpenVINO™ ツールキットのインストールが完了した前提で話を進めます。

コマンド類がたくさん出てきますが今回のハンズオンを試す際には以下のことを覚えておくと良いと思います。

  • OpenVINO™ ツールキットのための環境変数を設定するバッチファイルを実行
    • Developer Command Prompt for VS2019を立ち上げる度に必要です。
  • Pythonバーチャル環境を有効化
    • Developer Command Prompt for VS2019を立ち上げる度に必要です。

Python仮想環境の作成

作業フォルダを作成してその中にPythonの仮想環境を作成・切り替える例です。

cd %USERPROFILE%
mkdir work
cd work
# pip, setuptoolsを最新のものにアップデートする
python -m pip install -U pip setuptools
# "venv-ov22.1"という名前でPython仮想環境を作成する。
python -m venv venv-ov22.1
# 作成した仮想環境を有効化する。これ以降、コマンドプロンプトの先頭に仮想環境名、"(venv-ov22.1)"が表示されるようになる。
venv-ov22.1\Scripts\activate
# 仮想環境内のpip, setuptoolsを最新のものに更新する。
python -m pip install -U pip setuptools

OpenVINOツールキットの開発関連ツール (Model Optimizer, Model Downloader, Benchmark_appなど) をインストールします。


python -m pip install openvino-dev[tensorflow2,pytorch,onnx,caffe,kaldi,mxnet]==2022.1.0

ここまででOpenVINO開発ツールのインストールは終わりです。

ここまでできたら一度「Developer Command Prompt for VS2019」を閉じましょう。

環境が正しくセットアップされたか確認 - ベンチマークの実行

先ほどと同じ様に「Developer Command Prompt for VS2019」を立ち上げます。

Developer Command Prompt for VS2019が立ち上がったら、以下の2点を行います。

  • OpenVINO™ ツールキットのための環境変数を設定するバッチファイルを実行
"%PROGRAMFILES(X86)%\Intel\openvino_2022\setupvars.bat"

Pythonバーチャル環境を有効化


cd %USERPROFILE%\work
venv-ov22.1\Scripts\activate

環境が正しく構築されたかどうか、ResNet-50のモデルをダウンロードし、ベンチマークツールを実行してみることで確認します。

  • Resnet-50モデルをOMZからダウンロードします。omz_downloaderを使用します。
omz_downloader --name resnet-50-tf

ダウンロードしたOMZモデルはフレームワーク形式(TensorFlow Protobuf(.pb))なのでomz_converterを使用してOpenVINOツールキットのIR形式モデルに変換します。

omz_converter --name resnet-50-tf
  • omz_downloader は Open Model Zoo (OMZ)からモデルを自動ダウンロードするツールです。
  • omz_converterはOMZからダウンロードしたpublicモデル (publicフォルダ以下にダウンロードされるフレームワーク形式のモデル) をOpenVINO™ ツールキットのIR形式に変換するツールです。

※Open Model Zooとはインテルが学習済みモデルを配布しているサイトです。(https://github.com/openvinotoolkit/open_model_zoo/tree/master

上記2つのコマンドを実行すると、workフォルダ以下public/resnet-50-tf/FP16のフォルダ内に変換されたIRモデルファイルが生成されています。

image

.xmlはモデルの構造(トポロジー)を記述したXMLファイル

.binが重み、バイアス値などを格納したバイナリ

ベンチマークはbenchmark_appを使って計測します。以下のコマンドを実行してください。

benchmark_app -m public\resnet-50-tf\FP16\resnet-50-tf.xml -niter 100 -d CPU

推論回数=100、推論デバイス=CPU

image
image

なんかよくわからないけど、ベンチマークが計測されました。

詳しい内容はハンズオンの中の動画で説明されています。(CPUやGPUを使った際の違いも紹介されています)

image
image

とりあえず成功したようです!(笑)

さて、ここまではOpenVINOツールキットのインストールでした。。長かった。。。

image

。。。

。。。

。。。

image

さて、気を取り直してこれからサンプルプログラムを動かします!

OpenVINO™ ツールキットのサンプルプログラムのビルド・実行

OpenVINO™ ツールキットC++サンプルプログラムをビルドし、実行してみます。

サンプルプログラムは比較的シンプルで、凝った作りになっていないためOpenVINO™ ツールキットのAPI学習の参考用に有用です。(とのことですが、私にはハードル高そう。。。)

それではいってみましょう!

以下のコマンドを実行してビルドを行います。

cd %PROGRAMFILES(X86)%\Intel\openvino_2022\samples
cd cpp
build_samples_msvc.bat

なんかよくわからんけど色々と出ました(笑)

image

実行可能バイナリは、

%USERPROFILE%\Documents\Intel\OpenVINO\inference_engine_cpp_samples_build\intel64\Release

以下に生成されるようです。

image

hello_classificationサンプルプログラムを実行してみる

以下のコマンドを順に実行します

cd "%USERPROFILE%\Documents\Intel\OpenVINO\inference_engine_cpp_samples_build\intel64\Release"
omz_downloader --name googlenet-v1
omz_converter --name googlenet-v1

以下の画像をダウンロードして

"%USERPROFILE%\Documents\Intel\openvino\inference_engine_cpp_samples_build\intel64\Release"

に「dog.bmp」という名前で保存します。

image

※ウチのワンちゃんです(かっこいいでしょ?)

サンプルプログラムを実行してみます。(推論デバイス=CPU)

hello_classification.exe public\googlenet-v1\FP16\googlenet-v1.xml dog.bmp CPU
image

65.8%の確率でクラスID253のオブジェクトだと判定されたようです。

googlenet-v1モデルはImageNetデータセットで学習されているようなので、ImageNetのラベルデータを確認してID253のクラス名を確認します。

下記URLをブラウザーで開いてクラス名を確認します。

https://github.com/torch/tutorials/blob/master/7_imagenet_classification/synset_words.txt

このリストはIDが1から始まっているので、推論結果の253に1を足した254が判定されたクラス名となります。

image

ん?「basenji」???

image

何じゃそりゃ???

Googleで調べました。

バセンジーとは、

コンゴ共和国原産の狩猟用犬種である

image

えーと、ウチの犬はバセンジーではないですが(似てるかもだけどw)、とりあえず推論としては「」という結論になりました!

image

さて、ずいぶんと長い記事になってしまいましたので、この記事はこのあたりで締めたいと思います。

ハンズオンでは「Open Model Zoo」のデモプログラムのダウンロード、ビルドなどその他、実用的なプログラムの紹介もされています。

もし興味がある方はぜひハンズオンを体験してみてください(動画を見ながらやるだけです)

以下、Open Model Zooを使う際の自分用のメモです。

# 事前準備

## 「Developer Command Prompt for VS2019」を開始します。

## OpenVINO™ ツールキットのための環境変数を設定するバッチファイルを実行します。

```
"%PROGRAMFILES(X86)%\Intel\openvino_2022\setupvars.bat"
```

## Pythonバーチャル環境をアクティベート

```
cd %USERPROFILE%\openvino
venv-ov22.1\Scripts\activate
```

# 顔認識

## デモディレクトリに移動

```
cd %USERPROFILE%\openvino\open_model_zoo\demos\face_recognition_demo\python
```

## モデルのダウンロード

```
omz_downloader --list models.lst
```

## モデルの変換

```
omz_converter --name face-recognition-resnet100-arcface-onnx
```

## 実行

```
python face_recognition_demo.py -i 0 -m_fd intel\face-detection-retail-0004\FP16\face-detection-retail-0004.xml -m_lm intel\landmarks-regression-retail-0009\FP16\landmarks-regression-retail-0009.xml -m_reid intel\face-reidentification-retail-0095\FP16\face-reidentification-retail-0095.xml --verbose
```