DeepStream 入門一

DeepStream

NVIDIA 的 DeepStream SDK 提供了一套完整的流分析工具包,用于基于 AI 的多傳感器處理、視頻和圖像理解。Deepstream SDK 大量使用開源多媒體處理庫 Gstreamer。DeepStream SDK 可用于構(gòu)建端到端 AI 驅(qū)動的應(yīng)用程序來分析視頻和傳感器數(shù)據(jù)。

它可將來自 USB/CSI 攝像頭的媒體流數(shù)據(jù)、來自文件的視頻或通過網(wǎng)絡(luò)傳輸?shù)拿襟w流作為輸入,并使用人工智能和計算機視覺從中進行分析和推理,以便更好地了解視頻中的內(nèi)容。

deepstream 1

DeepStream SDK 可以成為許多視頻分析解決方案的基礎(chǔ)框架,例如了解智慧城市中的交通和行人、醫(yī)院中的健康和安全監(jiān)控、醫(yī)學(xué)影像分析, 零售業(yè)中的自助結(jié)賬和分析、檢測制造工廠中的組件缺陷等.

deepstream sdk

DeepStream是NVIDIA基于GStreamer的插件系統(tǒng)開發(fā)的, 繼承了GStreamer的特性。DeepSream提供超過15種以上的GStreamer插件模塊, 以此建造一個高效的視頻分析管道(Pipeline)。

NVIDIA將 TensorRT, cuDNN, CUDA, Video SDK 等以插件的形式集成進 GStreamer 當(dāng)中, 以管道的形式進行智能視頻分析應(yīng)用的開發(fā), 將各個功能封裝成組件, 通過將對應(yīng)功能的組件插入管道中, 啟動管道使數(shù)據(jù)按照要求在管道內(nèi)流動, 數(shù)據(jù)經(jīng)過解析、編解碼、預(yù)處理、算法處理后進行圖像渲染或者發(fā)送到云端。

例如

  • nvv4l2decoder 用于調(diào)用 GPU 硬件加速解碼 h264 文件 (解碼幀的格式是 NV12(YUV420))
  • nvstreammux 用于把輸入按照參數(shù)處理成一系列的視頻幀
  • nvinfer 通過推理的配置文件對輸入圖像進行推理
  • nvvideoconvert 視頻顏色格式轉(zhuǎn)換
  • nvdsosd 處理 RGBA buffer 繪制 ROI 等 識別對象的 Bounding Box, 邊框, 以及識別對象的文字標簽(字體、顏色、標示框)
  • nvegltransform 轉(zhuǎn)換成 EGLImage instance 給nveglglessink使用
  • nveglglessink 渲染

DeepStream Graph Architecture

DeepStream是使用開源 GStreamer 框架構(gòu)建的優(yōu)化的圖架構(gòu)。 下圖顯示了從輸入視頻到輸出見解的典型視頻分析應(yīng)用程序。 所有單獨的塊都是使用的各種插件。 底部是整個應(yīng)用程序中使用的不同硬件引擎。 插件之間零內(nèi)存復(fù)制的最佳內(nèi)存管理以及各種加速器的使用確保了最高性能。

deep stream architecture

DeepStream 以 GStreamer 插件的形式提供構(gòu)建塊,可用于構(gòu)建高效的視頻分析管道。 有超過 20 個針對各種任務(wù)進行硬件加速的插件。

  • 視頻流數(shù)據(jù)可以通過網(wǎng)絡(luò)傳輸, 或本地文件系統(tǒng), 或直接從攝像頭捕獲。流使用 CPU 捕獲。一旦幀進入內(nèi)存,它們就會被發(fā)送到 NVDEC 加速器進行解碼。解碼插件稱為“Gst-nvvideo4linux2”。

  • 解碼后,有一個可選的圖像預(yù)處理步驟,其中可以在推理之前對輸入圖像進行預(yù)處理。預(yù)處理可以是圖像去扭曲或顏色空間轉(zhuǎn)換。Gst-nvdewarper 插件可以對魚眼或 360 度相機的圖像進行去扭曲。Gst-nvvideoconvert 插件可以對幀執(zhí)行顏色格式轉(zhuǎn)換。這些插件使用 GPU 或 VIC(視覺圖像合成器)。

  • 下一步是批量處理幀以獲得最佳推理性能。批處理是使用“Gst-nvstreammux”插件完成的。

  • 一旦幀被批處理,它就會被發(fā)送到下一插件進行推理。可以使用 TensorRT(NVIDIA 的推理加速器運行時)進行推理,也可以使用 Triton 推理服務(wù)器在 TensorFlow 或 PyTorch 等本機框架中完成推理。本機 TensorRT 推理是使用“Gst-nvinfer”插件執(zhí)行的,使用 Triton 的推理是使用“Gst-nvinferserver”插件執(zhí)行的。推理可以使用 Jetson AGX Orin 和 Orin NX 的 GPU 或 DLA(深度學(xué)習(xí)加速器)。

  • 推理之后,下一步可能涉及跟蹤對象。 SDK 中有多個內(nèi)置參考跟蹤器,從高性能到高精度不等。 使用 Gst-nvtracker 插件執(zhí)行對象跟蹤。

  • 為了創(chuàng)建可視化工件(例如邊界框、分割蒙版、標簽),有一個名為“Gst-nvdsosd”的可視化插件。

  • 最后,為了輸出結(jié)果,DeepStream 提供了各種選項:使用屏幕上的邊界框渲染輸出、將輸出保存到本地磁盤、通過 RTSP 流式傳輸或僅將元數(shù)據(jù)(metadata)發(fā)送到云端。為了將元數(shù)據(jù)發(fā)送到云端,DeepStream 使用“Gst-nvmsgconv”和“Gst-nvmsgbroker”插件。Gst-nvmsgconv 將元數(shù)據(jù)(metadata)轉(zhuǎn)換為模式負載(schema payload),Gst-nvmsgbroker 建立與云端的連接并發(fā)送遙測數(shù)據(jù)。有幾種內(nèi)置代理協(xié)議,例如 Kafka、MQTT、AMQP 和 Azure IoT。可以創(chuàng)建自定義代理適配器。

DeepStream reference app

首先,開發(fā)人員可以使用提供的參考應(yīng)用程序。這些應(yīng)用程序的源代碼也包含在內(nèi)。

端到端應(yīng)用程序稱為 deepstream-app。此應(yīng)用程序完全可配置 - 它允許用戶配置任何類型和數(shù)量的源。

用戶還可以選擇要運行推理的網(wǎng)絡(luò)類型。

它預(yù)裝了一個推理插件,用于進行對象檢測,并通過推理插件進行級聯(lián)以進行圖像分類。有一個選項可以配置跟蹤器。

對于輸出,用戶可以選擇在屏幕上渲染、保存輸出文件或通過 RTSP 流式傳輸視頻。

deepstream app

示例

  • dsexample 是一個用 deepstream 寫的插件, 參見 deepstream_custom_plugin,
    稍后我們仔細分析下它的代碼細節(jié), 使用它也很簡單, 例如
DISPLAY=:0 gst-launch-1.0 -v filesrc location=talk.mp4 ! qtdemux ! h264parse \
! nvv4l2decoder ! m.sink_0 nvstreammux name=m batch-size=1 width=1280 height=720 \
! nvvideoconvert ! dsexample full-frame=1 ! nvdsosd ! nv3dsink

DISPLAY=:0 gst-launch-1.0 -v filesrc location=talk.mp4 ! qtdemux ! h264parse \
! nvv4l2decoder ! m.sink_0 nvstreammux name=m batch-size=1 width=1280 height=720 \
! nvvideoconvert ! dsexample full-frame=1 ! nvdsosd ! autovideosink

參考

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容