ONNX モデルを使用した予測の例

この手順は、IR モデル形式を使用する場合と似ています。モデルサーバーのバージョン管理は同じであり ONNX モデルも受け入れます。別のモデルのバージョン・ディレクトリーで ONNX モデルファイルを見つけます。以下は、Python 3.7 以降を使用した使用例です。この例では、パブリックの ONNX ResNet モデル、resnet50-caffe2-v1-9.onnx モデルを使用します。

このモデルには追加の前処理関数が必要です。要求を送信する前にデータを操作してクライアントで前処理を実行できます。DAG を作成し、カスタム処理ノードを使用して前処理をサーバーに委任することもできます。両方の方法については以下で説明します。

オプション 1: クライアント側に前処理を追加
オプション 2: サーバー側への前処理の追加 (DAG の構築)

オプション 1: クライアント側に前処理を追加

リポジトリーのクローンを作成し、using_onnx_model ディレクトリーに移動します。

git clone https://github.com/openvinotoolkit/model_server.git
cd model_server/demos/using_onnx_model/python

以下を実行して、モデルを含むワークスペースを準備します。

make client_preprocessing

次の内容で作成された workspace ディレクトリーが確認できます。

workspace/
└── resnet50-onnx
    └── 1
        └── resnet50-caffe2-v1-9.onnx

単一のモデル・インスタンスを使用して OVMS コンテナを起動します。

docker run -d -u $(id -u):$(id -g) -v $(pwd)/workspace:/workspace -p 9001:9001 openvino/model_server:latest \
--model_path /workspace/resnet50-onnx --model_name resnet --port 9001

Python クライアントの依存関係をインストールします。

pip3 install -r requirements.txt

onnx_model_demo.py スクリプトは、前処理を実行する場合と、実行しない場合の両方で推論を実行できます。このバリアントでは、クライアント側で前処理を実行するため、--run_preprocessing フラグを設定します。

クライアントで前処理を実行します。

python3 onnx_model_demo.py --service_url localhost:9001 --run_preprocessing
Running with preprocessing on client side
../../common/static/images/bee.jpeg (1, 3, 224, 224) ; data range: -2.117904 : 2.64
Class is with highest score: 309
Detected class name: bee

オプション 2: サーバー側への前処理の追加 (DAG の構築)

以下を実行して、モデル、前処理ノード・ライブラリー、および構成ファイルを含むワークスペースを準備します。

make server_preprocessing

次の内容で作成された workspace ディレクトリーが確認できます。

workspace/
├── config.json
├── lib
│   └── libcustom_node_image_transformation.so
└── resnet50-onnx
    └── 1
        └── resnet50-caffe2-v1-9.onnx

構成ファイルオプションを使用して OVMS コンテナを起動します。

docker run -d -u $(id -u):$(id -g) -v $(pwd)/workspace:/workspace -p 9001:9001 openvino/model_server:latest \
--config_path /workspace/config.json --port 9001

onnx_model_demo.py スクリプトは、前処理を実行する場合と、実行しない場合の両方で推論を実行できます。このバリアントでは、前処理はモデルサーバーによって (カスタムノード経由で) 行われるため、クライアント側で画像の前処理を行う必要はありません。この場合、--run_preprocessing オプションなしで実行してください。クライアントで実行される前処理関数を参照してください。

前処理なしでクライアントを実行します。

python3 onnx_model_demo.py --service_url localhost:9001
Running without preprocessing on client side
Class is with highest score: 309
Detected class name: bee

ノード・パラメーターの説明

追加の前処理ステップでは、画像内の各ピクセル値に対し分割と減算を適用します。これは、config.json画像変換カスタムノードに 2 つのパラメーターを渡すことで構成されます。

"params": {
  ...
  "mean_values": "[123.675,116.28,103.53]",
  "scale_values": "[58.395,57.12,57.375]",
  ...
}

各ピクセルに対し、カスタムノードは青の値から 123.675、緑の値から 116.28、赤の値から 103.53 を減算しました。次に、58.39557.1257.375 の値を使用して同じ色の順序で分割します。このようにして、画像データを onnx モデルに必要な入力に一致させます。