李 雷,張 曄,胡 楷
(中科芯集成電路有限公司,江蘇 無錫 214035)
海上爭端日益頻繁,搭載紅外探測器的光電設(shè)備以隱蔽性好、抗干擾性強(qiáng)、環(huán)境適應(yīng)性好的特點(diǎn),得到廣泛的應(yīng)用。圖像處理是光電系統(tǒng)中的關(guān)鍵技術(shù),實(shí)際使用中需要盡可能遠(yuǎn)距離發(fā)現(xiàn)目標(biāo),良好的目標(biāo)檢測性能對于整個(gè)光電系統(tǒng)極為重要。
目標(biāo)檢測是一個(gè)熱門的研究課題,許多學(xué)者對目標(biāo)檢測進(jìn)行了研究。呂璐等人對深度學(xué)習(xí)的目標(biāo)檢測研究進(jìn)行了綜述分析,指出基于深度學(xué)習(xí)的目標(biāo)檢測算法對小目標(biāo)的檢測效果不太理想,且耗時(shí)較長,不利于實(shí)時(shí)系統(tǒng)的應(yīng)用[1]。丁榮莉等人對艦船檢測算法做了總結(jié)和歸納,指出了檢測算法的適用性和優(yōu)缺點(diǎn)[2]。相比遙感圖像的艦船目標(biāo)檢測,海上目標(biāo)有一個(gè)顯著的特點(diǎn),即它存在于天空與海洋交匯處[3]。利用海上目標(biāo)的這一特點(diǎn),胡耀輝等人提出了一種基于海天線的弱小目標(biāo)檢測方法[4],但此方法不利于工程實(shí)現(xiàn)。
隨著數(shù)字信號處理器(DSP)技術(shù)的飛速發(fā)展,DSP以強(qiáng)大的計(jì)算能力和較小的體積受到越來越廣泛的應(yīng)用[5-6]。結(jié)合DSP的硬件特征,圍繞DSP處理器搭建一套符合技術(shù)要求的光電系統(tǒng)已成為主流架構(gòu)[7]。
針對海上紅外小目標(biāo)實(shí)時(shí)檢測的需求,本文以飛騰M6678 DSP為核心處理器,設(shè)計(jì)一種海上紅外小目標(biāo)檢測系統(tǒng),結(jié)合DSP的硬件特征和算法原理,設(shè)計(jì)多核處理架構(gòu),多核分別實(shí)現(xiàn)海天線檢測功能和小目標(biāo)檢測功能,通過主程序的調(diào)度實(shí)現(xiàn)檢測功能的并行處理。同時(shí),借助DSP開發(fā)環(huán)境CCS(Code Composer Studio)對海天線檢測算法軟件和小目標(biāo)檢測算法軟件進(jìn)行優(yōu)化,最終實(shí)現(xiàn)滿足實(shí)時(shí)性要求的海上紅外小目標(biāo)檢測系統(tǒng),并進(jìn)行驗(yàn)證。
基于Xilinx的K7現(xiàn)場可編程邏輯門陣列(FPGA)和銀河飛騰的M6678 DSP處理器搭建硬件處理平臺。平臺通過FPGA的Camera Link接口采集紅外相機(jī)圖像,通過DSP串口接收控制指令,發(fā)送檢測結(jié)果和狀態(tài)信息。平臺內(nèi)部通過4X@3.125 Gb/s的SRIO鏈路實(shí)現(xiàn)FPGA與DSP之間的圖像高速傳輸,通過EMIF接口實(shí)現(xiàn)DSP與FPGA之間的控制命令交互,通過GPIO接口產(chǎn)生中斷。硬件框圖如圖1所示。
圖1 硬件平臺框圖
M6678是一款高性能國產(chǎn)DSP,單片DSP含有8顆M66x DSP內(nèi)核(稱為M66x CorePac),每顆內(nèi)核工作主頻均為1 GHz;定點(diǎn)運(yùn)算性能高達(dá)32 GMAC/s,浮點(diǎn)運(yùn)算性能高達(dá)16 GFlops;每顆內(nèi)核還包含32 KB L1P、32 KB L1D和512 KB L2 SRAM,8核共享4 MB共享內(nèi)存。M6678具有PCIe、SRIO、GbE等高速接口,能夠廣泛應(yīng)用于通信、圖像和雷達(dá)等信號處理領(lǐng)域。
嵌入式軟件是系統(tǒng)的一個(gè)重要組成部分,良好的可靠性設(shè)計(jì)決定整個(gè)系統(tǒng)的穩(wěn)定性。嵌入式軟件設(shè)計(jì)時(shí),需要將各功能分解并進(jìn)行模塊化設(shè)計(jì),保證各模塊間的相互獨(dú)立,通過主程序的調(diào)度將各功能串聯(lián)。同時(shí),還應(yīng)結(jié)合處理器的特征對架構(gòu)精簡設(shè)計(jì),降低各處理器核的軟件負(fù)載,保證系統(tǒng)的實(shí)時(shí)性。
根據(jù)系統(tǒng)需求,對軟件功能進(jìn)行模塊化分解,分為硬件驅(qū)動模塊、通信協(xié)議模塊、狀態(tài)管理模塊、海天線檢測模塊、紅外小目標(biāo)檢測模塊和遠(yuǎn)程升級模塊。主程序?qū)崿F(xiàn)對各功能模塊的調(diào)用。
1)硬件驅(qū)動:硬件驅(qū)動實(shí)現(xiàn)DSP處理器內(nèi)核初始化和接口初始化,如PLL、SRIO、EMIF、UART、GPIO、EDMA、IPC等。
2)通信協(xié)議:接收外部控制命令并解析,返回檢測結(jié)果及狀態(tài)信息等。
3)狀態(tài)管理:對系統(tǒng)運(yùn)行狀態(tài)進(jìn)行監(jiān)測,對異常情況進(jìn)行上報(bào),如圖像接收異常等。
4)海天線檢測:是系統(tǒng)實(shí)現(xiàn)紅外小目標(biāo)檢測的關(guān)鍵步驟,根據(jù)FPGA傳入的圖像對海天線進(jìn)行檢測,輸出海天線位置信息。
5)紅外小目標(biāo)檢測:是系統(tǒng)實(shí)現(xiàn)紅外小目標(biāo)檢測的關(guān)鍵步驟,根據(jù)FPGA傳入的圖像,結(jié)合海天線檢測輸出的位置信息,對海天線附近目標(biāo)進(jìn)行檢測,輸出小目標(biāo)的位置信息。
6)遠(yuǎn)程升級:通過DSP的串口實(shí)現(xiàn)DSP程序的遠(yuǎn)程升級,減少設(shè)備拆機(jī)次數(shù),實(shí)現(xiàn)在線升級功能。
主程序通過將上一模塊的輸出傳遞至下一模塊的輸入,減少各模塊間的耦合,避免各模塊運(yùn)行間的資源沖突。模塊間的相互獨(dú)立和主程序的調(diào)度使得軟件程序更加簡潔明了,便于軟件程序的更新及維護(hù)。
海天線檢測和紅外小目標(biāo)檢測是系統(tǒng)實(shí)現(xiàn)海上紅外小目標(biāo)檢測的兩個(gè)核心模塊,DSP串行處理兩個(gè)檢測模塊的時(shí)間較長,結(jié)合M6678的硬件特征,將海天線檢測模塊和小目標(biāo)檢測模塊分別在DSP的兩顆內(nèi)核上獨(dú)立運(yùn)行,通過主程序?qū)崿F(xiàn)檢測功能調(diào)度。如圖2所示,核1實(shí)現(xiàn)海天線檢測功能,核2實(shí)現(xiàn)小目標(biāo)檢測功能,雙核采用流水并行處理架構(gòu)。
圖2 DSP雙核流水示意圖
DSP的應(yīng)用程序可以在SYS/BIOS[8]下運(yùn)行,也可以在裸系統(tǒng)下運(yùn)行?;赟YS/BIOS操作系統(tǒng)運(yùn)行應(yīng)用程序,所占用資源較多,調(diào)度開銷較大?;赟YS/BIOS的軟件架構(gòu)適合多任務(wù)多線程的系統(tǒng)。
本文基于功能模塊化進(jìn)行設(shè)計(jì),各從核程序功能結(jié)構(gòu)單一,主核程序以串行處理為主,因此DSP以裸系統(tǒng)方式運(yùn)行應(yīng)用程序。相比SYS/BIOS操作系統(tǒng)的方式,裸系統(tǒng)所占用資源少,核間通信所需時(shí)間開銷更小。
算法是實(shí)現(xiàn)海上紅外小目標(biāo)檢測的核心,基于算法原理及處理步驟設(shè)計(jì)軟件流程。核0完成硬件資源、接口驅(qū)動初始化,接收來自FPGA的圖像,解析串口命令,調(diào)度核1及核2分別實(shí)現(xiàn)海天線檢測和小目標(biāo)檢測功能。核0與核1、核2之間調(diào)度通過IPC核間通信實(shí)現(xiàn)。
核間通信是實(shí)現(xiàn)多核程序運(yùn)行的重要環(huán)節(jié)。M6678 DSP由核間中斷觸發(fā)通信后,配置相應(yīng)的寄存器,以完成通信。
核0向核1發(fā)送IPC_core0中斷,同時(shí)傳遞圖像存放地址和圖像大小信息,啟動核1進(jìn)行海天線檢測,核1提取出海天線位置信息,通過IPC_core1中斷通知核0。核0根據(jù)海天線位置計(jì)算目標(biāo)潛在區(qū)域,向核2發(fā)送IPC_core0中斷,將待檢測區(qū)域圖像信息發(fā)送給核2并啟動核2進(jìn)行小目標(biāo)檢測,核2完成小目標(biāo)檢測后,通過IPC_core2中斷通知核0。核0接收到小目標(biāo)信息后,根據(jù)篩選規(guī)則進(jìn)行目標(biāo)上報(bào)。軟件處理流程如圖3所示。
圖3 軟件處理流程
利用C語言,結(jié)合DSP運(yùn)算的特征及算法原理實(shí)現(xiàn)海天線檢測和紅外小目標(biāo)檢測功能,并針對其中計(jì)算復(fù)雜度較高的步驟進(jìn)行優(yōu)化設(shè)計(jì)。
2.4.1 Canny檢測實(shí)現(xiàn)及優(yōu)化
1)Canny檢測[9]的基本原理是通過查找圖像梯度的局部最大值來得到邊緣信息,通過高斯濾波去噪對圖像進(jìn)行預(yù)處理。高斯濾波器核的產(chǎn)生可根據(jù)算法原理的公式得到,如下:
本文設(shè)計(jì)時(shí),利用常量表代替高斯濾波器核系數(shù)實(shí)時(shí)計(jì)算,減少函數(shù)運(yùn)行時(shí)間。
2)按照常規(guī)雙層for循環(huán)設(shè)計(jì)5×5的高斯濾波程序。由于DSP編譯器無法對外層循環(huán)進(jìn)行優(yōu)化處理,導(dǎo)致DSP的指令流水并行度不高。而充分利用軟件流水方式能極大提高程序運(yùn)行效率,因此,本文優(yōu)化設(shè)計(jì)時(shí),將5×5濾波程序的雙層for循環(huán)展開為單層for循環(huán)。即將:
for(i=0;i<5;i++){
for(j=0;j<5;j++){
}}
優(yōu)化為for(i=0;i<25;i++){}。
3)計(jì)算當(dāng)前像素點(diǎn)的梯度及方向,常規(guī)流程按照逐像素點(diǎn)計(jì)算,即算出每個(gè)像素點(diǎn)梯度強(qiáng)度的幅值和梯度的方向。
DSP只有加法器和乘法器,平方根、除法、三角函數(shù)等計(jì)算需要調(diào)用庫函數(shù)來實(shí)現(xiàn),但頻繁調(diào)用函數(shù)會打斷DSP的指令流水,增加程序運(yùn)行耗時(shí)。針對此問題,本文對算法處理過程進(jìn)行優(yōu)化設(shè)計(jì),即每個(gè)算法步驟將所有點(diǎn)計(jì)算完成,將結(jié)果緩存并送至下一算法步驟。優(yōu)化計(jì)算過程如圖4所示。
圖4 優(yōu)化計(jì)算過程
平方根、除法和反正切函數(shù)可以調(diào)用相應(yīng)的矢量運(yùn)算庫函數(shù)sqrtsp_v()、divsp_v()、atansp_v(),庫函數(shù)在計(jì)算時(shí)對指令進(jìn)行并行處理,增加單個(gè)時(shí)鐘周期計(jì)算量,大大提高了計(jì)算速度。
2.4.2 Hough變換實(shí)現(xiàn)及優(yōu)化
1)對于xOy平面,通過平面上任意一點(diǎn)xi yi的直線有無數(shù)條,并且可表示為yi=axi+b,經(jīng)過極坐標(biāo)公式轉(zhuǎn)換后,公式如下:
海天線是通過Hough直線檢測[10]特征最明顯的直線,因此只要獲取ρθ參數(shù)空間累加最大值的ρmaxθmax,就可通過式(2)反運(yùn)算得到擬合的海天線直線。
查找參數(shù)空間累加最大值的ρmaxθmax,需要計(jì)算每個(gè)像素點(diǎn)在每個(gè)角度的正弦值和余弦值,DSP的三角函數(shù)計(jì)算需要調(diào)用加法指令、乘法指令實(shí)現(xiàn),調(diào)用一次三角函數(shù)耗時(shí)約為180 ns,大量的三角函數(shù)計(jì)算會導(dǎo)致DSP運(yùn)算耗時(shí)增加。
為減少函數(shù)運(yùn)行耗時(shí),根據(jù)海天線角度范圍和精度,采用查找表的方式代替三角函數(shù)實(shí)時(shí)計(jì)算,即提前計(jì)算出1°~180°,每次角度增量為1°的正弦值和余弦值,然后分別存放在常量表中。當(dāng)調(diào)用三角函數(shù)計(jì)算時(shí),只需查找對應(yīng)角度的常量值,如計(jì)算50°的正弦值時(shí),只需查找SIN_TABLE[50]的值即可。采用這種方式計(jì)算可以減小計(jì)算復(fù)雜度,同時(shí)查找表的指令還可與其他指令并行,減少程序耗時(shí)。
2)Hough檢測器進(jìn)行累加值計(jì)算時(shí),需要完成檢測計(jì)數(shù)器清零操作。由于計(jì)數(shù)器模板較大,清零操作會增加DSP軟件運(yùn)行耗時(shí),故本文結(jié)合DSP硬件特征,設(shè)計(jì)軟硬件并行的方式實(shí)現(xiàn)計(jì)數(shù)器清零操作。
DSP通過調(diào)用DMA控制器[11]實(shí)現(xiàn)數(shù)據(jù)搬移,此操作不占用DSP軟核的資源,因此在每幀Canny檢測開始之前,先啟動DMA,通過DMA將一塊數(shù)值全為0的空間數(shù)據(jù)搬移至計(jì)數(shù)器空間,實(shí)現(xiàn)計(jì)數(shù)器清零的操作,同時(shí)對DSP內(nèi)核進(jìn)行Canny檢測處理。在Hough變換前,通過查看DMA狀態(tài)寄存器確認(rèn)DMA搬移是否完成。
通過此方法實(shí)現(xiàn)軟硬件的并行處理,能夠減少DSP的軟件負(fù)載,從而提高系統(tǒng)運(yùn)行速度。
2.4.3 紅外小目標(biāo)檢測實(shí)現(xiàn)
系統(tǒng)的主要目的是進(jìn)行紅外小目標(biāo)檢測[12],既要滿足檢測性能需求,同時(shí)也要滿足實(shí)時(shí)性要求。傳統(tǒng)方法采用全圖檢測,此方法計(jì)算量大同時(shí)也存在虛檢。
由海上紅外小目標(biāo)特點(diǎn)可知,小目標(biāo)存在于海天線附近,根據(jù)海天線的位置即可確定目標(biāo)潛在區(qū)域。在潛在區(qū)域檢測通過new Top-hat[13]的檢測方法完成紅外小目標(biāo)檢測,既可減少檢測程序運(yùn)行時(shí)間,同時(shí)還能減少虛檢。
本文除使用上述方法外,還采用其他優(yōu)化方法,如CCS編譯器優(yōu)化、內(nèi)聯(lián)函數(shù)、#pragma預(yù)編譯指令、restrict關(guān)鍵字等,通過優(yōu)化提高DSP的運(yùn)行效率。
通過CCS的Load Memory功能將圖像數(shù)據(jù)導(dǎo)入DSP的DDR空間,圖像尺寸為640×512像素。通過CCS Image Analyzer分析工具查看最后檢測結(jié)果。通過統(tǒng)計(jì)程序運(yùn)行前后的DSP時(shí)鐘周期,計(jì)算程序運(yùn)行耗時(shí)。本文選取了兩種不同的場景進(jìn)行海上紅外小目標(biāo)檢測的實(shí)驗(yàn),驗(yàn)證目標(biāo)檢測準(zhǔn)確性的同時(shí)也對程序優(yōu)化前后耗時(shí)進(jìn)行對比。
場景一:海天線為水平的一條直線,2個(gè)目標(biāo)在海天線上方,如圖5a)所示。
從核收到圖像后,對圖像進(jìn)行海天線檢測,提取海天線;主核收到從核的海天線檢測結(jié)果,更新目標(biāo)檢測區(qū)域,在原始圖像上對海上小目標(biāo)進(jìn)行檢測,檢出目標(biāo)如圖5a)白色小框所示。
場景二:海天線為傾斜的一條直線,2個(gè)目標(biāo)在海天線上方,如圖5b)所示。
從核收到圖像后,對圖像進(jìn)行海天線檢測,提取海天線;主核收到從核的海天線檢測結(jié)果,更新目標(biāo)檢測區(qū)域,在原始圖像上對海上小目標(biāo)進(jìn)行檢測,檢出目標(biāo)如圖5b)白色小框所示。
圖5 實(shí)驗(yàn)結(jié)果
兩種場景優(yōu)化前后的耗時(shí)統(tǒng)計(jì)如表1所示。
由表1實(shí)驗(yàn)結(jié)果可知,系統(tǒng)經(jīng)過優(yōu)化后均能檢出小目標(biāo),同時(shí)耗時(shí)均在25 ms以內(nèi),滿足實(shí)時(shí)檢測的需求。
表1 優(yōu)化前后運(yùn)行時(shí)間對比表 ms
本文以M6678 DSP為核心處理器,設(shè)計(jì)一種可滿足實(shí)時(shí)性要求的海上紅外小目標(biāo)檢測系統(tǒng)。根據(jù)檢測算法原理,結(jié)合DSP內(nèi)核架構(gòu)的特點(diǎn),對系統(tǒng)軟件進(jìn)行優(yōu)化設(shè)計(jì)。實(shí)驗(yàn)結(jié)果表明,在滿足檢測海上紅外小目標(biāo)的條件下,本文系統(tǒng)DSP運(yùn)行耗時(shí)小于25 ms,達(dá)到40 Hz處理能力,滿足實(shí)時(shí)性的需求。同時(shí),多核架構(gòu)的設(shè)計(jì)和軟件優(yōu)化方法也為圖像處理算法DSP的實(shí)現(xiàn)提供了參考。