インスタンスのセグメント化 Python* デモ#
このデモでは、OpenVINO を使用してインスタンスのセグメント化を実行する方法を示します。
注: バッチサイズ 1 のみがサポートされます。
どのように動作するか#
デモ・アプリケーションは、次の制約のある中間表現 (IR) 形式のインスタンスのセグメント化モデルを想定しています:
例えば、
Mask RCNN
アプローチに基づくセグメント化モデル:2 つの入力: 入力画像の
im_data
と画像に関するメタ情報 (実際の高さ、幅、スケール) のim_info
。以下を含む少なくとも 4 つの出力:
boxes
- 入力画像の絶対境界ボックス座標を持つscores
- 信頼スコア付きのすべての境界ボックスclasses
- すべての境界ボックスのオブジェクト・クラス ID を含むクラスraw_masks
- すべての境界ボックスのすべてのクラスに対する固定サイズのセグメント化ヒートマップを持つ
例えば、
YOLACT
アプローチに基づくセグメント化モデル:入力画像に対する単一入力。
以下を含む少なくとも 4 つの出力:
boxes
- [0, 1] 範囲境界ボックス座標で正規化conf
- すべてのボックスに対する各クラスの信頼度スコアを含みますmask
- すべてのボックスに固定サイズのマスクチャネルを持つマスクproto
- すべてのボックスの固定サイズのセグメント化ヒートマップのプロトタイプを含みます
デモ・アプリケーションは入力として、単一の画像ファイル、ビデオファイル、またはコマンドライン引数 -i
で指定された Web カメラの数値 ID へのパスを受け入れます
デモのワークフローを次に示します:
デモ・アプリケーションは、画像/ビデオフレームを 1 枚ずつ読み取り、ネットワークの入力画像 BLOB (
im_data
) に収まるようにサイズを変更します。im_info
入力 BLOB は、ネットワークにim_info
入力がある場合、推論を実行するため前処理された画像の結果の解像度とスケールをネットワークに渡します。デモでは、結果として得られるインスタンスのセグメント化マスクを視覚化します。特定のコマンドライン・オプションは視覚化に影響します:
--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.jpg
、output_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 フレームの処理 (フレームの読み取りから結果の表示まで) に必要な平均時間。
次の各パイプライン・ステージのレイテンシー:
デコード — 入力データをキャプチャー。
前処理 — 推論のためのデータの準備。
推論 — 入力データ (画像) を推論して結果を取得。
後処理 — 出力用の推論結果を準備。
レンダリング — 出力画像を生成。
これらのメトリックを使用して、アプリケーション・レベルのパフォーマンスを測定できます。