李 東,敖 晟,田勁東,田 勇
深圳大學(xué)光電工程學(xué)院,廣東深圳51860
在數(shù)字圖像處理中,空間域?qū)D像進(jìn)行處理是一類重要的方法.空間濾波操作包含線性和非線性濾波,經(jīng)常涉及圖像卷積運(yùn)算.由于卷積運(yùn)算需要非常大的乘法和加法運(yùn)算量,因此,處理高分辨率圖像時(shí)非常耗時(shí)[1].隨著集成電路工藝的進(jìn)步,現(xiàn)場(chǎng)可編程門陣列(field-programmable gate array, FPGA)的性能得到了顯著提升,為用戶提供了更多的硬件資源和更高的數(shù)據(jù)處理速度.由于圖像卷積運(yùn)算的并行特性,使其可結(jié)合FPGA的并行運(yùn)算來(lái)提升硬件的數(shù)據(jù)處理速度,并能利用流水線技術(shù)實(shí)現(xiàn)1 clocks/pixel的吞吐率[2].為此,不少學(xué)者從執(zhí)行效率、占用資源和接口等方面分析各種卷積結(jié)構(gòu).BOSI等[3]提出采用多個(gè)移位寄存器組構(gòu)成傳統(tǒng)圖像卷積器的硬件結(jié)構(gòu)——完全緩沖 (full buffering,F(xiàn)B),利用3×3 pixel的卷積單元采用組合擴(kuò)展級(jí)聯(lián)結(jié)構(gòu)的方法,實(shí)現(xiàn)了窗口可調(diào).這種方法不需外部緩存,但是占用了大量的片上資源,執(zhí)行效率不高且接口復(fù)雜.ZHANG等[4]提出單窗口部分緩沖(single-window partial buffering, SWPB)和多窗口部分緩沖(mutiple-window partial buffering, MWPB)結(jié)構(gòu).其中,SWPB結(jié)構(gòu)裁剪了FB中采用的像素緩存結(jié)構(gòu),減少了資源的開銷,但同時(shí)增加了外部帶寬的消耗;MWPB利用相鄰窗口共用部分圖像數(shù)據(jù)的原理,最大限度地使用已經(jīng)緩存在片上的數(shù)據(jù)來(lái)降低外部帶寬,以期不增加片上存儲(chǔ)器容量.SWPB和MWPB結(jié)構(gòu)增加了控制的復(fù)雜度,但很好地平衡了內(nèi)部緩存資源和外部帶寬.然而,這些結(jié)構(gòu)都局限在固定卷積窗口和系數(shù)的前提下,需要外部存儲(chǔ)器,可復(fù)用性較差,不具備良好的通用性和可移植性.桑紅石等[5]提出一種帶寬需求低,硬件資源開銷小的新型2D卷積器結(jié)構(gòu),但是需要外部存儲(chǔ)器緩存圖像數(shù)據(jù),數(shù)據(jù)處理的整體速率低于FB硬件架構(gòu),且不能靈活調(diào)整窗口大小和權(quán)重系數(shù).朱學(xué)亮等[6]提出一種基于FB架構(gòu)的卷積運(yùn)算IP(intellectual property)核的方法,通過(guò)對(duì)IP核參數(shù)的設(shè)置來(lái)配置內(nèi)部資源,可根據(jù)實(shí)際需要生成不同大小的窗口和卷積系數(shù).該方法模板大小受級(jí)聯(lián)結(jié)構(gòu)的約束,改變模板大小的同時(shí)需要重新配置系數(shù)的數(shù)目,且接口調(diào)用不夠靈活,還存在緩存資源浪費(fèi)問(wèn)題.本研究在衡量了效率、資源和接口等因素后,提出一種基于FPGA的可變模板濾波IP核的設(shè)計(jì)方法,只需修改接口參數(shù)即可實(shí)現(xiàn)硬件結(jié)構(gòu)的靈活調(diào)整,具有很強(qiáng)的可復(fù)用性.
在圖像處理鄰域中,卷積運(yùn)算是指用一個(gè)卷積核對(duì)圖像中的每個(gè)像素進(jìn)行一系列操作,這種方法也稱為濾波.卷積核是圖像濾波的核心,是一個(gè)二維的濾波器矩陣,該矩陣中每個(gè)位置都有一個(gè)權(quán)重值,通過(guò)對(duì)原圖像進(jìn)行鄰域的加權(quán)求和,從而實(shí)現(xiàn)圖像的卷積運(yùn)算.先確定一個(gè)中心點(diǎn)(x,y), 然后對(duì)該中心點(diǎn)鄰域內(nèi)的像素進(jìn)行卷積運(yùn)算,并對(duì)圖像中的每一點(diǎn)進(jìn)行同樣的操作,將運(yùn)算后的結(jié)果做為該點(diǎn)的響應(yīng).以3×3 pixel的卷積核為例,一共有9個(gè)系數(shù),用矩陣的方式表示,稱為掩膜.如圖1,黑色部分代表中心像素點(diǎn),將掩膜中心放置在此像素位置,灰色部分代表圖像像素與掩膜重疊的部分.在這個(gè)過(guò)程中,掩膜在圖像矩陣中逐點(diǎn)移動(dòng)并進(jìn)行計(jì)算,將計(jì)算的結(jié)果替代中心像素點(diǎn)的值.遍歷整幅圖像,即完成了一次卷積運(yùn)算[6].
圖1 圖像卷積運(yùn)算示意圖Fig.1 Image convolution operation diagram
硬件電路中的模塊參數(shù)化和可重構(gòu)性要求架構(gòu)盡量簡(jiǎn)單化.本設(shè)計(jì)在傳統(tǒng)圖像卷積器FB結(jié)構(gòu)上進(jìn)行拓展,像素緩存結(jié)構(gòu)采用并行的行緩存[8],便于窗口大小能夠靈活調(diào)整.由于數(shù)據(jù)輸入與處理時(shí)鐘一致,并且移位寄存器的讀取比先進(jìn)先出(first in first out,F(xiàn)IFO)更易操作,因此用移位寄存器來(lái)實(shí)現(xiàn)行緩存,本研究直接調(diào)用Altera公司的IP核移位寄存器(shift register).通過(guò)重新定義IP核的參數(shù),可實(shí)現(xiàn)移位寄存器位寬和深度的實(shí)時(shí)調(diào)節(jié).因?yàn)榫矸e窗口是有規(guī)律的例化像素緩存結(jié)構(gòu),可以用循環(huán)語(yǔ)句來(lái)實(shí)現(xiàn),這樣可同時(shí)簡(jiǎn)化代碼和調(diào)整窗口.在Verilog-2001軟件中,generate for語(yǔ)句可以對(duì)一個(gè)模塊產(chǎn)生多次例化,為可變尺度提供了方便.
以N×N的卷積單元陣列為例,其IP核的硬件結(jié)構(gòu)如圖2.其中,Line_buffer1, Line_buffer2, …, Line_buffer(N-1)為N-1個(gè)行寄存器組,Din和Dout分別是每個(gè)行寄存器組的輸入和輸出端,P0,P1, …,PN2-1是N2個(gè)寄存器.移位寄存器之間首尾相連,每個(gè)行寄存器組中的寄存器數(shù)目和對(duì)應(yīng)的一行圖像數(shù)據(jù)的數(shù)目相同,寄存器的深度跟所接收的圖像數(shù)據(jù)位寬相同,且在每個(gè)移位寄存器行外部連接N個(gè)寄存器,這N個(gè)寄存器也是首尾相連.對(duì)卷積單元中N2個(gè)寄存器的值與外部輸入的權(quán)重系數(shù)做乘法運(yùn)算,再通過(guò)加法樹模塊兩兩相加,得到卷積計(jì)算結(jié)果.從圖2可知,除了Din0與數(shù)據(jù)輸入端Pix_in相連,其余第M個(gè)(M=0,1,…,N-1)移位寄存器的輸出端Dout(M)分別與第M+1個(gè)移位寄存器的輸入端Din(M+1)和第M×N個(gè)寄存器PMN相連,同時(shí),每個(gè)窗口寄存器PM都與前一個(gè)PM-1組成流水線,滿足循環(huán)變量、循環(huán)體和終止條件的3個(gè)因素.因此,利用上述提到的循環(huán)迭代多次例化的方法,不僅可大幅減少工作量,且只需修改若干個(gè)參數(shù)就能靈活調(diào)整卷積單元的硬件結(jié)構(gòu),接口方便,操作省時(shí)省力,解決了以往不同大小的卷積核要重新更改硬件結(jié)構(gòu)的不便之處.
本研究設(shè)計(jì)的IP核是基于FB架構(gòu)的擴(kuò)展,因此不需要外部存儲(chǔ)器緩存就可直接對(duì)前端傳入的圖像數(shù)據(jù)進(jìn)行實(shí)時(shí)預(yù)處理,所以數(shù)據(jù)處理效率更高.對(duì)于不連續(xù)的圖像數(shù)據(jù),如FIFO或者外部存儲(chǔ)器輸出的間斷圖像數(shù)據(jù),都可進(jìn)行卷積運(yùn)算,提高了系統(tǒng)的魯棒性.
圖2 IP核總體硬件結(jié)構(gòu)Fig.2 IP core overall hardware structure
圖3 系數(shù)接口結(jié)構(gòu)Fig.3 Coefficient interface structure
加法樹模塊是將卷積運(yùn)算中的乘法運(yùn)算結(jié)果累加起來(lái),由于掩膜系數(shù)是任意的,乘法運(yùn)算采用的是有符號(hào)乘法,因此加法樹中也采用有符號(hào)加法器.當(dāng)卷積窗口較小時(shí),可采用傳統(tǒng)辦法逐個(gè)累加,累加1次做一級(jí)流水線,N個(gè)數(shù)據(jù)運(yùn)算完畢需要(N-1)個(gè)時(shí)鐘周期,即需N-1個(gè)加法器.此方法雖然簡(jiǎn)單,但數(shù)據(jù)較多時(shí)運(yùn)算耗時(shí)久,代碼可維護(hù)性差,不適于大窗口的卷積運(yùn)算.利用FPGA并行運(yùn)行的特點(diǎn),可在1 clock內(nèi)實(shí)現(xiàn)對(duì)多個(gè)數(shù)據(jù)同時(shí)進(jìn)行加法運(yùn)算.
當(dāng)卷積窗口大小為N×N時(shí),所需乘法運(yùn)算的數(shù)目也是N2個(gè),所以加法樹要對(duì)N2個(gè)數(shù)據(jù)進(jìn)行加法運(yùn)算.圖4給出了基于上述思想的加法樹硬件結(jié)構(gòu).其中,D0,D1,…,DN2-1是輸入數(shù)據(jù).
圖4 N×N加法樹結(jié)構(gòu)Fig.4 N×N addition tree structure
加法運(yùn)算調(diào)用了Altera公司的有符號(hào)加法器IP核.首先將相鄰的兩個(gè)數(shù)據(jù)兩兩進(jìn)行加法運(yùn)算,如果N2是偶數(shù),第1次運(yùn)算需要N2/2個(gè)加法器、N2/2個(gè)寄存器,第2次運(yùn)算需要N2/4個(gè)加法器、N2/4個(gè)寄存器;如果N2是奇數(shù),第1次運(yùn)算需要(N2-1)/2個(gè)加法器、 (N2-1)/2+1個(gè)寄存器,第2次運(yùn)算需要(N2-1)/4個(gè)加法器、 (N2-1)/4+1個(gè)寄存器.依此類推,則第n次運(yùn)算待相加的數(shù)據(jù)數(shù)目為
(1)
其中, 初始值a0=N×N,N×N為卷積窗口大?。看蔚倪\(yùn)算開支為1 clock.加法樹運(yùn)算全部完成需要的運(yùn)算次數(shù)n應(yīng)滿足式(2),完成全部運(yùn)算所需時(shí)鐘數(shù)也為n.
2n-1 (2) 因此,對(duì)于N個(gè)數(shù)據(jù),累加完畢所需的時(shí)鐘周期數(shù)n滿足 lbN≤n<1+lbN (3) 與傳統(tǒng)累加方法相比,加法樹運(yùn)算所需時(shí)鐘數(shù)目大大減少,因此提高了運(yùn)算效率和代碼可維護(hù)性.要實(shí)現(xiàn)上述加法樹架構(gòu),可用循環(huán)迭代或者遞歸運(yùn)算[9]的方法實(shí)現(xiàn). 本研究使用Altera公司的Cyclone IV系列FPGA(型號(hào)為EP4CE22F17C8).利用所設(shè)計(jì)的模板濾波IP核,分別對(duì)不同窗口大小的高斯濾波[10-11]和Sobel算子[12]進(jìn)行驗(yàn)證.圖5分別列出了窗口大小為3×3 pixel和5×5 pixel的高斯濾波模板和Sobel水平和垂直方向上的掩膜. 116121242121 12731474141626164726412674162616414741 (a)3×3 pixel窗口的高斯濾波模板(b)5×5 pixel窗口的高斯濾波模板-1-2-1000121 -101-202-101 (c)Sobel水平方向掩膜(d)Sobel垂直方向掩膜 圖5高斯濾波模板和Sobel掩膜 Fig.5GaussianfiltertemplateandSobelmask 圖6(a)是相機(jī)采集到的初始圖像;圖6(b)和圖6(c)分別是初始圖像在FPGA上經(jīng)過(guò)3×3 pixel和5×5 pixel高斯濾波模板的處理結(jié)果,邊界采用置零處理;圖6(d)是FPGA進(jìn)行Sobel邊緣提取算子的結(jié)果. 為驗(yàn)證算法的準(zhǔn)確性,將FPGA硬件處理結(jié)果與Matlab軟件處理結(jié)果進(jìn)行對(duì)比,結(jié)果如圖7.圖7(a)是初始圖像;圖7(b)和圖7(c)分別是采用Matlab軟件對(duì)原圖進(jìn)行窗口為3×3 pixel和5×5 pixel高斯濾波模板的處理結(jié)果;圖7(d)是采用Sobel邊緣提取算子處理的結(jié)果.對(duì)比圖6和圖7可知,F(xiàn)PGA硬件處理與Matlab軟件處理結(jié)果基本吻合. 本研究提出的可變模板濾波IP核的設(shè)計(jì)能很好地實(shí)現(xiàn)窗口大小和卷積系數(shù)的靈活調(diào)整,為綜合評(píng)估IP核的性能,表1列出了窗口大小為11×11 pixel時(shí)FPGA片上資源使用情況. 圖6 FPGA結(jié)合IP核的處理結(jié)果Fig.6 The processing results of FPGA combined with IP core 圖7 Matlab處理結(jié)果Fig.7 Matlab processing results 表1 FPGA片上資源使用情況Table 1 The usage of FPGA resource on-chip 由表1可見,邏輯元件(logic element, LE)資源占用率約為22%;引腳資源使用率比較高,約為30%,這是因?yàn)檫\(yùn)算結(jié)果的輸出位寬比較大,所以占用的引腳數(shù)較多;隨機(jī)存取存儲(chǔ)器(random access menory, RAM)資源占用率約為10%,主要是在行緩存時(shí)生成移位寄存器組;乘法器資源占用率最高,約為92%,這是因?yàn)閷?duì)于任意模板系數(shù),每個(gè)卷積窗口單元要與相應(yīng)的系數(shù)進(jìn)行有符號(hào)的乘法運(yùn)算,所以乘法器的使用數(shù)目與窗口大小相同.本器件的乘法器資源有限,最大能生成11×11 pixel的窗口. 根據(jù)上述實(shí)驗(yàn)結(jié)果,與文獻(xiàn)[3]相比,本研究方法不存在資源浪費(fèi)現(xiàn)象;與文獻(xiàn)[5]相比,本研究方法在接口部分實(shí)現(xiàn)了靈活的調(diào)整,不需增加外部存儲(chǔ)器,可復(fù)用性好;和文獻(xiàn)[6]相比,本研究方法在窗口大小改變時(shí)會(huì)自動(dòng)配置權(quán)重系數(shù)的數(shù)目,接口調(diào)用更加靈活.若需要對(duì)更大的窗口進(jìn)行卷積運(yùn)算,可用邏輯單元自行搭建乘法器,或選擇更多片上資源的FPGA芯片.文獻(xiàn)[13-14]給出了一種能有效減少乘法器和片上資源占用的RD(recurrent decomposable)卷積器架構(gòu),通過(guò)將大的模板反復(fù)分解成若干個(gè)較小的模板,然后計(jì)算與圖像的卷積.文獻(xiàn)[15]提出一種使用Bachet權(quán)重分解方法設(shè)計(jì)新的二維卷積濾波器,濾波器通過(guò)使用一組預(yù)先計(jì)算的系數(shù),用簡(jiǎn)化的浮點(diǎn)加法器,替代乘法器來(lái)模擬標(biāo)準(zhǔn)的32 bit浮點(diǎn)乘法器.因此,可利用這兩種方法彌補(bǔ)乘法器資源不足的缺陷,從而提高IP核的實(shí)用性. 表2分析了各種卷積器結(jié)構(gòu)在資源開銷、外部帶寬和吞吐率等方面的表現(xiàn).記圖像大小為M×N; 卷積窗口大小為R×S;P為FIFO的深度.FB架構(gòu)是將圖像的R-1行像素全部緩存在片上,緩存結(jié)構(gòu)采用列緩存,因此這部分資源開銷為(R-1)×(N-S)+P, 卷積窗口的資源開銷為R×S, 可不需外部存儲(chǔ)器,外部帶寬和吞吐率都為1.SWPB架構(gòu)使用了深度很小的R條FIFO代替移位寄存器進(jìn)行數(shù)據(jù)緩存,緩存結(jié)構(gòu)的資源開銷為R×P, 卷積窗口的資源開銷為R×S, 不過(guò)需要R個(gè)并行的數(shù)據(jù)輸入,因此外部帶寬為R(單位:pixels/clock),吞吐率為1 clocks/pixel.MWPB架構(gòu)將卷積窗口擴(kuò)展為(R+S-1)×S,用來(lái)保存列方向上相鄰的S個(gè)卷積計(jì)算窗口,這樣S個(gè)時(shí)鐘周期內(nèi)可得到S個(gè)卷積計(jì)算窗口的結(jié)果. 其中,緩存結(jié)構(gòu)的資源開銷為(R+S-1)×P; 卷積窗口的資源開銷為(R+S-1)×S; 外部帶寬則為(R+S-1)/S; 吞吐率也為1 clocks/pixel.雖然SWPB和MWPB架構(gòu)資源開銷較少,但需要并行的數(shù)據(jù)寫入流來(lái)保證卷積計(jì)算所需的數(shù)據(jù)量,即利用外部存儲(chǔ)器實(shí)現(xiàn)多通道輸入.當(dāng)窗口大小改變時(shí),帶寬也需隨之變化.由于軟IP核不涉及物理實(shí)現(xiàn),為了提高靈活性,采用便于集成,且外部帶寬僅為1 pixels/clock的FB架構(gòu). 表2 R×S卷積器的性能比較Table 2 Performance comparison for a R×S convolver 本研究提出的IP核卷積結(jié)構(gòu)是基于FB架構(gòu),像素的緩存結(jié)構(gòu)采用并行的行緩存,因此數(shù)據(jù)緩存的開銷為(R-1)×S+P, 卷積窗口、外部帶寬和吞吐率都與FB架構(gòu)相同.以640×480像素圖像為例,設(shè)P=8, 得到本研究方法與傳統(tǒng)組合擴(kuò)展方法的性能比較如表3.以5×5 pixel和7×7 pixel的模板濾波為例,傳統(tǒng)的組合擴(kuò)展會(huì)造成資源浪費(fèi),且當(dāng)模板越大時(shí),資源浪費(fèi)越嚴(yán)重.對(duì)于5×5 pixel的模板,組合級(jí)聯(lián)擴(kuò)展方式是將4個(gè)3×3 pixel卷積單元組合成6×6 pixel的卷積結(jié)構(gòu),然后,從中選擇需要的5×5 pixel模板.7×7 pixel的模板則是將9個(gè)3×3 pixel的卷積單元組合成9×9 pixel的卷積結(jié)構(gòu),再選擇所需要的7×7 pixel大?。狙芯刻岢龅臄U(kuò)展結(jié)構(gòu)充分利用了循環(huán)結(jié)構(gòu)的優(yōu)勢(shì),利用ROM載入權(quán)重系數(shù),并根據(jù)需求自動(dòng)調(diào)整窗口,不存在資源浪費(fèi)現(xiàn)象.根據(jù)上述分析,組合擴(kuò)展方法的窗口大小受限于最大模板,而且選擇小模板時(shí)需要將冗余的系數(shù)接口置零,造成乘法資源的浪費(fèi),同時(shí),此硬件結(jié)構(gòu)不易維護(hù),因此不是IP核最優(yōu)設(shè)計(jì).本研究的IP核結(jié)構(gòu)不存在上述問(wèn)題,充分體現(xiàn)了可再用、可重定義及可配置的優(yōu)勢(shì). 表3 級(jí)聯(lián)擴(kuò)展方法的性能比較(FB架構(gòu))Table 3 Performance comparison of cascaded extension methods(FB architecture) 針對(duì)FPGA進(jìn)行圖像卷積運(yùn)算可重構(gòu)性差的特點(diǎn),提出一種可變模板濾波IP核的設(shè)計(jì).利用循環(huán)迭代多次例化的方法設(shè)計(jì)卷積結(jié)構(gòu),實(shí)現(xiàn)了模板大小可調(diào);利用ROM讀取Hex文件中保存的權(quán)重系數(shù),實(shí)現(xiàn)了模板系數(shù)可調(diào);基于對(duì)分思想設(shè)計(jì)加法樹模塊,實(shí)現(xiàn)了對(duì)時(shí)間和結(jié)構(gòu)的優(yōu)化.IP核基于模塊化設(shè)計(jì),且兼具可擴(kuò)展性,既簡(jiǎn)化了硬件設(shè)計(jì),節(jié)省了片上資源的消耗,又實(shí)現(xiàn)了參數(shù)化的濾波窗口大小可調(diào),并兼容任意模板系數(shù).本設(shè)計(jì)不僅適用于各種圖像大小進(jìn)行不同模板濾波的處理,具有很好的可移植性,同時(shí)因?yàn)椴恍枰獠看鎯?chǔ)器的緩存,可直接對(duì)前端傳入的圖像數(shù)據(jù)進(jìn)行實(shí)時(shí)預(yù)處理,處理速率快,1 clocks/pixel的吞吐率實(shí)現(xiàn)了對(duì)圖像算法的硬件加速.2 結(jié)果與驗(yàn)證
結(jié) 語(yǔ)