基于CNN的紅外圖像預處理系統(tǒng)的研究與設(shè)計
摘要:本文設(shè)計了一個以FPGA為核心處理器實現(xiàn)紅外視頻圖像數(shù)字預處理的系統(tǒng),利用Altera公司提供的DE2開發(fā)板,把系統(tǒng)大部分的功能模塊集成在一片FPGA 上,大大優(yōu)化了整個系統(tǒng)的性能。該方案采用Altera公司推出的低成本、高密度的Cyclone Ⅱ系列FPGA,提高了系統(tǒng)的設(shè)計靈活性。細胞神經(jīng)網(wǎng)絡(luò)IP核的開發(fā),充分利用了細胞神經(jīng)網(wǎng)絡(luò)在圖像處理方面的優(yōu)勢,提高了整個系統(tǒng)的處理效率。實現(xiàn)了細胞神經(jīng)網(wǎng)絡(luò)的一種高效數(shù)字實現(xiàn)方案,并且采用分布式算法可以提供更高的運行速度。
關(guān)鍵詞 邊緣檢測;細胞神經(jīng)網(wǎng)絡(luò);FPGA;
引言
紅外視頻圖像數(shù)字預處理系統(tǒng)是紅外焦平面陣列探測器必備的后處理電路,對成像質(zhì)量有很大的影響。隨著紅外弱小目標檢測技術(shù)開始廣泛應(yīng)用于制導、跟蹤、自動控制、人工智能等諸多領(lǐng)域,這些應(yīng)用對紅外成像質(zhì)量的要求越來越高。因此,研究紅外視頻圖像數(shù)字預處理系統(tǒng)有很大的意義[1-2]。本文從細胞神經(jīng)網(wǎng)絡(luò)模型研究開始,將細胞神經(jīng)網(wǎng)絡(luò)的模型、算法研究與具體的圖像處理特別是在圖像邊緣檢測中的應(yīng)用緊密結(jié)合,充分將理論和實踐聯(lián)系起來。將設(shè)計好的模板應(yīng)用到圖像的邊緣檢測中,利用FPGA的并行性特點,建立基于CNN的紅外圖像預處理系統(tǒng),用于進行實時的圖像處理。
該系統(tǒng)硬件電路包括兩路視頻A/D,數(shù)據(jù)緩沖同步FIFO,F(xiàn)PGA,數(shù)據(jù)存儲、顏色空間轉(zhuǎn)換等功能模塊。系統(tǒng)能夠完成對IRFPA信號的正確讀出,并將讀出的視頻模擬信號經(jīng)A/D轉(zhuǎn)換器轉(zhuǎn)換為數(shù)字信號,經(jīng)FIFO緩沖后進入存儲器,之后經(jīng)過中心數(shù)字信號處理器進行必要的處理(邊緣提取),最后輸出標準的VGA模擬視頻信號,傳送到顯示器。
1 圖像預處理實現(xiàn)原理分析
紅外圖像預處理的目的在于,改善圖像數(shù)據(jù),抑制不需要的變形或者增強某些對于后續(xù)處理重要的圖像特征,為后續(xù)的目標識別與跟蹤提供方便。這里做的預處理為邊緣提取,即對處于最低抽象層次上的圖像所進行的操作,此時處理的輸入輸出為亮度圖像。這些圖像是與傳感器抓取到的原始數(shù)據(jù)同類的,通常是用圖像函數(shù)值矩陣表示的亮度圖像。整個系統(tǒng)的核心處理部分是由細胞神經(jīng)網(wǎng)絡(luò)IP核實現(xiàn)的。
細胞神經(jīng)網(wǎng)絡(luò)(Cellular Neural Network,CNN)是以神經(jīng)網(wǎng)絡(luò)的聯(lián)接方式為背景,具有實時信號處理能力的大規(guī)模非線性模擬電路。從結(jié)構(gòu)上講,CNN類似于細胞自動機,即細胞神經(jīng)網(wǎng)絡(luò)中的每一個胞元僅與它的鄰近胞元相連接,相連胞元之間存在直接通信,而非鄰近胞元之間不直接聯(lián)接,但是由于連續(xù)時間下的動態(tài)傳播,可以間接影響不相鄰的胞元。理論上,可以定義任何維數(shù)的細胞神經(jīng)網(wǎng)絡(luò),但是因為處理圖像的需要,這里只考慮二維的情況。一個二維的 細胞神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)形式如圖1所示,用 表示第i行第j列的細胞。胞元的狀態(tài)方程為:
由上式可知,在CNN應(yīng)用使用空間不變的系數(shù)的情況下,整個網(wǎng)絡(luò)的功能由2個 的矩陣 和 ,以及胞元偏移值I決定。矩陣A和B分別稱為反饋模版和控制模版。胞元結(jié)構(gòu)見圖2所示。
圖1 3x3規(guī)模的細胞神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)
圖2 CNN結(jié)構(gòu)圖
在圖像處理中,無論是灰度圖像還是二值圖像,每一個像素的值均為離散量化的,采用CNN進行圖像處理時,存在對其輸入與輸出量化的問題。在 的二維圖像中,不失一般性地設(shè)它的任意一點值為 ,通常對于二值圖像, 僅取兩個整數(shù)值,即 ;而對灰度圖像則 為灰度值,以8比特灰度圖像為例 。在CNN系統(tǒng)中,其輸入為 ,輸出為 ,因而在處理二值圖像時,需要使原來的 映射為 ,但必須注意這種映射為:原來的0映射為1(純黑色),原來的1映射為-1(純白色)。而處理灰度圖像時,首先要對輸入與輸出的值域 進行256級的均勻量化,然后使 映射到這個均勻量化的 中,同樣必須注意:原來的0映射為1(純黑色),原來的255映射為-1(純白色),其余灰度值均按照由小到大的順序依次映射到由1到-1這個由大到小的量化體系中[3-5]。
2 總體方案選擇
系統(tǒng)的工作流程如圖2所示,從CCD傳來的數(shù)字視頻信號及其控制信號首先通過圖像采集模塊,從而篩選出有效的數(shù)據(jù),然后通過RAW2RGB模塊,利用插值算法得到每個像素點的R、G、B數(shù)據(jù)。為了便于CNN模塊進行核心處理,在進行邊緣提取操作前,把圖像數(shù)據(jù)從RGB顏色空間轉(zhuǎn)換為YCbCr顏色空間,針對Y分量進行處理。處理后的數(shù)據(jù)再經(jīng)過YCbCr2RGB模塊轉(zhuǎn)換為RGB數(shù)據(jù)從而提供給VGA模塊,供LCD顯示。
圖2 紅外圖像預處理系統(tǒng)工作流程
整個的核心部分在于CNN模塊,在圖像邊緣提取中使用的算法主要是經(jīng)典的微分算子,微分算法在硬件中很難實現(xiàn),將CNN應(yīng)用于灰度圖像邊緣提取的算法,是因為CNN是一種基于神經(jīng)元局域連接的神經(jīng)網(wǎng)絡(luò)并行處理器[3], 硬件上可以采用相同的電路元件陣列來設(shè)計CNN并行處理器,這種陣列同構(gòu)的電路設(shè)計有利于VLSI實現(xiàn)。故采用粒子群算法訓練CNN的模板,進行邊緣提取。
雖然在細胞神經(jīng)網(wǎng)絡(luò)中允許任意規(guī)模的鄰域,隨著模板尺寸的增大,硬件實現(xiàn)的難度也隨之增大。受限于目前的VLSI技術(shù),胞元之間的互聯(lián)只能是局部的。本文中,規(guī)定采用3x3鄰域,即模板A、模板B都是3x3的矩陣,且它們的系數(shù)都是實系數(shù)。因為目前大多數(shù)圖像處理針對的都是灰度級圖像,所以細胞神經(jīng)網(wǎng)絡(luò)胞元的輸入范圍被限定在[-1,+1]之間,-1代表白色像素,1代表黑色像素,其余的值代表二者之間的灰度值。這里采用定點數(shù),因為在硬件實現(xiàn)中,定點數(shù)具有更高的速度和更低廉的成本,特別是在調(diào)用FPGA中的乘法底層原語時。
單個胞元的串行硬件實現(xiàn)結(jié)構(gòu),完成一次胞元狀態(tài)更新的運算至少需要9個時鐘周期。為了提高速度,可以在計算胞元狀態(tài)更新時采用并行結(jié)構(gòu),如圖3所示,通過采用流水線結(jié)構(gòu),完成一次胞元狀態(tài)的更新只需要1個時鐘周期。本文采用并行結(jié)構(gòu)在FPGA中實現(xiàn)細胞神經(jīng)網(wǎng)絡(luò)。
圖3 CNN 并行實現(xiàn)結(jié)構(gòu)框圖
3 硬件設(shè)計
圖像數(shù)據(jù)采集模塊用于實現(xiàn)圖像數(shù)據(jù)的捕捉,根據(jù)圖像傳感器MT9M011輸出數(shù)據(jù)時序,當視頻捕捉開始鍵按下時,該模塊開始接收數(shù)據(jù),在獲得有效像素數(shù)據(jù)的同時也接收了消隱期的圖像數(shù)據(jù),所以設(shè)置了輸出數(shù)據(jù)有效信號,用以在接下來的RAW2RGB模塊把有效數(shù)據(jù)和非有效數(shù)據(jù)區(qū)分開來。
3.1 RAW2RGB模塊的設(shè)計
MT9M011采用的是Bayer型CFA(Color Filter Array,顏色濾波陣列),由于該圖像傳感器的分辨率為1280x1024,這里采用的插值算法,每四個像素合并為一個像素,像素值的變化如圖4所示,這樣經(jīng)過RAW2RGB模塊后,圖像的分辨率變?yōu)樵瓉淼囊话耄?40x512。
該模塊的硬件實現(xiàn)框圖如圖5所示。其中control模塊由兩個狀態(tài)機組成,分別是ram_wr_state和ram_rd_state。ram_wr_state狀態(tài)機負責產(chǎn)生RAM的寫使能和寫地址。當輸入數(shù)據(jù)有效時,把輸入的像素數(shù)據(jù)依次交替存儲在2個RAM中,構(gòu)成類似乒乓操作的結(jié)構(gòu)。這個狀態(tài)機負責產(chǎn)生RAM的寫使能和寫地址。ram_rd_state的狀態(tài)機負責產(chǎn)生RAM的讀使能和讀地址。
圖4 顏色插值算法示意圖
圖5 RAW2RGB模塊的硬件結(jié)構(gòu)框圖
這里為了便于檢驗算法的正確性,適當?shù)膶?shù)字視頻流進行了一些簡化。由于編程時采用參數(shù)化設(shè)計,所以這并不會對系統(tǒng)的設(shè)計產(chǎn)生影響。這里假定待處理的原始數(shù)據(jù)每行只有12個像素,以兩行數(shù)據(jù)為例,經(jīng)過處理后的數(shù)據(jù)(每個像素包含R、G、B三種顏色分量),每行只包含6個像素,減少了一半,同樣行數(shù)也變?yōu)樵瓉淼?/2。這樣,當?shù)却幚淼膱D像分辨率為1280x1024時,經(jīng)過該模塊后的圖像分辨率變?yōu)?40x512。圖7為經(jīng)過顏色插值后的實際輸出,與圖6經(jīng)過顏色插值后的預期輸出相比較可以看出,該顏色插值模塊的設(shè)計完全達到了預期的要求。
圖6 經(jīng)過顏色插值后的預期輸出
圖7 經(jīng)過顏色插值后的實際輸出
3.2 顏色空間轉(zhuǎn)換模塊的硬件設(shè)計
YCbCr坐標與RGB坐標之間的關(guān)系如下:
(1)
有三種方案實現(xiàn)此模塊設(shè)計,第一種方案采用Verilog語言對該轉(zhuǎn)換公式進行行為描述;第二種方案采用FPGA芯片內(nèi)的嵌入式RAM構(gòu)造乘法器查找表,將轉(zhuǎn)換公式內(nèi)所有可能的中間結(jié)果存放在存儲器中。該系統(tǒng)需要9個乘法器查找表,每個乘法器查找表的深度是1k,將操作數(shù)R、G、B作為地址訪問存儲器,得到的輸出數(shù)據(jù)就是乘法運算的結(jié)果。查找表乘法器的速度只局限于所使用存儲器的存取速度。第三種方案是對第一種方案進行改進,采用流水線結(jié)構(gòu)實現(xiàn)此系統(tǒng)設(shè)計,大大提高了運算速度。本文采用第三種方案。流水線處理是高速設(shè)計中的一個常用設(shè)計手段。充分利用了硬件內(nèi)部并行性,增加數(shù)據(jù)處理能力。這種流水線作業(yè)是在幾個步驟中執(zhí)行運算的功能單元的序列。每個功能單元接受輸入,生成的輸出則是緩沖器存儲的輸出。實現(xiàn)流水線結(jié)構(gòu)的方法很簡單,只要在每個運算部件(包括乘法器和加減法器)的輸出以及系統(tǒng)的輸入輸出之間加上寄存器緩存即可。利用流水線技術(shù)的顏色空間轉(zhuǎn)換實現(xiàn)框圖如圖8所示。一個數(shù)字系統(tǒng)的最高時鐘頻率受限于寄存器與寄存器之間的最大門延遲,如果不在每個運算部件的輸出后面加上寄存器緩存,則寄存器與寄存器之間的最大門延遲為輸入RGB信號到輸出YCbCr信號之間的延遲。由于輸入RGB信號到輸出YCbCr信號之間存在大規(guī)模的組合邏輯電路,因此延遲很大。采用流水線結(jié)構(gòu)之后,寄存器與寄存器之間的組合邏輯電路規(guī)模變小了,因此延遲變小,從而可以提高系統(tǒng)時鐘。
圖8 利用流水線技術(shù)的顏色空間轉(zhuǎn)換實現(xiàn)框圖
波形仿真如圖9所示。由波形圖可以看到,相比于輸入,輸出結(jié)果延遲5個時鐘周期出現(xiàn),這是使用流水線結(jié)構(gòu)造成的結(jié)果。例如輸入(R,G,B)=(1023,1023,1023),在5個時鐘周期后輸出(Y,Cb, Cr)=(944,514,514)。雖然輸出延遲了5個時鐘周期,但每計算一個像素顏色轉(zhuǎn)換仍只需要1個時鐘周期。
圖9 RGB2YCbCr模塊仿真輸出
同理,可以采用方案2,即FPGA芯片內(nèi)的嵌入式RAM構(gòu)造乘法器查找表,可以實現(xiàn)YCbCr向RGB的顏色空間轉(zhuǎn)換。波形仿真如圖10所示。由波形圖可以看到,相比于輸入,輸出結(jié)果延遲3個時鐘周期出現(xiàn),這是使用寄存器鎖存造成的結(jié)果。例如輸入(Y,Cb, Cr)=(944,514,514),在3個時鐘周期后輸出(R,G,B)=(1023,1021,1023)。雖然輸出延遲了3個時鐘周期,但每計算一個像素顏色轉(zhuǎn)換仍只需要1個時鐘周期。
圖10 YCbCr2RGB模塊仿真輸出
3.3 細胞神經(jīng)網(wǎng)絡(luò)的IP核設(shè)計
根據(jù)CNN的理論,模板中的權(quán)數(shù)分別對應(yīng)了待處理像素周圍的八個像素,所以在對某個像素進行處理之前,必須先讀入該點周圍的八個像素點,即某個像素點的結(jié)果不僅同本身像素有關(guān),而且同鄰域點像素灰度值有關(guān)。因為采用的CMOS圖像傳感器每行640個像素。因此構(gòu)造3
評論