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