TensorFlow モデルを変換してバイナリー入力を受け入れ#

このガイドでは、TensorFlow モデルを変換し、OpenVINO モデルサーバーでデプロイする方法を説明します。また、入力テンソルをスケーリングし、バイナリー JPEG または PNG 入力データを使用できるように調整する方法についても説明します。

  • この例では、TensorFlow モデル ResNet が使用されます。

  • TensorFlow モデルは、model_optimizer ツールを使用して中間表現形式に変換できます。TensorFlow モデルを保存するにはいくつかの形式があります。このガイドでは、SavedModel 形式からの変換について説明します。変換プロセスの詳細については、モデル・オプティマイザーのガイドを参照してください。

  • バイナリー入力形式には、モデルと ovms 構成に関していくつかの要件があります。詳細については、バイナリー入力のドキュメントを参照してください。

ステップ#

モデルの準備#

モデルをダウンロードします。

wget http://download.tensorflow.org/models/official/20181001_resnet/savedmodels/resnet_v2_fp32_savedmodel_NHWC.tar.gz
 
tar -xvzf resnet_v2_fp32_savedmodel_NHWC.tar.gz 

mv resnet_v2_fp32_savedmodel_NHWC/1538687283/ resnet_v2 rmdir resnet_v2_fp32_savedmodel_NHWC/

注: 準備ではディレクトリーの操作は必要ありませんが、ここではディレクトリーを簡略化して記載しています。

model_optimizer ツールを使用して、TensorFlow のモデルを中間表現形式に変換します:

docker run -u $(id -u):$(id -g) -v ${PWD}/resnet_v2/:/resnet openvino/ubuntu20_dev:2022.1.0 mo --saved_model_dir /resnet/ --output_dir /resnet/models/resnet/1/ --input_shape=[1,224,224,3] --mean_values=[123.68,116.78,103.94] --reverse_input_channels

注: 一部のモデルでは、--scale などの他のパラメーターが必要な場合があります。

  • --reverse_input_channels - RGB 順の画像でトレーニングされたモデルに必要です。

  • --mean_values--scale - 入力前処理操作がトポロジーの一部ではなく、前処理が入力データを提供するアプリケーションに依存する場合に指定する必要があります。これらは、変換パラメーター・ガイドで説明されているいくつかの方法で決定できます。この例では、モデルの前処理スクリプトを使用して決定しました。

モデルが他の形式で保存されている場合、TensorFlow モデルの中間表現への変換について詳しく知ることができます。

この操作により、${PWD}/resnet_v2/models/resnet/1/ フォルダーにモデルファイルが作成されます。

tree resnet_v2/models/resnet/1 
resnet_v2/models/resnet/1
 ├── saved_model.bin
 ├── saved_model.mapping
 └── saved_model.xml

OVMS のデプロイ#

最新の openvino model_server イメージを dockerhub から取得します

docker pull openvino/model_server:latest

次のコマンドを使用して OVMS をデプロイします:

docker run -d -p 9000:9000 -v ${PWD}/resnet_v2/models:/models openvino/model_server:latest --model_path /models/resnet --model_name resnet --port 9000 --layout NHWC

注: このモデルにはデフォルトで N... レイアウトがありますが、バイナリー入力機能ではモデルが NHWC または N?HWC レイアウトである必要があるため、--layout NHWC オプションを指定します。

クライアントからの推論要求の実行#

git clone https://github.com/openvinotoolkit/model_server.git 
cd model_server/client/python/ovmsclient/samples 
virtualenv .venv
..venv/bin/activate 
pip install -r requirements.txt 

python grpc_predict_binary_resnet.py --images_dir ../../../../demos/common/static/images --model_name resnet --service_url localhost:9000 

Image ../../../../demos/common/static/images/magnetic_compass.jpeg has been classified as magnetic compass 
Image ../../../../demos/common/static/images/pelican.jpeg has been classified as pelican 
Image ../../../../demos/common/static/images/gorilla.jpeg has been classified as gorilla, Gorilla gorilla 
Image ../../../../demos/common/static/images/snail.jpeg has been classified as snail 
Image ../../../../demos/common/static/images/zebra.jpeg has been classified as zebra 
Image ../../../../demos/common/static/images/arctic-fox.jpeg has been classified as Arctic fox, white fox, Alopex lagopus 
Image ../../../../demos/common/static/images/bee.jpeg has been classified as bee 
Image ../../../../demos/common/static/images/peacock.jpeg has been classified as peacock 
Image ../../../../demos/common/static/images/airliner.jpeg has been classified as airliner 
Image ../../../../demos/common/static/images/golden_retriever.jpeg has been classified as golden retriever