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.395
、57.12
、57.375
の値を使用して同じ色の順序で分割します。このようにして、画像データを onnx モデルに必要な入力に一致させます。