視頻跟蹤算法在Davinci SOC上的實(shí)現(xiàn)與優(yōu)化
摘要:本文提出了在最新的Davinci SOC DM6446上實(shí)現(xiàn)智能視頻跟蹤系統(tǒng)的方案。我們?cè)谀0迤ヅ涓櫵惴ǖ幕A(chǔ)上,多種改進(jìn)算法來提高跟蹤的精確性和魯棒性。整個(gè)系統(tǒng)充分利用Davinci SOC上的ARM核和DSP核的強(qiáng)大處理能力。經(jīng)過算法優(yōu)化和編程優(yōu)化,跟蹤算法可以在DSP核上實(shí)時(shí)跟蹤128×128像素的目標(biāo)。同時(shí),ARM核并行負(fù)責(zé)視頻采集,顯示,算法控制,網(wǎng)絡(luò)傳送等任務(wù)。測(cè)試結(jié)果表明,我們的系統(tǒng)可以在目標(biāo)形變、部分或全部遮擋、背景干擾等情況下也具有較好的性能。
本文引用地址:http://www.ex-cimer.com/article/89232.htm關(guān)鍵詞:實(shí)時(shí)視頻跟蹤算法;Davinci SOC
引言
目標(biāo)跟蹤作為計(jì)算機(jī)視覺的一個(gè)極具挑戰(zhàn)性的研究任務(wù),已被廣泛的應(yīng)用在人機(jī)交互、智能監(jiān)控、醫(yī)學(xué)圖像處理等領(lǐng)域中。目標(biāo)跟蹤的本質(zhì)是在圖像序列中識(shí)別出目標(biāo)的同時(shí)對(duì)其進(jìn)行精確定位。為了克服噪聲、遮擋、背景的改變等對(duì)目標(biāo)識(shí)別帶來的困難,出現(xiàn)了很多的跟蹤算法。
因?yàn)槟繕?biāo)跟蹤算法需要處理的數(shù)據(jù)量大、運(yùn)算復(fù)雜,需要性能強(qiáng)大的處理器才能實(shí)時(shí)處理。我們選用TI推出的最新產(chǎn)品TMS320DM6446實(shí)現(xiàn)算法。TMS320DM6446是一款高度集成的片上系統(tǒng),集成了可以運(yùn)行頻率高達(dá)594MHz的C64x+ DSP核和297MHz的ARM926處理器核。另外它還集成了數(shù)字視頻所需的許多外部組件,如視頻加速器,網(wǎng)絡(luò)外設(shè)及高速外部存儲(chǔ)接口。本設(shè)計(jì)充分利用DM6446的強(qiáng)大運(yùn)算能力,在DSP內(nèi)核上實(shí)時(shí)運(yùn)行目標(biāo)跟蹤算法。 設(shè)計(jì)還在ARM處理器上執(zhí)行多線程應(yīng)用程序,負(fù)責(zé)視頻采集,顯示,網(wǎng)絡(luò)通信,外圍器件控制等工作。
算法介紹
本系統(tǒng)實(shí)現(xiàn)的視頻跟蹤算法可參考文獻(xiàn)[1]-[5],整個(gè)算法分為基本算法和改進(jìn)算法兩部分。本算法是一種基于模板匹配技術(shù)的跟蹤算法,即在手工選定或自動(dòng)選定了待跟蹤目標(biāo)后,提取目標(biāo)的外觀信息作為模板,在后續(xù)的視頻序列中,將候選圖像區(qū)域與目標(biāo)模板進(jìn)行匹配,將最相似的圖像區(qū)域作為運(yùn)動(dòng)目標(biāo)當(dāng)前的位置。在本文中,采用結(jié)構(gòu)相似度,即“歸一化互相關(guān)系數(shù)”作為候選區(qū)域與目標(biāo)模板相似程度的度量標(biāo)準(zhǔn),其計(jì)算公式如下所示:
上式中,f(m,n)和g(m,n)分別為目標(biāo)模板和候選區(qū)域的灰度值矩陣,尺寸為MxN。uf和ug分別為目標(biāo)模板和候選區(qū)域的灰度平均值,然后再求出f(m,n)和g(m,n)的協(xié)方差、f(m,n)的方差、g(m,n)的方差后,求出歸一化互相關(guān)系數(shù)。式(1)通過從灰度值矩陣中減去灰度均值,有效地消除了光照給跟蹤結(jié)果帶來的影響。而對(duì)于匹配圖像區(qū)域的搜索,為了達(dá)到減少匹配次數(shù)從而降低計(jì)算量的目的,我們借鑒了視頻壓縮領(lǐng)域中的三步搜索法(Three Step Search, TSS) 作為最匹配點(diǎn)的搜索算法[2]。
為了增加模板匹配視頻目標(biāo)跟蹤算法的魯棒性,我們?cè)诨舅惴ǖ幕A(chǔ)上實(shí)現(xiàn)了改進(jìn)算法的部分。改進(jìn)算法具有自適應(yīng)遮擋處理與模板漂移抑制的能力,能夠很好地解決前面提到模板匹配的視頻目標(biāo)跟蹤算法需要解決的難題。具體來說,主要有如下四點(diǎn)改進(jìn):(1) 抑制漂移的帶掩蔽卡爾曼外觀濾波算法(Drift-Inhibitive Masked Kalman Appearance Filter, DIMKAF ) [1][3][4] ;(2) 內(nèi)容自適應(yīng)漸進(jìn)式遮擋分析算法(Content-Adaptive Progressive Occlusion Analysis, CAPOA)[1][5];(3) 可變掩蔽模板匹配算法(Variant-Mask Template Matching, VMTM)[1][5];(4) 局部最優(yōu)匹配鑒定算法(Local Best Match Authentication, LBMA)[1]。 改進(jìn)后整個(gè)算法的流程圖如下所示:
圖 1 跟蹤算法主流程圖
算法在Davinci SOC上的實(shí)現(xiàn)
DSP平臺(tái)的選擇
DM6446采用ARM與DSP 雙核結(jié)構(gòu),其中ARM子系統(tǒng)搭載297 MHz主頻的ARM926 核,DSP部分則采用594 MHz的C64x+DSP核,外圍存儲(chǔ)均支持256 MB DDR2 RAM和各類存儲(chǔ)卡,另外使用了VPSS 子系統(tǒng)豐富的視頻前后處理功能,且都配備了完善的外設(shè)接口。目標(biāo)跟蹤算法需要做大量運(yùn)算,DM6446 DSP核強(qiáng)大的運(yùn)算處理能力保證了算法的實(shí)時(shí)處理。同時(shí)DM6446的ARM核可以進(jìn)行系統(tǒng)管理,數(shù)據(jù)讀寫,網(wǎng)絡(luò)傳輸?shù)忍幚怼?/p>
我們使用Spectrum Digital公司的DVEVM平臺(tái)進(jìn)行算法仿真、原型制作和軟件優(yōu)化。DVEVM?還可實(shí)現(xiàn)視頻輸入/輸出連接、網(wǎng)絡(luò)接口、存儲(chǔ)器接口以及標(biāo)準(zhǔn)的子卡連接等。
系統(tǒng)軟件框架
整個(gè)系統(tǒng)的軟件框架如圖2如示。DM6446的ARM核運(yùn)行基于Linux操作系統(tǒng)的應(yīng)用程序,所用的外圍設(shè)備都由ARM負(fù)責(zé)控制。ARM端的HTTP服務(wù)器通過Linux網(wǎng)絡(luò)協(xié)議棧來處理HTTP請(qǐng)求,并發(fā)送壓縮視頻數(shù)據(jù)。視頻跟蹤的應(yīng)用程序由五個(gè)POSIX線程組成,分別是視頻捕捉線程,視頻跟蹤線程,視頻壓縮線程,顯示線程,系統(tǒng)控制線程。視頻捕捉線程通過V4L2接口設(shè)備驅(qū)動(dòng)從攝像頭讀取原始視頻數(shù)據(jù)。視頻跟蹤線程把視頻數(shù)據(jù)送到ARM和DSP的共享緩沖內(nèi)存,并通知DSP執(zhí)行跟蹤算法。壓縮線程負(fù)責(zé)控制DSP側(cè)的壓縮算法并從共享內(nèi)存中讀取壓縮數(shù)據(jù)。視頻顯示線程從視頻緩存中讀取視頻數(shù)據(jù)幀,并疊加目標(biāo)跟蹤框,最后通過Frame Buffer設(shè)備驅(qū)動(dòng)輸出顯示。系統(tǒng)控制線程負(fù)責(zé)響應(yīng)遙控器和鼠標(biāo)并執(zhí)行相應(yīng)操作。
DM6446的DSP核上運(yùn)行DSP/BIOS實(shí)時(shí)操作系統(tǒng)和目標(biāo)檢測(cè),跟蹤算法,視頻壓縮算法。所有的算法的接口都符合TI xDAIS標(biāo)準(zhǔn),由Codec Engine調(diào)用。除了算法,DSP核上還集成了管理內(nèi)存和DMA的Framework Component。
ARM核和DSP核的通信由TI提供的Codec Engine軟件框架負(fù)責(zé)。Codec Engine是介于應(yīng)用程序和具體算法之間的軟件模塊,其中的VISA API通過stub和skeleton訪問Engine SPI最終調(diào)用算法。ARM和DSP的所用共享緩沖內(nèi)存都是通過CMEM模塊在DDR中分配的,緩沖內(nèi)存地址連續(xù)且與DSP核Cache對(duì)齊。
圖 2 軟件結(jié)構(gòu)圖
跟蹤算法在DSP上的優(yōu)化
為了充分發(fā)揮出Davinci SOC強(qiáng)大的視頻處理能力,滿足實(shí)時(shí)跟蹤的需要,我們通過算法優(yōu)化和編程優(yōu)化相結(jié)合的方法對(duì)Codec程序進(jìn)行了大量的優(yōu)化。
算法優(yōu)化
算法優(yōu)化是指在不降低算法性能的情況下,采用等效算法來降低計(jì)算量,我們的工作主要集中在“歸一化互相關(guān)系數(shù)”的計(jì)算例程的簡(jiǎn)化上。根據(jù)均值和方差的性質(zhì),我們可以將(1)式化簡(jiǎn)為:
上式與式(1)比較,減少了大量的加減法計(jì)算,而且將方差和協(xié)方差的計(jì)算轉(zhuǎn)化為大量的乘加運(yùn)算,這為我們后面的編程優(yōu)化也提供了極大的便利。例如M=64, N=64時(shí),加法次數(shù)從36864減少到12288。
編程優(yōu)化
編程優(yōu)化是在計(jì)算量不變的情況下,根據(jù)Davinci處理器DSP核心的特點(diǎn),通過優(yōu)化存儲(chǔ)器的存取效率和提高程序的并行化程度來縮短程序運(yùn)行所需要的指令周期數(shù),以使程序運(yùn)行得更快。我們的編程優(yōu)化工作主要包含使用dsplib、使用線性匯編、使用內(nèi)聯(lián)函數(shù)以及循環(huán)展開等五個(gè)方面,下面將一一加以介紹。
* dsplib的使用
在優(yōu)化過程中,我們還采用了CCS中提供的庫函數(shù)來對(duì)代碼進(jìn)行優(yōu)化。CCS中針對(duì)c64x+ DSP提供了高度優(yōu)化的dsplib庫函數(shù)供用戶使用,這些庫函數(shù)提供了數(shù)字信號(hào)處理中常見的處理例程,而且由匯編語言寫成,具有極高效的代碼效率。特別是用于計(jì)算向量?jī)?nèi)積的DSP_dotprod和DSP_vecsumsq函數(shù)正好滿足了我們的計(jì)算需求。在計(jì)算尺寸為32x32的“歸一化互相關(guān)系數(shù)”時(shí),優(yōu)化后計(jì)算部分只需要271個(gè)DSP時(shí)鐘周期,而計(jì)算和部分只需要267個(gè)DSP時(shí)鐘周期,這大大提高了程序運(yùn)行的速度。
* 線性匯編
對(duì)于uf和ug的計(jì)算,如果使用for循環(huán)實(shí)現(xiàn),將會(huì)大大拖累整個(gè)“歸一化互相關(guān)系數(shù)”計(jì)算例程的執(zhí)行效率。我們用手工編寫線性匯編代碼的方式實(shí)現(xiàn)了dspsum函數(shù),利用C64x + DSP中的8個(gè)并行計(jì)算單元,在每個(gè)DSP時(shí)鐘周期內(nèi)同時(shí)進(jìn)行4個(gè)16位加16位的加法操作,對(duì)于尺寸為32x32的求和計(jì)算而言,該函數(shù)只需要258個(gè)DSP時(shí)鐘周期。
* 內(nèi)聯(lián)函數(shù)的使用
C64x+編譯器提供的內(nèi)聯(lián)函數(shù)可快速優(yōu)化C代碼。內(nèi)聯(lián)函數(shù)是直接映射為內(nèi)聯(lián)的C64x+指令的特殊函數(shù),內(nèi)聯(lián)函數(shù)用前下滑線(_)來表示,使用時(shí)同調(diào)用普通函數(shù)一樣使用它。我們?cè)趦?yōu)化過程中,使用了許多內(nèi)聯(lián)函數(shù),如_round()等,大大提高了代碼的執(zhí)行效率。
* 循環(huán)展開
由于for技術(shù)循環(huán)需要打斷C64x+ DSP內(nèi)部的軟件流水線,而頻繁的for循環(huán)會(huì)大大降低DSP的處理效率,所以我們?cè)趦?yōu)化過程中,將部分for循環(huán)進(jìn)行了展開,以代碼增加為代價(jià)提高了代碼的執(zhí)行效率。通過上述方法,可將代碼的處理效率提高3-5倍。
測(cè)試結(jié)果
為了獲得視頻跟蹤算法Codec運(yùn)行所需要的DSP時(shí)鐘周期數(shù),進(jìn)而估計(jì)出優(yōu)化后的算法代碼是否已經(jīng)滿足實(shí)時(shí)跟蹤的需要,我們使用CCStudio v3.3對(duì)同一測(cè)試序列,同一起始目標(biāo)位置,不同大小模板的情況進(jìn)行了離線仿真。
表 1 視頻跟蹤算法優(yōu)化結(jié)果
表 2 DSP負(fù)載測(cè)試
結(jié)論
我們?cè)诨陔p核DM6446的系統(tǒng)平臺(tái)上,利用改進(jìn)后的跟蹤算法實(shí)現(xiàn)了智能目標(biāo)跟蹤系統(tǒng)。DM6446 ARM核上的Linux操作系統(tǒng)上的多線程程序負(fù)責(zé)視頻采集、視頻顯示、算法控制、外圍設(shè)備處理等任務(wù)。通過在TI Codec Engine軟件架構(gòu)下擴(kuò)展目標(biāo)跟蹤算法的接口,我們成功在DM6446的DSP核上運(yùn)行了跟蹤算法。經(jīng)過算法優(yōu)化和編程優(yōu)化,系統(tǒng)可以對(duì)采集輸入的25fps,720×480分辨率視頻中的128×128大小的目標(biāo)進(jìn)行實(shí)時(shí)跟蹤。實(shí)驗(yàn)結(jié)果表明,該算法可以成功跟蹤目標(biāo),并具有較強(qiáng)的魯棒性。該技術(shù)將會(huì)在智能視頻監(jiān)控、智能用戶接口、基于對(duì)象的視頻壓縮、巡航導(dǎo)彈末端制導(dǎo)和輔助駕駛等領(lǐng)域有廣泛應(yīng)用前景。
參考文獻(xiàn):
1.Jiyan Pan, Bo Hu, and Jian Q. Zhang, "Robust and Accurate Object Tracking under Various Types of Occlusions," to appear in IEEE Transactions on Circuits and Systems for Video Technology (CSVT).
2.Michael H. Fischer, and Jiyan Pan, "A Novel Visual Tracking Algorithm based on Adaptive Three-Step Search, Hybrid Correlation, and Adaptive Template Renewal," Stanford Undergraduate Research Journal, vol. 5, pp. 54-60, spring 2006.
3.Jiyan Pan, Bo Hu, and Jian Q. Zhang, "Drift-Inhibitive Object Tracking Algorithm," submitted to Chinese Journal of Electronics (in Chinese).
4.Jiyan Pan, and Bo Hu, "Robust Object Tracking against Template Drift," to appear in Proc. IEEE Int. Conf. on Image Processing, San Antonio, Texas, September 2007.
5.Jiyan Pan, and Bo Hu, "Robust Occlusion Handling in Object Tracking," Proc. IEEE Conf. on Computer Vision and Pattern Recognition, pp. 1-8, Minneapolis, Minnesota, June 2007.
6.SPRU187L: TMS320C6000 Optimizing Compiler User’s Guide
7.SPRU198G: TMS320C6000 Programmer’s Guide
8.SPRU862A: TMS320C64x+ DSP Cache User's Guide
9.SPRUED6B: Codec Engine Algorithm Creator User’s Guide
10.SPRUE67: Codec Engine Application Developer’s Guide
11.SPRUED5: Codec Engine Server Integrator's Guide
12.SPRUEC8: xDAIS-DM (Digital Media) User Guide
評(píng)論