行動認識の Python* デモ¶
これは、入力ビデオ上で実行されているアクションを分類する行動認識アルゴリズムのデモ・アプリケーションです。事前トレーニングされた次のモデルが製品に付属しています。
driver-action-recognition-adas-0002-encoder
+driver-action-recognition-adas-0002-decoder
、ドライバー監視シナリオのモデル。安全な運転、電話での会話などの行動を認識しますaction-recognition-0001-encoder
+action-recognition-0001-decoder
andi3d-rgb-tf
、これは、Kinetics-400 データセットの汎用行動認識 (400 アクション) モデルです。
事前トレーニングされたモデルの詳細については、インテルおよびパブリックモデルのドキュメントを参照してください。
どのように動作するか¶
デモ・パイプラインは、データ、モデル、レンダリングという複数のステップで構成されます。すべてのステップは、PipelineStep
基本クラスから派生したクラスを作成することで PipelineStep
インターフェイスを実装します。実装の詳細については steps.py
を参照してください。
DataStep
は入力ビデオからフレームを読み取ります。-
モデルのステップはアーキテクチャーのタイプによって異なります。
-
エンコーダー/デコーダーモデルでは、次の 2 つのステップがあります。
EncoderStep
はフレームを前処理し、それをエンコーダー・モデルに供給してフレームの埋め込みを生成します。時間ウィンドウ全体のエンコーダー出力の単純な平均が適用されます。DecoderStep
は、EncoderStep
によって生成された埋め込みをデコーダーモデルにフィードし、予測を生成します。DummyDecoder
を使用するモデルでは、時間ウィンドウ全体のエンコーダー出力の単純な平均が適用されます。
実装された特定の単一モデルについては、対応する
<ModelNameStep>
が前処理を実行し、予測を生成します。
-
RenderStep
は予測結果をレンダリングします。
パイプライン・ステップは、AsyncPipeline
で構成されます。すべてのステップは、parallel=True
オプションを使用してパイプラインに追加することで、個別のスレッドで実行できます。2 つの連続するステップが個別のスレッドで実行される場合、それらはメッセージキューを介して通信します (例えば、ステップ結果の配信や停止シグナルなど)。
最大のパフォーマンスを確保するために、モデルは、循環的な順序で推論要求をスケジュールすることで、非同期推論要求 API を使用する AsyncWrapper
でラップされます (すべての新しい入力に対する推論が非同期的に開始され、最も長く動作した推論要求の結果が返されます)。action_recognition_demo.py
の num_requests
の値を変更して、推論アクセラレーターの並列ワークの推論要求の最適数を見つけることができます (インテル® ニューラル・コンピューティング・スティック・デバイスと GPU は、推論要求の数が増加すると恩恵を受けます)。
注: デフォルトでは、Open Model Zoo のデモは BGR チャンネル順序での入力を期待します。RGB 順序で動作するようにモデルをトレーニングした場合は、サンプルまたはデモ・アプリケーションでデフォルトのチャンネル順序を手動で再配置するか、
--reverse_input_channels
引数を指定したモデル・オプティマイザー・ツールを使用してモデルを再変換する必要があります。引数の詳細については、[前処理計算の埋め込み](@ref openvino_docs_MO_DG_Additional_Optimization_Use_Cases) の入力チャンネルを反転するセクションを参照してください。
実行の準備¶
デモの入力画像またはビデオファイルについては、Open Model Zoo デモの概要のデモに使用できるメディアファイルのセクションを参照してください。デモでサポートされるモデルリストは、<omz_dir>/demos/action_recognition_demo/python/models.lst
ファイルにあります。このファイルは、モデル・ダウンローダーおよびコンバーターのパラメーターとして使用され、モデルをダウンロードし、必要に応じて OpenVINO IR 形式 (*.xml + *.bin) に変換できます。
モデル・ダウンローダーの使用例:
omz_downloader --list models.lst
モデル・コンバーターの使用例:
omz_converter --list models.lst
サポートされるモデル¶
-
architecture_type = en-de
action-recognition-0001-decoder
action-recognition-0001-encoder
driver-action-recognition-adas-0002-decoder
driver-action-recognition-adas-0002-encoder
-
architecture_type = en-mean
weld-porosity-detection-0001
-
architecture_type = i3d-rgb
i3d-rgb-tf
注: 各種デバイス向けのモデル推論サポートの詳細については、インテルの事前トレーニング・モデルのデバイスサポートとパブリックの事前トレーニング・モデルのデバイスサポートの表を参照してください。
実行¶
-h
オプションを指定してアプリケーションを実行すると、使用方法が表示されます。
usage: action_recognition_demo.py [-h] -i INPUT [--loop] [-o OUTPUT] [-limit OUTPUT_LIMIT] -at {en-de,en-mean,i3d-rgb} -m_en M_ENCODER [-m_de M_DECODER | --seq DECODER_SEQ_SIZE] [-d DEVICE] [-lb LABELS] [--no_show] [-s LABEL_SMOOTHING]
[-u UTILIZATION_MONITORS] [-r]
Options:
-h, --help Show this help message and exit.
-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.
--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.
-at {en-de,en-mean,i3d-rgb}, --architecture_type {en-de,en-mean,i3d-rgb}
Required. Specify architecture type.
-m_en M_ENCODER, --m_encoder M_ENCODER
Required. Path to encoder model.
-m_de M_DECODER, --m_decoder M_DECODER
Optional. Path to decoder model. Only for -at en-de.
--seq DECODER_SEQ_SIZE
Optional. Length of sequence that decoder takes as input.
-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
-lb LABELS, --labels LABELS
Optional. Path to file with label names.
--no_show Optional. Don't show output.
-s LABEL_SMOOTHING, --smooth LABEL_SMOOTHING
Optional. Number of frames used for output label smoothing.
-u UTILIZATION_MONITORS, --utilization-monitors UTILIZATION_MONITORS
Optional. List of monitors to show initially.
-r, --raw_output_message
Optional. Output inference results raw values showing.
空のオプションリストを指定してアプリケーションを実行すると、上記の使用法メッセージとエラーメッセージが表示されます。
例えば、車内のドライバー監視シナリオのデモを実行するには、デモフォルダー <omz_dir>/demos/action_recognition_demo/python/driver_actions.txt
にあるエンコーダーとデコーダーモデル、入力ビデオ、およびラベル名のファイルへのパスを指定します。
python3 action_recognition_demo.py \
-m_en <path_to_model>/driver-action-recognition-adas-0002-encoder.xml \
-m_de <path_to_model>/driver-action-recognition-adas-0002-decoder.xml \
-at en-de \
-i <path_to_video>/inputVideo.mp4 \
-lb <omz_idr>/demos/action_recognition_demo/python/driver_actions.txt
注: 単一の画像を入力として指定すると、デモはすぐに処理してレンダリングし終了します。推論結果を画面上で継続的に視覚化するには、
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
オプションを使用して出力ファイルに保存されるデータの量を制限できます。The default value is 1000.これを変更するには、-limit N
オプションを適用します。ここで、N
は保存するフレームの数です。
注: Windows* システムには、デフォルトでは Motion JPEG コーデックがインストールされていない場合があります。この場合、OpenVINO ™ インストール・パッケージに付属する、
<INSTALL_DIR>/opencv/ffmpeg-download.ps1
にある PowerShell スクリプトを使用して OpenCV FFMPEG バックエンドをダウンロードできます。OpenVINO ™ がシステムで保護されたフォルダーにインストールされている場合 (一般的なケース)、スクリプトは管理者権限で実行する必要があります。あるいは、結果を画像として保存することもできます。
デモの出力¶
このアプリケーションは OpenCV を使用して、リアルタイムの行動認識結果と推論パフォーマンス (FPS) を表示します。