基于 AI 的計算機視覺(CV)應用日益增多,這對于從視頻流中提取實時洞察至關重要。這項革命性的技術使作業人員能夠在沒有大量操作干預的情況下獲得有價值的信息,從而為創新和解決問題帶來了新的可能性。
NVIDIA DeepStream SDK 專門用于那些使用機器學習(ML)從視頻流中提取深入洞察的智能視頻分析(IVA)用例。在 NVIDIA 硬件上運行時,它使用 GPU 加速 ML,同時使用加速硬件實現預處理性能的最大化。
本文將探討用于模型開發的 Edge Impulse 與用于部署的 NVIDIA DeepStream SDK 相結合的潛力,以便快速創建端到端應用。
計算機視覺應用
在如今的環境中,快速構建復雜、可擴展的 CV 應用的能力至關重要。典型的 CV 應用涵蓋了各種用例,包括車輛識別、流量測量、檢測系統、生產線質量控制、通過監控加強安全和安保、智能結賬系統和過程測量等。
將機器智能進行集成來分析業務流程中的多媒體流可以帶來巨大的價值。憑借無與倫比的準確性和可靠性,機器智能可以幫助精簡運維,從而提高效率。
預建的 AI 模型有時并不是合適的解決方案,并且往往需要針對其未考慮到的特定問題來進行微調。
構建基于 AI 的 CV 應用通常需要三種技能:MLOps、CV 應用開發和部署(DevOps)。如果沒有這些專業技能,項目的投資回報率和交付時間都可能面臨風險。
過去,復雜的 CV 應用需要高度專業化的開發人員,因此需要耗費較長的學習周期和昂貴的資源。
Edge Impulse 與 NVIDIA DeepStream SDK 的組合提供了一個用戶友好的互補解決方案堆棧,可幫助開發人員快速創建 IVA 解決方案。您可以針對特定用例輕松自定義應用,將 NVIDIA 硬件直接集成到您的解決方案中。
DeepStream 可免費使用,Edge Impulse 則提供了一個免費層,適合許多 ML 模型構建用例。
圖 1. Edge Impulse 和 NVIDIADeepStream SDK 解決方案堆棧
使用 NVIDIA DeepStream
構建 CV 應用
Deepstream SDK 是 NVIDIA Metropolis 的一個組件,旨在支持大規模的視頻分析。您可以快速、輕松地創建可直接部署在 NVIDIA 硬件設備上的生產就緒 CV 管線。
DeepStream 應用的構建方法如下:
從命令行進行構建
使用 Graph Composer 以可視化的方式進行構建
使用 DeepStream 參考應用和配置文件進行構建,無需代碼
如果您不是開發人員,可以使用前三種方法中的任何一種,不到一小時就能搭建好管線,并與訓練好的 ML 模型一起運行。如果您需要更多自定義功能,可以使用現有模板來構建一個自定義編碼的解決方案。
部署 CV 應用
在創建管線后,您可以直接將其部署到 NVIDIA 硬件設備上,如邊緣設備(如 NVIDIA Jetson Nano)、高性能計算(HPC)和云部署,以及混合部署等。
您可以將應用部署在 NVIDIA 邊緣硬件上在本地運行,并直接連接視頻源,以減少延遲。如果您需要處理復雜的管線或容納超出 NVIDIA 邊緣設備能力的多個視頻源,可以將相同的管線部署到您首選的 IaaS 供應商的 NVIDIA 云實例上。
您也可以采用混合部署的方法,將管線部署到 NVIDIA 邊緣設備上,然后使用 NVIDIA Triton 推理服務器遠程執行推理。
Triton 能夠遠程執行模型,接收來自客戶端的輸入幀并返回結果。Triton 可使用 NVIDIA GPU,也可在 x86 上執行推理,并支持并發和動態批處理。Triton 還支持大多數常用的框架,包括 TensorFlow 和 PyTorch。
DeepStream 通過名為 Gst-nvinferserver 的 Gst-nvinfer 推理插件支持 Triton。通過使用該插件,您可以在 DeepStream 應用中使用 Triton 實例。
IVA 應用的好壞取決于構建時所使用的 ML 模型。雖然有許多預構建模型可以使用,但用例往往需要自定義模型和 MLOps 工作流。因此需要有一個易于使用的 MLOps 平臺來實現快速部署,尤其在與 DeepStream 快速應用開發相結合時。
用于機器學習的 Edge Impulse
Edge Impulse 提供了一套功能強大的 ML 模型構建工具,這些模型可以直接部署到 NVIDIA 目標上并導入進 DeepStream 應用中。通過無縫集成 NVIDIA 硬件加速和 DeepStream SDK,Edge Impulse 能夠幫助您快速擴展項目。
Edge Impulse 在整個過程中為各級開發人員提供指導。經驗豐富的 ML 專業人員將享受到從不同來源導入數據的便捷性和端到端模型構建流程。您還可以將自定義模型與自定義學習塊功能集成在一起,為 MLOps 減輕繁重的工作。
如果您是機器學習新手,Edge Impulse 流程會在您使用該環境時指導構建基本模型。可以在 DeepStream 中使用的基本模型類型包括 YOLO 對象檢測和分類。
您還可以改造專為 tinyML 目標構建的模型,使其適用于邊緣用例和功能更強大的 NVIDIA 硬件。許多邊緣 AI 用例涉及復雜的應用,需要更強大的計算資源。NVIDIA 硬件可以幫助解決與受限設備的局限性相關的挑戰。
您可以使用 Edge Impulse 從頭開始創建自己的模型,Edge Impulse 還集成了 NVIDIA TAO 工具套件,可以使用 Computer Vision Model Zoo 中的一百多個預訓練模型。Edge Impulse 是 TAO 的補充,可用于將這些模型調整為自定義應用,這對企業用戶來說是一個很好的出發點。
圖 2. NVIDIA TAO 與
Edge Impulse Enterprise 相結合
使用 Edge Impulse 構建
適用于 DeepStream 的模型
在構建完模型后,將該模型部署到 DeepStream 中。從 Edge Impulse 導出模型文件并將其導入到 DeepStream 項目中。然后按照配置步驟操作,確保您的 Edge Impulse 模型能與 DeepStream 配合使用。該流程一般包括四個步驟(圖 3)。
圖 3. 將模型文件從 Edge Impulse
部署到 NVIDIA DeepStream 的四個步驟
第 1 步:
在 Edge Impulse 中構建模型
首先在 Edge Impulse Studio 中構建 YOLO 或圖像分類模型。DeepStream 推理 Gst-nvinfer 插件要求輸入層的張量為 NCHW 格式。請務必選擇 Jetson Nano 作為目標,并使用 FP32 權重。
第 2 步:
從 Edge Impulse 導出模型
Edge Impulse 可以從 Edge Impulse Studio 的儀表盤頁面中導出模型。YOLOv5 可以導出為帶有 NCHW 輸入層的 ONNX,以便與 DeepStream 一起使用。
圖 4. Edge Impulse Studio 儀表盤
顯示如何導出為 ONNX 模型
DeepStream 中的 IVA 管線通常由一個主要推理(PGIE)步驟組成,該步驟使用邊界框坐標執行對象檢測。相關的對象類別會傳遞給二級推理步驟(SGIE),后者會對每個對象進行分類。每個步驟都以 Gst-nvinfer 插件實例的形式實現。
第 3 步:
將模型轉換成與 DeepStream
兼容的 ONNX 格式
在將 YOLO 與 DeepStream 結合使用時,需要使用一個自定義輸出層解析器來從輸出層中提取邊界框和對象類別,然后將其傳遞給下一個插件。有關自定義 YOLO 輸出解析器的詳細信息,請參見如何使用自定義 YOLO 模型:
https://docs.nvidia.com/metropolis/deepstream/dev-guide/text/DS_custom_YOLO.html
Edge Impulse 使用的 YOLOv5 是一種更新、性能更強大的模型,其輸出張量格式與 YOLOv3 略有不同。YOLOv3 有三個輸出層,分別負責檢測不同尺度的物體,而 YOLOv5 只有一個輸出層,使用錨框來處理各種尺寸的物體。
DeepStream 基于專門用于多媒體用例的 GStreamer。NVIDIA 在 GStreamer 管線中添加了支持深度學習的功能,包括額外的 ML 相關元數據,這些元數據通過 Gst-Buffer 在管線中傳遞,并通過 Gst-Buffer 封裝在 NvDsBatchMeta 結構中。
圖 5. DeepStream 元數據層次
YOLO 的輸出張量不同于 DeepStream 所需的邊界框數據,這些邊界框數據保存在 NvDsObjectMeta 中。為了將 YOLO 與 DeepStream 結合使用,就需要一個自定義輸出解析器來轉換 YOLO 輸出,以滿足 NvDsObjectMeta 在運行時的要求。NVIDIA 提供了一個通過 YOLOv3 運行的示例插件。
Edge Impulse 使用 YOLOv5。YOLOv3 和 YOLOv5 在輸出層之間的差異使得 YOLOv3 插件不適合與 YOLOv5 一起使用(圖 6)。
圖 6. YOLOv3 和 YOLOv5 輸出張量結構的比較
要使用在 Edge Impulse 中訓練的 YOLOv5 模型,必須創建一個自定義的 YOLOv5 輸出解析器來處理單個輸出張量。可以使用的一種實現方式是與 Edge Impulse ONNX 格式導出模型一起工作的第三方輸出解析器。
對于圖像分類模型,需要將 Edge Impulse 以 NHWC 格式提供的默認 TFLite Float32 及其輸入層轉換為 NCHW 格式。
圖 7. Edge Impulse Studio 儀表盤
顯示 TFLight Float32 的位置
使用以下 tf2onnx 命令即可輕松實現:
python -m tf2onnx.convert --inputs-as-nchw serving_default_x:0 --opset 13 --tflite MODELFILE --output OUTPUT.ONNX
MODELFILE 是輸入文件,OUTPUT.ONNX 是輸出文件,Edge Impulse 生成的輸入層名稱被指定為 serving_default_x:0。因此,該輸入層經過轉換后符合 DeepStream 的要求。
圖 8. Edge Impulse 默認輸入層形狀
與 DeepStream Gst-nvinfer 插件比較
第 4 步:
創建推理插件配置文件
DeepStream 要求為 Gst-nvinfer 插件的每個實例創建純文本配置文件,以指定運行時要求,其中包括 ONNX 模型文件或生成的 TRT 引擎文件,以及包含標簽名稱的文本文件。圖 9 顯示了使用 Edge Impulse YOLOv5 和分類模型所需的最小參數集。
圖 9. 使用 Edge Impulse 所創建的模型
的 Gst-nvinfer 插件配置參數
請注意,雖然為了便于說明,注釋與參數并列顯示,但所有配置參數都應另起一行。
process-mode參數可用于指定插件是一級還是二級。請注意,在指定 ONNX 文件后,DeepStream 會使用 trtexec 生成 NVIDIA TensorRT 在 NVIDIA GPU 上執行的 TensorRT 引擎。
創建該引擎后,使用model-engine-file參數指定該引擎。可以注釋掉 model-file參數,以防止在每次運行時都重新創建引擎,從而節省啟動時間。
根據 model-color-mode(模型是 RGB 還是灰度)的不同,該參數必須分別設置為 0 或 2。這將與 Edge Impulse Studio 中設置的顏色深度相對應。
上例展示了如何將該模型用作主推理插件。通過設置 process-mode屬性,也可以將該模型用作第二階段分類器:
process-mode=2 #SGIE
圖 9 中的示例還顯示了兩階段管線所需的最小配置文件,其中 YOLO 模型會首先檢測對象,然后在第二階段分類器中對它們單獨分類。對于 YOLO 模型,可以編輯默認的 YOLO 標簽文件,并根據 YOLO 標準格式,將標簽替換為自定義模型的標簽,每個標簽另起一行。
在分類模型中,標簽用分號分隔。在運行期間,將根據這些文件對模型進行相應的索引,并顯示您指定的文本。
DeepStream 可通過引用管線中嵌入這些設置的配置文件來使用。
審核編輯:劉清
-
NVIDIA
+關注
關注
14文章
4940瀏覽量
102818 -
計算機視覺
+關注
關注
8文章
1696瀏覽量
45928 -
機器學習
+關注
關注
66文章
8378瀏覽量
132424 -
python
+關注
關注
56文章
4782瀏覽量
84461
原文標題:使用 NVIDIA DeepStream 和 Edge Impulse 快速推進計算機視覺部署
文章出處:【微信號:NVIDIA-Enterprise,微信公眾號:NVIDIA英偉達企業解決方案】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論