今日は朝から昨日(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技術は様々なニーズがあるようです。
今後も勉強していきたいと思います。