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