Intel DL Streamer からの移行¶
このガイドでは、DL Streamer のパイプラインをこのフレームワークに対応付けます。パイプラインの構造は同じです(GStreamer の要素、GstAnalytics のメタデータ、トラッキング/変換/送信用の gva*)。変わるのは推論とメモリモデルです。推論は MIGraphX を通して AMD GPU 上で実行し、メモリモデルではデコーダーからエンコーダーまでフレームを GPU 上に保持します。
共通点¶
- 通常の GStreamer です。
gst-launch-1.0、gst_parse_launch、bin、caps ネゴシエーションをそのまま使えます。 - メタデータは標準の
GstAnalyticsリレーションメタデータ(物体検出、分類、トラッキング、キーポイント/グループのメタデータ)として格納するため、下流の要素や独自のプローブから同じ方法で読み取れます。 gvatrack、gvametaconvert、gvametapublish、gvastreammux、gvastreamdemux、gvametaaggregateは DL Streamer v2026.2.0 のソースをthird_party/dlstreamerに同梱したもので、既定でビルドします(AMDVA_BUILD_GVA_COMPAT)。要素名とプロパティ名は変わりません。inference-region、model-instance-id、batch-size、inference-interval、batch-timeoutのようなプロパティは、DL Streamer と同じ意味を持ちます。
要素の対応表¶
| DL Streamer | このフレームワーク | 備考 |
|---|---|---|
gvadetect |
amddetect |
YOLOv8 系(検出、インスタンスセグメンテーション、姿勢推定)。OpenVINO IR と model-proc には対応しません。 |
gvaclassify |
amdclassify |
既定値は inference-region=roi-list で、上流の検出器が出力したボックスを分類します。 |
gvainference |
amdinference |
フレーム全体が対象です。セマンティックセグメンテーションと生の GPU テンソル(task_type=raw)にも対応します。 |
gvatrack |
gvatrack(同梱) |
tracking-type=short-term-imageless または zero-term-imageless を使ってください。画像ベースのトラッカーはフレームを CPU にマップするため、有効にしていません。 |
gvawatermark |
amdwatermark |
GPU のオーバーレイです。入力は VAMemory NV12、出力は BGRA DMA-BUF です。圧縮出力を得るには後段に amdencode を置きます。 |
gvapython |
amdpython |
メタデータだけを受け取る process(frame_dict) コールバックです。画素や VideoFrame にはアクセスできません。 |
gvametaconvert |
gvametaconvert(同梱)、または amdpython/amdmetapublish の JSON |
|
gvametapublish |
gvametapublish(同梱)または amdmetapublish |
amdmetapublish は上限付きで、映像を止めることはありません。メタデータを参照してください。 |
gvastreammux / gvastreamdemux |
同じ(同梱) | output-mode=container では、ソースごとの caps とメモリをそのまま保持します。 |
gvametaaggregate |
同じ(同梱) | AMD の GPU ペイロードを統合するようにパッチを当てています(amd-analytics-merge)。 |
gvafpscounter、gvafpsthrottle、gvaattachroi、gvaanalytics |
含まれません | identity/fpsdisplaysink を使うか、メタデータを扱うアプリケーションのコードで対応してください。 |
vah264enc(GStreamer) |
amdencode |
BGRA DMA-BUF の入力と BT.709 の通知を追加します。エンコードと配信を参照してください。 |
プロパティ¶
gvadetect / gvaclassify / gvainference¶
| DL Streamer のプロパティ | 対応する amd* のプロパティ |
|---|---|
model(OpenVINO IR .xml) |
model(amdva-compile-model でコンパイルした MIGraphX .mxr) |
model-proc |
model-info(JSON。model-info を参照) |
device=GPU / CPU / NPU |
device は HIP デバイス番号です(既定値 0)。CPU や NPU へのフォールバックはありません |
batch-size |
batch-size(コンパイル時のバッチサイズと一致させる必要があります。1-16) |
inference-interval |
inference-interval |
threshold |
confidence-threshold(検出)と nms-threshold |
inference-region |
inference-region(full-frame または roi-list) |
model-instance-id |
model-instance-id(要素間で実行器を共有) |
pre-process-backend |
なし。前処理は常に VA video processor と HIP で行い、require-zero-copy=true です |
nireq、ie-config、cpu-throughput-streams |
なし。batch-size と batch-timeout を使ってください |
object-class、labels-file |
ラベルは model-info で指定した labels ファイルから読み込みます |
gvametaconvert / gvametapublish¶
要素は DL Streamer のソースそのものなので、プロパティは変わりません。同梱版のビルドには、ファイル、MQTT、Kafka の送信機能が含まれます。
例¶
DL Streamer:
gst-launch-1.0 filesrc location=in.mp4 ! decodebin3 ! \
gvadetect model=yolov8n.xml model-proc=yolov8n.json device=GPU batch-size=1 ! \
gvatrack tracking-type=short-term-imageless ! \
gvawatermark ! videoconvert ! x264enc ! mp4mux ! filesink location=out.mp4
このフレームワーク:
gst-launch-1.0 -e filesrc location=in.h264 ! h264parse ! vah264dec ! \
'video/x-raw(memory:VAMemory),format=NV12' ! \
amddetect model=yolov8n.mxr model-info=yolov8n.json batch-size=1 ! \
gvatrack tracking-type=short-term-imageless ! \
amdwatermark ! amdencode bitrate=6000 ! h264parse ! mp4mux ! filesink location=out.mp4
想定される違い:
- VA デコーダーでデコードし、caps を
video/x-raw(memory:VAMemory)に制限してください。AMD の要素はシステムメモリ上のフレームを受け付けません。 videoconvertは使いません。フレームがシステムメモリに届くことはありません。amdwatermarkが出力する GPU サーフェスをamdencodeが直接エンコードします。- 生の
.h264ファイルにはタイムスタンプがありません。h264parseの後にvideo/x-h264,framerate=30/1を挿入してください(MP4/RTSP のソースでは不要です)。 - AMD の要素のプロパティは NULL/READY 状態でのみ書き込めます。
モデル¶
- モデルを ONNX にエクスポートします(
scripts/export_*.pyの補助スクリプトに、YOLOv8、ResNet18、SegFormer の手順があります)。 - 入力テンソルと出力のレイアウトを記述した model-info JSON を書きます(model-info を参照)。これが
model-procの代わりになります。 - 対象の GPU とバッチサイズに合わせてコンパイルします:
amdva-compile-model model.onnx model.mxr --batch=4 --model-info=model.json。コンパイラーは SHA256 と GPU アーキテクチャを記録したmodel.mxr.manifest.jsonを書き出します。ランタイムは、マニフェストがない場合や一致しない場合にモデルを拒否します。
OpenVINO IR ファイル、model-proc の変換ツール、独自の後処理ライブラリには対応していません。現在利用できるアダプターは yolov8、yolov8-seg、yolov8-pose、分類、セマンティックセグメンテーション、生のテンソルです。YOLOv5 と SSD には対応していません。
メタデータへのアクセス¶
- Python。
gvapythonは同梱していません。process(frame_dict)を実装したamdpythonを使ってください。メタデータと Python を参照してください。 - C/C++ のプローブ。 DL Streamer と同じ方法で
GstAnalyticsRelationMetaを読み取ります。GPU 上にある結果(マスク、生のテンソル)はAmdAnalysisMeta(amdva/tensor_meta.hpp)に含まれます。暗黙にシステムメモリへコピーされることはありません。 - GVA の JSON メタ / テンソル。
gvametaconvertは GstAnalytics を読み取るため、amddetectの出力にも使えます。
複数ストリーム¶
gvastreammux output-mode=container ! amddetect batch-size=N ! gvastreamdemux
とすると、解像度の異なるソースを 1 つの検出器でまとめてバッチ処理できます。demux の各分岐にはそれぞれ queue を置いてください。共有バッチと複数ストリームと examples/pipelines/multistream-encode.sh を参照してください。
ライセンス¶
同梱した DL Streamer のソースは、MIT ライセンスと Intel の著作権表示をそのまま保持しています(third_party/dlstreamer/LICENSE。ローカルでの変更点は README.AMD.md に記載しています)。GstAnalytics のグループ/キーポイント API は、同じく DL Streamer に由来する gst-plugins-bad へのパッチによるものです(patches/gst-plugins-bad-0020-gst-analytics.patch、LGPL-2.1-or-later のファイル)。THIRD_PARTY_LICENSES.md を参照してください。