画像のセグメント化 Python* デモ¶
ここでは、セマンティック・セグメント化ネットワークを使用して推論を行うイメージセグメント化デモ・アプリケーションを実行する方法を示します。
注: このトピックでは、画像セグメント化デモの Python* 実装の使用法について説明します。C++ の実装については、画像のセグメント化 C++ デモを参照してください。
どのように動作するか¶
起動時に、デモ・アプリケーションはコマンドライン・パラメーターを受け取り、モデルを OpenVINO™ ランタイムプラグインにロードします。デモでは推論が実行され、入力からキャプチャーされた各画像の結果が表示されます。デモでは、クラスの色へのデフォルトのマッピングが提供され、オプションで --colors
引数を使用して、単純なテキストファイルから色へのクラスのマッピングを指定できます。同時に処理する推論要求の数 (-nireq パラメーター) に応じて、パイプラインは各単一イメージの処理に必要な時間を最小限に抑えるか (nireq 1 の場合)、デバイスの使用率と全体的な処理パフォーマンスを最大化します。
注: デフォルトでは、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/segmentation_demo/python/models.lst
ファイルにあります。このファイルは、モデル・ダウンローダーおよびコンバーターのパラメーターとして使用され、モデルをダウンロードし、必要に応じて OpenVINO IR 形式 (*.xml + *.bin) に変換できます。
モデル・ダウンローダーの使用例:
omz_downloader --list models.lst
モデル・コンバーターの使用例:
omz_converter --list models.lst
サポートされるモデル¶
-
architecture_type = segmentation
deeplabv3
drn-d-38
erfnet
fastseg-large
fastseg-small
hrnet-v2-c1-segmentation
icnet-camvid-ava-0001
icnet-camvid-ava-sparse-30-0001
icnet-camvid-ava-sparse-60-0001
pspnet-pytorch
road-segmentation-adas-0001
semantic-segmentation-adas-0001
unet-camvid-onnx-0001
-
architecture_type = salient_object_detection
f3net
注: 各種デバイス向けのモデル推論サポートの詳細については、インテルの事前トレーニング・モデルのデバイスサポートとパブリックの事前トレーニング・モデルのデバイスサポートの表を参照してください。
注: 結果は、背景のセグメント化と屋外カメラの画像のセグメント化に使用されるモデルによって大きく異なる場合があります。
実行¶
-h
オプションを指定してアプリケーションを実行すると、使用方法が表示されます。
usage: segmentation_demo.py [-h] -m MODEL -i INPUT
[-at {segmentation,salient_object_detection}]
[--adapter {openvino,ovms}] [-d DEVICE] [-c COLORS]
[-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]
Options:
-h, --help Show this help message and exit.
-m MODEL, --model MODEL
Required. Path to an .xml file with a trained model or
address of model inference service if using OVMS adapter.
-at {segmentation, salient_object_detection}, --architecture_type {segmentation, salient_object_detection}
Required. Specify model's architecture type.
-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.
--adapter {openvino,ovms}
Optional. Specify the model adapter. Default is
openvino.
-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:
-c COLORS, --colors COLORS
Optional. Path to a text file containing colors for
classes.
--labels LABELS Optional. Labels mapping file.
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.
--only_masks Optional. Display only masks. Could be switched by TAB key.
Debug options:
-r, --raw_output_message
Optional. Output inference results as mask histogram.
オプションの空のリストを指定してアプリケーションを実行すると、上記の使用法メッセージとエラー・メッセージが表示されます。
次のコマンドを使用すると、事前トレーニングされたネットワークを使用してカメラでキャプチャーされた画像に対して CPU で推論を行うことができます。
python3 segmentation_demo.py -d CPU -i 0 -at segmentation -m <path_to_model>/semantic-segmentation-adas-0001.xml
注: 単一の画像を入力として指定すると、デモはすぐに処理してレンダリングし終了します。推論結果を画面上で継続的に視覚化するには、
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 ™ がシステムで保護されたフォルダーにインストールされている場合 (一般的なケース)、スクリプトは管理者権限で実行する必要があります。あるいは、結果を画像として保存することもできます。
カラーパレット¶
カラーパレットは、予測されたクラスを視覚化するために使用されます。デフォルトでは、PASCAL VOC データセットのカラーが適用されます。出力クラスの数が PASCAL VOC データセットで提供されるクラスの数よりも多い場合、残りのクラスはランダムに色付けされます。また、CAMVID などの他のデータセットで事前定義されたカラーを使用することもできます。
利用可能なカラーファイルは、<omz_dir>/data/palettes
フォルダーにあります。クラスにカスタムカラーを割り当てる場合、各行に (R, G, B)
形式の色が含まれる .txt
ファイルを作成する必要があります。デモ・アプリケーションは、各ラインの番号をデータセット・クラス識別子として扱い、このクラスに属するピクセルに指定された色を適用します。
OpenVINO モデルサーバーの実行¶
OpenVINO モデルサーバーで提供されるモデルを使用してデモを実行することもできます。OVMS を使用したデモの実行については、OVMSAdapter
を参照してください。
コマンド例:
python3 segmentation_demo.py -i 0 -at segmentation -m localhost:9000/models/image_segmentation --adapter ovms
デモの出力¶
デモでは OpenCV を使用して、デフォルトでブレンドされたセグメント化マスクを使用して結果の画像を表示します。--only_mask
オプションを設定する (またはデモの実行中に TAB
キーを押す) と、結果のイメージにはマスクのみが含まれます。
注: 出力ファイルには、表示されている画像と同じ画像が含まれます。
デモレポート
FPS: ビデオフレーム処理の平均レート (1 秒あたりのフレーム数)。
レイテンシー: 1 フレームの処理 (フレームの読み取りから結果の表示まで) に必要な平均時間。
-
次の各パイプライン・ステージのレイテンシー:
デコード — 入力データをキャプチャー。
前処理 — 推論のためのデータの準備。
推論 — 入力データ (画像) を推論して結果を取得。
後処理 — 出力用の推論結果を準備。
レンダリング — 出力画像を生成。
これらのメトリックを使用して、アプリケーション・レベルのパフォーマンスを測定できます。