前面已經(jīng)介紹過關(guān)于 DeepStream 各種輸入源的使用方式,而且 Jetson Nano 2GB 上開啟 4 路輸入(兩個攝像頭+兩個視頻文件),都能得到 25FPS 以上的實時性能,但畢竟“單一檢測器(detector)”檢測出來的物件是離散型的內(nèi)容,例如車、人、腳踏車這些各自獨立的信息。有沒有什么方法能夠?qū)崿F(xiàn)“組合信息”呢?例如“黑色/大眾/SUV 車”!
DeepStream 有一個非常強大的功能,就是多模型組合檢測的功能,以一個主(Primary)推理引擎(GIE:GPU Inference Engine)去帶著多個次(Secondary)推理引擎,就能實現(xiàn)前面所說的功能。
本實驗在 Jetson Nano 2GB 上,執(zhí)行 4 種模型的組合檢測功能,能將檢測到的車輛再往下區(qū)分顏色、廠牌、車種等進一步信息,在 4 路輸入視頻狀態(tài)下能得到 20+FPS 性能,并且我們將顯示的信息做中文化處理。
nvidia@nano2g-jp450:/opt/nvidia/deepstream/deepstream/samples/models$ ls -l
總用量 24
drwxrwxrwx 2 root root 4096 7月 13 23:49 Primary_Detector
drwxrwxrwx 2 root root 4096 7月 13 22:45 Primary_Detector_Nano
drwxrwxrwx 2 root root 4096 2月 8 21:50 Secondary_CarColor
drwxrwxrwx 2 root root 4096 2月 8 21:50 Secondary_CarMake
drwxrwxrwx 2 root root 4096 2月 8 21:50 Secondary_VehicleTypes
drwxrwxrwx 4 root root 4096 2月 8 21:49 Segmentation
簡單說明一下每個目錄所代表的的意義:
Primary_Detector:作為項目的主檢測器,這是用 Caffe 框架以 ResNet10 網(wǎng)絡所訓練的 4 類檢測器,能檢測“Car”、“Bicycle”、“Person”、“Roadsign”四種物件,這個數(shù)據(jù)可以在目錄下的 labels.txt 中找到。
Primary_Detector_Nano:將Primary_Detector里的模型,針對 Jetson Nano(含 2GB)的計算資源進行優(yōu)化的版本。
Secondary_CarColor:車子顏色的次級檢測器
Secondary_CarMake:生產(chǎn)廠商的次級檢測器
Secondary_VehicleTypes:車子種類的次級檢測器
組成結(jié)構(gòu)也十分簡單,其中主(Primary)檢測器只有一個,而且必須有一個,否則 DeepStream 無法進行推理識別。次(Secondary)檢測器可以有好幾個,這里的范例就是針對“Car”這個類別,再添加“Color”、“Maker”、“Type”這三類元素,就能獲取視頻圖像中物件的更完整信息。
在 Jetson Nano 的/opt/nvidia/deepstream/deepstream/samples/config/deepstream-app 下面的 source4_1080p_dec_infer-resnet_tracker_sgie_tiled_display_int8.txt,就已經(jīng)把這個組合檢測器的配置調(diào)試好,現(xiàn)在直接執(zhí)行以下指令:
cd/opt/nvidia/deepstream/deepstream/samples/config/deepstream-app
deepstream-app -c source4_1080p_dec_infer-resnet_tracker_sgie_tiled_display_int8.txt
現(xiàn)在看到啟動四個視頻窗,但是每個視窗的執(zhí)行性能只有 8FPS,總性能大約 32FPS,并不是太理想。
接下來看看怎么優(yōu)化這個配置文件
首先要執(zhí)行模型組合功能功能,必須把“tracker”功能打開,不過可以關(guān)閉追蹤號的顯示,因此保留“enable=1”,將下面的“display-tracking-id=”設為“0”
由于我們在 Jetson Nano 2GB 版本上進行實驗,需要進行以下的調(diào)整。如果您要在 AGX Xavier 或 Xavier NX 上上執(zhí)行的活,請忽略這個步驟。
修改主檢測器[primary-gie]的模型:配置文件中預設的是“Primary_Detector”檢測器,這里得修改成專為 Nano 所訓練的版本,這里修改以下幾個地方:
(1) model-engine-file路徑的“Primary_Detector”部分改成“Primary_Detector_Nano”
(2) config-file 的文件改成 config_infer_primary_nano.txt
因為 Jetson Nano(含2GB)并不支持 int8 計算精度,因此還需要做以下修改:
(3) 將“_b4_gpu0_int8.engine”改成“_b8_gpu0_fp16.engine”
(4) 將所有“xx_gpu0_int8.engine”改成“xx_gpu0_fp16.engine”
3. 將追蹤器從原本的 ibnvds_mot_klt.so 改成 libnvds_mot_iou.so,用“#”變更注釋的位置就可以。
修改完后重新執(zhí)行,可以看到每個窗口的檢測性能提升到 10~12FPS,總性能提升到 40~48FPS,比原本提升12~50%,不過距離理想中的 25FPS 還有很大的差距。
執(zhí)行過程中如果遇到“Theremay be a timestamping problem, or this computer is too slow.”這樣的信息,就把[sink0]下面的“sync=”設定值改為“0”就可以。
現(xiàn)在看看是否還有什么可調(diào)整的空間?參考前一篇文章“DeepStream-04:Jetson Nano 攝像頭實時性能”所提到的,將[primary-gie]下面的“interval=”設定為“1”,然后再執(zhí)行應用時,發(fā)現(xiàn)每個輸入源的識別性能立即提升到 20FPS 左右,總性能已經(jīng)能到 80FPS 左右,比最初的 32FPS 提升大約 2.5倍,這已經(jīng)很接近實時識別的性能。
好了,在Jetson Nano 2GB 上已經(jīng)能達到接近實時推理的性能,是相當好的狀態(tài)。
如果對于顯示輸出的狀態(tài)有些不滿意的話,我們按照下面的步驟去執(zhí)行,將“英文”類別名改成“中文”,并且將邊框變粗、字體放大,就能更輕松看到推理的效果:
1. 所有的顯示名稱,都在 models 目錄下個別模型目錄里的labels.txt,可以將里面的內(nèi)容全部改成中文。
例如
deepstream/samples/models/Secondary_CarMake的“l(fā)abels.txt”內(nèi)容改為“廣汽;奧迪;寶馬;雪佛蘭;克萊斯勒;道奇;福特;通用;本田;現(xiàn)代;英菲尼迪;吉普;起亞;雷克薩斯;馬自達;奔馳;日產(chǎn);速霸路;豐田;大眾”,其他的就比照辦理。
注意:這個順序不能改變!
2. 邊框?qū)挾龋盒薷模踥sd]下面的“board-width”值,推薦 2~4 比較合適;
3. 字體大?。盒薷模踥sd]下面的“texe-size”值,推薦 15~18 比較合適;
4. 其他:請自行設定
如何?這樣的效果與性能就是在 Jetson Nano 2GB 實現(xiàn)的!
編輯:jq
-
gpu
+關(guān)注
關(guān)注
28文章
4740瀏覽量
128955
原文標題:NVIDIA Jetson Nano 2GB 系列文章(31):DeepStream 多模型組合檢測-1
文章出處:【微信號:murata-eetrend,微信公眾號:murata-eetrend】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論