(西安應(yīng)用光學(xué)研究所,陜西 西安 710065)
紅外弱小目標(biāo)檢測技術(shù)作為紅外搜跟系統(tǒng)、紅外預(yù)警系統(tǒng)、精確制導(dǎo)系統(tǒng)中的關(guān)鍵技術(shù),一直是國內(nèi)外紅外圖像處理領(lǐng)域的研究熱點(diǎn)[1]。盡可能提高目標(biāo)的檢測距離,可以為打擊對抗等措施贏得時(shí)間。但紅外目標(biāo)的成像面積小,對比度低,背景復(fù)雜,難以準(zhǔn)確檢測;紅外成像幀頻高、數(shù)據(jù)量大,難以實(shí)時(shí)處理[2]。
近年來,隨著GPU(graphics processing unit,圖像處理器)應(yīng)用技術(shù)的不斷發(fā)展,具有強(qiáng)大并行能力的GPU 越來越多地被應(yīng)用于高性能計(jì)算需求領(lǐng)域[3]。針對紅外弱小目標(biāo)檢測算法對每個(gè)像素點(diǎn)獨(dú)立處理,適合于GPU 并行計(jì)算的特點(diǎn),本文提出了基于嵌入式GPU的紅外弱小目標(biāo)檢測算法。由于應(yīng)用系統(tǒng)對處理器功耗體積要求較高,因此選擇采用英偉達(dá)Jetson TX2 嵌入式GPU 作為邊緣計(jì)算平臺(tái)進(jìn)行并行優(yōu)化。實(shí)驗(yàn)結(jié)果表明,對640×480像素分辨率的紅外視頻,并行優(yōu)化后的目標(biāo)檢測算法能夠在10 ms 內(nèi)完成計(jì)算,滿足實(shí)時(shí)處理需求。
在紅外成像過程中,由于受到大氣散射、光學(xué)散焦等因素的影響,紅外弱小目標(biāo)在圖像中一般表現(xiàn)為斑點(diǎn)狀,其面積一般不大于9×9像素[4-5],空間灰度分布表現(xiàn)為中心最亮,且向四周輻射,與二維高斯函數(shù)非常相似[6]。
紅外弱小目標(biāo)檢測算法可以分為單幀檢測和多幀檢測兩類[7]。由于許多應(yīng)用場景中存在目標(biāo)與成像傳感器之間的相對運(yùn)動(dòng),不利于多幀檢測軌跡關(guān)聯(lián),因此單幀檢測已成為紅外弱小目標(biāo)檢測算法的主要研究方向之一[8-9]。
基于單幀圖像的紅外目標(biāo)檢測算法,主要利用目標(biāo)與背景之間的灰度、結(jié)構(gòu)等特征差異進(jìn)行檢測。根據(jù)弱小目標(biāo)的灰度強(qiáng)于鄰域灰度的特征,Chen 等[10]基于視覺對比機(jī)制提出了一種局部對比測量方法(local contrast measure,LCM)。此后,許多學(xué)者對該方法進(jìn)行了研究和改進(jìn)[11],其中基于高斯尺度空間的增強(qiáng)型LCM算法[12]目檢效果顯著。LCM算法在計(jì)算局部對比度時(shí),多使用的是比率形式定義。具體方法為通過計(jì)算圖像中某局部中心與鄰域之間的比率,得出目標(biāo)響應(yīng)值。LCM算法示意如圖1所示。
圖1 LCM算法示意圖Fig.1 Schematic of LCM algorithm
圖1中,u對應(yīng)于目標(biāo)區(qū)域,v對應(yīng)于目標(biāo)鄰域的局部背景。將窗口在圖像上依次從左向右、從上到下滑動(dòng),截取圖像塊。對圖像塊進(jìn)行九等分,中心圖像塊即為目標(biāo)區(qū)域,記為“0”,鄰域圖像塊分別記為“1”~“8”,代表中心塊的八鄰域。
首先計(jì)算出鄰域每個(gè)子圖像塊的均值mi,可以由(1)式表示:
式中:i取值為1,2,…,8;N表示一個(gè)圖像塊中的像素個(gè)數(shù);表示第i個(gè)鄰域塊內(nèi)第j個(gè)像素的灰度值。
中心塊與八個(gè)鄰域塊的響應(yīng)值C可以表示為
其中L為中心塊像素的最大值,即
C 即為目標(biāo)響應(yīng)值,當(dāng) C大于閾值時(shí),中心區(qū)域即為目標(biāo)。
LCM算法在信噪比較高的紅外圖像中取得了較好效果,但是當(dāng)紅外圖像中存在高亮點(diǎn)噪聲時(shí),容易引起虛警。借鑒于LCM算子,本文在算子設(shè)計(jì)時(shí)考慮盡可能采用卷積核實(shí)現(xiàn),不僅便于快速運(yùn)算,而且可以消除隨機(jī)噪聲影響,還能與弱小目標(biāo)形成最大響應(yīng)。為此,設(shè)計(jì)了零均值高斯核(zero-mean Gaussian kernel)算子來替代LCM算子,通過一次高斯核卷積來求解目標(biāo)響應(yīng)值。零均值高斯核算子示意如圖2所示。
圖2 零均值高斯核卷積濾波示意圖Fig.2 Schematic of zero-mean Gaussian kernel convolution filtering
零均值高斯核是在標(biāo)準(zhǔn)高斯核的基礎(chǔ)上,減去其平均值,得到一個(gè)積分為零的高斯核。這種高斯核不僅保留了原有高斯函數(shù)特性,還具備了與高斯差分算子(DoG)相似的差分特性。所不同的是,零均值高斯核減小了過渡區(qū)域的權(quán)重,在中心位置和最遠(yuǎn)端具有最大權(quán)重,更容易使目標(biāo)與背景形成最大響應(yīng)。零均值高斯核卷積濾波的具體計(jì)算流程為:設(shè)定圖像塊區(qū)域包含9×9個(gè)像素,對圖像塊區(qū)域計(jì)算零均值高斯濾波,得到目標(biāo)響應(yīng)值C。由(4)式表示:
式中:I(j,i)表示像素坐標(biāo)點(diǎn)(j,i)的灰度值;零均值高斯核ZG(x,y)由(5)式表示:
其中σL為高斯核的標(biāo)準(zhǔn)差。遍歷整幅圖像中所有像素,即可得到與原圖相對應(yīng)的局部對比度圖像C。
與LCM算法相比,零均值高斯核的改進(jìn)主要體現(xiàn)在以下幾個(gè)方面:
1) 將圖像去噪、目標(biāo)信號增強(qiáng)和目標(biāo)背景差分,在一次卷積運(yùn)算中完成;
2) 去掉了對區(qū)域的強(qiáng)制九等分,鄰域塊之間過渡更加平滑,降低了高斯核標(biāo)準(zhǔn)差對目標(biāo)尺度變化的敏感性;
3) 去掉了求局部極值,采用高斯核濾波,便于GPU 快速運(yùn)算,有利于簡化計(jì)算和工程應(yīng)用;
4) 零均值高斯核更加符合目標(biāo)灰度分布特征,目標(biāo)響應(yīng)值更顯著,能夠抑制云層干擾。
很多LCM改進(jìn)算法,均采用高斯差分算子(DoG)算子或拉普拉斯算子(LoG)來計(jì)算目標(biāo)響應(yīng),其濾波核剖面曲線與零均值高斯核對比如圖3所示。
圖3 DoG/LoG 算子與零均值高斯核剖面圖Fig.3 DoG/LoG operator and zero-mean Gaussian kernel profile
這兩類算子的均值都為零,屬于差分算子。所不同的是零均值高斯核中,背景像素與中心位置距離越遠(yuǎn),其權(quán)重越大,這一點(diǎn)和DoG/LoG 算子正好相反。帶來的好處是對目標(biāo)尺寸大小不敏感,真實(shí)目標(biāo)比濾波核稍大或稍小,不會(huì)引起目標(biāo)濾波后響應(yīng)值的劇烈變化。而DoG/LoG 算子由于將背景主要取在目標(biāo)邊緣處,對目標(biāo)尺寸較為敏感,目標(biāo)稍大時(shí)會(huì)引起響應(yīng)值急劇下降,因此常需采用多尺度空間的方式來解決,但隨之也增大了計(jì)算量。零均值高斯核也存在不足之處,主要是會(huì)保留屋脊?fàn)顝?qiáng)邊緣。后續(xù)還需要進(jìn)行非極大值抑制和目標(biāo)判斷,才能檢測出真實(shí)目標(biāo)。
從零均值高斯卷積計(jì)算過程可以看出,該方法是一種像素級操作,通過每個(gè)像素點(diǎn)的卷積運(yùn)算,來凸顯弱小目標(biāo)并抑制背景。為滿足算力需求,本文采用NVIDIA的Jetson TX2平臺(tái)實(shí)現(xiàn)。
Jetson TX2平臺(tái)體積小巧,集成度高,性能強(qiáng)大。TX2平臺(tái)核心是Tergra Parker SOC 芯片,芯片架構(gòu)如圖4所示。該芯片為ARM+GPU 架構(gòu),CPU部分由雙核Denver2 64位CPU和四核ARM A57共同組成,GPU 則采用Pascal 架構(gòu),由兩個(gè)SM(stream mulitprocessor,流多處理器)組成,每個(gè)SM有128個(gè)CUDA(compute unified device architecture,統(tǒng)一計(jì)算機(jī)設(shè)備架構(gòu))核心,浮點(diǎn)計(jì)算能力為1.5TeraFLOPS[13]。除此之外,還有8 GB DDR4 內(nèi)存和豐富的外圍接口,非常適合低能耗和高計(jì)算性能的應(yīng)用場景,因此選擇該平臺(tái)來設(shè)計(jì)實(shí)現(xiàn)實(shí)時(shí)目標(biāo)檢測系統(tǒng),并基于該平臺(tái)GPU 結(jié)構(gòu)及特性設(shè)計(jì)優(yōu)化目標(biāo)檢測算法。
圖4 Tergra Parker 芯片架構(gòu)Fig.4 Tergra Parker chip architecture
為充分利用TX2平臺(tái)的ARM+GPU,本文將算法拆分為ARM端和GPU端并行處理,程序流程圖如圖5所示。
圖5 紅外弱小目標(biāo)檢測算法流程圖Fig.5 Flow chart of infrared weak small target detection algorithm
GPU端主要實(shí)現(xiàn)卷積濾波和非極大值抑制,這兩者都是通過計(jì)算每個(gè)像素與其9×9 鄰域來完成,每個(gè)像素可獨(dú)立計(jì)算,相互之間沒有依賴關(guān)系,因此可以通過 CUDA 程序?qū)ζ溥M(jìn)行并行設(shè)計(jì)實(shí)現(xiàn)。零均值高斯核濾波和非極大值抑制的CUDA偽代碼如表1所示。
表1 零均值高斯核濾波和非極大值抑制的CUDA 偽代碼表Table1 CUDA pseudo code table for zero-mean Gaussian kernel filtering and non-maximum suppression
ARM端主要根據(jù)標(biāo)記數(shù)組找到目標(biāo)位置,并在輸入圖像中完成目標(biāo)方差及其鄰域方差的計(jì)算和比較。針對弱小目標(biāo),將目標(biāo)方差統(tǒng)計(jì)范圍設(shè)定為7×7像素。鄰域方差統(tǒng)計(jì)范圍為去掉目標(biāo)區(qū)域后的9×9像素環(huán)狀區(qū)域。若目標(biāo)方差與鄰域方差的比值大于閾值,則認(rèn)為該點(diǎn)為目標(biāo)點(diǎn)。方差比閾值設(shè)為1.6。
GPU端與ARM端程序采用多線程流水線處理,通過信號量來實(shí)現(xiàn)任務(wù)同步。
在GPU 代碼實(shí)現(xiàn)過程中,主要從以下幾個(gè)方面對程序進(jìn)行優(yōu)化:
a)數(shù)據(jù)零拷貝
JetsonTX2的硬件架構(gòu)與通用計(jì)算機(jī)不同,并不存在單獨(dú)的顯存或者內(nèi)存,只有實(shí)質(zhì)一體的存儲(chǔ)器,所以并不需要使用cudaMemcpy函數(shù)將內(nèi)存數(shù)據(jù)拷貝到顯存,只需要采用cudaMallocManaged函數(shù)來開辟內(nèi)存,同時(shí)將flags 參數(shù)配置為cudaMem AttachGlobal,即可將內(nèi)存同時(shí)映射到GPU和CPU。當(dāng)GPU 訪問該內(nèi)存時(shí),應(yīng)確保CPU 不會(huì)同時(shí)訪問。GPU 計(jì)算完畢后,可調(diào)用cudaEventSynchronize函數(shù)來確保GPU 已完成計(jì)算,釋放該內(nèi)存的使用權(quán),使CPU可以正常訪問。上述方法可實(shí)現(xiàn)GPU與CPU的統(tǒng)一內(nèi)存尋址,避免了計(jì)算數(shù)據(jù)在內(nèi)存與顯存之間的互相復(fù)制。
b) 紋理內(nèi)存的應(yīng)用
為提高內(nèi)存訪問效率,本文采用cudaBindTexture 2D函數(shù),將一維圖像內(nèi)存綁定為二維紋理內(nèi)存,再由GPU 讀寫。通過紋理內(nèi)存讀取數(shù)據(jù),可以避免硬件合并訪問機(jī)制引起的多次內(nèi)存讀取,多數(shù)訪問將在紋理緩存中多次命中,這樣會(huì)使性能得到明顯提升。另外,紋理內(nèi)存可以自動(dòng)處理邊界條件,無需由代碼來判斷是否發(fā)生越界讀取,減少了越界判斷引起的線程分支。
c) 代碼調(diào)試優(yōu)化
NVIDIA為GPU開發(fā)提供了一款功能強(qiáng)大的性能分析工具nvprof。通過輸入不同的指令,即可查看分析各項(xiàng)數(shù)據(jù)。通過nvprof 對代碼進(jìn)行分析優(yōu)化,總結(jié)出以下幾點(diǎn)工程經(jīng)驗(yàn):
1) 程序應(yīng)減少讀寫內(nèi)存次數(shù),以便有效降低時(shí)間,特別是對外部內(nèi)存操作。讀寫共享內(nèi)存也會(huì)耗費(fèi)時(shí)間。GPU 更擅長于計(jì)算,不擅長讀寫內(nèi)存。因此固定參數(shù)盡可寫在代碼里,而不是從內(nèi)存中讀取。
2) CUDA程序預(yù)編譯時(shí),對于整數(shù)和浮點(diǎn)數(shù)的處理不同。如果需使用浮點(diǎn)數(shù),必需將數(shù)值寫成浮點(diǎn)數(shù)。例如(1/16)在CUDA 中的預(yù)編譯結(jié)果為0,(1.0f/16.0f)的預(yù)編譯結(jié)果為0.0625。所以對于能夠預(yù)先計(jì)算出的數(shù)值,最好直接寫成計(jì)算結(jié)果。
3) nvprof統(tǒng)計(jì)出的計(jì)算時(shí)間,波動(dòng)較大。將算法計(jì)算過程拆分為多個(gè)步驟,可以降低計(jì)算時(shí)間的波動(dòng),但也會(huì)增加部分計(jì)算時(shí)間。
4) 寫入共享內(nèi)存后,需在每個(gè)線程內(nèi)加入同步函數(shù)__syncthreads(),完成計(jì)算后寫入全局內(nèi)存時(shí),可以不加入同步函數(shù)。讀取共享內(nèi)存和數(shù)值計(jì)算可以交叉進(jìn)行,有助于提高讀取共享內(nèi)存效率。
5) CUDA函數(shù)代碼內(nèi)可以使用printf()函數(shù)打印變量,便于分析錯(cuò)誤。
6) 盡量不要使用除法和求模運(yùn)算,不僅計(jì)算耗時(shí),而且還會(huì)占用很多寄存器,代價(jià)昂貴。對于復(fù)雜運(yùn)算如開方等,應(yīng)使用CUDA 庫所提供的__fsqrt_rn()等專用數(shù)值計(jì)算函數(shù)。
本文所采用的實(shí)驗(yàn)平臺(tái)為NVIDIA的嵌入式開發(fā)板Jetson TX2,處理器為64 bit Denver2 and A57 CPUs,內(nèi)存8 G,GPU為NVIDIA Tegra X2,頻率為130 MHz,操作系統(tǒng)為Ubuntu16.04,CUDA版本為9.0,其硬件配置如表2所示。
表2 實(shí)驗(yàn)平臺(tái)硬件配置Table2 Hardware configuration of experimental platform
零均值高斯核檢測算法設(shè)置滑動(dòng)窗口大小為9×9,高斯核標(biāo)準(zhǔn)差σ=1.2。對真實(shí)圖像紅外弱小目標(biāo)檢測結(jié)果如圖6所示。
圖6中圖像從上至下依次為:云層背景、弱小目標(biāo)、雜波背景、山地背景。由圖6可以看出:在高信噪比云層背景下,LCM算法與本文算法效果相近;在弱小目標(biāo)、雜波較大、目標(biāo)較大時(shí),零均值高斯核濾波后背景噪聲更小,信噪比更高。
圖6 響應(yīng)圖實(shí)驗(yàn)結(jié)果Fig.6 Experimental results of response maps
為了進(jìn)一步客觀分析零均值高斯核,本文采用信雜比(SCR)指標(biāo)對濾波效果進(jìn)行評估[14],指標(biāo)的定義如(6)式所示:
式中:It為目標(biāo)峰值;μb和σb分別為目標(biāo)鄰域內(nèi)背景的均值和標(biāo)準(zhǔn)差。SCR 越大,說明目標(biāo)信雜比越高,目標(biāo)越易檢測。為了確定出零均值高斯核標(biāo)準(zhǔn)差的最佳參數(shù),本文測試了不同標(biāo)準(zhǔn)差參數(shù)條件下的SCR,測試結(jié)果如表3所示。
表3 不同場景的SCRTable3 SCR of different scenes
4個(gè)場景中的目標(biāo)大小依次為:5×4像素、3×2像素、3×3像素、12×8像素。從。從表3可以看出:標(biāo)準(zhǔn)差參數(shù)設(shè)置對于小目標(biāo)影響較大,對大目標(biāo)影響很?。ㄉ降乇尘埃@與1.3節(jié)中的分析結(jié)果一致。為兼顧各類場景及不同大小的目標(biāo),本文將零均值高斯核標(biāo)準(zhǔn)差設(shè)定為1.2。
零均值高斯核不屬于分離濾波器,不能直接調(diào)用CUDA算法庫實(shí)現(xiàn),因此本文采用直觀實(shí)現(xiàn)方法,通過合理使用共享內(nèi)存和紋理內(nèi)存來達(dá)到實(shí)時(shí)處理[15]。對分辨率640×480像素的紅外圖像序列,采用9×9 零均值高斯核濾波的處理時(shí)間對比如表4所示。
表4 CPU和GPU 耗時(shí)比較Table4 CPU and GPU time comparison ms
在實(shí)驗(yàn)過程中發(fā)現(xiàn),GPU 計(jì)算時(shí)間存在較大的波動(dòng)性,這與共享內(nèi)存頻繁讀取偶爾會(huì)引發(fā)bank 沖突有關(guān)。統(tǒng)計(jì)結(jié)果表明,算法峰值計(jì)算時(shí)間小于10 ms,已能夠滿足系統(tǒng)實(shí)時(shí)處理需求。
由于紅外弱小目標(biāo)的可用特征較少,且需進(jìn)行像素級處理,對弱小目標(biāo)的實(shí)時(shí)檢測非常具有挑戰(zhàn)性。本文利用弱小目標(biāo)灰度的高斯分布特性,設(shè)計(jì)了基于零均值高斯核濾波的目標(biāo)檢測算法。在NVIDIA的Jetson TX2 嵌入式平臺(tái)實(shí)現(xiàn)了算法移植,運(yùn)用GPU 加速計(jì)算技術(shù),實(shí)現(xiàn)了算法的實(shí)時(shí)處理,計(jì)算時(shí)間小于10 ms。下一步擬換用Jetson Xavier平臺(tái),利用其512個(gè)Volta 架構(gòu)CUDA核,有望將計(jì)算時(shí)間控制在5 ms 以內(nèi)。