画像分類のデモ (Go)

このクライアントは、Go アプリケーションから OpenVINO モデルサーバーの予測エンドポイントと対話する方法を示します。この例では、ResNet50 モデルを使用して JPEG/PNG 画像の分類を実行するエンドツーエンドのワークフローを示します。環境セットアップを簡素化するため、デモは Docker コンテナ内で実行されます。

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

git clone https://github.com/openvinotoolkit/model_server.git
cd model_server/demos/image_classification/go

モデルを取得

エンドツーエンドのフローを実行して正しい結果を得るには、resnet-50-tf モデルをダウンロードし、OpenVINO Model Zoo ページにある手順に従って IR 形式に変換してください。

変換されたモデルファイル (XML および BIN) を <PATH_TO_MODELS>/resnet-50-tf/1 に配置します。

ここで、PATH_TO_MODELS は、ホスト・ファイルシステム上のモデルが含まれるディレクトリーへのパスです。

例:

mkdir models
docker run -u $(id -u):$(id -g) -v ${PWD}/models:/models openvino/ubuntu20_dev:latest omz_downloader --name resnet-50-tf --output_dir /models
docker run -u $(id -u):$(id -g) -v ${PWD}/models:/models:rw openvino/ubuntu20_dev:latest omz_converter --name resnet-50-tf --download_dir /models --output_dir /models --precisions FP32
mv ${PWD}/models/public/resnet-50-tf/FP32 ${PWD}/models/public/resnet-50-tf/1

tree models/public/resnet-50-tf
models/public/resnet-50-tf
├── 1   ├── resnet-50-tf.bin
│   └── resnet-50-tf.xml
└── resnet_v1-50.pb

Go クライアントの docker イメージをビルド

イメージをビルドする前に、Docker ビルド・コンテキストに含まれるように、単一のゼブライメージをコピーします。クライアント・コンテナには予測を実行するサンプルがすでに含まれています。

cp ../../common/static/images/zebra.jpeg .

次に、docker イメージをビルドし、ovmsclient というタグを付けます。

docker build . -t ovmsclient

ResNet モデルで OpenVINO モデルサーバーを開始

クライアントを実行する前に、準備された ResNet モデルを使用して OVMS を起動します。次のコマンドで実行できます。

docker run -d --rm -p 9000:9000  -v ${PWD}/models/public/resnet-50-tf:/models/resnet openvino/model_server:latest --model_name resnet --model_path /models/resnet --port 9000

注: ダウンロードした resnet モデルのレイアウトは NHWC です。これにより、モデルはクライアントによって生成されたバイナリー入力を確実に受け入れることができます。この機能の詳細については、バイナリー入力のドキュメントを参照してください。

Go クライアントで予測を実行

Go クライアントを使用して OVMS によって提供されるモデルで予測を実行するには、次のコマンドを実行します。

docker run --net=host --rm ovmsclient --serving-address localhost:9000 zebra.jpeg
# exemplary output
2022/06/15 13:46:51 Request sent successfully
Predicted class: zebra
Classification confidence: 98.914299%

コマンドの説明:

  • --net=host オプションは、クライアントを含むコンテナがホスト・ネットワーク (localhost) 経由でモデルサーバーを含むコンテナにアクセスするために必要です。

  • --serving-address パラメーターは、モデルサーバーの gRPC エンドポイントのアドレスを定義します。

  • コマンドの最後の部分は、予測のため OVMS に送信される画像へのパスです。画像はコンテナの内部からアクセスできる必要があります (マウント可能)。単一のゼブラ画像 (zebra.jpeg) が docker イメージに埋め込まれているため、上記のコマンドはすぐに機能します。別の画像を使用する場合、それをコンテナに提供し、パスを変更する必要があります。

また、画像をバイナリー入力 (生の JPG または PNG バイト) として送信するか、クライアント側でモデルが受け入れるデータ配列に変換するのを選択することもできます。生のバイトを送信するには、次のように --binary-input フラグを追加するだけで済みます。

docker run --net=host --rm ovmsclient --serving-address localhost:9000 --binary-input zebra.jpeg
# exemplary output
2022/06/15 13:46:53 Request sent successfully
Predicted class: zebra
Classification confidence: 98.914299%