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