OpenVINOをRaspberryPiで利用する。

に公開

手順

1. 環境構築

OpenVINOをRaspberry Piで利用するための環境構築手順です。

# CMakeのインストール
sudo apt install cmake
# Pythonの仮想環境ツールをインストール
sudo apt-get install python3-venv
# OpenVINO用の仮想環境を作成
python3 -m venv openvino_env
# 仮想環境をアクティベート
source openvino_env/bin/activate
# pipを最新にアップグレード
python -m pip install --upgrade pip
# OpenVINOライブラリをインストール
pip install openvino
# ビルドディレクトリを作成し移動
mkdir build && cd build

次に、OpenVINOのソースコードをビルドしてインストールします。

# 必要な依存関係のインストール
sudo apt-get update
sudo apt-get install -y git cmake libusb-1.0-0-dev
# OpenVINOリポジトリをクローン
git clone https://github.com/openvinotoolkit/openvino.git
# クローンしたディレクトリに移動
cd openvino
# サブモジュールを更新
git submodule update --init --recursive
# ビルドディレクトリを作成し移動
mkdir build && cd build
# CMakeでビルド設定を行い、makeでコンパイル
cmake -DCMAKE_BUILD_TYPE=Release -DTHREADING=SEQ .. && make

2. モデルの準備と実行

OpenVINOで推論を行うためには、学習済みのモデルをOpenVINOがサポートするIR (Intermediate Representation) 形式に変換する必要があります。

モデルの変換

Model Optimizerを使用して、TensorFlow, PyTorch, ONNXなどのフレームワークで作成されたモデルをIR形式に変換します。

# 仮想環境がアクティブであることを確認
source openvino_env/bin/activate

# Model Optimizerの実行例 (例: TensorFlowモデルの場合)
# model_name.pb は変換したいモデルのパスに置き換えてください
python3 /path/to/openvino/deployment_tools/model_optimizer/mo.py \
    --input_model /path/to/your/model_name.pb \
    --output_dir /path/to/output/directory

変換が成功すると、指定した出力ディレクトリに .xml (ネットワークトポロジ) と .bin (重み) ファイルが生成されます。

推論の実行

変換したIRモデルを使用して、OpenVINO Runtimeで推論を実行します。

# 仮想環境がアクティブであることを確認
source openvino_env/bin/activate

# Pythonスクリプトで推論を実行する例
# infer_model.py は推論コードを含むスクリプトに置き換えてください
# device_name は 'CPU', 'GPU', 'MYRIAD' (NCS2の場合) などに置き換えてください
python3 infer_model.py --model /path/to/output/directory/model_name.xml --device CPU

infer_model.py の内容例:

import argparse
from openvino.runtime import Core

def main():
    parser = argparse.ArgumentParser(description="OpenVINO Inference Example")
    parser.add_argument("--model", required=True, help="Path to the .xml model file")
    parser.add_argument("--device", default="CPU", help="Specify the target device (e.g., CPU, GPU, MYRIAD)")
    args = parser.parse_args()

    # OpenVINO Runtimeの初期化
    ie = Core()

    # モデルの読み込み
    model = ie.read_model(model=args.model)

    # 指定されたデバイスにモデルをコンパイル
    compiled_model = ie.compile_model(model=model, device_name=args.device)

    # 入力と出力の情報を取得
    input_layer = compiled_model.input(0)
    output_layer = compiled_model.output(0)

    # ダミー入力データの作成 (モデルの入力形状に合わせて調整してください)
    # 例: input_layer.shape が [1, 3, 224, 224] の場合
    import numpy as np
    input_data = np.random.rand(*input_layer.shape).astype(input_layer.dtype)

    # 推論の実行
    results = compiled_model([input_data])

    print("Inference successful!")
    print(f"Output shape: {results[output_layer].shape}")
    # 必要に応じて結果を処理

if __name__ == "__main__":
    main()

参考資料


この文章はAIによって加筆・完成されました。

Discussion