無(wú)論是希望平衡產(chǎn)品分布和優(yōu)化交通的倉(cāng)庫(kù),工廠裝配線檢查,還是醫(yī)院管理,確保員工和護(hù)理人員在護(hù)理患者時(shí)使用個(gè)人防護(hù)設(shè)備( PPE ),高級(jí)智能視頻分析( IVA )都非常有用。
在基礎(chǔ)層,全球各地的城市、體育場(chǎng)館、工廠和醫(yī)院部署了數(shù)十億臺(tái)攝像頭和物聯(lián)網(wǎng)傳感器,每天產(chǎn)生數(shù) PB 的數(shù)據(jù)。隨著數(shù)據(jù)爆炸,使用人工智能來(lái)簡(jiǎn)化和執(zhí)行有效的 IVA 是非常必要的。
許多公司和開(kāi)發(fā)人員都在努力構(gòu)建可管理的 IVA 管道,因?yàn)檫@些工作需要人工智能專業(yè)知識(shí)、高效的硬件、可靠的軟件和廣泛的資源來(lái)大規(guī)模部署。 NVIDIA 構(gòu)建了 DeepStream 軟件開(kāi)發(fā)工具包 來(lái)消除這些障礙,并使每個(gè)人都能夠輕松高效地創(chuàng)建基于人工智能的 GPU 加速應(yīng)用程序,用于視頻分析。
DeepStream SDK 是一個(gè)可擴(kuò)展的框架,用于為 edge 構(gòu)建高性能、可管理的 IVA 應(yīng)用程序。 DeepStream 使您能夠在從智能城市和建筑到零售、制造和醫(yī)療保健等各個(gè)行業(yè)構(gòu)建人工智能應(yīng)用程序。
DeepStream 運(yùn)行時(shí)系統(tǒng)通過(guò)流水線實(shí)現(xiàn)深度學(xué)習(xí)推理、圖像和傳感器處理,并在流式應(yīng)用程序中將見(jiàn)解發(fā)送到云端。對(duì)于大規(guī)模部署,您可以使用容器構(gòu)建云原生的、深流應(yīng)用程序,并使用 Kubernetes 平臺(tái)來(lái)協(xié)調(diào)這些應(yīng)用程序。在邊緣部署時(shí),應(yīng)用程序可以在物聯(lián)網(wǎng)設(shè)備和云標(biāo)準(zhǔn)消息代理(如 Kafka 和 MQTT )之間進(jìn)行通信,以進(jìn)行大規(guī)模、廣域部署。

圖 1 。 DeepStream –邊緣到云 .
DeepStream 應(yīng)用程序可以運(yùn)行在由 NVIDIA Jetson 支持的邊緣設(shè)備上,也可以運(yùn)行在由 NVIDIA T4s 支持的本地服務(wù)器上。來(lái)自邊緣的數(shù)據(jù)可以被發(fā)送到云端進(jìn)行更高層次的分析和可視化。
本文的其余部分將深入探討 deepstream5 . 0 發(fā)布的關(guān)鍵特性。
DeepStream 5 . 0 功能
隨著 Deepstream5 . 0 , NVIDIA 使得在邊緣構(gòu)建和部署基于人工智能的 IVA 應(yīng)用變得比以往任何時(shí)候都容易。以下是新功能:
支持 NVIDIA Triton ?聲波風(fēng)廓線儀推理服務(wù)器
Python 包
應(yīng)用程序的遠(yuǎn)程管理和控制
安全通信
基于 Mask R-CNN 的實(shí)例分割
Triton 推斷服務(wù)器支持
創(chuàng)建人工智能是一個(gè)迭代的實(shí)驗(yàn)過(guò)程,在這個(gè)過(guò)程中,數(shù)據(jù)科學(xué)家花費(fèi)大量時(shí)間對(duì)不同的架構(gòu)進(jìn)行實(shí)驗(yàn)和原型設(shè)計(jì)。在這個(gè)階段,他們更關(guān)注如何最好地解決問(wèn)題,而不是人工智能模型的效率。他們希望花費(fèi)更多的時(shí)間來(lái)獲得用例的高精度,而不是花在優(yōu)化推理的周期上。他們希望在真實(shí)場(chǎng)景中快速建立原型,并查看模型的性能。
過(guò)去,使用 DeepStream 執(zhí)行視頻分析需要將模型轉(zhuǎn)換為 NVIDIA TensorRT ,一個(gè)推理運(yùn)行時(shí)。從 DeepStream 5 . 0 開(kāi)始,您可以選擇在培訓(xùn)框架中以本機(jī)方式運(yùn)行模型。這使您能夠快速原型化端到端系統(tǒng)。。
DeepStream 5 . 0 直接從應(yīng)用程序集成 Triton ?聲波風(fēng)廓線儀服務(wù)器。 Triton Server 為您提供了在 DeepStream 中使用任何深度學(xué)習(xí)框架的靈活性。推理服務(wù)通過(guò)可用的 API 從 DeepStream 插件( Gst-nvinferserver )本機(jī)集成。插件接收 NV12 / RGBA 緩沖區(qū)并將其發(fā)送到較低級(jí)別的庫(kù)。該庫(kù)對(duì)圖像進(jìn)行預(yù)處理并轉(zhuǎn)換為模型可接受的所需張量大小。張量通過(guò) CUDA 共享內(nèi)存發(fā)送到 Triton ?聲波風(fēng)廓線儀服務(wù)器庫(kù)。
推斷后, Triton Server 將輸出張量返回到共享庫(kù),在那里進(jìn)行后期處理以生成元數(shù)據(jù)。此元數(shù)據(jù)將附加回現(xiàn)有元數(shù)據(jù)并發(fā)送到下游。通過(guò)集成推理服務(wù)器,您可以使用 DeepStream 中的所有構(gòu)建塊來(lái)構(gòu)建一個(gè)高效的 IVA 管道,并在您的培訓(xùn)框架上執(zhí)行本機(jī)推理。

圖 2 。 DeepStream 5 . 0 中的 Triton 服務(wù)器推斷插件。
TensorRT 仍然由 DeepStream 提供本地支持。如果您正在尋找最高的推理吞吐量,或者資源受限,無(wú)法部署完整的框架和大型模型,那么這是首選的路徑。如果您正在尋找靈活性,并可以犧牲一些性能換取努力, Triton ?聲波風(fēng)廓線儀服務(wù)器是最佳途徑。
下表總結(jié)了這兩種方法的優(yōu)缺點(diǎn)。

表 1 。 TensorRT 和 Triton ?聲波風(fēng)廓線儀服務(wù)器的權(quán)衡。
以下是使用 DeepStream 的 Triton ?聲波風(fēng)廓線儀服務(wù)器的主要功能:
支持以下模型格式:
Jetson 、 TensorFlow GraphDef 和 SavedModel ,以及 TensorFlow 和 T4 上的 TensorFlow – TensorRT 模型
ONNX , PyTorch 和 Caffe2 NetDef 僅在 T4 上
多個(gè)模型(或同一模型的多個(gè)實(shí)例)可以在同一個(gè) GPU 上同時(shí)運(yùn)行。
為了開(kāi)始使用帶有 DeepStream 的 Triton 服務(wù)器,我們提供了幾個(gè)示例配置文件和一個(gè)用于檢索開(kāi)放源代碼模型的腳本。有運(yùn)行 TensorRT 和 TensorFlow 模型的例子。對(duì)于本文,我們將 DeepStream 安裝目錄稱為 $DEEPSTREAM_DIR 。實(shí)際的安裝目錄取決于您使用的是裸機(jī)版本還是容器。
如果您正在 x86 平臺(tái)上的 NVIDIA GPU 上運(yùn)行,請(qǐng)從 NVIDIA NGC 中拉出 nvcr.io/nvidia/deepstream:5.0-20.04-triton 容器。 Triton Server with DeepStream on x86 僅適用于 -triton 容器。如果您在 Jetson 上運(yùn)行, Triton Server –共享庫(kù)作為 DeepStream 的一部分預(yù)裝。這可用于任何 Jetson 容器。
轉(zhuǎn)到/ samples 目錄:
cd $DEEPSTREAM_DIR/deepstream-5.0/samples
在這個(gè)目錄中執(zhí)行 bash 腳本。這個(gè)腳本下載所有必需的開(kāi)源模型,并將提供的 Caffe 和 UFF 模型轉(zhuǎn)換為一個(gè) TensorRT 引擎文件。此步驟將所有模型轉(zhuǎn)換為引擎文件,因此可能需要幾分鐘或更長(zhǎng)時(shí)間。
生成的引擎文件的最大批處理大小在 bash 腳本中指定。要修改默認(rèn)批處理大小,必須修改此腳本。這也下載了 TensorFlowssd-inception_v2模型。
./prepare_ds_trtis_model_repo.sh
模型在/trtis_model_repo目錄中生成或復(fù)制。下面是如何運(yùn)行ssd-inception_v2模型。首先進(jìn)入/trtis_model_repo/ssd_inception_v2_coco_2018_01_28目錄并找到config.pbtxt文件。如果 bash 腳本成功運(yùn)行,您還應(yīng)該看到1/model.graphdef。這是 TensorFlow 冰凍石墨。
下面是模型回購(gòu)中提供的示例config.pbtxt文件。首先,使用platform關(guān)鍵字指定深度學(xué)習(xí)框架。可用選項(xiàng)如下:
-
tensorrt_plan -
tensorflow_graphdef -
tensorflow_savedmodel -
caffe2_netdef -
onnxruntime_onnx -
pytorch_libtorch -
custom
接下來(lái),指定輸入維度、數(shù)據(jù)類型和數(shù)據(jù)格式。然后,指定所有輸出張量的所有輸出維度和數(shù)據(jù)類型。有關(guān)配置文件中所有選項(xiàng)的詳細(xì)信息,請(qǐng)參閱模型配置。
name: "ssd_inception_v2_coco_2018_01_28"
platform: "tensorflow_graphdef"
max_batch_size: 128
input [
{
name: "image_tensor"
data_type: TYPE_UINT8
format: FORMAT_NHWC
dims: [ 300, 300, 3 ]
}
]
output [
{
name: "detection_boxes"
data_type: TYPE_FP32
dims: [ 100, 4]
reshape { shape: [100,4] }
},
{
name: "detection_classes"
data_type: TYPE_FP32
dims: [ 100 ]
},
{
name: "detection_scores"
data_type: TYPE_FP32
dims: [ 100 ]
},
{
name: "num_detections"
data_type: TYPE_FP32
dims: [ 1 ]
reshape { shape: [] }
}
]
接下來(lái),使用ssd_inception_v2模型運(yùn)行 deepstream 應(yīng)用程序。 Triton ?聲波風(fēng)廓線儀服務(wù)器的示例配置文件在/configs/deepstream-app-trtis中。運(yùn)行deepstream-app通常需要兩個(gè)或多個(gè)配置文件。一個(gè)是頂層配置文件,它為整個(gè)管道設(shè)置參數(shù),其他文件是用于推理的配置文件。
為了便于使用和簡(jiǎn)化,每個(gè)推理引擎都需要一個(gè)唯一的配置文件。如果級(jí)聯(lián)多個(gè)推斷,則需要多個(gè)配置文件。對(duì)于本例,請(qǐng)使用以下文件:
-
source1_primary_detector.txt -
config_infer_primary_detector_ssd_inception_v2_coco_2018_01_28.txt
[primary-gie] enable=1 (0): nvinfer; (1): nvinferserver plugin-type=1 infer-raw-output-dir=trtis-output batch-size=1 interval=0 gie-unique-id=1 config-file=config_infer_primary_detector_ssd_inception_v2_coco_2018_01_28.txt
source1_primary_detector.txt文件是頂級(jí)配置文件。如果您使用本機(jī) TensorRT 或 Triton ?聲波風(fēng)廓線儀服務(wù)器進(jìn)行推斷,這是很常見(jiàn)的。在這個(gè)配置文件中,將[primary-gie]下的插件類型更改為1,以使用推理服務(wù)器。
config_infer_primary_detector_ssd_inception_v2_coco_2018_01_28.txt文件用于指定推理選項(xiàng),如預(yù)處理、后處理和模型恢復(fù)。有關(guān)不同選項(xiàng)的更多信息,請(qǐng)參閱NVIDIA DeepStream SDK 快速入門指南和NVIDIA DeepStream 插件手冊(cè)。
對(duì)于將張量數(shù)據(jù)后處理到邊界框中,此示例使用名為NvDsInferParseCustomTfSSD的自定義邊界框解析器,如配置文件中的custom_parse_bbox_func鍵指定的那樣。此自定義函數(shù)在以下配置文件的custom_lib部分下指定的庫(kù)中編譯。$DEEPSTREAM_DIR/sources/libs/nvdsinfer_customparser/中提供了NvDsInferParseCustomTfSSD的源代碼。
infer_config {
unique_id: 5
gpu_ids: [0]
max_batch_size: 4
backend {
trt_is {
model_name: "ssd_inception_v2_coco_2018_01_28"
version: -1
model_repo {
root: "../../trtis_model_repo"
log_level: 2
tf_gpu_memory_fraction: 0.6
tf_disable_soft_placement: 0
}
}
}
preprocess {
network_format: IMAGE_FORMAT_RGB
tensor_order: TENSOR_ORDER_NONE
maintain_aspect_ratio: 0
normalize {
scale_factor: 1.0
channel_offsets: [0, 0, 0]
}
}
postprocess {
labelfile_path: "../../trtis_model_repo/ssd_inception_v2_coco_2018_01_28/labels.txt"
detection {
num_detected_classes: 91
custom_parse_bbox_func: "NvDsInferParseCustomTfSSD"
nms {
confidence_threshold: 0.3
iou_threshold: 0.4
topk : 20
}
}
}
extra {
copy_input_to_host_buffers: false
}
custom_lib {
path: "/opt/nvidia/deepstream/deepstream-5.0/lib/libnvds_infercustomparser.so"
}
}
input_control {
process_mode: PROCESS_MODE_FULL_FRAME
interval: 0
}
現(xiàn)在,使用以下命令運(yùn)行應(yīng)用程序:
deepstream-app -c source1_primary_detector.txt
一個(gè)彈出窗口應(yīng)該打開(kāi),播放視頻樣本,顯示行人、汽車和自行車周圍的邊界框。
應(yīng)用程序需要幾分鐘時(shí)間來(lái)構(gòu)建 TensorFlow 圖。如果應(yīng)用程序無(wú)法運(yùn)行并返回“ Killed ”,則很可能是系統(tǒng)內(nèi)存不足。檢查系統(tǒng)內(nèi)存使用情況以確認(rèn)問(wèn)題。如果是內(nèi)存問(wèn)題,則根據(jù)模型修改config_infer_primary_detector_ssd_inception_v2_coco_2018_01_28.txt中infer_config下的tf_gpu_memory_fraction參數(shù),或根據(jù)模型修改任何其他nvinferserver配置文件。此參數(shù)為 TF 模型分配每個(gè)進(jìn)程的 GPU 內(nèi)存部分。將其更改為 0 . 4 MIG ht 幫助。
該模型可檢測(cè)多達(dá) 91 個(gè)類別,包括各種動(dòng)物、食物和體育器材。有關(guān)可以檢測(cè)到的類的更多信息,請(qǐng)參閱trtis-model-repo/ssd_inception_v2_coco_2018_01_28/labels.txt文件。
嘗試用其他視頻運(yùn)行這個(gè)應(yīng)用程序,看看模型是否可以檢測(cè)到其他類。要將 Triton Server 與您的自定義 DeepStream 管道一起使用,請(qǐng)查看$DEEPSTREAM_DIR/sources/apps/sample-apps/deepstream-app下deepstream-app的源代碼。
Python 包
Python 易于使用,在創(chuàng)建 AI 模型時(shí)被數(shù)據(jù)科學(xué)家和深度學(xué)習(xí)專家廣泛采用。 NVIDIA 引入了 Python 綁定來(lái)幫助您使用 Python 構(gòu)建高性能的 AI 應(yīng)用程序。 DeepStream 管道可以使用 Gst Python 構(gòu)建, GStreamer 框架的 Python 綁定。
圖 3 。 Python 綁定堆棧。DeepStream Python 應(yīng)用程序使用 Gst Python API 操作構(gòu)造管道,并使用探測(cè)函數(shù)訪問(wèn)管道中各個(gè)點(diǎn)的數(shù)據(jù)。這些數(shù)據(jù)類型都是用本機(jī) C 編寫的,需要通過(guò) PyBindings 或 NumPy 使用一個(gè)填充層才能從 Python 應(yīng)用程序訪問(wèn)它們。張量數(shù)據(jù)是經(jīng)過(guò)推斷得出的原始張量輸出。如果您試圖檢測(cè)一個(gè)對(duì)象,這個(gè)張量數(shù)據(jù)需要通過(guò)解析和聚類算法進(jìn)行后處理,以在檢測(cè)到的對(duì)象周圍創(chuàng)建邊界框。
利用張量數(shù)據(jù)的可用性,您可以在 Python 應(yīng)用程序中創(chuàng)建解析算法。這一點(diǎn)很重要,因?yàn)閺埩繑?shù)據(jù)的大小和維度以及解析數(shù)據(jù)所需的解析和聚類算法都取決于人工智能模型的類型。如果你想為 DeepStream 帶來(lái)新的模型或新的后處理技術(shù),你會(huì)發(fā)現(xiàn)這非常有用。
另一個(gè)可以訪問(wèn)的有用數(shù)據(jù)源是圖像數(shù)據(jù)。這可以用來(lái)捕捉異常,在那里人工智能模型拿起一個(gè)對(duì)象,你想保存圖像以備將來(lái)參考。現(xiàn)在應(yīng)用程序支持訪問(wèn)此幀。
DeepStream 元數(shù)據(jù)的 Python 綁定以及示例應(yīng)用程序一起可用,以演示它們的使用情況。 Python 示例應(yīng)用程序可以從 GitHub repo NVIDIA-AI-IOT/deepstream_python_apps 下載。 Python 綁定模塊現(xiàn)在作為 DeepStreamSDK 包的一部分提供。
遠(yuǎn)程管理和控制應(yīng)用程序
將元數(shù)據(jù)從邊緣發(fā)送到云是有用的,但是能夠接收和控制從云到邊緣的消息也很重要。
DeepStream 5 。 0 現(xiàn)在支持雙向通信來(lái)發(fā)送和接收云到設(shè)備的消息。這對(duì)于各種用例尤其重要,例如觸發(fā)應(yīng)用程序以記錄重要事件、更改操作參數(shù)和應(yīng)用程序配置、空中傳送( OTA )更新或請(qǐng)求系統(tǒng)日志和其他重要信息。
圖 4 。雙向消息傳遞體系結(jié)構(gòu)。DeepStream 應(yīng)用程序可以訂閱 ApacheKafka 主題來(lái)接收來(lái)自云端的消息。設(shè)備到云消息傳遞目前通過(guò) Gstnvmsgbroker ( MSGBROKER )插件進(jìn)行。默認(rèn)情況下, Gstnvmsgbroker 插件使用適當(dāng)?shù)膮f(xié)議調(diào)用較低級(jí)別的適配器庫(kù)。您可以在 Kafka 、 AMQP 、 MQTT 或 Azure IoT 之間進(jìn)行選擇,甚至可以創(chuàng)建自定義適配器。 DeepStream 5 。 0 引入了一個(gè)新的低級(jí) msgbroker 庫(kù),為跨各種協(xié)議的雙向消息傳遞提供了一個(gè)統(tǒng)一的接口。 Gstnvmsgbroker 插件可以選擇與這個(gè)新庫(kù)接口,而不是直接調(diào)用協(xié)議適配器庫(kù),這是通過(guò)配置選項(xiàng)控制的。
對(duì)于云到邊緣消息傳遞, DeepStream 5 。 0 中支持的協(xié)議是 Kafka ,它使用新的低層 msgbroker 庫(kù),直接與 DeepStream 應(yīng)用程序交互。
DeepStream 5 。 0 支持多個(gè)其他物聯(lián)網(wǎng)功能,可與雙向消息傳遞結(jié)合使用。 DeepStream 現(xiàn)在提供了一個(gè) API ,用于根據(jù)異常情況或“可能到設(shè)備”消息進(jìn)行智能記錄。此外, DeepStream 還支持在應(yīng)用程序運(yùn)行時(shí)對(duì) AI 模型進(jìn)行 OTA 更新。
智能視頻錄制
通常需要基于事件的視頻錄制。智能錄制可以節(jié)省寶貴的磁盤空間,并提供更快的搜索速度,而不是連續(xù)記錄內(nèi)容。
智能記錄僅在滿足特定規(guī)則或條件時(shí)記錄事件。發(fā)出記錄信號(hào)的觸發(fā)器可以來(lái)自本地應(yīng)用程序、運(yùn)行在邊緣的某些服務(wù)或來(lái)自云端。
圖 5 。智能記錄架構(gòu)。提供了豐富的 api 來(lái)構(gòu)建智能記錄事件管理器。這些操作可用于隨時(shí)啟動(dòng)和停止錄制。當(dāng)必須記錄事件時(shí),在觸發(fā)器之前開(kāi)始保存剪輯是很有用的。使用智能記錄 API 操作,可以將其配置為在事件發(fā)生之前記錄時(shí)間。這是非常有用的,因?yàn)楫?dāng)異常被檢測(cè)和觸發(fā)時(shí),在異常發(fā)生時(shí)和記錄事件管理器啟動(dòng)記錄之間有一些延遲。在記錄開(kāi)始提供事件的整個(gè)序列之前,記錄一段有限的時(shí)間。
為了演示這個(gè)特性, deepstream-test5 應(yīng)用程序內(nèi)置了一個(gè)智能記錄事件管理器。智能錄制模塊保持視頻緩存,以便錄制的視頻不僅在事件生成后具有幀,還可以在事件發(fā)生之前具有幀。這個(gè)大小的視頻緩存可以配置為每個(gè)用例。事件管理器啟動(dòng)智能記錄模塊的啟動(dòng)和停止選項(xiàng)。
從云端接收到的 JSON 消息可以觸發(fā)錄制。報(bào)文格式如下:
{
command: string //
start: string // "2020-05-18T20:02:00.051Z"
end: string // "2020-05-18T20:02:02.851Z",
sensor: {
id: string
}
}
deepstream-test5 示例應(yīng)用程序演示了從云端接收和處理此類消息的過(guò)程。這是目前支持卡夫卡。要激活此功能,請(qǐng)?jiān)趹?yīng)用程序配置文件中填充并啟用以下塊:
Configure this group to enable cloud message consumer. [message-consumer0] enable=1 proto-lib=/opt/nvidia/deepstream/deepstream-5.0/lib/libnvds_kafka_proto.so conn-str=; config-file= subscribe-topic-list=;; Use this option if message has sensor name as id instead of index (0,1,2 etc.). sensor-list-file=dstest5_msgconv_sample_config.txt
當(dāng)應(yīng)用程序運(yùn)行時(shí),使用 Kafka 代理在subscribe-topic-list中發(fā)布關(guān)于主題的上述 JSON 消息,以啟動(dòng)和停止錄制。
有關(guān)如何在應(yīng)用程序中使用此功能的更多信息,請(qǐng)參閱NVIDIA DeepStream 插件手冊(cè)的智能視頻錄制部分。 deepstream-test5 的源代碼可以在以下目錄中找到:
$DEEPSTREAM_DIR/sources/apps/sample_apps/deepstream-test5/
智能記錄事件管理器的實(shí)現(xiàn)可在以下文件中找到:
$DEEPSTREAM_DIR/sources/apps/apps-common/src/deepstream_source_bin.c
OTA 模型更新
edge IVA 應(yīng)用程序的一個(gè)理想需求是在 AI 模型得到增強(qiáng)以獲得更高的精度時(shí)動(dòng)態(tài)地修改或更新它們。使用 DeepStream 5 。 0 ,您現(xiàn)在可以在應(yīng)用程序運(yùn)行時(shí)更新模型。這意味著模型可以在零停機(jī)時(shí)間內(nèi)更新。這對(duì)于不能接受任何延遲的任務(wù)關(guān)鍵型應(yīng)用程序非常重要。
當(dāng)需要連續(xù)交換模型時(shí),此功能也很有用。一個(gè)例子是基于一天中的時(shí)間交換模型。一般來(lái)說(shuō),一種型號(hào)的 MIG ht 在白天光線充足的情況下工作得很好,但另一種型號(hào)在光線較暗的環(huán)境下工作得更好。在這種情況下,需要根據(jù)一天中的時(shí)間輕松地交換模型,而無(wú)需重新啟動(dòng)應(yīng)用程序。假設(shè)正在更新的模型應(yīng)該具有相同的網(wǎng)絡(luò)參數(shù)。
在示例應(yīng)用程序中,模型更新由修改配置文件的用戶啟動(dòng)。 DeepStream 應(yīng)用程序監(jiān)視配置文件中所做的更改并對(duì)其進(jìn)行驗(yàn)證。在更改被驗(yàn)證后, DeepStream OTA 處理程序交換到新模型,完成了這個(gè)過(guò)程。
圖 6 。 OTA 模型更新工作流。這個(gè)特性在 deepstream-test5 應(yīng)用程序中進(jìn)行了演示,并提供了源代碼。要運(yùn)行 OTA 模型更新,請(qǐng)運(yùn)行帶有 -o 選項(xiàng)的應(yīng)用程序。這是 OTA 覆蓋文件。如果要交換模型,請(qǐng)使用新的模型引擎文件更新此文件。
deepstream-test5 -c-o
更新后的模型需要是一個(gè) TensorRT 引擎文件,這是在更改 OTA 覆蓋文件之前離線完成的。要?jiǎng)?chuàng)建 TensorRT 引擎文件,請(qǐng)運(yùn)行trtexec:
trtexec --model= --maxBatch= --saveEngine= --deploy= --buildOnly
模型生成后,更新 OTA 覆蓋文件。當(dāng)應(yīng)用程序檢測(cè)到此更改時(shí),它會(huì)自動(dòng)啟動(dòng)模型更新過(guò)程。在實(shí)際環(huán)境中,您需要在邊緣上有一個(gè)守護(hù)進(jìn)程或服務(wù)來(lái)更新邊緣上的文件或從云端更新文件。
安全通信
為了在規(guī)模上成功部署物聯(lián)網(wǎng)設(shè)備,最重要和被忽視的一個(gè)方面是安全性:能夠在邊緣設(shè)備和云之間安全地通信。對(duì)于公司來(lái)說(shuō),確保物聯(lián)網(wǎng)設(shè)備的安全以及在可信位置收發(fā)敏感數(shù)據(jù)至關(guān)重要。
在 DeepStream 5 。 0 中, Kafka 適配器支持使用基于 TLS 的加密的安全通信,從而確保數(shù)據(jù)的機(jī)密性。 TLS (傳輸層安全性)是 SSL 的繼承者,但這兩個(gè)術(shù)語(yǔ)在文獻(xiàn)中仍然可以互換使用。 TLS / SSL 通常用于在連接到 web 上的服務(wù)器(例如 HTTPS )時(shí)進(jìn)行安全通信。 TLS 使用公鑰加密技術(shù)來(lái)建立會(huì)話密鑰, DeepStream 應(yīng)用程序和代理程序?qū)ΨQ使用這些密鑰來(lái)加密會(huì)話期間傳輸?shù)臄?shù)據(jù),因此即使在公共網(wǎng)絡(luò)上發(fā)送數(shù)據(jù),也要對(duì)其保密。
DeepStream 5 。 0 支持兩種形式的客戶端身份驗(yàn)證:基于 SSL 證書的雙向 TLS 身份驗(yàn)證和基于用戶名/密碼機(jī)制的 SASL / Plain 身份驗(yàn)證??蛻舳松矸蒡?yàn)證使代理能夠驗(yàn)證連接到它們的客戶端,并根據(jù)其身份選擇性地提供訪問(wèn)控制。雖然 SASL / Plain 使用了熟悉的密碼身份驗(yàn)證隱喻,并且更容易設(shè)置,但是雙向 TLS 使用客戶端證書進(jìn)行身份驗(yàn)證,并且提供了一些優(yōu)勢(shì),可以實(shí)現(xiàn)健壯的安全機(jī)制。
圖 7 。使用 SSL 證書進(jìn)行安全身份驗(yàn)證。基于 Mask R-CNN 的實(shí)例分割
為了感知像素,從而產(chǎn)生可操作的洞察力,計(jì)算機(jī)視覺(jué)依賴于深度學(xué)習(xí)來(lái)提供對(duì)環(huán)境的理解。目標(biāo)檢測(cè)是一種常用的技術(shù)來(lái)識(shí)別幀中的單個(gè)對(duì)象,如人或汽車。雖然對(duì)象檢測(cè)對(duì)于某些應(yīng)用程序是有益的,但是當(dāng)您希望在像素級(jí)理解對(duì)象時(shí),它就不夠了。。
實(shí)例分割在識(shí)別對(duì)象時(shí)提供像素級(jí)的精度。分割對(duì)于需要在對(duì)象及其背景之間進(jìn)行描繪的應(yīng)用程序非常有用,例如在 AI 驅(qū)動(dòng)的綠色屏幕中,您希望模糊或更改幀的背景,或者分割幀中的道路或天空。它還可以用于使用輸出的實(shí)例掩碼來(lái)提高跟蹤器的精度。
DeepStream 通過(guò)一個(gè)新的自定義解析器(用于后處理)、屏幕顯示( OSD )中用于呈現(xiàn)分段掩碼的掩碼覆蓋函數(shù)、用于掩碼的新元數(shù)據(jù)類型以及用于標(biāo)識(shí)消息轉(zhuǎn)換器中多邊形的新消息模式,實(shí)現(xiàn)了管道中的實(shí)例分段。您可以使用跟蹤器中的掩碼元數(shù)據(jù)來(lái)改進(jìn)跟蹤,在屏幕上呈現(xiàn)掩碼,或者通過(guò) MessageBroker 發(fā)送掩碼元數(shù)據(jù)以進(jìn)行脫機(jī)分析。
圖 8 。面具 R-CNN 深水管道。要開(kāi)始使用 Mask R-CNN ,請(qǐng)從 NVIDIA-AI-IOT/deepstream_tlt_apps#tlt-models GitHub repo 下載一個(gè)經(jīng)過(guò)預(yù)訓(xùn)練的模型。該模型在 NVIDIA 內(nèi)部汽車儀表盤圖像數(shù)據(jù)集上訓(xùn)練,以識(shí)別汽車。有關(guān)詳細(xì)信息,請(qǐng)參見(jiàn) 使用 NVIDIA 遷移學(xué)習(xí)工具箱的 MaskRCNN 實(shí)例分割訓(xùn)練模型 。
DeepStream SDK 包含兩個(gè)示例應(yīng)用程序,演示如何使用預(yù)訓(xùn)練掩碼 R-CNN 模型。 Mask R-CNN 模型可以從 deepstream-app 調(diào)用。以下目錄中提供了配置管道和模型的配置:
$DEEPSTREAM_DIR/samples/configs/tlt_pretrained_models/
以下是要為 Mask R-CNN 模型運(yùn)行的關(guān)鍵配置文件:
$DEEPSTREAM_DIR/samples/configs/tlt_pretrained_models/deepstream_app_source1_mrcnn.txt $DEEPSTREAM_DIR/samples/configs/tlt_pretrained_models/config_infer_primary_mrcnn.txt
/deepstream_app_source1_mrcnn.txt是deepstream-app使用的主配置文件,它為整個(gè)視頻分析管道配置參數(shù)。以下是必須根據(jù)模型修改的關(guān)鍵參數(shù)。在[OSD]下,將display-mask選項(xiàng)更改為 1 ,這將在對(duì)象上覆蓋遮罩。
[osd] enable=1 gpu-id=0 border-width=3 text-size=15 text-color=1;1;1;1; text-bg-color=0.3;0.3;0.3;1 font=Serif display-mask=1 display-bbox=0 display-text=0
/config_infer_primary_mrcnn.txt文件是一個(gè)推理配置文件,用于設(shè)置掩碼 R-CNN 推理的參數(shù)。此文件由[primary-gie]節(jié)下的主deepstream_app_source1_mrcnn.txt配置引用。以下是運(yùn)行 Mask R-CNN 所需的關(guān)鍵參數(shù):
[property] gpu-id=0 net-scale-factor=0.017507 offsets=123.675;116.280;103.53 model-color-format=0 tlt-model-key= tlt-encoded-model= output-blob-names=generate_detections;mask_head/mask_fcn_logits/BiasAdd parse-bbox-instance-mask-func-name=NvDsInferParseCustomMrcnnTLT custom-lib-path=/opt/nvidia/deepstream/deepstream-5.0/lib/libnvds_infercustomparser.so network-type=3 ## 3 is for instance segmentation network labelfile-path= int8-calib-file= infer-dims= num-detected-classes=<# of classes if different than default> uff-input-blob-name=Input batch-size=1 0=FP32, 1=INT8, 2=FP16 mode network-mode=2 interval=0 gie-unique-id=1 no cluster 0=Group Rectangles, 1=DBSCAN, 2=NMS, 3= DBSCAN+NMS Hybrid, 4 = None(No clustering) MRCNN supports only cluster-mode=4; Clustering is done by the model itself cluster-mode=4 output-instance-mask=1
parse-bbox-instance-mask-func-name選項(xiàng)設(shè)置自定義后處理函數(shù)來(lái)解析推理的輸出。此函數(shù)內(nèi)置于custom-lib-path指定的. so 文件中。此庫(kù)的源在以下目錄中提供:
$DEEPSTREAM_DIR/sources/libs/nvdsinfer_customparser/nvdsinfer_custombboxparser.cpp.
要運(yùn)行應(yīng)用程序,請(qǐng)運(yùn)行以下命令:
deepstream-app -c deepstream_app_source1_mrcnn.txt
它在 SDK 中提供的剪輯上運(yùn)行。要嘗試自己的源代碼,請(qǐng)?jiān)?code style="font-size:inherit;color:inherit;margin:0px;padding:0px;border:0px;font-style:inherit;font-variant:inherit;font-weight:inherit;line-height:inherit;vertical-align:baseline;background-color:rgb(244,244,244);">/deepstream_app_source1_mrcnn.txt中修改[source0]。圖 9 顯示了在不同平臺(tái)上使用deepstream-app可以預(yù)期的端到端性能。性能以deepstream-app處理的每秒幀數(shù)( FPS )度量:
- 在 Jetson Nano 和 DLAs 上,它的批處理大小為 1 。
- 在 Jetson AGX Xavier 和 Xavier NX 上,運(yùn)行的批處理大小為 2 。
- 在 T4 上,它以批大小 4 運(yùn)行。
圖 9 。履行t他偽裝了 R-CNN 模式。雖然直觀地看到輸出是很好的,但真正的用例可能是將元數(shù)據(jù)發(fā)送到不同的進(jìn)程或云。這些信息可以由邊緣或云端的不同應(yīng)用程序使用,以進(jìn)行進(jìn)一步的分析。
使用 DeepStream ,您可以使用支持的 messagebroker 協(xié)議之一(如 Kafka 或 MQTT )使用為 mask polygon 定義的模式來(lái)發(fā)送 mask 元數(shù)據(jù)。 DeepStream 船舶具有 MaskRCNN 模型的邊緣到云示例。有關(guān)如何使用 message broker 準(zhǔn)備事件元數(shù)據(jù)和發(fā)送掩碼信息的更多信息,請(qǐng)參閱以下應(yīng)用程序:
$DEEPSTREAM_DIR/sources/apps/sample_apps/deepstream-mrcnn-app
要部署的生成
DeepStream 5 。 0 提供了許多很好的特性,使開(kāi)發(fā)用于邊緣部署的 AI 應(yīng)用程序變得容易。您可以使用 Python API actions 和 Triton 服務(wù)器,以最小的工作量快速原型化和創(chuàng)建 IVA 管道。
AI 模型可以通過(guò) Triton Server 在培訓(xùn)框架中進(jìn)行本地部署,以增加靈活性。您可以使用大量的物聯(lián)網(wǎng)特性來(lái)創(chuàng)建可管理的 IVA 應(yīng)用程序??梢允褂秒p向 TLS 身份驗(yàn)證將消息從邊緣安全地發(fā)送到云。邊緣和云之間的雙向通信提供了更好的應(yīng)用程序可管理性。這可以用來(lái)更新邊緣的人工智能模型,記錄感興趣的事件,或者使用它從設(shè)備中檢索信息。
關(guān)于作者
Zheng Liu 是 NVIDIA IVA 平臺(tái)軟件組的工程經(jīng)理,專注于 DeepStream SDK 開(kāi)發(fā)。鄭擁有紐約康奈爾大學(xué)計(jì)算機(jī)科學(xué)碩士學(xué)位。
Bhushan Rupde 管理著位于浦那 NVIDIA 的智能視頻分析小組,目前負(fù)責(zé) DeepStream SDK 。 Bhushan 擁有印度孟買 IIT 電氣工程碩士學(xué)位。
Chintan Shah 是 NVIDIA 的產(chǎn)品經(jīng)理,專注于智能視頻分析解決方案的 AI 產(chǎn)品。他管理工具箱,用于有效的深度學(xué)習(xí)培訓(xùn)和實(shí)時(shí)推理。在他之前的工作中,他正在為 NVIDIA GPU 開(kāi)發(fā)硬件 IP 。他擁有北卡羅來(lái)納州立大學(xué)電氣工程碩士學(xué)位。
Prashant Gaikwad 是 NVIDIA 的高級(jí)軟件工程師。他在圣塔 Clara 工作,與 NVDLA 團(tuán)隊(duì)一起加速 NVDLA 上的 DNNs 。他對(duì)人工智能加速器和這一領(lǐng)域的發(fā)展充滿熱情。
Bhanu Pisupati 在過(guò)去的 15 年里一直在物聯(lián)網(wǎng)、嵌入式系統(tǒng)和計(jì)算機(jī)體系結(jié)構(gòu)領(lǐng)域開(kāi)發(fā)產(chǎn)品、系統(tǒng)和工具。他目前參與設(shè)計(jì)和開(kāi)發(fā)基于深度學(xué)習(xí)的智能城市解決方案,作為 NVIDIA 大都市“邊緣到云”平臺(tái)的一部分。他擁有印第安納大學(xué)布盧明頓分校計(jì)算機(jī)科學(xué)博士學(xué)位和馬德拉斯印度理工學(xué)院土木工程本科學(xué)位。
審核編輯:郭婷
-
NVIDIA
+關(guān)注
關(guān)注
14文章
5682瀏覽量
110087 -
gpu
+關(guān)注
關(guān)注
28文章
5258瀏覽量
136037 -
服務(wù)器
+關(guān)注
關(guān)注
14文章
10339瀏覽量
91733
發(fā)布評(píng)論請(qǐng)先 登錄
NVIDIA開(kāi)放模型助力構(gòu)建下一代數(shù)字健康智能體
NVIDIA cuDF和cuVS獲全球領(lǐng)先數(shù)據(jù)平臺(tái)采用
NVIDIA發(fā)布Vera Rubin DSX AI Factory參考設(shè)計(jì)
使用OpenUSD與NVIDIA Halos構(gòu)建安全物理AI系統(tǒng)
NVIDIA 收購(gòu)開(kāi)源工作負(fù)載管理提供商 SchedMD
使用NVIDIA Nemotron RAG和Microsoft SQL Server 2025構(gòu)建高性能AI應(yīng)用
NVIDIA DGX Spark助力構(gòu)建自己的AI模型
NVIDIA推出NVQLink高速互連架構(gòu)
NVIDIA Omniverse Extension開(kāi)發(fā)秘籍
使用NVIDIA DeepStream構(gòu)建可管理的IVA管道
評(píng)論