視頻跟蹤算法在Davinci SOC上的實(shí)現與優(yōu)化
算法在Davinci SOC上的實(shí)現
本文引用地址:http://dyxdggzs.com/article/269186.htmDSP平臺的選擇
DM6446采用ARM與DSP 雙核結構,其中ARM子系統搭載297 MHz主頻的ARM926 核,DSP部分則采用594 MHz的C64x+DSP核,外圍存儲均支持256 MB DDR2 RAM和各類(lèi)存儲卡,另外使用了VPSS 子系統豐富的視頻前后處理功能,且都配備了完善的外設接口。目標跟蹤算法需要做大量運算,DM6446 DSP核強大的運算處理能力保證了算法的實(shí)時(shí)處理。同時(shí)DM6446的ARM核可以進(jìn)行系統管理,數據讀寫(xiě),網(wǎng)絡(luò )傳輸等處理。
我們使用Spectrum Digital公司的DVEVM平臺進(jìn)行算法仿真、原型制作和軟件優(yōu)化。DVEVM?還可實(shí)現視頻輸入/輸出連接、網(wǎng)絡(luò )接口、存儲器接口以及標準的子卡連接等。
系統軟件框架
整個(gè)系統的軟件框架如圖2如示。DM6446的ARM核運行基于Linux操作系統的應用程序,所用的外圍設備都由ARM負責控制。ARM端的HTTP服務(wù)器通過(guò)Linux網(wǎng)絡(luò )協(xié)議棧來(lái)處理HTTP請求,并發(fā)送壓縮視頻數據。視頻跟蹤的應用程序由五個(gè)POSIX線(xiàn)程組成,分別是視頻捕捉線(xiàn)程,視頻跟蹤線(xiàn)程,視頻壓縮線(xiàn)程,顯示線(xiàn)程,系統控制線(xiàn)程。視頻捕捉線(xiàn)程通過(guò)V4L2接口設備驅動(dòng)從攝像頭讀取原始視頻數據。視頻跟蹤線(xiàn)程把視頻數據送到ARM和DSP的共享緩沖內存,并通知DSP執行跟蹤算法。壓縮線(xiàn)程負責控制DSP側的壓縮算法并從共享內存中讀取壓縮數據。視頻顯示線(xiàn)程從視頻緩存中讀取視頻數據幀,并疊加目標跟蹤框,最后通過(guò)Frame Buffer設備驅動(dòng)輸出顯示。系統控制線(xiàn)程負責響應遙控器和鼠標并執行相應操作。
DM6446的DSP核上運行DSP/BIOS實(shí)時(shí)操作系統和目標檢測,跟蹤算法,視頻壓縮算法。所有的算法的接口都符合TI xDAIS標準,由Codec Engine調用。除了算法,DSP核上還集成了管理內存和DMA的Framework Component。
ARM核和DSP核的通信由TI提供的Codec Engine軟件框架負責。Codec Engine是介于應用程序和具體算法之間的軟件模塊,其中的VISA API通過(guò)stub和skeleton訪(fǎng)問(wèn)Engine SPI最終調用算法。ARM和DSP的所用共享緩沖內存都是通過(guò)CMEM模塊在DDR中分配的,緩沖內存地址連續且與DSP核Cache對齊。

圖 2 軟件結構圖
跟蹤算法在DSP上的優(yōu)化
為了充分發(fā)揮出Davinci SOC強大的視頻處理能力,滿(mǎn)足實(shí)時(shí)跟蹤的需要,我們通過(guò)算法優(yōu)化和編程優(yōu)化相結合的方法對Codec程序進(jìn)行了大量的優(yōu)化。
算法優(yōu)化
算法優(yōu)化是指在不降低算法性能的情況下,采用等效算法來(lái)降低計算量,我們的工作主要集中在“歸一化互相關(guān)系數”的計算例程的簡(jiǎn)化上。根據均值和方差的性質(zhì),我們可以將(1)式化簡(jiǎn)為:

上式與式(1)比較,減少了大量的加減法計算,而且將方差和協(xié)方差的計算轉化為大量的乘加運算,這為我們后面的編程優(yōu)化也提供了極大的便利。例如M=64, N=64時(shí),加法次數從36864減少到12288。
編程優(yōu)化
編程優(yōu)化是在計算量不變的情況下,根據Davinci處理器DSP核心的特點(diǎn),通過(guò)優(yōu)化存儲器的存取效率和提高程序的并行化程度來(lái)縮短程序運行所需要的指令周期數,以使程序運行得更快。我們的編程優(yōu)化工作主要包含使用dsplib、使用線(xiàn)性匯編、使用內聯(lián)函數以及循環(huán)展開(kāi)等五個(gè)方面,下面將一一加以介紹。
* dsplib的使用
在優(yōu)化過(guò)程中,我們還采用了CCS中提供的庫函數來(lái)對代碼進(jìn)行優(yōu)化。CCS中針對c64x+ DSP提供了高度優(yōu)化的dsplib庫函數供用戶(hù)使用,這些庫函數提供了數字信號處理中常見(jiàn)的處理例程,而且由匯編語(yǔ)言寫(xiě)成,具有極高效的代碼效率。特別是用于計算向量?jì)确e的DSP_dotprod和DSP_vecsumsq函數正好滿(mǎn)足了我們的計算需求。在計算尺寸為32x32的“歸一化互相關(guān)系數”時(shí),優(yōu)化后計算



* 線(xiàn)性匯編
對于uf和ug的計算,如果使用for循環(huán)實(shí)現,將會(huì )大大拖累整個(gè)“歸一化互相關(guān)系數”計算例程的執行效率。我們用手工編寫(xiě)線(xiàn)性匯編代碼的方式實(shí)現了dspsum函數,利用C64x + DSP中的8個(gè)并行計算單元,在每個(gè)DSP時(shí)鐘周期內同時(shí)進(jìn)行4個(gè)16位加16位的加法操作,對于尺寸為32x32的求和計算而言,該函數只需要258個(gè)DSP時(shí)鐘周期。
評論