画像分類のデモ (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%