成昊天,丁榮莉,胡博文,李 杰,李 焱,歐陽(yáng)尚榮
(1.上海航天智能計(jì)算技術(shù)重點(diǎn)實(shí)驗(yàn)室,上海 201109;2.上海航天電子技術(shù)研究所,上海 201109)
在星載船艦識(shí)別技術(shù)領(lǐng)域,目前基于合成孔徑雷達(dá)(Synthetic Aperture Radar,SAR)和可見(jiàn)光載荷的技術(shù)已經(jīng)相對(duì)成熟并工程化,基于紅外載荷的艦船識(shí)別發(fā)展相對(duì)滯后。紅外傳感器受到大氣、海洋熱輻射以及探測(cè)器噪聲等因素影響,使艦船目標(biāo)在紅外圖像上呈現(xiàn)為低信噪比的小目標(biāo),這就要求紅外艦船識(shí)別技術(shù)能在各種復(fù)雜的背景環(huán)境下,克服各種惡劣因素影響,同時(shí)要具有較好的實(shí)時(shí)性和較高的檢測(cè)率,這也是紅外艦船目標(biāo)識(shí)別技術(shù)亟待解決的問(wèn)題[1-2]。近年來(lái),目標(biāo)檢測(cè)在深度學(xué)習(xí)的幫助下取得了不錯(cuò)的進(jìn)展[3-4],在SAR 和可見(jiàn)光波段已有一些基于深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)檢測(cè)目標(biāo)的成果[5-7]。由于神經(jīng)網(wǎng)絡(luò)算法工程化部署較復(fù)雜,利用傳統(tǒng)現(xiàn)場(chǎng)可編程邏輯門陣列(Field Programmable Gate Array,F(xiàn)PGA)開(kāi)發(fā)方法部署于在軌系統(tǒng)難度較大,于是采用高層次綜合(High Level Synthesis,HLS)代替了傳統(tǒng)FPGA 開(kāi)發(fā)方法。為了降低在軌系統(tǒng)的功耗,減少神經(jīng)網(wǎng)絡(luò)的無(wú)用計(jì)算,跳過(guò)一些明顯無(wú)目標(biāo)的圖像,需要增加一個(gè)計(jì)算量較小的粗檢模塊。
粗檢模塊包含多個(gè)小算法,用來(lái)粗略提取特征,其中,連通域的提取在工程化階段屬于一個(gè)難點(diǎn)[8],常用的算法是基于CPU 運(yùn)算而設(shè)計(jì),具有較大的隨機(jī)性,而FPGA 優(yōu)勢(shì)更多的在于流水線式數(shù)據(jù)處理的加速,更偏向于順序性。目前,有關(guān)FPGA端部署的方法均采用了傳統(tǒng)的設(shè)計(jì)方法,算法原理方面主要有基于像素掃描[8-14]和基于游程掃描[15-19]的方法?;谟纬痰姆椒ㄓ捎诿啃械挠纬虜?shù)不確定,導(dǎo)致游程間關(guān)聯(lián)的循環(huán)次數(shù)不定,在通過(guò)HLS進(jìn)行設(shè)計(jì)開(kāi)發(fā)時(shí)容易導(dǎo)致時(shí)延增大,算法穩(wěn)定性不高;而基于像素掃描的方法通常都會(huì)結(jié)合等價(jià)標(biāo)記模式,其中多數(shù)方法采用了4 連通規(guī)則,雖然更簡(jiǎn)單但是對(duì)于目標(biāo)分辨率較低的紅外圖像來(lái)說(shuō)容易出現(xiàn)連通斷開(kāi)的情況,相對(duì)8 連通規(guī)則能夠更全面地提取連通情況[19]。因此,本文針對(duì)基于像素掃描的8 連通域,結(jié)合等價(jià)表方法,通過(guò)分析簡(jiǎn)化連通標(biāo)記情況,采用HLS 開(kāi)發(fā)環(huán)境完成連通域算法的快速設(shè)計(jì)輸入,并在Xilinx 開(kāi)發(fā)板ZCU102 上進(jìn)行部署測(cè)試。
本文提出的連通域快速提取方法是紅外遙感圖像目標(biāo)檢測(cè)算法中的1 個(gè)子模塊,該模塊的功能是對(duì)二值圖像提取出所有連通域,通過(guò)篩選連通域面積對(duì)圖像中的目標(biāo)進(jìn)行粗篩,完成圖像的粗檢功能。對(duì)存在疑似目標(biāo)的圖像,粗檢模塊將發(fā)送檢測(cè)指令給精檢模塊,采用深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)對(duì)圖像目標(biāo)進(jìn)行精確檢測(cè)。對(duì)于不存在疑似目標(biāo)的圖像,則發(fā)送指令給精檢模塊跳過(guò)該圖像的檢測(cè),降低整體功耗和計(jì)算量。整體算法的框架圖如圖1 所示,其中突出顯示的即為本文的連通域算法。
圖1 紅外遙感圖像目標(biāo)檢測(cè)算法框圖Fig.1 Block diagram of the infrared remote sensing image target detection algorithm
載荷圖像原始數(shù)據(jù)包含各種干擾成分,通常不能直接作為輸入圖像,經(jīng)過(guò)預(yù)處理后消除了部分干擾成為常見(jiàn)的遙感灰度圖像。將遙感灰度圖像輸入粗檢模塊,經(jīng)過(guò)中值濾波去噪和基于均值濾波的顯著圖提取方法后生成一張顯著圖的二值圖。再經(jīng)過(guò)腐蝕和膨脹操作去除部分雜點(diǎn),生成的新二值圖作為連通域模塊的輸入。在模塊內(nèi)完成連通域的標(biāo)記統(tǒng)計(jì),生成連通域個(gè)數(shù)和對(duì)應(yīng)的面積,經(jīng)過(guò)對(duì)面積篩選,留下滿足條件的疑似目標(biāo)個(gè)數(shù)。若疑似目標(biāo)數(shù)大于0,則向神經(jīng)網(wǎng)絡(luò)模塊輸出檢測(cè)當(dāng)前圖像的指令;若小于0 則輸出跳過(guò)指令。
整個(gè)粗檢模塊在移植至硬件的過(guò)程中,發(fā)現(xiàn)基于CPU 計(jì)算邏輯設(shè)計(jì)的算法不能滿足FPGA 硬件平臺(tái)流水線式的處理過(guò)程。特別是采用種子填充法[20]的連通域提取原算法,由于嵌套循環(huán)過(guò)多且循環(huán)數(shù)量不定,不適合部署在硬件端,難以達(dá)到利用硬件加速的目的。因此,本文針對(duì)FPGA 重新設(shè)計(jì)了一種基于像素掃描的連通域快速提取方法。
FPGA 以其高度并行化的優(yōu)點(diǎn)在數(shù)字信號(hào)處理領(lǐng)域得到了廣泛應(yīng)用。常規(guī)的FPGA 開(kāi)發(fā)需要使用硬件描述語(yǔ)言如VHDL/Verilog 來(lái)完成功能模塊的設(shè)計(jì),但是需要較長(zhǎng)的開(kāi)發(fā)時(shí)間。HLS 開(kāi)發(fā)工具的出現(xiàn),使得廣大設(shè)計(jì)人員能夠采用更高級(jí)的語(yǔ)言(C/C++等)完成設(shè)計(jì)輸入,大大提高了FPGA 的開(kāi)發(fā)效率[21]。
開(kāi)發(fā)人員通過(guò)如圖2 所示的HLS 開(kāi)發(fā)流程即可將采用C/C++語(yǔ)言設(shè)計(jì)的算法實(shí)現(xiàn)為RTL 級(jí)代碼。通過(guò)用戶定義約束文件優(yōu)化設(shè)計(jì)的性能與速度,HLS 會(huì)根據(jù)約束文件的要求自動(dòng)生成相應(yīng)RTL 代碼,極大地節(jié)省了FPGA 的開(kāi)發(fā)時(shí)間,使得開(kāi)發(fā)具有高靈活性和高效性。
圖2 HLS 的設(shè)計(jì)流程Fig.2 Design process of the HLS
整個(gè)粗檢模塊作為一個(gè)獨(dú)立的知識(shí)產(chǎn)權(quán)(Intellectual Property,IP)核,與其他IP 核共同組成整個(gè)檢測(cè)系統(tǒng),由于其中涉及多種復(fù)雜算法,適合采用更靈活高效的HLS 進(jìn)行開(kāi)發(fā)。各個(gè)內(nèi)部子模塊能夠更好地配合優(yōu)化,利用dataflow 形成函數(shù)級(jí)流水,進(jìn)一步提高整體算法的執(zhí)行效率。
連通域類型主要包含4 連通和8 連通,基于不同的需求可以采用不同的連通類型,而本文所用遙感圖像分辨率較小,艦船目標(biāo)又是細(xì)長(zhǎng)形,其寬度較小,在經(jīng)過(guò)腐蝕膨脹后容易出現(xiàn)對(duì)角形式的連通情況如圖3 所示。
圖3 對(duì)角式連通情況Fig.3 Connectivity in diagonal form
8 鄰域連通的關(guān)聯(lián)范圍更為廣泛全面,更適用于該種情況。采用逐行掃描像素的方式記錄提取連通域信息,如圖4 所示,連通域提取的流程主要包含像素標(biāo)記、等價(jià)表記錄和真連通域統(tǒng)計(jì)3 個(gè)部分。
圖4 連通域提取流程Fig.4 Extraction process of the connected domain
算法接收來(lái)自上個(gè)模塊的二值圖像,逐個(gè)掃描像素,對(duì)每個(gè)像素獲取二值圖和臨時(shí)標(biāo)簽圖中,如圖5(h)所示的2×3 鄰域范圍內(nèi)的像素值P1~P4和標(biāo)簽值L1~L4。根據(jù)鄰域信息,對(duì)當(dāng)前點(diǎn)X進(jìn)行連通域標(biāo)簽標(biāo)記,同時(shí)對(duì)應(yīng)標(biāo)簽面積記錄+1,對(duì)應(yīng)標(biāo)簽行列最大最小值更新。接著對(duì)滿足新增等價(jià)條件的情況進(jìn)行等價(jià)關(guān)系更新。待全部像素掃描完畢后掃描一次等價(jià)表統(tǒng)計(jì)真實(shí)連通域數(shù)量、面積和行列范圍,經(jīng)過(guò)閾值篩選去掉非目標(biāo)區(qū)域,輸出最終的檢測(cè)/跳過(guò)信號(hào)。由于該算法不需要記錄最終的標(biāo)簽圖像,因此,只需要掃描一遍圖像,達(dá)到獲取連通域信息的同時(shí)避免不必要的資源、時(shí)間和功耗的浪費(fèi)。
1)像素標(biāo)記部分。對(duì)于圖像中間的某一點(diǎn),本文選取了如圖5 所示的2×3 的窗口,其中需標(biāo)記點(diǎn)為X點(diǎn),由于是逐像素掃描,因此,X點(diǎn)的標(biāo)簽值只與其之前的4 個(gè)點(diǎn)有關(guān),即圖中的1、2、3、4。這4 個(gè)點(diǎn)共分16 種情況,如圖5 所示。
圖5 標(biāo)記點(diǎn)窗口所有情況(點(diǎn)X 不為0 時(shí))Fig.5 All cases for the mark point window(when point X is not 0)
圖5 列出了2×3 窗口的所有情況,其中右下角像素不考慮,黑色為像素值為0 的背景像素,白色為像素值為1 的前景像素。設(shè)定P為二值圖像素點(diǎn),L為其標(biāo)簽值,本文采取的像素標(biāo)記方法只需滿足一個(gè)原則即先行后列,對(duì)于不為0 的點(diǎn)X來(lái)說(shuō):
(1)同行前一像素P1>0 時(shí),無(wú)論上一行的P2~P4為何值,點(diǎn)X的標(biāo)簽都直接與P1相關(guān)聯(lián)(當(dāng)前行優(yōu)先);
(2)當(dāng)P1=0 時(shí),再對(duì)上一行的3 個(gè)點(diǎn)逐列依次判 斷,從P2到P4,將第一個(gè)不為0 的點(diǎn)與點(diǎn)X相關(guān)聯(lián);
(3)當(dāng)P1、P2、P3、P4全為0 時(shí),表示X點(diǎn)為一個(gè)可能的新連通域的起始,此時(shí)為點(diǎn)X分配一個(gè)新標(biāo)簽值。
在設(shè)置點(diǎn)X標(biāo)簽的時(shí)候,并不采用直接復(fù)制標(biāo)簽值的方法,而是以標(biāo)簽值為索引獲取其等價(jià)表中關(guān)聯(lián)的連通域標(biāo)簽值,將該值作為標(biāo)簽賦值給點(diǎn)X。過(guò)程示例如圖6 所示。這樣的好處是當(dāng)出現(xiàn)多個(gè)連通域互聯(lián)時(shí)任意一個(gè)新關(guān)聯(lián)的像素點(diǎn)都能直接標(biāo)記為統(tǒng)一的最小標(biāo)簽號(hào)。
圖6 利用等價(jià)表的標(biāo)記過(guò)程Fig.6 Labeling process with the equivalence table
2)等價(jià)表部分。等價(jià)表主要用來(lái)記錄連通域的關(guān)聯(lián)狀態(tài),操作主要分為3 部分:一是像素掃描時(shí)的新增標(biāo)簽號(hào);二是新增等價(jià)關(guān)系時(shí)將相關(guān)聯(lián)的兩個(gè)標(biāo)簽統(tǒng)一設(shè)置為兩者中的最小值,這樣可以確保多個(gè)標(biāo)簽互相關(guān)聯(lián)時(shí)都直接對(duì)應(yīng)至其中的最小值,同時(shí)掃描像素進(jìn)行標(biāo)記時(shí)也能夠直接賦值該最小值;三是等價(jià)表刷新,由于新增等價(jià)操作局限于兩個(gè)標(biāo)簽號(hào),而多標(biāo)簽連通的情況下容易導(dǎo)致等價(jià)關(guān)系丟失,因此,需要確保等價(jià)表中只存在一層映射關(guān)系,即等價(jià)關(guān)系變更后所有相關(guān)的等價(jià)映射都更新至最小標(biāo)簽號(hào),即使用E(L)=E(E(L))遍歷一次等價(jià)表。
對(duì)于新增等價(jià)關(guān)系的情況,由于P1、P2、P3點(diǎn)的等價(jià)關(guān)系已經(jīng)由P1完成,因此,當(dāng)前點(diǎn)X只需要考慮與P4點(diǎn)的等價(jià)情況。當(dāng)除P4外沒(méi)有其他點(diǎn)>0時(shí),X直接與P4關(guān)聯(lián),無(wú)需建立新等價(jià)關(guān)系;當(dāng)P3>0,P4>0 時(shí),無(wú)論P(yáng)1是否為0,都不存在需要新建等價(jià)關(guān)系的情況,因此,只有當(dāng)P3<0,P4>0 且P1+P2>0時(shí),才需要新建等價(jià)關(guān)系,3 種情況如圖7 所示。
圖7 需要新增等價(jià)關(guān)系的3 種情況Fig.7 Three cases where new equivalence relations are required
3)真連通域統(tǒng)計(jì)部分。將整張圖像掃描完成后,需要統(tǒng)計(jì)真連通域個(gè)數(shù)、面積和行列范圍,只需要掃描一次等價(jià)表,對(duì)E(L)=L的標(biāo)簽給一個(gè)新的真連通域標(biāo)號(hào)Cl(以自然數(shù)順序),而E(L)=M的情況則將標(biāo)簽L累計(jì)的面積加至標(biāo)簽M對(duì)應(yīng)的真連通域標(biāo)號(hào)Cm的面積統(tǒng)計(jì)值中。統(tǒng)計(jì)完畢后獲得真實(shí)連通域個(gè)數(shù)、面積和行列范圍,經(jīng)過(guò)閾值篩選后根據(jù)目標(biāo)情況向后續(xù)模塊輸出對(duì)應(yīng)信號(hào)。
本文算法采用256×256 大小的圖像作為輸入數(shù)據(jù)進(jìn)行設(shè)計(jì),算法在HLS 開(kāi)發(fā)環(huán)境中完成設(shè)計(jì)輸入后,分別進(jìn)行C 仿真、C 綜合和RTL 聯(lián)合仿真,通過(guò)后即可導(dǎo)出IP 核。在Vivado 中建立工程,添加各種功能IP 模塊完成布局布線,這一步是完成可編程邏輯(Programable Logic,PL)端中算法功能和與處理系統(tǒng)(Processing System,PS)端的交互功能設(shè)計(jì),確保整個(gè)系統(tǒng)能正確運(yùn)作,該工程最終生成PL 端使用的比特流文件。接下來(lái)從Vivado 中啟動(dòng)軟件開(kāi)發(fā)工具包(Software Development Kit,SDK),完成PS 端嵌入式控制程序的編寫,之后便可以連接開(kāi)發(fā)板將包含PL 和PS 的整個(gè)工程導(dǎo)入開(kāi)發(fā)板進(jìn)行測(cè)試。
本文算法測(cè)試所采用的紅外遙感例圖,如圖8(a)所示。經(jīng)過(guò)算法提取出的二值顯著圖,如圖8(b)所示。再經(jīng)過(guò)腐蝕和膨脹去除雜點(diǎn),即可獲得用于提取連通域的二值圖,如圖8(c)所示。由于本文連通域算法屬于整個(gè)檢測(cè)算法中的一部分,測(cè)試性能時(shí)需要單獨(dú)將模塊獨(dú)立出來(lái),于是直接采用圖8(c)作為輸入圖像分別測(cè)試連通域提取正確性和部署至硬件后的運(yùn)行效率。連通域提取算法將標(biāo)記完的圖像保存為二進(jìn)制文件,在Matlab 中讀取文件數(shù)據(jù)后得到的連通域標(biāo)記圖,如圖8(d)所示,參考標(biāo)簽數(shù)值可見(jiàn)算法標(biāo)記出的連通域正確無(wú)誤。經(jīng)過(guò)對(duì)比與采用種子填充法的PC 版原程序得到了一致的結(jié)果。
圖8 粗檢算法過(guò)程Fig.8 Process of the coarse screening algorithm
將本文的連通域算法在HLS 開(kāi)發(fā)環(huán)境中完成各種“#pragma”優(yōu)化設(shè)置后進(jìn)行綜合,待綜合完成后會(huì)出具綜合報(bào)告,內(nèi)含總時(shí)延和資源消耗量。原版PC 算法種子填充法由于循環(huán)條件多變,HLS 無(wú)法確定總時(shí)延,對(duì)其進(jìn)行適當(dāng)改寫將循環(huán)數(shù)量固定后,綜合報(bào)告才給出分析結(jié)果,但時(shí)延變動(dòng)范圍很大。通過(guò)RTL 級(jí)仿真后將IP 核導(dǎo)出,在Vivado 中完成PL 端設(shè)計(jì)并生成比特流文件,此處Vivado 會(huì)再次對(duì)資源進(jìn)行優(yōu)化分配,給出算法最終資源消耗。兩種算法的比特流文件通過(guò)軟件開(kāi)發(fā)工具SDK 編程至芯片上,針對(duì)相同輸入進(jìn)行了運(yùn)算性能測(cè)試。以上對(duì)比結(jié)果見(jiàn)表1。
表1 算法測(cè)試結(jié)果對(duì)比Tab.1 Results of algorithm testing
從結(jié)果中可以發(fā)現(xiàn):1)本文算法最大最小時(shí)延完全一致,非常穩(wěn)定,對(duì)比算法時(shí)延浮動(dòng)巨大,穩(wěn)定性差,且最小時(shí)延遠(yuǎn)大于本文算法;2)本文算法實(shí)際資源使用量明顯小于對(duì)比算法;3)本文實(shí)測(cè)運(yùn)行速率遠(yuǎn)大于對(duì)比算法,效率極高。
種子填充法的總時(shí)延很不穩(wěn)定,會(huì)導(dǎo)致實(shí)際單次運(yùn)行的時(shí)間波動(dòng),在整個(gè)粗檢模塊中是影響運(yùn)行效率與穩(wěn)定性的最大隱患,更重要的是粗檢模塊需要采用流式數(shù)據(jù)輸入來(lái)減小緩存的使用量,而種子填充法的處理邏輯存在非連續(xù)訪問(wèn),并不適合流式數(shù)據(jù)輸入的方式。再?gòu)馁Y源消耗量上看,本文算法的邏輯資源消耗量在HLS 的資源報(bào)告中除查找表(Look-Up Table,LUT)資源略高于對(duì)比算法外其他均更低,而Vivado 實(shí)際資源使用量更是均低于對(duì)比算法。此外,在開(kāi)發(fā)板實(shí)測(cè)部分,同樣時(shí)鐘頻率和輸入下,本文算法達(dá)到了797 幀/s 的速度,約是對(duì)比算法的5.5 倍,在處理速度方面提升很大,更能滿足在大數(shù)據(jù)量的情況下對(duì)計(jì)算速度的需求。
連通域提取是紅外遙感圖像目標(biāo)粗檢模塊中的重要組成部分,粗檢算法所提取的信息經(jīng)過(guò)連通域提取后能夠篩去多數(shù)假目標(biāo),降低精檢模塊運(yùn)算壓力的同時(shí)也能減少系統(tǒng)的功耗。本文所提出的適合FPGA 平臺(tái)的連通域快速提取方法結(jié)合HLS的開(kāi)發(fā)模式,簡(jiǎn)化了開(kāi)發(fā)流程,提高了算法開(kāi)發(fā)驗(yàn)證的效率,使得軟件設(shè)計(jì)人員也能夠進(jìn)行算法的FPGA 硬件端部署實(shí)現(xiàn)。本文算法通過(guò)只掃描一次二值圖像,將面積和等價(jià)信息均記錄在比圖像更小的等價(jià)表中,提高了運(yùn)算速度又節(jié)省了大量緩存。通過(guò)分析歸并標(biāo)記窗口的所有情況,簡(jiǎn)化了標(biāo)記規(guī)則和新增等價(jià)關(guān)系的判別,同時(shí)結(jié)合等價(jià)表刷新方法,將等價(jià)表內(nèi)部保持為僅有一層映射關(guān)系,防止多重映射導(dǎo)致的關(guān)聯(lián)信息丟失。本文所采用的連通域提取方法不僅可應(yīng)用在紅外遙感圖像的處理中,也適用于大部分FPGA 端二值圖像連通域的提取。