【jetson】deepstream-appのサンプルプログラムを動かしてみた #1

スポンサーリンク
deepstream-app
この記事を読んで分かること
  • deepstreamのサンプルプログラムの動かし方
  • source1_usb_dec_infer_resnet_int8.txtの内容
  • deepstream-appのコンフィグの意味

 

deepstream-appのサンプルプログラム

今回は、deepstream-appのサンプルプログラムである「source1_usb_dec_infer_resnet_int8.txt」を試していきます。

このサンプルでは、USBカメラ1台の画像を入力として4つの物体検出(Car、Bicycle、Person、Roadsign)を行います。

 

早速サンプルプログラムを動かしてみましょう。

deepstream-app -c /opt/nvidia/deepstream/deepstream-5.1/samples/configs/deepstream-app/source1_usb_dec_infer_resnet_int8.txt

 

source1_usb_dec_infer_resnet_int8_動作の様子

カメラでPCのディスプレイを映して検出している様子です。

しっかりPersonが検出できていることが分かります。

 

このサンプルプログラム「source1_usb_dec_infer_resnet_int8.txt」のプラグインの構成は以下のようになっています。

source1_usb_dec_infer_resnet_int8の構成

それぞれのプラグインが実施している処理内容です。

プラグインの処理内容
  • sourceグループでUSBカメラの入力データを取得しています。
  • streammuxでマルチプレクサの処理をしています。
    (ただ、実際は入力動画は1つなので入出力で変更はされていません。)
  • primary-gieでAIの推論処理をしています。
  • tiled-displayで推論結果の画像まとめて、タイル表示しています。
  • osdでは受け取ったタイル表示のデータを画面に描画しています。
  • sinkでデータの最終処理(破棄)しています。

 

サンプルプログラムの概要は公式ドキュメントに記載されています。

 

コンフィグの解説

サンプルプログラム「source1_usb_dec_infer_resnet_int8.txt」のコンフィグファイルの中身を見ていきましょう。

 

applicationグループ

applicationグループでは、メトリクスの取得などに関する設定をしています。

直接アプリケーションの動作には影響しません。

source1_usb_dec_infer_resnet_int8.txt
[application]
enable-perf-measurement=1
perf-measurement-interval-sec=5

 

アプリケーションのパフォーマンスの測定を実施し、5秒おきにパフォーマンスをサンプリングしています。

アプリケーショングループの設定
設定項目設定値の意味
enable-perf-measurementアプリケーションのパフォーマンス測定を行うか。

0:未実施 1:実施

perf-measurement-interval-secパフォーマンスメトリックのサンプリング周期。

 

sourceグループ

sourceグループでは、入力データの取得に関する設定を行います。

source1_usb_dec_infer_resnet_int8.txt
[source0]
enable=1
type=1
camera-width=640
camera-height=480
camera-fps-n=30
camera-fps-d=1
camera-v4l2-dev-node=0

 

入力データはUSBカメラの入力1つだけに設定されています。

ソースグループの設定
設定項目設定値の意味
enableソースの有効化。

0:無効 1:有効

typeソースの種類。

1:カメラ(V4L2) 2:URI 3:MultiURI 4:RTSP 5:カメラ(CSI)

camera-width入力画像の幅(ピクセル)。
camera-height入力画像の高さ(ピクセル)。
camera-fps-n入力画像のフレーム数(分子)。
camera-fps-d入力画像のフレーム数(分母)。
camera-v4l2-dev-nodeV4L2デバイス番号。

0: /dev/video0

 

Streammuxグループ

Streammuxグループでは、マルチプレクサの設定を行います。

source1_usb_dec_infer_resnet_int8.txt
[streammux]
live-source=1
batch-size=1
batched-push-timeout=40000
width=1280
height=720
入力データはもともと1つのカメラなので、出力数は変わっていません。
画像のサイズの変更もここで実施しています。
Streammuxグループの設定
設定項目設定値の意味
live-sourceソースがライブ状態であることをマルチプレクサに通知する。

0:無効 1:有効

batch-sizeマルチプレクサのバッチサイズ。
batched-push-timeout最初のバッファが利用可能になってからバッチをプッシュするまでのタイムアウト。(マイクロ秒単位)
widthMuxerの出力の幅(ピクセル)。
heightMuxerの出力の高さ(ピクセル)。

 

primary-gie、secondary-gieグループ

primary-giesecondary-gieグループではAIの解析の設定を行います。

source1_usb_dec_infer_resnet_int8.txt
[primary-gie]
enable=1
model-engine-file=../../models/Primary_Detector/resnet10.caffemodel_b30_gpu0_int8.engine
batch-size=1
bbox-border-color0=1;0;0;1
bbox-border-color1=0;1;1;1
bbox-border-color2=0;0;1;1
bbox-border-color3=0;1;0;1
interval=0
gie-unique-id=1
config-file=config_infer_primary.txt

 

モデルのエンジンの指定や検出した物体ごとにバウンディングボックスの色を変更しています。

 

gieグループの設定
設定項目設定値の意味
enableシンクの有効化。

0:無効 1:有効

model-engine-fileエンジンファイルの絶対パス。
batch-sizeバッチで処理するフレーム数。(pgieの場合)

バッチで処理するオブジェクト数。(sgieの場合)

bbox-border-color0バウンディングボックスの色を指定。(クラスIDとRGBA形式で色を設定)
interval推論を行うインターバル。(スキップするバッチ数)
gie-unique-idnvinferに割り当てられる一意のID。
config-fileGst-nvinferプラグインのプロパティを指定する構成ファイルのパス名。

 

tiled-displayグループ

tiled-displayグループでは、タイル表示の設定をします。

source1_usb_dec_infer_resnet_int8.txt
[tiled-display]
enable=1
rows=1
columns=1
width=1280
height=720

 

入力データは1つなので、画像のサイズも変えずにそのままにしているようです。
タイル表示グループの設定
設定項目設定値の意味
enableタイル表示を行うか。

0:未実施 1:実施 2:最初の[sink]グループのパッドにリンク

rowsタイル化した時の行数。
columnsタイル化した時の列数。
widthタイル化した時の幅。
heightタイル化した時の高さ。

 

OSDグループ

OSD(オンスクリーンディスプレイ)グループでは、画面への描画の設定をしています。

source1_usb_dec_infer_resnet_int8.txt
[osd]
enable=1
border-width=2
text-size=15
text-color=1;1;1;1;
text-bg-color=0.3;0.3;0.3;1
font=Serif
show-clock=0
clock-x-offset=800
clock-y-offset=820
clock-text-size=12
clock-color=1;0;0;0

 

表示する文字のサイズや色、時計の表示の設定を行っています。

OSDグループの設定
設定項目設定値の意味
enableOSDの有効化。

0:無効 1:有効

border-widthバウンディングボックスの線の太さ。
text-sizeオブジェクトを説明するテキストのサイズ。
text-colorオブジェクトを説明するテキストの色。(RGBA形式で設定)
text-bg-colorオブジェクトを説明するテキストの背景色。(RGBA形式で設定)
fontオブジェクトを説明するテキストのフォント。
show-clock時刻の表示。

0:非表示 1:表示

clock-x-offset時計の表示位置のx軸方向のオフセット。
clock-y-offset時計の表示位置のy軸方向のオフセット。
clock-text-size時計の文字サイズ。
clock-color時計のテキストの色。(RGBA形式で設定)

 

sinkグループ

sinkグループでは最終的なデータの処理の設定をしています。

source1_usb_dec_infer_resnet_int8.txt
[sink0]
enable=1
type=5
sync=0
display-id=0
offset-x=0
offset-y=0
width=0
height=0
overlay-id=1
source-id=0

 

typeがオーバレイの設定になっていて、ここでデータが破棄されています。
シンクグループの設定
設定項目設定値の意味
enableシンクの有効化。

0:無効 1:有効

typeシンクの種類。

1:フェイクシンク 2:nveglglessink 3:エンコードしてファイル保存 4:エンコードしてRTSPストリーミング 5:オーバーレイ 6:メッセージ

sync同期処理の有効化。

0:非同期 1:同期

display-idディスプレイのID。
offset-xウインドウレンダラー時のx方向のオフセット(ピクセル)。
offset-yウインドウレンダラーのy方向のオフセット(ピクセル)。
widthレンダラーの幅(ピクセル)。
heightレンダラーの高さ(ピクセル)。
overlay-idHEAD 0に使用するオーバーレイのインデックス。
source-idシンクと接続するソースのID。

 

testsグループ

testsグループでは、デバッグの設定をします。

source1_usb_dec_infer_resnet_int8.txt
[tests]
file-loop=0

 

入力データはループさせない設定になっています。

testsグループの設定
設定項目設定値の意味
file-loop入力ファイルを無限にループするか。

0:無効 1:有効

 

まとめ

今回は、deepstream-appサンプルプログラムであるsource1_usb_dec_infer_resnet_int8.txt」を動かしてみました。

このサンプルでは、USBカメラ1台の画像を入力として4つの物体検出(Car、Bicycle、Person、Roadsign)が検出できました。

deepstreamを使い始めた場合の最初のステップとしてやってみてください。

コメント

タイトルとURLをコピーしました