この記事を読んで分かること
- 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
カメラでPCのディスプレイを映して検出している様子です。
しっかりPersonが検出できていることが分かります。
このサンプルプログラム「source1_usb_dec_infer_resnet_int8.txt」のプラグインの構成は以下のようになっています。
それぞれのプラグインが実施している処理内容です。
プラグインの処理内容
- 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-node | V4L2デバイス番号。 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 | 最初のバッファが利用可能になってからバッチをプッシュするまでのタイムアウト。(マイクロ秒単位) |
width | Muxerの出力の幅(ピクセル)。 |
height | Muxerの出力の高さ(ピクセル)。 |
primary-gie、secondary-gieグループ
primary-gie、secondary-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-id | nvinferに割り当てられる一意のID。 |
config-file | Gst-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グループの設定設定項目 | 設定値の意味 |
enable | OSDの有効化。 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-id | HEAD 0に使用するオーバーレイのインデックス。 |
source-id | シンクと接続するソースのID。 |
testsグループ
testsグループでは、デバッグの設定をします。
source1_usb_dec_infer_resnet_int8.txt
入力データはループさせない設定になっています。
testsグループの設定設定項目 | 設定値の意味 |
file-loop | 入力ファイルを無限にループするか。 0:無効 1:有効 |
まとめ
今回は、deepstream-appのサンプルプログラムである「source1_usb_dec_infer_resnet_int8.txt」を動かしてみました。
このサンプルでは、USBカメラ1台の画像を入力として4つの物体検出(Car、Bicycle、Person、Roadsign)が検出できました。
deepstreamを使い始めた場合の最初のステップとしてやってみてください。
コメント