JETSON NANOで遊ぶ!【DeepStream編】

今日は朝から昨日(5日)のドカ雪のおかげで、雪かきで疲れました。(笑)
かなり腰にきています。
1日で40センチ以上積もりました。

現在もまだちらほら雪が降っています。

という事で多少疲れてはいますが、
今回は、NVIDIAが提供しているDeepStream SDKの機能を試してみました。

1.DeepStream SDK とは? (説明からの抜粋です)

 (1)カメラ、センサー、IoTゲートウェイからのデータをリアルタイムで分析
  NVIDIAのDeepStream SDKは、マルチセンサー処理だけでなく、AIベースのビデオおよび画像を理解するための完全なストリーミング分析ツールキットを提供します。
  DeepStreamは、ピクセルとセンサーデータを実用的な洞察に変換するためのエンドツーエンドのサービスとソリューションを構築するプラットフォームであるNVIDIA Metropolisの不可欠な部分です。

 (2)複雑なストリーム処理パイプラインをシームレスに開発
  DeepStreamを使用すると、開発者はエッジツークラウドのストリーミング分析アプリケーションを構築できます。
  SDKは、オープンソースのGStreamerを使用して、低レイテンシのストリーミングフレームワークで高いスループットを実現します。
  ランタイムシステムはパイプライン化されており、ディープラーニング機能に加えて、ストリーミングアプリケーションでの画像およびセンサー処理と融合アルゴリズムを可能にします。

2.DeepStream SDKのセットアップ
 
 方法はいくつかあるようですが、ホストPCからSDK Managerを通してセットアップするのが楽ちんのようです。
 これについては以前の「【NVIDIA SDK Manager編】」で既に実施済です。

3.サンプルの動作確認

 sampleの構成ファイルは /opt/nvidia/deepstream/deepstream-4.0/samples ディレクトリにあります

 $ cd /opt/nvidia/deepstream/deepstream-4.0/samples/

 次のコマンドを入力すると 2*4のタイル形式でサンプルmp4に対して約30FPSの物体検知の動画が表示されます。

 $ deepstream-app -c ./configs/deepstream-app/source8_1080p_dec_infer-resnet_tracker_tiled_display_fp16_nano.txt

 ※動画は割愛。

4.カメラ映像をリアルタイム検出してRTSP配信&スマフォ(Android)で見る

 マニュアルや他のconfigを参考にお試し用にのconfigを編集しました。
 https://docs.nvidia.com/metropolis/deepstream/4.0/dev-guide/index.html#page/DeepStream_Development_Guide%2Fdeepstream_app_config.3.2.html

 下記コマンドでお試しを起動。
 $ deepstream-app -c ./configs/deepstream-app/my_test.txt

 スマフォ(Android)のVLCアプリを起動し、ネットワークストリームにて下記にアクセスします。
 ※VLCアプリは別途インストール要。

 rtsp://192.168.0.18:8554/ds-test

 おおっ! Jetson Nanoに接続されているカメラ映像がスマフォで見る事ができました。
 物体検出も見れているようです。

 ※動画は割愛。

5.YOLOを試してみる。

 YOLO(You Only Look Once)はdarknet(C言語で書かれたディープラーニングライブラリ)で開発された画像認識ディープラーニングネットワークで、1回ネットワークを通して、ちょっと後処理しただけで複数の対象物のクラス(種別)と位置を検出するという優れものというものです。
 これについても試してみました。

 (1)YOLOの準備

   $ cd /opt/nvidia/deepstream/deepstream-4.0/sources/objectDetector_Yolo

   以下のコマンドで、YOLOのcfgファイル(ネットワーク構造等を定義しているもの)、weight(ネットワークの係数)を次のコマンド(スクリプト)で一括ダウンロードします。

   $ ./prebuild.sh

   下記コマンドで、Jetson NanoにインストールされているCUDAのバージョンを環境変数として設定します。

   $ nvcc -V

   表示されたバージョンを確認して次の通り設定します。間違うとコンパイルでエラーになります。

$ export CUDA_VER=10.0

   YOLOのPluginをコンパイルします。

$ make -C nvdsinfer_custom_impl_Yolo

 (2)YOLOv3-tinyのサンプルを動かす

   次のコマンドでサンプルが動きます。動き始めるまでは少し時間がかかります。

$ deepstream-app -c deepstream_app_config_yoloV3_tiny.txt

 (3)USB Cameraで動かす

   $ cp deepstream_app_config_yoloV3_tiny.txt deepstream_app_config_yoloV3_tiny_usb_camera.txt

   deepstream_app_config_yoloV3_tiny_usb_camera.txtの[source0]を書き換えます。

    [source0]
   enable=1
   #Type – 1=CameraV4L2 2=URI 3=MultiURI
   type=1
   camera-width=640
   camera-height=480
   camera-fps-n=30
   camera-fps-d=1
   camera-v4l2-dev-node=0
   #uri=file://../../samples/streams/sample_1080p_h264.mp4
   #num-sources=1
   #gpu-id=0
   # (0): memtype_device – Memory type Device
   # (1): memtype_pinned – Memory type Host Pinned
   # (2): memtype_unified – Memory type Unified
   #cudadec-memtype=0

   USB CameraでYOLOv3-tinyを動かします。

   $ deepstream-app -c deepstream_app_config_yoloV3_tiny_usb_camera.txt

   Jetson Nanoに接続されているカメラ映像でYOLOが動作しました。

   ※動画は割愛。

DeepStream技術は様々なニーズがあるようです。
今後も勉強していきたいと思います。


PAGE TOP