在高分辨率輸入中檢測(cè)物體是計(jì)算機(jī)視覺中的一個(gè)眾所周知的問題。當(dāng)感興趣的是框架的某個(gè)區(qū)域時(shí),不需要對(duì)整個(gè)框架進(jìn)行推理。解決這個(gè)問題有兩種方法:
使用具有高輸入分辨率的大型模型。
將大圖像分為塊,并將較小的模型應(yīng)用于每個(gè)塊。
在許多方面,第一種方法是困難的。訓(xùn)練輸入量大的模型通常需要更大的主干,使整個(gè)模型更笨重。訓(xùn)練或部署這樣的模型也需要更多的計(jì)算資源。較大的模型被認(rèn)為不適合在較小的設(shè)備上部署邊緣。
第二種方法,將整個(gè)圖像劃分為塊,并對(duì)每個(gè)塊應(yīng)用較小的模型,具有明顯的優(yōu)勢(shì)。使用較小的模型,因此在訓(xùn)練和推理中需要較小的計(jì)算能力。將模型應(yīng)用于高分辨率輸入不需要再培訓(xùn)。較小的模型也被認(rèn)為有利于邊緣部署。
在這篇文章中,我們將討論如何 NVIDIA DeepStream 可以幫助將較小的模型應(yīng)用于高分辨率輸入,以檢測(cè)特定的幀區(qū)域。
視頻監(jiān)控系統(tǒng)概述
視頻監(jiān)控系統(tǒng)用于解決各種問題,例如識(shí)別行人、車輛和汽車。如今, 4K 和 8K 攝像機(jī)用于捕捉場(chǎng)景細(xì)節(jié)。軍方將航空攝影用于各種目的,這也涵蓋了大片區(qū)域。
隨著分辨率的增加,像素?cái)?shù)呈指數(shù)增長。處理如此大量的像素需要大量的計(jì)算能力,尤其是使用深度神經(jīng)網(wǎng)絡(luò)。
基于在建模過程中選擇的輸入維數(shù),深度神經(jīng)網(wǎng)絡(luò)對(duì)固定形狀的輸入進(jìn)行操作。這種固定大小的輸入也稱為感受野模型的。通常,在檢測(cè)和分割網(wǎng)絡(luò)中,感受野從 256 × 256 到 1280 × 1280 不等。
您可能會(huì)發(fā)現(xiàn)感興趣的區(qū)域是一個(gè)小區(qū)域,而不是整個(gè)幀。在這種情況下,如果檢測(cè)應(yīng)用于整個(gè)幀,則不必要地使用計(jì)算資源。 DeepStream NvDsPreprocess 插件使您能夠在框架的特定區(qū)域上進(jìn)行計(jì)算。
DeepStream NvDsPreprocessing 插件
然而,當(dāng)平鋪應(yīng)用于圖像或幀時(shí),尤其是在視頻饋送上,您需要在推理管道中增加一個(gè)元素。這樣的元素預(yù)計(jì)將執(zhí)行可按流配置的分塊機(jī)制、分塊推理以及將多個(gè)分塊的推理組合到單個(gè)幀上。
有趣的是, DeepStream 中提供了所有這些功能 Gst-NvDsPreprocess 可自定義插件。它提供了一個(gè)用于預(yù)處理輸入流的自定義庫接口。每個(gè)流都有自己的預(yù)處理要求。
默認(rèn)插件實(shí)現(xiàn)提供以下功能:
具有預(yù)定義感興趣區(qū)域( ROI )或分片的流根據(jù)推理的網(wǎng)絡(luò)要求進(jìn)行縮放和格式轉(zhuǎn)換。每流 ROI 在配置文件中指定。
它從縮放和轉(zhuǎn)換的 ROI 中準(zhǔn)備一個(gè)原始張量,并通過用戶元數(shù)據(jù)傳遞給下游插件。下游插件可以訪問該張量進(jìn)行推理。
DeepStream NvDsPreprocessing 插件
下一步是修改現(xiàn)有代碼以支持平鋪。
使用 NvdsPreprocessing 插件
定義管道內(nèi)的預(yù)處理元素:
preprocess = Gst.ElementFactory.make("nvdspreprocess", "preprocess-plugin")
NvDsPreprocess
需要一個(gè)配置文件作為輸入:
preprocess.set_property("config-file", "config_preprocess.txt")
將預(yù)處理元素添加到管道:
pipeline.add(preprocess)
將元素鏈接到管道:
streammux.link(preprocess) preprocess.link(pgie)
讓 NvdsPreprocess 插件進(jìn)行預(yù)處理
推斷是通過NvDsInfer插件完成的,該插件具有幀預(yù)處理功能。
當(dāng)您在NvDsInfer之前使用NvdsPreprocess插件時(shí),您希望預(yù)處理(縮放或格式轉(zhuǎn)換)由 NvdsPreprocess而不是NvDsInfer完成。為此,請(qǐng)將NvDsInfer的input-tensor-meta屬性設(shè)置為 true 。這使得NvdsPreprocess可以進(jìn)行預(yù)處理,并使用附加為元數(shù)據(jù)的預(yù)處理輸入張量,而不是NvDsInfer本身內(nèi)部的預(yù)處理。
將Gst-nvdspreprocess功能合并到現(xiàn)有管道中需要以下步驟。
定義nvdspreprocess插件并將其添加到管道:
preprocess = Gst.ElementFactory.make("nvdspreprocess", "preprocess-plugin") pipeline.add(preprocess)
將NvDsInfer
的input-tensor-meta
屬性設(shè)置為 true :
pgie.set_property("input-tensor-meta", True)
定義nvdspreprocess
插件的配置文件屬性:
preprocess.set_property("config-file", "config_preprocess.txt")
將預(yù)處理插件鏈接到主推理機(jī)(pgie
)之前:
streammux.link(preprocess) preprocess.link(pgie)
創(chuàng)建配置文件
Gst-nvdspreprocess配置文件使用密鑰文件格式。有關(guān)更多信息,請(qǐng)參閱 Python 和 C 源代碼中的config_preprocess.txt。
[property]組配置插件的一般行為。
[group-《id》]組使用自定義庫中的src-id值和custom-input-transformation-function為一組流配置 ROI 、 TILE 和 ull 幀。
[user-configs]組配置自定義庫所需的參數(shù),自定義庫通過《string, string》的映射作為鍵值對(duì)傳遞給自定義庫。然后,自定義庫必須相應(yīng)地解析這些值。
所需的最小值config_preprocess.txt類似于以下代碼示例:
[property] enable=1 target-unique-ids=1 # 0=NCHW, 1=NHWC, 2=CUSTOM network-input-order=0 network-input-order=0 processing-width=960 processing-height=544 scaling-buf-pool-size=6 tensor-buf-pool-size=6 # tensor shape based on network-input-order network-input-shape=12;3;544;960 # 0=RGB, 1=BGR, 2=GRAY network-color-format=0 # 0=FP32, 1=UINT8, 2=INT8, 3=UINT32, 4=INT32, 5=FP16 tensor-data-type=0 tensor-name=input_1 # 0=NVBUF_MEM_DEFAULT 1=NVBUF_MEM_CUDA_PINNED 2=NVBUF_MEM_CUDA_DEVICE 3=NVBUF_MEM_CUDA_UNIFIED scaling-pool-memory-type=0 # 0=NvBufSurfTransformCompute_Default 1=NvBufSurfTransformCompute_GPU 2=NvBufSurfTransformCompute_VIC scaling-pool-compute-hw=0 # Scaling Interpolation method # 0=NvBufSurfTransformInter_Nearest 1=NvBufSurfTransformInter_Bilinear 2=NvBufSurfTransformInter_Algo1 # 3=NvBufSurfTransformInter_Algo2 4=NvBufSurfTransformInter_Algo3 5=NvBufSurfTransformInter_Algo4 # 6=NvBufSurfTransformInter_Default scaling-filter=0 custom-lib-path=/opt/nvidia/deepstream/deepstream/lib/gst-plugins/libcustom2d_preprocess.so custom-tensor-preparation-function=CustomTensorPreparation [user-configs] pixel-normalization-factor=0.003921568 #mean-file= #offsets= [group-0] src-ids=0;1;2;3 custom-input-transformation-function=CustomAsyncTransformation process-on-roi=1 roi-params-src-0=0;540;900;500;960;0;900;500;0;0;540;900; roi-params-src-1=0;540;900;500;960;0;900;500;0;0;540;900; roi-params-src-2=0;540;900;500;960;0;900;500;0;0;540;900; roi-params-src-3=0;540;900;500;960;0;900;500;0;0;540;900;
Processing-width和processing-height是指切片在整個(gè)幀上的寬度和高度。
對(duì)于network-input-shape,當(dāng)前配置文件配置為最多運(yùn)行 12 個(gè) ROI 。要增加 ROI 計(jì)數(shù),請(qǐng)將第一維度增加到所需數(shù)量,例如network-input-shape=12;3;544;960。
在當(dāng)前配置文件config-preprocess.txt中,每個(gè)源有三個(gè) ROI ,所有四個(gè)源總共有 12 個(gè) ROI 。所有源的總 ROI 不得超過network-input-shape參數(shù)中指定的第一個(gè)維度。
Roi-params-src-《id》表示source-《id》的 III 坐標(biāo)。如果啟用了process-on-roi,則為每個(gè) ROI 指定定義 ROI 的left;top;width;height。Gst-nvdspreprocess沒有將重疊塊中的對(duì)象檢測(cè)和計(jì)數(shù)結(jié)合起來。
密碼
C 代碼可從/ opt / NVIDIA / deepstream / deepstream-6.0 / source / app / sample _ app / deepstream-preprocess-test 下載。
Python 代碼可從 NVIDIA-AI-IOT/deepstream_python_apps github 回購。
后果
Gst-nvdspreprocess允許對(duì)視頻的特定部分(磁貼或感興趣區(qū)域)應(yīng)用推理。使用Gst-nvdspreprocess,可以在單個(gè)幀上指定一個(gè)或多個(gè)平鋪。
以下是在整個(gè)幀上應(yīng)用yolov4與在磁貼上應(yīng)用yolov4時(shí)的性能指標(biāo)。通過將流的數(shù)量增加到解碼器或計(jì)算飽和點(diǎn)來收集性能指標(biāo),并且進(jìn)一步增加流不會(huì)顯示性能增益。
1080p 的視頻分辨率用于 NVIDIA V100 GPU 的性能基準(zhǔn)。考慮性能和磁貼數(shù)量之間的權(quán)衡,因?yàn)榉胖锰嗟拇刨N會(huì)增加計(jì)算需求。
使用NvDsPreprocess平鋪有助于對(duì)視頻中需要的部分進(jìn)行選擇性推斷。例如,在圖 1 中,推理只能在人行道上使用,而不能在整個(gè)框架上使用。
GST-NVDSAnalytics 對(duì)nvinfer(主檢測(cè)器)和nvtracker附加的元數(shù)據(jù)執(zhí)行分析。Gst-nvdsanalytics可應(yīng)用于瓷磚,用于 ROI 過濾、過度擁擠檢測(cè)、方向檢測(cè)和線交叉。
關(guān)于作者
Sunil Patel 作為一名深入學(xué)習(xí)的數(shù)據(jù)科學(xué)家為 NVIDIA 工作。他的專長包括開發(fā)NVIDIA 平臺(tái)上的智能視頻分析和會(huì)話人工智能的高度可擴(kuò)展的人工智能解決方案。 Sunil 主要關(guān)注應(yīng)用程序擴(kuò)展和性能優(yōu)化。他畢業(yè)于印度阿拉哈巴德信息技術(shù)學(xué)院,獲得技術(shù)碩士學(xué)位。
Alvin Clark 是 DeepStream 的產(chǎn)品營銷經(jīng)理。阿爾文的職業(yè)生涯始于設(shè)計(jì)工程師,然后轉(zhuǎn)向技術(shù)銷售和市場(chǎng)營銷。他曾與多個(gè)行業(yè)的客戶合作,應(yīng)用范圍從衛(wèi)星系統(tǒng)、外科機(jī)器人到深海潛水器。阿爾文持有圣地亞哥加利福尼亞大學(xué)的工程學(xué)學(xué)位,目前正在喬治亞理工大學(xué)攻讀碩士學(xué)位。
審核編輯:郭婷
-
NVIDIA
+關(guān)注
關(guān)注
14文章
5267瀏覽量
105895 -
gpu
+關(guān)注
關(guān)注
28文章
4919瀏覽量
130770 -
python
+關(guān)注
關(guān)注
56文章
4825瀏覽量
86331
發(fā)布評(píng)論請(qǐng)先 登錄
英偉達(dá)GTC2025亮點(diǎn):Oracle與NVIDIA合作助力企業(yè)加速代理式AI推理

英偉達(dá)GTC25亮點(diǎn):NVIDIA Blackwell Ultra 開啟 AI 推理新時(shí)代
英偉達(dá)GTC25亮點(diǎn):NVIDIA Dynamo開源庫加速并擴(kuò)展AI推理模型
Oracle 與 NVIDIA 合作助力企業(yè)加速代理式 AI 推理

如何在特定區(qū)域設(shè)置線寬、線距規(guī)則

NVIDIA 推出開放推理 AI 模型系列,助力開發(fā)者和企業(yè)構(gòu)建代理式 AI 平臺(tái)

NVIDIA發(fā)布DLSS 4技術(shù):多幀生成技術(shù)革新游戲體驗(yàn)
NVIDIA助力麗蟾科技打造AI訓(xùn)練與推理加速解決方案

評(píng)論