インスタンスのセグメント化 Python* デモ

example

このデモでは、OpenVINO を使用してインスタンスのセグメント化を実行する方法を示します。

注: バッチサイズ 1 のみがサポートされます。

どのように動作するか

デモ・アプリケーションは、次の制約のある中間表現 (IR) 形式のインスタンスのセグメント化モデルを想定しています。

  1. 例えば、Mask RCNN アプローチに基づくセグメント化モデル:

    • 2 つの入力: 入力画像の im_data と画像に関するメタ情報 (実際の高さ、幅、スケール) の im_info

    • 以下を含む少なくとも 4 つの出力:

      • boxes 入力画像の絶対境界ボックス座標を使用

      • scores 信頼スコア付きのすべての境界ボックス

      • classes すべての境界ボックスのオブジェクト・クラス ID を含む

      • raw_masks すべての境界ボックスのすべてのクラスに対する固定サイズのセグメント化ヒートマップを使用

  2. 例えば、YOLACT アプローチに基づくセグメント化モデル:

    • 入力画像に対する単一入力。

    • 以下を含む少なくとも 4 つの出力:

      • boxes [0, 1] 範囲境界ボックス座標で正規化

      • conf すべてのボックスに対する各クラスの信頼度スコア付き

      • mask すべてのボックスに固定サイズのマスクチャネルを使用。

      • proto すべてのボックスの固定サイズのセグメント化ヒートマップのプロトタイプを使用。

デモ・アプリケーションは入力として、単一の画像ファイル、ビデオファイル、またはコマンドライン引数で指定された Web カメラの数値 ID へのパスを受け入れます -i

デモのワークフローは次のとおりです。

  1. デモ・アプリケーションは、画像/ビデオフレームを 1 枚ずつ読み取り、ネットワークの入力画像 BLOB (im_data) に収まるようにサイズを変更します。

  2. im_info 入力 BLOB は、ネットワークに im_info 入力がある場合、推論を実行するため前処理された画像の結果の解像度とスケールをネットワークに渡します。

  3. デモでは、結果として得られるインスタンスのセグメント化マスクを視覚化します。特定のコマンドライン・オプションは視覚化に影響します。

    • --show_boxes および --show_scores 引数を指定すると、境界ボックスと信頼スコアも表示されます。

    • デフォルトでは、ビデオ全体を通じてオブジェクト・インスタンスを同じ色で表示するためトラッキングが使用されます。マスクの結合上の交差が 0.5 のしきい値より大きい場合、2 つのフレーム内のインスタンスが同じトラックの一部である静的なシーンを想定します。トラックを無効にするには、--no_track 引数を指定します。

注: デフォルトでは、Open Model Zoo のデモは BGR チャネル順序での入力を期待します。RGB 順序で動作するようにモデルをトレーニングした場合は、サンプルまたはデモ・アプリケーションでデフォルトのチャネル順序を手動で再配置するか、--reverse_input_channels 引数を指定したモデル・オプティマイザー・ツールを使用してモデルを再変換する必要があります。引数の詳細については、[前処理計算の埋め込み](@ref openvino_docs_MO_DG_Additional_Optimization_Use_Cases) の入力チャネルを反転するセクションを参照してください。

モデル API

このデモでは、Python* モデル API のモデルラッパー、アダプター、パイプラインを利用します。

統一された結果表現を備えたラッパーの汎用インターフェイスにより、1 つのデモで複数の異なるインスタンスのセグメント化トポロジーがサポートされます。

実行の準備

デモの入力画像またはビデオファイルについては、Open Model Zoo デモの概要デモに使用できるメディアファイルのセクションを参照してください。デモでサポートされるモデルリストは、<omz_dir>/demos/instance_segmentation_demo/python/models.lst ファイルにあります。このファイルは、モデル・ダウンローダーおよびコンバーターのパラメーターとして使用され、モデルをダウンロードし、必要に応じて OpenVINO IR 形式 (*.xml + *.bin) に変換できます。

モデル・ダウンローダーの使用例:

omz_downloader --list models.lst

モデル・コンバーターの使用例:

omz_converter --list models.lst

サポートされるモデル

  • instance-segmentation-person-0007

  • instance-segmentation-security-0002

  • instance-segmentation-security-0091

  • instance-segmentation-security-0228

  • instance-segmentation-security-1039

  • instance-segmentation-security-1040

  • yolact-resnet50-fpn-pytorch

注: 各種デバイス向けのモデル推論サポートの詳細については、インテルの事前トレーニング・モデルのデバイスサポートパブリックの事前トレーニング・モデルのデバイスサポートの表を参照してください。

実行中

-h オプションを指定してデモを実行すると、ヘルプメッセージが表示されます。

usage: instance_segmentation_demo.py [-h] -m MODEL [--adapter {openvino,ovms}] -i INPUT [-d DEVICE] --labels LABELS [-t PROB_THRESHOLD] [--no_track] [--show_scores]
                                    [--show_boxes] [--layout LAYOUT] [-nireq NUM_INFER_REQUESTS] [-nstreams NUM_STREAMS] [-nthreads NUM_THREADS] [--loop] [-o OUTPUT]
                                    [-limit OUTPUT_LIMIT] [--no_show] [--output_resolution OUTPUT_RESOLUTION] [-u UTILIZATION_MONITORS] [-r]

optional arguments:
                                    -h, --help            show this help message and exitz

Options:
                                    -m MODEL, --model MODEL
                                    Required. Path to an .xml file with a trained model or address of model inference service if using ovms adapter.
                                    --adapter {openvino,ovms}
                                    Optional. Specify the model adapter. Default is openvino.
                                    -i INPUT, --input INPUT
                                    Required. An input to process. The input must be a single image, a folder of images, video file or camera id.
                                    -d DEVICE, --device DEVICE
                                    Optional. Specify the target device to infer on; CPU or GPU is acceptable. The demo will look for a suitable plugin for device
                                    specified. Default value is CPU.

Common model options:
                                    --labels LABELS       Required. Path to a text file with class labels.
                                    -t PROB_THRESHOLD, --prob_threshold PROB_THRESHOLD
                                    Optional. Probability threshold for detections filtering.
                                    --no_track            Optional. Disable object tracking for video/camera input.
                                    --show_scores         Optional. Show detection scores.
                                    --show_boxes          Optional. Show bounding boxes.
                                    --layout LAYOUT       Optional. Model inputs layouts. Format "[<layout>]" or "<input1>[<layout1>],<input2>[<layout2>]" in case of more than one input. To define
                                    layout you should use only capital letters

Inference options:
                                    -nireq NUM_INFER_REQUESTS, --num_infer_requests NUM_INFER_REQUESTS
                                    Optional. Number of infer requests
                                    -nstreams NUM_STREAMS, --num_streams NUM_STREAMS
                                    Optional. Number of streams to use for inference on the CPU or/and GPU in throughput mode (for HETERO and MULTI device cases use format
                                    <device1>:<nstreams1>,<device2>:<nstreams2> or just <nstreams>).
                                    -nthreads NUM_THREADS, --num_threads NUM_THREADS
                                    Optional. Number of threads to use for inference on CPU (including HETERO cases).

Input/output options:
                                    --loop                Optional. Enable reading the input in a loop.
                                    -o OUTPUT, --output OUTPUT
                                    Optional. Name of the output file(s) to save. Frames of odd width or height can be truncated. See https://github.com/opencv/opencv/pull/24086
                                    -limit OUTPUT_LIMIT, --output_limit OUTPUT_LIMIT
                                    Optional. Number of frames to store in output. If 0 is set, all frames are stored.
                                    --no_show             Optional. Don't show output.
                                    --output_resolution OUTPUT_RESOLUTION
                                    Optional. Specify the maximum output window resolution in (width x height) format. Example: 1280x720. Input frame size used by default.
                                    -u UTILIZATION_MONITORS, --utilization_monitors UTILIZATION_MONITORS
                                    Optional. List of monitors to show initially.

Debug options:
                                    -r, --raw_output_message
                                    Optional. Output inference results raw values showing.

デモを実行するには、IR 形式のモデル、クラスラベル付きのファイル、および入力ビデオ、画像、または画像が含まれるフォルダーへのパスを指定してください。

python3 instance_segmentation_demo/instance_segmentation_demo.py \
    -m <path_to_model>/instance-segmentation-security-0228.xml \
    --label <omz_dir>/data/dataset_classes/coco_80cl_bkgr.txt \
    -i 0

注: 単一の画像を入力として指定すると、デモはすぐに処理してレンダリングし終了します。推論結果を画面上で継続的に視覚化するには、loop オプションを適用します。これにより、単一の画像がループで処理されます。

-o オプションを使用すると、処理結果を Motion JPEG AVI ファイル、または別の JPEG または PNG ファイルに保存できます。

  • 処理結果を AVI ファイルに保存するには、avi 拡張子を付けた出力ファイル名を指定します (例: -o output.avi)。

  • 処理結果を画像として保存するには、出力画像ファイルのテンプレート名を拡張子 jpg または png で指定します (例: -o output_%03d.jpg)。実際のファイル名は、実行時に正規表現 %03d をフレーム番号に置き換えることによってテンプレートから構築され、output_000.jpgoutput_001.jpg などになります。カメラなど連続入力ストリームでディスク領域のオーバーランを避けるため、limit オプションを使用して出力ファイルに保存されるデータの量を制限できます。デフォルト値は 1000 です。これを変更するには、-limit N オプションを適用します。ここで、N は保存するフレームの数です。

注: Windows* システムには、デフォルトでは Motion JPEG コーデックがインストールされていない場合があります。この場合、OpenVINO ™ インストール・パッケージに付属する、<INSTALL_DIR>/opencv/ffmpeg-download.ps1 にある PowerShell スクリプトを使用して OpenCV FFMPEG バックエンドをダウンロードできます。OpenVINO ™ がシステムで保護されたフォルダーにインストールされている場合 (一般的なケース)、スクリプトは管理者権限で実行する必要があります。あるいは、結果を画像として保存することもできます。

OpenVINO モデルサーバーの実行

OpenVINO モデルサーバーで提供されるモデルを使用してデモを実行することもできます。OVMS を使用したデモの実行については、OVMSAdapter を参照してください。

コマンド例:

python3 instance_segmentation_demo/instance_segmentation_demo.py \
    -m localhost:9000/models/instance_segmentation \
    --label <omz_dir>/data/dataset_classes/coco_80cl_bkgr.txt \
    -i 0
    --adapter ovms

デモの出力

アプリケーションは OpenCV を使用して、結果として得られるインスタンスのセグメント化マスクを表示します。デモレポート

  • FPS: ビデオフレーム処理の平均レート (1 秒あたりのフレーム数)。

  • レイテンシー: 1 フレームの処理 (フレームの読み取りから結果の表示まで) に必要な平均時間。

  • 次の各パイプライン・ステージのレイテンシー:

    • デコード — 入力データをキャプチャー。

    • 前処理 — 推論のためのデータの準備。

    • 推論 — 入力データ (画像) を推論して結果を取得。

    • 後処理 — 出力用の推論結果を準備。

    • レンダリング — 出力画像を生成。

これらのメトリックを使用して、アプリケーション・レベルのパフォーマンスを測定できます。