背景差分 Python* デモ#

例

このデモでは、OpenVINO を使用して背景差分を実行する方法を示します。

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

どのように動作するか#

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

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

    • 1 つの入力: 入力画像用の image

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

      • boxes - 入力画像の絶対境界ボックス座標とそのスコアを持つ

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

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

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

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

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

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

      • conf - すべてのボックスに対する各クラスの信頼度スコアを含みます

      • mask - すべてのボックスに固定サイズのマスクチャネルを持つマスク

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

  3. 画像背景マットモデルの場合:

    • 2 つの入力:

      • src - 画像を入力

      • bgr - 実際の背景を入力

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

      • [0, 1] 範囲の前景で正規化された fgr

      • [0, 1] 範囲のアルファで正規化された pha

  4. トライマップ (背景セグメント化) を使用しない画像背景マットモデルの場合:

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

    • [0, 1] 範囲のアルファで正規化された単一出力

  5. RNN アーキテクチャーに基づくビデオ背景マットモデルの場合:

    • 5 つの入力:

      • src - 画像を入力

      • 反復入力: r1r2r3r4

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

      • [0, 1] 範囲の前景で正規化された fgr

      • [0, 1] 範囲のアルファで正規化された pha

      • 反復出力: rr1rr2rr3rr4

デモの使用例は、前景 (人物) のみを表示し、背景を非表示または置き換える必要があるオンライン会議です。これに基づいて、インスタンスのセグメント化モデルは、少なくとも人物クラスに対してトレーニングを行う必要があります。

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

: 画像の背景マットモデルを使用する場合は、--background 引数を指定する必要があります。これは、入力フレーム上の人物の背後にある実際の背景に等しい背景画像であり、入力画像と同じ形状を持つ必要があります。

デモのワークフローを次に示します:

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

  2. デモでは、結果として得られる背景の減算を視覚化します。特定のコマンドライン・オプションは視覚化に影響します:

    • --target_bgr を指定すると、背景が選択した画像またはビデオに置き換えられます。デフォルトでは、背景は緑色のフィールドに置き換えられます。

    • --blur_bgr を指定すると、設定値に応じて背景をぼかします。デフォルトではゼロであるため、適用されません。

    • --show_with_original_frame を指定すると、結果画像が入力画像とマージされます。

: デフォルトでは、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

サポートされるモデル#

  • background-matting-mobilenetv2

  • instance-segmentation-person-????

  • modnet-photographic-portrait-matting

  • modnet-webcam-portrait-matting

  • robust-video-matting-mobilenetv3

  • yolact-resnet50-fpn-pytorch

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

実行する#

-h オプションを指定してアプリケーションを実行すると、使用方法が表示されます:

usage: background_subtraction_demo.py [-h] -m MODEL [--adapter {openvino,ovms}] -i INPUT [-d DEVICE] [-t PROB_THRESHOLD] [--resize_type {crop,standard,fit_to_window,fit_to_window_letterbox}] [--labels LABELS] [--target_bgr TARGET_BGR] 
                                      [--background BACKGROUND] [--blur_bgr BLUR_BGR] [--layout LAYOUT] [-nireq NUM_INFER_REQUESTS] [-nstreams NUM_STREAMS] [-nthreads NUM_THREADS] [--loop] [-o OUTPUT] [-limit OUTPUT_LIMIT] [--no_show] 
                                      [--show_with_original_frame] [--output_resolution OUTPUT_RESOLUTION] [-u UTILIZATION_MONITORS] [-r] 

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.
    --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 a device to infer on (the list of available devices is shown below).Use '-d HETERO:<comma-separated_devices_list>' format to specify HETERO plugin.Use '-d MULTI:<comma-separated_devices_list>’ 
                        format to specify MULTI plugin.Default is CPU 
    -t PROB_THRESHOLD, --prob_threshold PROB_THRESHOLD 
                        Optional. Probability threshold for detections filtering.
    --resize_type {crop,standard,fit_to_window,fit_to_window_letterbox} 
                        Optional. A resize type for model preprocess. By default used model predefined type.
    --labels LABELS     Optional. Labels mapping file.
    --target_bgr TARGET_BGR 
                        Optional. Background onto which to composite the output (by default to green field).
    --background BACKGROUND 
                        Optional. Background image for background-matting model. This is a background image that equal to a real background behind a person on an input frame and must have the same shape as an input image.
    --blur_bgr BLUR_BGR Optional. Background blur strength (by default with value 0 is not applied).
    --layout LAYOUT     Optional.Model inputs layouts.Ex.NCHW or input0:NCHW,input1:NC in case of more than one input.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.
    --show_with_original_frame 
                        Optional. Merge the result frame with the original one.
    --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 as mask histogram.

オプションの空のリストを指定してアプリケーションを実行すると、短い使用法メッセージとエラーメッセージが表示されます。

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

python3 background_subtraction_demo/python/background_subtraction_demo.py \ 
    -m <path_to_model>/instance-segmentation-person-0007.xml \ 
    -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 background_subtraction_demo/python/background_subtraction_demo.py \ 
    -m localhost:9000/models/background_subtraction \ 
    -i 0 \ 
    --adapter ovms

デモの出力#

アプリケーションは OpenCV を使用して、結果の画像を表示します。デモレポート

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

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

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

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

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

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

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

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

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

関連情報#