DeepStreamとは?動画の解析を効率化したソフトウェア

スポンサーリンク
deepstreamとは動画の解析を効率化したソフトウェアAIを作ってみる
この記事を読んで分かること
  • DeepStreamとは何か
  • DeepStreamでアプリケーションを構築する手段

 

DeepStreamとは

DeepStreamとは、

ビデオなどのデータをDeepLearningで効率よく解析するためのソフトウェア

です。

 

DeepStreamでは動画ストリームをパイプライン処理することで高速化を実現しています。

DeepStream Overview

出典:nvidia公式サイト

 

より具体的に説明すると、DeepStreamはモジュラープラグインを接続していき処理パイプラインを形成していきます。

モジュラープラグインは機能単位に分かれていて、

など様々なプラグインが存在します。

 

プラグインの詳細はこちらのマニュアルに記載されています。

 

また、DeepStreamに関するドキュメントはこちらにまとまっています。

 

DeepStreamを構成する技術

DeepStreamは主に以下の2つの技術から構成されています。

DeepStreamを構成する主要な技術
  • TensorRT
  • GStreramer

 

GStreramer

GStreramerは、動画ストリームを処理パイプライン処理するためのフレームワークです。

動画や画像を高速に処理することができるので、エッジデバイスやリアルタイムで画像処理をする場合にはよく使われます。

GStreamerの詳細については公式ドキュメントを参照してください。

 

DeepStreamGStreamerをベースに作られていて、DeepLearningの推論部分を新たに追加されています。

 

TensorRT

TensorRTは、ニューラルネットワークの推論を高速で実行するためのランタイムエンジンです。

事前に学習されたディープラーニングのモデルを効率的に実行することを重視して作られています。

 

 

DeepStreamでは、Gst-nvinferプラグインでTensorRTが実装されています。

 

DeepStreamを使ったアプリケーションの作成方法

DeepStreamアプリを作成する方法には2種類あります。

DeepStreamでのアプリ作成方法
  • deepstream-app
  • C / C ++およびPythonでのアプリケーション開発

 

 

それぞれの手法の概要はこちらの公式ドキュメントに記載されています。

 

deepstream-app

deepstream-appでは予め用意されたリファレンスアプリケーションを使って(変更して)、deepstreamのアプリケーションを作成する方法です。

そのため比較的簡単に実装することができます。

DeepStreamアーキテクチャ

 

リファレンスアプリケーションでは、入力ソースを受け取り(GstFileSrc)、デコードして、DeepLearningの解析(Gst-nvinfer-TensorRT)し、検出物を追跡(Gst-nvtracker)し、描画(Gst-nvdsosd)して、画面に表示するというようにプラグインの順番が事前に決められています。

 

リファレンスアプリケーションの各プラグインのON/OFFや動作のカスタマイズを設定ファイルで行うことでアプリケーションの開発を行います。

そのため、プラグインにない独自の処理を追加することはできません

(※ただし、プラグインのソースを書き換えることで独自の処理を無理やり実装することはできます。)

 

deestream-appリファレンスアプリケーションのソースファイルとコンフィグファイルはそれぞれ以下のパスに格納されています。

 
ソースファイル/opt/nvidia/deepstream/deepstream-5.1/sources/apps/sample_apps/deepstream-app
 コンフィグファイル/opt/nvidia/deepstream/deepstream-5.1/samples / configs / deepstream-app

 

 

リファレンスアプリケーションのコンフィグファイルの詳細については、こちらの公式サイトにまとめられています。

 

C / C ++およびPythonでのアプリケーション開発

Cやpythonをでアプリケーション開発することもできます。

こちらの方法では、用意されているプラグインとapiを組み合わせてアプリを作るので、プラグインを任意の順番にして独自のストリームを作成することができます

 

また、処理の途中でコールバック関数を呼び出すこともできるので任意の処理もさせることも可能です。

apiリファレンスはこちらにあります。

 

DeepstreamのC / C ++のアプリケーションのサンプルは以下に格納されています。

/opt/nvidia/deepstream/deepstream-5.0/sources/apps

サンプルプログラムの詳細はこちらです。

 

pythonでのアプリケーション開発には、deepstream_python_appsが必要になります。

DeepStream Overview

出典:Nvidia公式サイト

 

python版のapiリファレンスはこちらになります。

 

DeepStreamのプラグイン

DeepStreamで提供されている代表的なプラグインを載せておきます。

プラグインのマニュアルはこちらあります。

DeepStreamのプラグイン
プラグイン名役割
GstFileSrcファイル(ビデオデータまたは画像)からデータを読み取ります。
GstH264Parse着信H264ストリームを解析します。H265コーデックの場合は、H265Parseを使用します。
GstRtpH264Pay H264でエンコードされたペイロードをRTPパケットに変換します
GstUDPSink UDPパケットをネットワークに送信します。RTPローダー(GstRtpH264Pay)と組み合わせると、RTPストリーミングを実装できます。
GstCapsFilterデータを変更せずにデータ形式に制限を適用します。
GstV4l2Srcv4l2デバイスからビデオをキャプチャします。
GstQTMuxストリーム(オーディオとビデオ)をQuickTime(.mov)ファイルにマージします。
GstFileSink受信データをローカルファイルシステム内のファイルに書き込みます。
GstURIDecodeBin URIからrawメディアにデータをデコードします。指定された「uri」スキームを処理できるソース要素を選択し、それをデコードビンに接続します。
Gst-nvstreammux AI推論のために送信する前にストリームをバッチ処理します。
Gst-nvinferTensorRTを使用して推論を実行します。
Gst-nvvideo4linux2ハードウェアアクセラレーションデコーダー(NVDEC)を使用してビデオストリームをデコードします。ハードウェアアクセラレーションエンコーダ(NVENC)を使用して、RAWデータをI420形式でH264またはH265出力ビデオストリームにエンコードします。
Gst-nvvideoconvertビデオカラーフォーマット変換を実行します。Gst-nvdsosdプラグインがストリームデータをI420からRGBAに変換する前の最初のGst-nvvideoconvertプラグインと、Gst-nvdsosdプラグインがデータをRGBAからI420に変換した後の2番目のGst-nvvideoconvertプラグイン。
Gst-nvdsosdバウンディングボックス、テキスト、および関心領域(ROI)ポリゴンを描画します。
Gst-nvtrackerフレーム間でオブジェクトを追跡します。
Gst-nvmultistreamtilerバッチバッファから2Dタイルを合成します。
Gst-nvv4l2decoderビデオストリームをデコードします。
Gst-Nvv4l2h264encビデオストリームをエンコードします。
Gst-NvArgusCameraSrcArgusAPIを使用してISPプロパティを制御するオプションを提供します。

 

標準のプラグインにない機能は、C++を使って独自のプラグインを作ることでオリジナルの処理を作成することができます。

オリジナルプラグインのサンプル以下のパスに用意されています。

/opt/nvidia/deepstream/deepstream-5.0/sources/gst-plugins

 

まとめ

DeepStreamとは、ビデオなどのデータをDeepLearningで効率よく解析するためのソフトウェアです。

DeepStreamでは動画ストリームをパイプライン処理することで高速化を実現しています。

DeepStreamはTensorRTGStreramerを元に構成されています。

 

参考文献

NVIDIA Deep Learning Self-Paced Courses
Select courses offer a certificate of competency to support career growth.

コメント

タイトルとURLをコピーしました