車両分析パイプラインのデモ

このドキュメントでは、OpenVINO Model Zoo のオブジェクト検出モデルと認識モデルを使用して複雑なパイプラインを作成する方法を説明します。例として、vehicle-detection-0202 を使用して画像上の複数の車両を検出します。次に、検出された車両ごとに、model_zoo_intel_object_detection サンプルのカスタムノードを使用してトリミングを行います。最後に、各車両画像は vehicle-attributes-recognition-barrier-0042 モデルに転送されます。

Vehicles analysis visualization

このようなパイプラインを使用すると、OVMS への 1 つの要求で複雑な操作を実行して、すべての車両とそのプロパティーを決定できます。

パイプライン構成グラフ

以下に、車両分析パイプラインの実行を実装したグラフを示します。

Vehicles Analysis Pipeline Graph

これには次のノードが含まれます。

  • モデル vehicle_detection - ユーザー画像を入力として受け取るディープラーニング・モデルです。出力には、車両の座標と信頼レベルに関する情報が含まれます。

  • カスタムノード model_zoo_intel_object_detection - 一般的なオブジェクト検出モデルの結果を処理する C++ 実装が含まれています。出力を分析することで、構成可能なスコアレベルのしきい値に基づいてトリミングされた車両画像が生成されます。カスタムノードは、ターゲット解像度に合わせてサイズを変更し、動的なバッチサイズの単一の出力に結合します。出力バッチサイズは、設定された基準に従って検出されたボックス数によって決定されます。画像に対するすべての操作には、OVMS にプリインストールされている OpenCV ライブラリーが使用されます。model_zoo_intel_object_detection custom node についてさらに詳しく

  • demultiplexer - カスタムノード model_zoo_intel_object_detection からの出力には可変のバッチサイズがあります。逐次認識モデルと照合するため、データは各バッチサイズが 1 に等しい個々の画像に分割されます。このような小さな要求は、次のモデルノードと並行して推論するために送信できます。demultiplexing についてさらに詳しく

  • vehicle_attributes_recognition モデル - このモデルは、指定された車両画像の種類と色を認識します。

  • 応答 - パイプライン全体の出力は、認識された車両画像とそのメタデータ (座標、タイプ、色、検出信頼レベル) を組み合わせます。

デモを実行するためのワークスペースの準備

顔分析パイプラインを正常にデプロイするには、以下を含むワークスペースが必要です。

  • 推論用のディープラーニング・モデル

  • 画像処理用のカスタムノード

  • 構成ファイル

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

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

make コマンドを実行するだけで、上記のすべてを含むワークスペースを準備できます。このデモで使用されるカスタムノードは OpenVINO モデルサーバーのイメージに含まれているため、イメージからカスタムノードを使用するか、カスタムノードをビルドすることができます。

このデモを実行して、コンパイル済みのカスタムノードを使用する場合、次を実行します。

make

ディレクトリー構造 (カスタムノードなし)

make が完了すると、次の内容を含む workspace ディレクトリーが準備されているはずです。

workspace
├── config.json
├── vehicle-attributes-recognition-barrier-0042
│   └── 1       ├── vehicle-attributes-recognition-barrier-0042.bin
│       └── vehicle-attributes-recognition-barrier-0042.xml
└── vehicle-detection-0202
    └── 1
        ├── vehicle-detection-0202.bin
        └── vehicle-detection-0202.xml

カスタムノードを変更した場合、またはその他の理由で、カスタムノードをコンパイルしてコンテナにアタッチしたい場合は、次を実行します。

make BUILD_CUSTOM_NODE=true BASE_OS=ubuntu

ディレクトリー構造 (カスタムノードあり)

make が完了すると、次の内容を含む workspace ディレクトリーが準備されているはずです。

workspace
├── config.json
├── lib
│   └── libcustom_node_model_zoo_intel_object_detection.so
├── vehicle-attributes-recognition-barrier-0042
│   └── 1       ├── vehicle-attributes-recognition-barrier-0042.bin
│       └── vehicle-attributes-recognition-barrier-0042.xml
└── vehicle-detection-0202
    └── 1
        ├── vehicle-detection-0202.bin
        └── vehicle-detection-0202.xml

OVMS のデプロイメント

次のコマンドを使用して、車両分析パイプラインを備えた OVMS をデプロイします。

docker run -p 9000:9000 -d -v ${PWD}/workspace:/workspace openvino/model_server --config_path /workspace/config.json --port 9000

サービスの要求

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

pip3 install -r requirements.txt

これで、テキスト画像用のディレクトリーを作成し、クライアントを実行できるようになりました。

mkdir results
python3 vehicles_analysis_pipeline.py --pipeline_name multiple_vehicle_recognition --grpc_port 9000 --image_input_path ../../common/static/images/cars/road1.jpg --vehicle_images_output_name vehicle_images --vehicle_images_save_path ./results --image_width 512 --image_height 512 --input_image_layout NHWC
Output: name[types]
    numpy => shape[(37, 1, 4)] data[float32]
Output: name[vehicle_coordinates]
    numpy => shape[(37, 1, 4)] data[float32]
Output: name[colors]
    numpy => shape[(37, 1, 7)] data[float32]
Output: name[confidence_levels]
    numpy => shape[(37, 1, 1)] data[float32]
Output: name[vehicle_images]
    numpy => shape[(37, 1, 72, 72, 3)] data[float32]

Found 37 vehicles:
0 Type: van Color: gray
1 Type: car Color: gray
2 Type: car Color: black
3 Type: car Color: white
4 Type: car Color: black
5 Type: truck Color: red
6 Type: truck Color: gray
7 Type: car Color: white
8 Type: car Color: blue
9 Type: car Color: red
10 Type: car Color: yellow
11 Type: car Color: gray
12 Type: van Color: gray
13 Type: car Color: gray
14 Type: car Color: red
15 Type: truck Color: gray
16 Type: truck Color: red
17 Type: car Color: red
18 Type: car Color: gray
19 Type: car Color: black
20 Type: truck Color: gray
21 Type: car Color: red
22 Type: truck Color: blue
23 Type: truck Color: red
24 Type: car Color: gray
25 Type: truck Color: red
26 Type: car Color: black
27 Type: truck Color: gray
28 Type: truck Color: blue
29 Type: truck Color: gray
30 Type: car Color: gray
31 Type: car Color: white
32 Type: car Color: yellow
33 Type: car Color: red
34 Type: truck Color: gray
35 Type: truck Color: gray
36 Type: car Color: red

--vehicle_images_save_path パラメーターを追加すると、クライアント・スクリプトは、検出されたすべての車両画像を jpeg ファイルとしてディレクトリー・パスに保存し、画像が正しく分析されたかどうか確認します。