王禮賀,楊德振,李江勇,賈 鵬,柴 欣
(華北光電技術研究所,北京 100015)
在機載下視條件下,地面背景復雜,由于在遠距離情況下,目標變為小目標,可利用的有效信息比較少,使得目標很容易淹沒在背景雜波上。如圖1所示,目標嵌入在背景中,幾乎與地物其他目標沒有任何區別。采用傳統檢測方法很難正確檢測目標。
目前基于卷積神經網絡的目標檢測算法發展迅速,被廣泛應用于計算機視覺方面[1]。將卷積神經網絡應用到紅外弱小目標檢測以解決目前的傳統檢測方法遇到的困難,提出了基于卷積神經網絡的目標檢測算法。用于解決復雜背景下紅外弱小運動目標的檢測,并且完成以FPGA為核心的算法硬件移植,從而實現復雜背景下機載下視紅外小目標的檢測[2]。
卷積神經網絡本質是一種輸入到輸出的映射,與傳統的算法相比,它的優點在于能夠表達出大量輸入到輸出的映射關系,不需要精確的數學計算公式。卷積神經網絡依靠系統的復雜程度,通過自動調整內部的大量的節點之間的鏈接關系達到處理信息的目的。

圖1 CNN結構
典型卷積神經網絡由卷積層、池化層和全連接層三部分組成[3]。其中卷積層是卷積神經網絡的核心基石,我們利用卷積層對圖像層層卷積得到不同的特征圖像。加入池化層的目的是通過減少網絡的參數降低計算量,簡化模型的復雜度。全連接層用于把局部特征變成全局特征,通過計算輸入和權重向量之間的點積,加上偏置通過函數輸出。
我們在進行卷積神經網絡的訓練前需要選擇一個合適的CNN網絡模型,綜合考慮到模型的復雜度和精確度,并且方便FPGA進行算法移植,我們選擇了LeNet-5網絡。 LeNet-5網絡最初是用于手寫識別的卷積神經網絡[4],是早期卷積神經網絡中最具代表性的實驗網絡之一。雖然LeNet-5網絡結構簡單,但是它同樣具備了一個深度學習的所有模塊:卷積層,池化層,全連接層,可以說是其他深度學習模型的基礎。并且簡單的結構網絡可以減少訓練時間,有利于算法的硬件移植,減輕FPGA的資源需求。

圖2 LeNet-5 網絡結構
確定訓練用的CNN網絡之后開始進行網絡訓練[5],我們訓練用的平臺為ubuntu操作系統,采用tensorflow框架訓練,編程語言使用當下熱門的python語言。訓練使用的優化算法為ADAM梯度下降算法,學習率為0.001,訓練次數為20萬次。我們最終得到一套能夠對紅外弱小目標進行前景掩碼提取的檢測算法。
認為“人工智能不應具有法律人格”的重要論點之一,是認為人工智能和人存在根本性不同,人工智能不可能成為人。[注]熊琦:《人工智能生成內容的著作權認定》,《知識產權》2017年第3期,第3—8頁;王遷:《論人工智能生成的內容在著作權法中的定性》,《法律科學(西北政法大學學報)》2017年第5期,第148—155頁;羅祥、張國安:《著作權法視角下人工智能創作物保護》,《河南財經政法大學學報》2017年第6期,第144—150頁。根據現行法律制度和法學原理,除了法人可具有擬制法律人格外,法律人格只有自然人才能享有,故人工智能不可能具有法律人格。
將采集到的目標紅外圖像輸入算法模型進行仿真,圖3為輸入的原始圖像,算法仿真效果如圖4所示。

圖3 原始圖像

圖4 仿真輸出結果
由于訓練的模型參數都是浮點數,在FPGA中需要用整數來表示這些浮點小數。得到小數均為小于1的八位正負小數,根據實際情況,設置一個17位的Reg[16:00]型寄存器來表示小數。將小數放大2的16次方,取整數,得到的誤差足夠小,不會影響后續卷積計算結果,將取到的整數賦值給Reg[15:00],如果小數為負數Reg[16]置1表示,小數為正數則Reg[16]置0。 在圖像像素值與卷積核進行卷積時,首先對卷積參數進行判定,如果Reg[16]為1,那么結果值得高位同樣置1,反之置0,用以區分正負。小數的定點處理方法如圖5所示。

圖5 小數的定點處理
4.1.2 圖像卷積窗口的實現
網絡由5個卷積層組成,其中每個卷積層包含的卷積核數量不同,但是卷積核大小均為3×3。由于硬件系統利用FPGA的GPIO進行紅外圖像數據的采集,串行輸出導致每個時鐘沿流入一個像素值,為了實現3×3窗口卷積操作,需要對一維像素進行緩存,生成一個3×3大小的圖像矩陣。設置9個8位Reg[07:00]型寄存器P11,P12 P13,P21,P22 P23,P31,P32,P33。用來存儲矩陣像素值。每個時鐘上升沿觸發時將PN1>=PN2、PN2>=PN3。
采用Vivado軟件中的Shift Ram移位寄存器IP核,由于輸入圖像數據大小為256×320×8。因此我們使用兩個深度為256,寬度為8的移位寄存器。Vivado生成矩陣如所圖6所示。

圖6 Vivado生成矩陣
為了保證卷積層處理完成之后的特征圖像與原圖大小保持一致,在原圖像進行卷積操作時,需要在圖像右方、下方各增加兩列、兩行0元素。因此當每一行數據的第一列進入時,Pn2、Pn1均為0元素,每一行數據的第二列進入時,P1均為0。矩陣波形如圖7所示。

圖7 矩陣波形
4.2.1 FPGA實現正則化的過程
算法中每個卷積層都鏈接了一個BN層,BN層對提取到的特征進行正則化。圖像的正則化需要FPGA求出圖像的均值mean,圖像的方差var。然后帶入正則化公式:
(1)
FPGA處理圖像數據是以像素點為單位,求解均值mean,方差var時需要用到圖像緩存模塊,在這個過程中,需要對均值結果延時一幀圖像輸出,對得到的特征圖像進行連續緩存兩幀輸出,FPGA實現正則化流程圖如圖8所示。

圖8 FPGA實現正則化流程圖
4.2.2 值mean的求解
一副256×320的紅外圖像共81920個8位像素值,同17位卷積核參數卷積后會得到81920個25位結果,要想求出特征圖均值,首先將這些結果進行累加,卷積結果有正數和負數,進行累加先同樣進行判定,程序步驟如下;
Step1:定義兩個變量reg1[31:00],reg1[31:00]分別對卷積結果的正負值累加。
Step2:對卷積層輸出的結果data高位進行判斷,判斷data[25]是否為1。
Step3:將負值結果累加賦值給reg1,正值結果累加賦值給reg2。
Step3:將負值結果累加賦值給reg1,正值結果累加賦值給reg2。
Step4:求reg1,reg2相減,得到的結果除以65536得到均值mean。
4.2.2 方差var的求解
求解方差時需要用到均值mean,卷積特征圖,帶入方差求解公式
(2)
均值結果的求解需要遍歷整個卷積特征圖,因此均值結果相對于卷積特征圖延時一幀,需要對特征圖進行延時一幀處理。過程如圖8所示。
程序過程如下:
Step1:首先對卷積特征圖結果x_1和均值x高位進行判斷是否是正負。
Step2:均為正值或均為負值求兩者絕對值之和進行平方,一整一負求兩者絕對值之差再平方。
Step3:對平方值累加求平均,得到方差s2。
特征圖緩存模塊使用Vivado軟件的BLOCK RAM IP核來實現,由于特征圖是大小為320×256×16,因此我們選用的模塊設置深度為65536,數據寬度為16位。
將采集到的目標紅外圖像輸入,經過FPGA處理結果如下:
圖9(a)、圖10(a)左側圖像為紅外原始圖像,方框就是我們需要檢測出的紅外弱小目標,從圖像中可以看出,目標幾乎完全淹沒在復雜的背景中,加上由于距離較遠,目標的信號較弱,給目標檢測帶來很大的困難。通過算法對紅外圖像進行處理,得到了圖像的前景掩碼(圖9(b)、圖10(b)),從前景掩碼圖像中可以直觀看出目標被檢測出來,結果證明基于卷積神經網絡的深度學習算法能夠有效在復雜背景條件下檢測出紅外弱小目標。

圖9 原始圖像與FPGA結果對比

圖10 第二組原始圖像與FPGA結果對比
并且通過硬件平臺資源使用表(表1)可以看出FPGA處理一幀圖像的時間為4 ms,能夠滿足工程應用中實時性檢測的要求。硬件平臺選用Kintex 7 FPGA系列。資源使用如表1所示。

表1 硬件平臺資源使用
基于卷積神經網絡的目標檢測算法結構簡單,在實際檢測中能夠做到實時性檢測:經過大量的學習訓練,在面對復雜的地面背景,能夠保證檢測效果的準確性:算法的邏輯簡單,可以在以FPGA為核心的硬件平臺上實現,并降低硬件功耗。后續我們將繼續完善算法,降低資源使用率。完成基于卷積神經網絡的目標檢測算法,并且在面對復雜背景下依舊能夠檢測出紅外弱小目標。