成昊天,丁榮莉,胡博文,李 杰,李 焱,歐陽尚榮
(1.上海航天智能計算技術重點實驗室,上海 201109;2.上海航天電子技術研究所,上海 201109)
在星載船艦識別技術領域,目前基于合成孔徑雷達(Synthetic Aperture Radar,SAR)和可見光載荷的技術已經相對成熟并工程化,基于紅外載荷的艦船識別發展相對滯后。紅外傳感器受到大氣、海洋熱輻射以及探測器噪聲等因素影響,使艦船目標在紅外圖像上呈現為低信噪比的小目標,這就要求紅外艦船識別技術能在各種復雜的背景環境下,克服各種惡劣因素影響,同時要具有較好的實時性和較高的檢測率,這也是紅外艦船目標識別技術亟待解決的問題[1-2]。近年來,目標檢測在深度學習的幫助下取得了不錯的進展[3-4],在SAR 和可見光波段已有一些基于深度學習神經網絡檢測目標的成果[5-7]。由于神經網絡算法工程化部署較復雜,利用傳統現場可編程邏輯門陣列(Field Programmable Gate Array,FPGA)開發方法部署于在軌系統難度較大,于是采用高層次綜合(High Level Synthesis,HLS)代替了傳統FPGA 開發方法。為了降低在軌系統的功耗,減少神經網絡的無用計算,跳過一些明顯無目標的圖像,需要增加一個計算量較小的粗檢模塊。
粗檢模塊包含多個小算法,用來粗略提取特征,其中,連通域的提取在工程化階段屬于一個難點[8],常用的算法是基于CPU 運算而設計,具有較大的隨機性,而FPGA 優勢更多的在于流水線式數據處理的加速,更偏向于順序性。目前,有關FPGA端部署的方法均采用了傳統的設計方法,算法原理方面主要有基于像素掃描[8-14]和基于游程掃描[15-19]的方法。基于游程的方法由于每行的游程數不確定,導致游程間關聯的循環次數不定,在通過HLS進行設計開發時容易導致時延增大,算法穩定性不高;而基于像素掃描的方法通常都會結合等價標記模式,其中多數方法采用了4 連通規則,雖然更簡單但是對于目標分辨率較低的紅外圖像來說容易出現連通斷開的情況,相對8 連通規則能夠更全面地提取連通情況[19]。因此,本文針對基于像素掃描的8 連通域,結合等價表方法,通過分析簡化連通標記情況,采用HLS 開發環境完成連通域算法的快速設計輸入,并在Xilinx 開發板ZCU102 上進行部署測試。
本文提出的連通域快速提取方法是紅外遙感圖像目標檢測算法中的1 個子模塊,該模塊的功能是對二值圖像提取出所有連通域,通過篩選連通域面積對圖像中的目標進行粗篩,完成圖像的粗檢功能。對存在疑似目標的圖像,粗檢模塊將發送檢測指令給精檢模塊,采用深度學習神經網絡對圖像目標進行精確檢測。對于不存在疑似目標的圖像,則發送指令給精檢模塊跳過該圖像的檢測,降低整體功耗和計算量。整體算法的框架圖如圖1 所示,其中突出顯示的即為本文的連通域算法。

圖1 紅外遙感圖像目標檢測算法框圖Fig.1 Block diagram of the infrared remote sensing image target detection algorithm
載荷圖像原始數據包含各種干擾成分,通常不能直接作為輸入圖像,經過預處理后消除了部分干擾成為常見的遙感灰度圖像。將遙感灰度圖像輸入粗檢模塊,經過中值濾波去噪和基于均值濾波的顯著圖提取方法后生成一張顯著圖的二值圖。再經過腐蝕和膨脹操作去除部分雜點,生成的新二值圖作為連通域模塊的輸入。在模塊內完成連通域的標記統計,生成連通域個數和對應的面積,經過對面積篩選,留下滿足條件的疑似目標個數。若疑似目標數大于0,則向神經網絡模塊輸出檢測當前圖像的指令;若小于0 則輸出跳過指令。
整個粗檢模塊在移植至硬件的過程中,發現基于CPU 計算邏輯設計的算法不能滿足FPGA 硬件平臺流水線式的處理過程。特別是采用種子填充法[20]的連通域提取原算法,由于嵌套循環過多且循環數量不定,不適合部署在硬件端,難以達到利用硬件加速的目的。因此,本文針對FPGA 重新設計了一種基于像素掃描的連通域快速提取方法。
FPGA 以其高度并行化的優點在數字信號處理領域得到了廣泛應用。常規的FPGA 開發需要使用硬件描述語言如VHDL/Verilog 來完成功能模塊的設計,但是需要較長的開發時間。HLS 開發工具的出現,使得廣大設計人員能夠采用更高級的語言(C/C++等)完成設計輸入,大大提高了FPGA 的開發效率[21]。
開發人員通過如圖2 所示的HLS 開發流程即可將采用C/C++語言設計的算法實現為RTL 級代碼。通過用戶定義約束文件優化設計的性能與速度,HLS 會根據約束文件的要求自動生成相應RTL 代碼,極大地節省了FPGA 的開發時間,使得開發具有高靈活性和高效性。

圖2 HLS 的設計流程Fig.2 Design process of the HLS
整個粗檢模塊作為一個獨立的知識產權(Intellectual Property,IP)核,與其他IP 核共同組成整個檢測系統,由于其中涉及多種復雜算法,適合采用更靈活高效的HLS 進行開發。各個內部子模塊能夠更好地配合優化,利用dataflow 形成函數級流水,進一步提高整體算法的執行效率。
連通域類型主要包含4 連通和8 連通,基于不同的需求可以采用不同的連通類型,而本文所用遙感圖像分辨率較小,艦船目標又是細長形,其寬度較小,在經過腐蝕膨脹后容易出現對角形式的連通情況如圖3 所示。

圖3 對角式連通情況Fig.3 Connectivity in diagonal form
8 鄰域連通的關聯范圍更為廣泛全面,更適用于該種情況。采用逐行掃描像素的方式記錄提取連通域信息,如圖4 所示,連通域提取的流程主要包含像素標記、等價表記錄和真連通域統計3 個部分。

圖4 連通域提取流程Fig.4 Extraction process of the connected domain
算法接收來自上個模塊的二值圖像,逐個掃描像素,對每個像素獲取二值圖和臨時標簽圖中,如圖5(h)所示的2×3 鄰域范圍內的像素值P1~P4和標簽值L1~L4。根據鄰域信息,對當前點X進行連通域標簽標記,同時對應標簽面積記錄+1,對應標簽行列最大最小值更新。接著對滿足新增等價條件的情況進行等價關系更新。待全部像素掃描完畢后掃描一次等價表統計真實連通域數量、面積和行列范圍,經過閾值篩選去掉非目標區域,輸出最終的檢測/跳過信號。由于該算法不需要記錄最終的標簽圖像,因此,只需要掃描一遍圖像,達到獲取連通域信息的同時避免不必要的資源、時間和功耗的浪費。
1)像素標記部分。對于圖像中間的某一點,本文選取了如圖5 所示的2×3 的窗口,其中需標記點為X點,由于是逐像素掃描,因此,X點的標簽值只與其之前的4 個點有關,即圖中的1、2、3、4。這4 個點共分16 種情況,如圖5 所示。

圖5 標記點窗口所有情況(點X 不為0 時)Fig.5 All cases for the mark point window(when point X is not 0)
圖5 列出了2×3 窗口的所有情況,其中右下角像素不考慮,黑色為像素值為0 的背景像素,白色為像素值為1 的前景像素。設定P為二值圖像素點,L為其標簽值,本文采取的像素標記方法只需滿足一個原則即先行后列,對于不為0 的點X來說:
(1)同行前一像素P1>0 時,無論上一行的P2~P4為何值,點X的標簽都直接與P1相關聯(當前行優先);
(2)當P1=0 時,再對上一行的3 個點逐列依次判 斷,從P2到P4,將第一個不為0 的點與點X相關聯;
(3)當P1、P2、P3、P4全為0 時,表示X點為一個可能的新連通域的起始,此時為點X分配一個新標簽值。
在設置點X標簽的時候,并不采用直接復制標簽值的方法,而是以標簽值為索引獲取其等價表中關聯的連通域標簽值,將該值作為標簽賦值給點X。過程示例如圖6 所示。這樣的好處是當出現多個連通域互聯時任意一個新關聯的像素點都能直接標記為統一的最小標簽號。

圖6 利用等價表的標記過程Fig.6 Labeling process with the equivalence table
2)等價表部分。等價表主要用來記錄連通域的關聯狀態,操作主要分為3 部分:一是像素掃描時的新增標簽號;二是新增等價關系時將相關聯的兩個標簽統一設置為兩者中的最小值,這樣可以確保多個標簽互相關聯時都直接對應至其中的最小值,同時掃描像素進行標記時也能夠直接賦值該最小值;三是等價表刷新,由于新增等價操作局限于兩個標簽號,而多標簽連通的情況下容易導致等價關系丟失,因此,需要確保等價表中只存在一層映射關系,即等價關系變更后所有相關的等價映射都更新至最小標簽號,即使用E(L)=E(E(L))遍歷一次等價表。
對于新增等價關系的情況,由于P1、P2、P3點的等價關系已經由P1完成,因此,當前點X只需要考慮與P4點的等價情況。當除P4外沒有其他點>0時,X直接與P4關聯,無需建立新等價關系;當P3>0,P4>0 時,無論P1是否為0,都不存在需要新建等價關系的情況,因此,只有當P3<0,P4>0 且P1+P2>0時,才需要新建等價關系,3 種情況如圖7 所示。

圖7 需要新增等價關系的3 種情況Fig.7 Three cases where new equivalence relations are required
3)真連通域統計部分。將整張圖像掃描完成后,需要統計真連通域個數、面積和行列范圍,只需要掃描一次等價表,對E(L)=L的標簽給一個新的真連通域標號Cl(以自然數順序),而E(L)=M的情況則將標簽L累計的面積加至標簽M對應的真連通域標號Cm的面積統計值中。統計完畢后獲得真實連通域個數、面積和行列范圍,經過閾值篩選后根據目標情況向后續模塊輸出對應信號。
本文算法采用256×256 大小的圖像作為輸入數據進行設計,算法在HLS 開發環境中完成設計輸入后,分別進行C 仿真、C 綜合和RTL 聯合仿真,通過后即可導出IP 核。在Vivado 中建立工程,添加各種功能IP 模塊完成布局布線,這一步是完成可編程邏輯(Programable Logic,PL)端中算法功能和與處理系統(Processing System,PS)端的交互功能設計,確保整個系統能正確運作,該工程最終生成PL 端使用的比特流文件。接下來從Vivado 中啟動軟件開發工具包(Software Development Kit,SDK),完成PS 端嵌入式控制程序的編寫,之后便可以連接開發板將包含PL 和PS 的整個工程導入開發板進行測試。
本文算法測試所采用的紅外遙感例圖,如圖8(a)所示。經過算法提取出的二值顯著圖,如圖8(b)所示。再經過腐蝕和膨脹去除雜點,即可獲得用于提取連通域的二值圖,如圖8(c)所示。由于本文連通域算法屬于整個檢測算法中的一部分,測試性能時需要單獨將模塊獨立出來,于是直接采用圖8(c)作為輸入圖像分別測試連通域提取正確性和部署至硬件后的運行效率。連通域提取算法將標記完的圖像保存為二進制文件,在Matlab 中讀取文件數據后得到的連通域標記圖,如圖8(d)所示,參考標簽數值可見算法標記出的連通域正確無誤。經過對比與采用種子填充法的PC 版原程序得到了一致的結果。

圖8 粗檢算法過程Fig.8 Process of the coarse screening algorithm
將本文的連通域算法在HLS 開發環境中完成各種“#pragma”優化設置后進行綜合,待綜合完成后會出具綜合報告,內含總時延和資源消耗量。原版PC 算法種子填充法由于循環條件多變,HLS 無法確定總時延,對其進行適當改寫將循環數量固定后,綜合報告才給出分析結果,但時延變動范圍很大。通過RTL 級仿真后將IP 核導出,在Vivado 中完成PL 端設計并生成比特流文件,此處Vivado 會再次對資源進行優化分配,給出算法最終資源消耗。兩種算法的比特流文件通過軟件開發工具SDK 編程至芯片上,針對相同輸入進行了運算性能測試。以上對比結果見表1。

表1 算法測試結果對比Tab.1 Results of algorithm testing
從結果中可以發現:1)本文算法最大最小時延完全一致,非常穩定,對比算法時延浮動巨大,穩定性差,且最小時延遠大于本文算法;2)本文算法實際資源使用量明顯小于對比算法;3)本文實測運行速率遠大于對比算法,效率極高。
種子填充法的總時延很不穩定,會導致實際單次運行的時間波動,在整個粗檢模塊中是影響運行效率與穩定性的最大隱患,更重要的是粗檢模塊需要采用流式數據輸入來減小緩存的使用量,而種子填充法的處理邏輯存在非連續訪問,并不適合流式數據輸入的方式。再從資源消耗量上看,本文算法的邏輯資源消耗量在HLS 的資源報告中除查找表(Look-Up Table,LUT)資源略高于對比算法外其他均更低,而Vivado 實際資源使用量更是均低于對比算法。此外,在開發板實測部分,同樣時鐘頻率和輸入下,本文算法達到了797 幀/s 的速度,約是對比算法的5.5 倍,在處理速度方面提升很大,更能滿足在大數據量的情況下對計算速度的需求。
連通域提取是紅外遙感圖像目標粗檢模塊中的重要組成部分,粗檢算法所提取的信息經過連通域提取后能夠篩去多數假目標,降低精檢模塊運算壓力的同時也能減少系統的功耗。本文所提出的適合FPGA 平臺的連通域快速提取方法結合HLS的開發模式,簡化了開發流程,提高了算法開發驗證的效率,使得軟件設計人員也能夠進行算法的FPGA 硬件端部署實現。本文算法通過只掃描一次二值圖像,將面積和等價信息均記錄在比圖像更小的等價表中,提高了運算速度又節省了大量緩存。通過分析歸并標記窗口的所有情況,簡化了標記規則和新增等價關系的判別,同時結合等價表刷新方法,將等價表內部保持為僅有一層映射關系,防止多重映射導致的關聯信息丟失。本文所采用的連通域提取方法不僅可應用在紅外遙感圖像的處理中,也適用于大部分FPGA 端二值圖像連通域的提取。