AIコラムー第5回 DeepStream SDK 5.0 追加機能について

DeepStream SDK 5.0 追加機能について

                                                        
前回、Developer Preview版として公開されているDeepStream SDK 5.0の新規機能について、紹介させて頂きました。今回は、新規機能のうち、以下2点について、実際に動かしてみたいと思います。

・Gst-nvdsanalytics
・On the fly model update

DeepStream SDK 5.0のインストール

                                                         
まずは、DeepStream SDK 5.0のインストールを行います。今回もJetson Nanoを用いて、実際に環境構築及び、サンプルアプリケーションを動かしてみようと思います。

DeepStream SDK 5.0では、動作環境として以下が要求されていますので注意してください。

ハードウェアOSおよび依存関係にあるソフトウェア
JetsonJetpack 4.4 (Developer Preview)
dGPU (Tesla)Ubuntu 18.04, Gstreamer 1.14.1, NVIDIAドライバ 440以上,

CUDA 10.2, TensorRT 7.0

※このコラムではJetson NanoにJetpack 4.4の環境が用意されている状態であることを想定しています。

※書き込み手順は、https://developer.nvidia.com/embedded/jetpack を参考にしてください。

インストールの手順は、以前紹介したDeepStream SDK 4.0の手順とほぼ同じですが、1点だけ追加されている手順がありますので注意してください。

1. 依存パッケージのインストールする

※Jetson Nanoのターミナルで実行してください。また、パッケージのダウンロード及びインストールを行うので、インターネットアクセスが可能になっている必要があります。

$ sudo apt install \
libssl1.0.0 \
libgstreamer1.0-0 \
gstreamer1.0-tools \
gstreamer1.0-plugins-good \
gstreamer1.0-plugins-bad \
gstreamer1.0-plugins-ugly \
gstreamer1.0-libav \
libgstrtspserver-1.0-0 \
libjansson4=2.11-1

2. librdkafkaのインストールする

3. NVIDIA V4L2 Gstreamer Pluginをインストールする ★5.0からの手順

使用するプラットフォームに応じて、aptパッケージのリストを更新します。

$ gedit /etc/apt/sources.list.d/nvidia-l4t-apt-source.list

   更新箇所は以下の通りです。

deb https://repo.download.nvidia.com/jetson/common r32.4 main
deb https://repo.download.nvidia.com/jetson/<platform> r32.4 main

 <platform>に指定するのは、以下の識別子になります。今回はJetson Nanoなので、t210になります。

$ sudo apt install librdkafka1=0.11.3-1build1

   ※ちなみに実際に行ったところ、最初からt210が指定されていました。

platform識別子
Jetson TX2t186
Jetson AGX Xavier series

Jetson Xavier NX
t194
Jetson Nano

Jetson TX1
t210

   ソースリストを編集したら、パッケージリストを更新して、インストールします。

$ sudo apt update
$ sudo apt install –reinstall nvidia-l4t-gstreamer

4. DeepStream SDKのdebianパッケージをインストールする

debianパッケージを以下から入手して、インストールします。

https://developer.nvidia.com/deepstream-getting-started

sudo apt-get install ./deepstream-5.0_5.0.0-1_arm64.deb

   以上、ここまでインストール手順になります。
   詳細は、以下のドキュメントを参考にしてください。
DeepStream SDK Development Guide
https://docs.nvidia.com/metropolis/deepstream/dev-guide/index.html

Gst-nvdsanalytics

                          
ここまでで、DeepStream SDK 5.0のインストールが出来ていますので、早速Gst-nvdsanalyticsプラグインについて、
サンプルを実行してみたいと思います。

前回も紹介させて頂きましたが、以下の機能を提供しています。
ROIフィルタリング
  指定した領域に存在するオブジェクトをカウント、過密状態かどうか(閾値を超えたかどうか)を判定する機能
ラインクロス・方向検出
位置の履歴と現在のフレーム情報を用いて、指定した方向にオブジェクトが進んでいるか、また、仮想線の方向に進んでいるか、仮想線を越えたかどうかを判定する機能

1. Gst-nvdsanalyticsを実行するアプリがサンプルアプリとして存在しているので、以下を実行します。
deepstream-nvdsanalytics-test [入力のURI]

$ cd /opt/nvidia/deepstream/deepstream-5.0/sources/apps/sample_apps/deepstream-nvdsanalytics-test
$ deepstream-nvdsanalytics-test file:///opt/nvidia/deepstream/deepstream-5.0/samples/streams/sample_720p.mp4



   領域や方向を示す矢印等が表示されましたでしょうか。

上記の動画に関しては、こちらで公開するにあたり、動画や領域・ラインの設定を変更しています。

   これ等の設定は、以下のコンフィグファイルで定義しています。

$ gedit config_nvdsanalytics.txt

各項目を簡単にご説明します。

グループプロパティ説明
property

プラグインの共通動作を設定します。※必須
enableグループが有効かどうか
config-widthコンフィグの適用幅
config-heightコンフィグの適用高さ
roi-filtering-stream-<n>
ROIフィルタリング(指定した領域内外のオブジェクトのカウントを行う機能)のパラメータを指定します。
enableグループが有効かどうか
roi-<label>領域の座標(カウント)
inverse-roi領域外をカウントするかどうか
1の場合は、領域外にあるものがカウントされる
class-id適用されるクラスID
overcrowding-stream-<n>

過密状態検出のパラメータを指定します。
enableグループが有効かどうか
roi-<label>領域の座標(過密判定)
object-threshold過密フラグが立つ閾値(オブジェクト数)
class-id適用されるクラスID
line-crossing-stream-<n>

ラインクロス(指定した線を越えたことを検出する機能)のパラメータを設定します。
enableグループが有効かどうか
line-crossing-<label>ラインの座標
class-id適用されるクラスID
direction-detection-stream-<n>

方向検出のパラメータを設定します。
enableグループが有効かどうか
direction-<label>方向を示す座標
class-id適用されるクラスID

  このご時世、指定した領域内の過密判定などが簡単に実装出来るので、非常に実用的なプラグインです。

On the fly model update

                     
続いて、on the fly model updateを試してみます。これは実行中のアプリケーションを停止させることなく、モデルの更新を行える機能です。

 実際の動きを確認していきますが、更新前のモデルと更新後のモデルを用意する必要があるため、動作の紹介だけさせて頂きたいと思います。大まかな機能の流れとしては以下の通りです。

※今回は顔を検出するモデルで、全く検出しないモデル(更新前)、正しく検出するモデル(更新後)を用意しました。

1. サンプルアプリケーション(deepstream-test5-app)の-oオプションで、更新するモデル(TensorRTエンジン)を記載したコンフィグファイルを指定する
2. コンフィグファイルのモデル(TensorRTエンジン)を指定する箇所を更新する
3. コンフィグファイルが更新されたことをアプリケーションが検知し、モデル(TensorRTエンジン)が再読み込みされる

  少し分り辛いかもしれませんが、右下のターミナルでコンフィグファイルを変更しています。

  まだ、Primaryのモデルのみであったり、ネットワークパラメータが更新前後で同じであることであったり、制限事項がありますが、こういったサービスの途中でモデルを更新したいという要望は多くあるのではないかと思いますので、非常に実用的な機能だと思います。今後のアップデートに期待したいと思います。

最後までご覧いただき、ありがとうございました。

お問い合わせ

名古屋本社

東京本社

【受付時間】9:00~18:00

pagetop

お客様のお悩み承ります。