無論是希望平衡產(chǎn)品分布和優(yōu)化交通的倉庫,工廠裝配線檢查,還是醫(yī)院管理,確保員工和護(hù)理人員在護(hù)理患者時(shí)使用個(gè)人防護(hù)設(shè)備( PPE ),高級(jí)智能視頻分析( IVA )都非常有用。
在基礎(chǔ)層,全球各地的城市、體育場館、工廠和醫(yī)院部署了數(shù)十億臺(tái)攝像頭和物聯(lián)網(wǎng)傳感器,每天產(chǎn)生數(shù) PB 的數(shù)據(jù)。隨著數(shù)據(jù)爆炸,使用人工智能來簡化和執(zhí)行有效的 IVA 是非常必要的。
許多公司和開發(fā)人員都在努力構(gòu)建可管理的 IVA 管道,因?yàn)檫@些工作需要人工智能專業(yè)知識(shí)、高效的硬件、可靠的軟件和廣泛的資源來大規(guī)模部署。 NVIDIA 構(gòu)建了 DeepStream 軟件開發(fā)工具包 來消除這些障礙,并使每個(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)通過流水線實(shí)現(xiàn)深度學(xué)習(xí)推理、圖像和傳感器處理,并在流式應(yīng)用程序中將見解發(fā)送到云端。對(duì)于大規(guī)模部署,您可以使用容器構(gòu)建云原生的、深流應(yīng)用程序,并使用 Kubernetes 平臺(tá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ù)器上。來自邊緣的數(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)過程,在這個(gè)過程中,數(shù)據(jù)科學(xué)家花費(fèi)大量時(shí)間對(duì)不同的架構(gòu)進(jìn)行實(shí)驗(yàn)和原型設(shè)計(jì)。在這個(gè)階段,他們更關(guān)注如何最好地解決問題,而不是人工智能模型的效率。他們希望花費(fèi)更多的時(shí)間來獲得用例的高精度,而不是花在優(yōu)化推理的周期上。他們希望在真實(shí)場景中快速建立原型,并查看模型的性能。
過去,使用 DeepStream 執(zhí)行視頻分析需要將模型轉(zhuǎn)換為 NVIDIA TensorRT ,一個(gè)推理運(yùn)行時(shí)。從 DeepStream 5 . 0 開始,您可以選擇在培訓(xùn)框架中以本機(jī)方式運(yùn)行模型。這使您能夠快速原型化端到端系統(tǒng)。。
DeepStream 5 . 0 直接從應(yīng)用程序集成 Triton ?聲波風(fēng)廓線儀服務(wù)器。 Triton Server 為您提供了在 DeepStream 中使用任何深度學(xué)習(xí)框架的靈活性。推理服務(wù)通過可用的 API 從 DeepStream 插件( Gst-nvinferserver )本機(jī)集成。插件接收 NV12 / RGBA 緩沖區(qū)并將其發(fā)送到較低級(jí)別的庫。該庫對(duì)圖像進(jìn)行預(yù)處理并轉(zhuǎn)換為模型可接受的所需張量大小。張量通過 CUDA 共享內(nèi)存發(fā)送到 Triton ?聲波風(fēng)廓線儀服務(wù)器庫。
推斷后, Triton Server 將輸出張量返回到共享庫,在那里進(jìn)行后期處理以生成元數(shù)據(jù)。此元數(shù)據(jù)將附加回現(xiàn)有元數(shù)據(jù)并發(fā)送到下游。通過集成推理服務(wù)器,您可以使用 DeepStream 中的所有構(gòu)建塊來構(gòu)建一個(gè)高效的 IVA 管道,并在您的培訓(xùn)框架上執(zhí)行本機(jī)推理。
圖 2 。 DeepStream 5 . 0 中的 Triton 服務(wù)器推斷插件。
TensorRT 仍然由 DeepStream 提供本地支持。如果您正在尋找最高的推理吞吐量,或者資源受限,無法部署完整的框架和大型模型,那么這是首選的路徑。如果您正在尋找靈活性,并可以犧牲一些性能換取努力, 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)行。
為了開始使用帶有 DeepStream 的 Triton 服務(wù)器,我們提供了幾個(gè)示例配置文件和一個(gè)用于檢索開放源代碼模型的腳本。有運(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 –共享庫作為 DeepStream 的一部分預(yù)裝。這可用于任何 Jetson 容器。
轉(zhuǎn)到/ samples 目錄:
cd $DEEPSTREAM_DIR/deepstream-5.0/samples
在這個(gè)目錄中執(zhí)行 bash 腳本。這個(gè)腳本下載所有必需的開源模型,并將提供的 Caffe 和 UFF 模型轉(zhuǎn)換為一個(gè) TensorRT 引擎文件。此步驟將所有模型轉(zhuǎn)換為引擎文件,因此可能需要幾分鐘或更長時(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 冰凍石墨。
下面是模型回購中提供的示例config.pbtxt
文件。首先,使用platform
關(guān)鍵字指定深度學(xué)習(xí)框架??捎眠x項(xiàng)如下:
-
tensorrt_plan
-
tensorflow_graphdef
-
tensorflow_savedmodel
-
caffe2_netdef
-
onnxruntime_onnx
-
pytorch_libtorch
-
custom
接下來,指定輸入維度、數(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: [] } } ]
接下來,使用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ù),其他文件是用于推理的配置文件。
為了便于使用和簡化,每個(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)行推斷,這是很常見的。在這個(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
部分下指定的庫中編譯。$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)該打開,播放視頻樣本,顯示行人、汽車和自行車周圍的邊界框。
應(yīng)用程序需要幾分鐘時(shí)間來構(gòu)建 TensorFlow 圖。如果應(yīng)用程序無法運(yùn)行并返回“ Killed ”,則很可能是系統(tǒng)內(nèi)存不足。檢查系統(tǒng)內(nèi)存使用情況以確認(rèn)問題。如果是內(nèi)存問題,則根據(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 幫助。
該模型可檢測多達(dá) 91 個(gè)類別,包括各種動(dòng)物、食物和體育器材。有關(guān)可以檢測到的類的更多信息,請(qǐng)參閱trtis-model-repo/ssd_inception_v2_coco_2018_01_28/labels.txt
文件。
嘗試用其他視頻運(yùn)行這個(gè)應(yīng)用程序,看看模型是否可以檢測到其他類。要將 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 綁定來幫助您使用 Python 構(gòu)建高性能的 AI 應(yīng)用程序。 DeepStream 管道可以使用 Gst Python 構(gòu)建, GStreamer 框架的 Python 綁定。

DeepStream Python 應(yīng)用程序使用 Gst Python API 操作構(gòu)造管道,并使用探測函數(shù)訪問管道中各個(gè)點(diǎn)的數(shù)據(jù)。這些數(shù)據(jù)類型都是用本機(jī) C 編寫的,需要通過 PyBindings 或 NumPy 使用一個(gè)填充層才能從 Python 應(yīng)用程序訪問它們。張量數(shù)據(jù)是經(jīng)過推斷得出的原始張量輸出。如果您試圖檢測一個(gè)對(duì)象,這個(gè)張量數(shù)據(jù)需要通過解析和聚類算法進(jìn)行后處理,以在檢測到的對(duì)象周圍創(chuàng)建邊界框。
利用張量數(shù)據(jù)的可用性,您可以在 Python 應(yīng)用程序中創(chuàng)建解析算法。這一點(diǎn)很重要,因?yàn)閺埩繑?shù)據(jù)的大小和維度以及解析數(shù)據(jù)所需的解析和聚類算法都取決于人工智能模型的類型。如果你想為 DeepStream 帶來新的模型或新的后處理技術(shù),你會(huì)發(fā)現(xiàn)這非常有用。
另一個(gè)可以訪問的有用數(shù)據(jù)源是圖像數(shù)據(jù)。這可以用來捕捉異常,在那里人工智能模型拿起一個(gè)對(duì)象,你想保存圖像以備將來參考?,F(xiàn)在應(yīng)用程序支持訪問此幀。
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)在支持雙向通信來發(fā)送和接收云到設(shè)備的消息。這對(duì)于各種用例尤其重要,例如觸發(fā)應(yīng)用程序以記錄重要事件、更改操作參數(shù)和應(yīng)用程序配置、空中傳送( OTA )更新或請(qǐng)求系統(tǒng)日志和其他重要信息。

DeepStream 應(yīng)用程序可以訂閱 ApacheKafka 主題來接收來自云端的消息。設(shè)備到云消息傳遞目前通過 Gstnvmsgbroker ( MSGBROKER )插件進(jìn)行。默認(rèn)情況下, Gstnvmsgbroker 插件使用適當(dāng)?shù)膮f(xié)議調(diào)用較低級(jí)別的適配器庫。您可以在 Kafka 、 AMQP 、 MQTT 或 Azure IoT 之間進(jìn)行選擇,甚至可以創(chuàng)建自定義適配器。 DeepStream 5 。 0 引入了一個(gè)新的低級(jí) msgbroker 庫,為跨各種協(xié)議的雙向消息傳遞提供了一個(gè)統(tǒng)一的接口。 Gstnvmsgbroker 插件可以選擇與這個(gè)新庫接口,而不是直接調(diào)用協(xié)議適配器庫,這是通過配置選項(xiàng)控制的。
對(duì)于云到邊緣消息傳遞, DeepStream 5 。 0 中支持的協(xié)議是 Kafka ,它使用新的低層 msgbroker 庫,直接與 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ā)器可以來自本地應(yīng)用程序、運(yùn)行在邊緣的某些服務(wù)或來自云端。

提供了豐富的 api 來構(gòu)建智能記錄事件管理器。這些操作可用于隨時(shí)啟動(dòng)和停止錄制。當(dāng)必須記錄事件時(shí),在觸發(fā)器之前開始保存剪輯是很有用的。使用智能記錄 API 操作,可以將其配置為在事件發(fā)生之前記錄時(shí)間。這是非常有用的,因?yàn)楫?dāng)異常被檢測和觸發(fā)時(shí),在異常發(fā)生時(shí)和記錄事件管理器啟動(dòng)記錄之間有一些延遲。在記錄開始提供事件的整個(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)用程序演示了從云端接收和處理此類消息的過程。這是目前支持卡夫卡。要激活此功能,請(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í)間交換模型。一般來說,一種型號(hào)的 MIG ht 在白天光線充足的情況下工作得很好,但另一種型號(hào)在光線較暗的環(huán)境下工作得更好。在這種情況下,需要根據(jù)一天中的時(shí)間輕松地交換模型,而無需重新啟動(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è)過程。

這個(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)用程序檢測到此更改時(shí),它會(huì)自動(dòng)啟動(dòng)模型更新過程。在實(shí)際環(huán)境中,您需要在邊緣上有一個(gè)守護(hù)進(jìn)程或服務(wù)來更新邊緣上的文件或從云端更新文件。
安全通信
為了在規(guī)模上成功部署物聯(lián)網(wǎng)設(shè)備,最重要和被忽視的一個(gè)方面是安全性:能夠在邊緣設(shè)備和云之間安全地通信。對(duì)于公司來說,確保物聯(lián)網(wǎng)設(shè)備的安全以及在可信位置收發(fā)敏感數(shù)據(jù)至關(guān)重要。
在 DeepStream 5 。 0 中, Kafka 適配器支持使用基于 TLS 的加密的安全通信,從而確保數(shù)據(jù)的機(jī)密性。 TLS (傳輸層安全性)是 SSL 的繼承者,但這兩個(gè)術(shù)語在文獻(xiàn)中仍然可以互換使用。 TLS / SSL 通常用于在連接到 web 上的服務(wù)器(例如 HTTPS )時(shí)進(jìn)行安全通信。 TLS 使用公鑰加密技術(shù)來建立會(huì)話密鑰, DeepStream 應(yīng)用程序和代理程序?qū)ΨQ使用這些密鑰來加密會(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ù)其身份選擇性地提供訪問控制。雖然 SASL / Plain 使用了熟悉的密碼身份驗(yàn)證隱喻,并且更容易設(shè)置,但是雙向 TLS 使用客戶端證書進(jìn)行身份驗(yàn)證,并且提供了一些優(yōu)勢,可以實(shí)現(xiàn)健壯的安全機(jī)制。

基于 Mask R-CNN 的實(shí)例分割
為了感知像素,從而產(chǎn)生可操作的洞察力,計(jì)算機(jī)視覺依賴于深度學(xué)習(xí)來提供對(duì)環(huán)境的理解。目標(biāo)檢測是一種常用的技術(shù)來識(shí)別幀中的單個(gè)對(duì)象,如人或汽車。雖然對(duì)象檢測對(duì)于某些應(yīng)用程序是有益的,但是當(dāng)您希望在像素級(jí)理解對(duì)象時(shí),它就不夠了。。
實(shí)例分割在識(shí)別對(duì)象時(shí)提供像素級(jí)的精度。分割對(duì)于需要在對(duì)象及其背景之間進(jìn)行描繪的應(yīng)用程序非常有用,例如在 AI 驅(qū)動(dòng)的綠色屏幕中,您希望模糊或更改幀的背景,或者分割幀中的道路或天空。它還可以用于使用輸出的實(shí)例掩碼來提高跟蹤器的精度。
DeepStream 通過一個(gè)新的自定義解析器(用于后處理)、屏幕顯示( OSD )中用于呈現(xiàn)分段掩碼的掩碼覆蓋函數(shù)、用于掩碼的新元數(shù)據(jù)類型以及用于標(biāo)識(shí)消息轉(zhuǎn)換器中多邊形的新消息模式,實(shí)現(xiàn)了管道中的實(shí)例分段。您可以使用跟蹤器中的掩碼元數(shù)據(jù)來改進(jìn)跟蹤,在屏幕上呈現(xiàn)掩碼,或者通過 MessageBroker 發(fā)送掩碼元數(shù)據(jù)以進(jìn)行脫機(jī)分析。

要開始使用 Mask R-CNN ,請(qǐng)從 NVIDIA-AI-IOT/deepstream_tlt_apps#tlt-models GitHub repo 下載一個(gè)經(jīng)過預(yù)訓(xùn)練的模型。該模型在 NVIDIA 內(nèi)部汽車儀表盤圖像數(shù)據(jù)集上訓(xùn)練,以識(shí)別汽車。有關(guān)詳細(xì)信息,請(qǐng)參見 使用 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ù)來解析推理的輸出。此函數(shù)內(nèi)置于custom-lib-path
指定的. so 文件中。此庫的源在以下目錄中提供:
$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)行。

雖然直觀地看到輸出是很好的,但真正的用例可能是將元數(shù)據(jù)發(fā)送到不同的進(jìn)程或云。這些信息可以由邊緣或云端的不同應(yīng)用程序使用,以進(jìn)行進(jìn)一步的分析。
使用 DeepStream ,您可以使用支持的 messagebroker 協(xié)議之一(如 Kafka 或 MQTT )使用為 mask polygon 定義的模式來發(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 提供了許多很好的特性,使開發(fā)用于邊緣部署的 AI 應(yīng)用程序變得容易。您可以使用 Python API actions 和 Triton 服務(wù)器,以最小的工作量快速原型化和創(chuàng)建 IVA 管道。
AI 模型可以通過 Triton Server 在培訓(xùn)框架中進(jìn)行本地部署,以增加靈活性。您可以使用大量的物聯(lián)網(wǎng)特性來創(chuàng)建可管理的 IVA 應(yīng)用程序??梢允褂秒p向 TLS 身份驗(yàn)證將消息從邊緣安全地發(fā)送到云。邊緣和云之間的雙向通信提供了更好的應(yīng)用程序可管理性。這可以用來更新邊緣的人工智能模型,記錄感興趣的事件,或者使用它從設(shè)備中檢索信息。
關(guān)于作者
Zheng Liu 是 NVIDIA IVA 平臺(tái)軟件組的工程經(jīng)理,專注于 DeepStream SDK 開發(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 開發(fā)硬件 IP 。他擁有北卡羅來納州立大學(xué)電氣工程碩士學(xué)位。
Prashant Gaikwad 是 NVIDIA 的高級(jí)軟件工程師。他在圣塔 Clara 工作,與 NVDLA 團(tuán)隊(duì)一起加速 NVDLA 上的 DNNs 。他對(duì)人工智能加速器和這一領(lǐng)域的發(fā)展充滿熱情。
Bhanu Pisupati 在過去的 15 年里一直在物聯(lián)網(wǎng)、嵌入式系統(tǒng)和計(jì)算機(jī)體系結(jié)構(gòu)領(lǐng)域開發(fā)產(chǎn)品、系統(tǒng)和工具。他目前參與設(shè)計(jì)和開發(fā)基于深度學(xué)習(xí)的智能城市解決方案,作為 NVIDIA 大都市“邊緣到云”平臺(tái)的一部分。他擁有印第安納大學(xué)布盧明頓分校計(jì)算機(jī)科學(xué)博士學(xué)位和馬德拉斯印度理工學(xué)院土木工程本科學(xué)位。
審核編輯:郭婷
-
NVIDIA
+關(guān)注
關(guān)注
14文章
5309瀏覽量
106348 -
gpu
+關(guān)注
關(guān)注
28文章
4943瀏覽量
131210 -
服務(wù)器
+關(guān)注
關(guān)注
13文章
9793瀏覽量
87933
發(fā)布評(píng)論請(qǐng)先 登錄
使用外部文件導(dǎo)入NVIDIA Air構(gòu)建網(wǎng)絡(luò)拓?fù)涞膬?yōu)勢
NVIDIA推出NVLink Fusion技術(shù)
利用NVIDIA技術(shù)構(gòu)建從數(shù)據(jù)中心到邊緣的智慧醫(yī)院解決方案
ServiceNow攜手NVIDIA構(gòu)建150億參數(shù)超級(jí)助手
小插件讓管道布線變得簡單:PLUGIN 3Dfindit for Revit
企業(yè)使用NVIDIA NeMo微服務(wù)構(gòu)建AI智能體平臺(tái)
NVIDIA Omniverse Kit 107的安裝部署步驟

【Android開發(fā)者必看】使用JetBrains TeamCity為Android項(xiàng)目構(gòu)建CI/CD管道詳細(xì)指南

NVIDIA 與行業(yè)領(lǐng)先的存儲(chǔ)企業(yè)共同推出面向 AI 時(shí)代的新型企業(yè)基礎(chǔ)設(shè)施

NVIDIA 發(fā)布保障代理式 AI 應(yīng)用安全的 NIM 微服務(wù)
全新NVIDIA AI工作流可檢測信用卡欺詐交易
聲波定位技術(shù)在地下管道中如何應(yīng)用
Jacinto6 SoC上VISION SDK和PSDKLA之間的IVA-HD共享

NVIDIA JetPack 6.0版本的關(guān)鍵功能

使用NVIDIA JetPack 6.0和YOLOv8構(gòu)建智能交通應(yīng)用

評(píng)論