在計(jì)算機(jī)視覺的應(yīng)用中,“識(shí)別”只是一個(gè)相當(dāng)入門的技術(shù),相信很多人在執(zhí)行深度學(xué)習(xí)推理應(yīng)用中,經(jīng)常產(chǎn)生的質(zhì)疑就是“識(shí)別出的類別,有什么用途呢”?
確認(rèn)每一幀圖像中有多少個(gè)我們想要識(shí)別的種類,以及他們?cè)趫D像中的位置,只是整個(gè)應(yīng)用的第一步而已,如果缺乏“目標(biāo)追蹤(tracking)”的能力,就很難提供視頻分析的基礎(chǔ)功能。
在標(biāo)準(zhǔn) OpenCV 體系里有 8 種主流的目標(biāo)追蹤算法,有興趣的可以在網(wǎng)上搜索并自行研究。
算法的基本邏輯就是需要對(duì)視頻的相鄰幀進(jìn)行“類別”與“位置”的比對(duì),因此這部分的計(jì)算還是相當(dāng)消耗計(jì)算資源的,也就是當(dāng)視頻分析軟件“開啟”目標(biāo)追蹤功能時(shí),其識(shí)別性能必定有所下降,大家必須先有這樣的認(rèn)知。
DeepStream 的定位就是針對(duì)“視頻分析”的應(yīng)用,因此“目標(biāo)追蹤”是其最基本的功能之一。
在前面使用的 myNano.txt 配置文件中,只需要調(diào)整一個(gè)設(shè)定值就能開啟或關(guān)閉這個(gè)追蹤功能,非常簡(jiǎn)單。
DeepStream 支持 IOU、KLT 與 NVDCF 三種目標(biāo)追蹤算法(如下圖),其中 IOU 的性能最好,在 Jetson Nano 2GB 上的總體大約能到 200FPS;NVDCF 的精確度最高,但目前性能大約只能到 56FPS;KLT 算法目前在性能與精確度的平衡比較好,總體性也能到 160FPS,因此通常都選擇 KLT 追蹤器做演示。
算法的細(xì)節(jié)不多做解釋,請(qǐng)自行尋找相關(guān)技術(shù)文件學(xué)習(xí),這里就直接進(jìn)入實(shí)驗(yàn)的過程。還是以前一篇文章中的 myNano.txt 配置文件為主,如果不知道的話,就用 source8_1080p_dec_infer-resnet_tracker_tiled_display_fp16_nano.txt 復(fù)制一份出來就可以,透過修改里面的參數(shù),讓大家體驗(yàn)一下 DeepStream 目標(biāo)追蹤的功能。
01
目標(biāo)追蹤功能的開關(guān)
在 myNano.txt 最下方,可以看到[tracker]的設(shè)定組,下面有個(gè)“enable=1”的參數(shù),就是目標(biāo)追蹤的功能。
現(xiàn)在先執(zhí)行一次啟動(dòng)追蹤功能,如下圖可以看到每個(gè)識(shí)別出的物件除了類別、標(biāo)框之外,旁邊還有個(gè)編號(hào),這個(gè)編號(hào)會(huì)一直跟著該物件,這樣就形成“追蹤”的功能。
此時(shí)的識(shí)別性能如下圖,總性能(8 個(gè)數(shù)字相加)大約 160FPS。
如果將[trakcer]下面改成“enable=0”,再執(zhí)行看看結(jié)果如何?下圖中能識(shí)別出物件的類別與標(biāo)框位置,但是已經(jīng)沒有編號(hào)。
關(guān)閉追蹤功能之后的識(shí)別性能如下圖,總識(shí)別性能可以達(dá)到 250FPS 左右。
02
切換追蹤器
前面說過,目前 DeepStream 5.0 支持三種追蹤器,那么要如何選擇呢?同樣在[tracker]參數(shù)組下方,有這樣的三行參數(shù):
#ll-lib-file=/opt/nvidia/deepstream/deepstream-5.0/lib/libnvds_mot_iou.so
#ll-lib-file=/opt/nvidia/deepstream/deepstream-5.0/lib/libnvds_nvdcf.so
ll-lib-file=/opt/nvidia/deepstream/deepstream-5.0/lib/libnvds_mot_klt.so
前面加上“#”號(hào)的就是處于關(guān)閉的狀況,請(qǐng)先將[tracker]切回“enable=1”的開啟狀態(tài),接下來請(qǐng)自行加減“#”的位置以切換追蹤器的選擇,分別測(cè)試這三個(gè)追蹤器的不同之處,包括識(shí)別性能與追蹤能力。
這部分必須直接在視頻中體驗(yàn),因此就不截屏顯示。測(cè)試結(jié)果可以感受到 IOU 追蹤器的性能最好,可達(dá)到 200FPS 左右,但是同一物件的編號(hào)并不是太穩(wěn)定,而 NVDCF 追蹤器的編號(hào)最為穩(wěn)定,但性能大概只有 IOU 的 1/4,最多只能承受 2 路視頻的實(shí)時(shí)分析。
KLT 算法總體性能可達(dá)到 160FPS,可以支持到8路以內(nèi)的實(shí)時(shí)識(shí)別,追蹤能力也比 IOU 好不少,不過這個(gè)算法對(duì) CPU 的占用率比較高,是這個(gè)算法的主要缺點(diǎn)。該如何選擇需要看實(shí)際的場(chǎng)景與計(jì)算設(shè)備的資源而定。
03
獲取追蹤數(shù)據(jù)
前面打開目標(biāo)追蹤功能的目的,并不只是為了在顯示器上看看而已,而是用這些數(shù)據(jù)做更有價(jià)值的應(yīng)用,而這些數(shù)據(jù)要從什么地方得到呢?通常都需要透過 Python 或 C++從 DeepStream 提供的接口去獲取。
這里提供一個(gè)無(wú)需了解 DeepStream 接口就能獲取目標(biāo)追蹤數(shù)據(jù)的方法,只要我們?cè)?myNano.txt 里面的[application]參數(shù)組,添加一條“kitti-track-output-dir=《PATH》”的路徑指向就可以,這里假設(shè)要將數(shù)據(jù)存入“/home/nvidia/track”路徑下,在 myNano.txt 里添加一行參數(shù)即可:
[application]
kitti-track-output-dir=/home/nvidia/track
執(zhí)行“deepstream -c myNano.txt”之后,就可以看到/home/nvidia/track目錄下產(chǎn)生非常多的文件,如下截屏:
每個(gè)文件存放“一幀”的目標(biāo)追蹤結(jié)果,例如我們測(cè)試的 sample_1080p_h264.mp4 視頻有 48 秒,每秒有 30 幀圖像,就會(huì)生成 1440 個(gè)文件。
前面 6 位數(shù)“00_000”代表視頻源的編號(hào),從“0”開始,如果有 4 路視頻源就會(huì)有“00_000”~“00_003”的編號(hào),后面 6 位則是流水號(hào),例如這個(gè)測(cè)試視頻就會(huì)生成“000000.txt”~“001440.txt”,由這兩部分組合而成文件名。
這是 KITTI 格式的數(shù)據(jù),第一欄位是該物件的類別,第二欄是該物件的“追蹤編號(hào)”,后面數(shù)據(jù)所代表的意義,請(qǐng)自行參考 KITTI 的格式定義。
現(xiàn)在我們就可以依序讀入這些追蹤文件,或者將這些文件回傳給控制中心,進(jìn)行文件解析與信息提取,這樣是不是很方便?相信這些內(nèi)容對(duì)于開發(fā)會(huì)很有幫助。
責(zé)任編輯:haq
-
NVIDIA
+關(guān)注
關(guān)注
14文章
5002瀏覽量
103233 -
機(jī)器視覺
+關(guān)注
關(guān)注
162文章
4386瀏覽量
120426
原文標(biāo)題:NVIDIA Jetson Nano 2GB 系列文章(29): DeepStream 目標(biāo)追蹤功能
文章出處:【微信號(hào):NVIDIA-Enterprise,微信公眾號(hào):NVIDIA英偉達(dá)企業(yè)解決方案】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論