AI

日本システム開発株式会社からAIに関するコラムをお届けします。

推論システム開発に2017年から携わっている実績に基づき、様々な情報を発信しています。

日本システム開発の技術、
覗いてみませんか。

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

  1. librdkafkaのインストールする
  2. 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/ 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

  1. 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

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

今後のアップデートに期待したいと思います。

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

■関連サービス

AIソリューション

オープンソースを活用したAIのシステム構築・開発を支援!

車両ナンバープレート検知全国版

車両のナンバープレートをAIが検知・処理!全国のナンバープレートに対応!

人数カウントBODY_ロゴ

カメラ撮影した映像から指定領域内の滞在人数をAIが認識!

人数カウントHEAD_ロゴ

密集した空間から指定領域内の滞在人数をAIが認識!

ラインクロスカウント

来店人数のカウントや通行量調査などを自動化!

pagetop