文獻(xiàn)標(biāo)識碼: A
DOI:10.16157/j.issn.0258-7998.2016.11.010
中文引用格式: 劉聲,韓俊剛,韓帥. 引導(dǎo)濾波的軟硬件協(xié)同加速器設(shè)計與實現(xiàn)[J].電子技術(shù)應(yīng)用,2016,42(11):44-45,48.
英文引用格式: Liu Sheng,Han Jungang,Han Shuai. The accelerator design and implementation using hardware/software co-design for guided filter[J].Application of Electronic Technique,2016,42(11):44-45,48.
0 引言
2010年HE K M等人提出了引導(dǎo)濾波(Guided Filter)[1]算法。該算法與雙邊濾波最大的相似之處就是同樣具有保持邊緣的特性,不同之處在于它還克服了去偽影的影響。該算法被大量用于圖像處理領(lǐng)域中,在去雨雪[2]、去霧[3]、前景提取[4]、圖像去噪、圖像增強(qiáng)、級聯(lián)采樣等方面有很好的處理效果。
但是,隨著處理圖像的尺寸不斷擴(kuò)大,基于CPU處理的引導(dǎo)濾波算法越來越不能滿足人們的需求,因此,王新磊等[5]用CUDA實現(xiàn)了引導(dǎo)濾波GPU加速。為使引導(dǎo)濾波能在嵌入式領(lǐng)域達(dá)到實時處理,本文提出了基于FPGA對引導(dǎo)濾波實現(xiàn)加速的方法。
1 引導(dǎo)濾波算法介紹
引導(dǎo)濾波理論的基礎(chǔ)是局部線性模型。該模型認(rèn)為:任意函數(shù)上的任意一點(diǎn)與該點(diǎn)鄰近部分的點(diǎn)可以看成是線性關(guān)系,一個復(fù)雜的函數(shù)可以用很多局部線性函數(shù)來表示。若需要求出該函數(shù)上某一點(diǎn)的值,只需求出所有包含該點(diǎn)的線性函數(shù)的值,并求出這些線性函數(shù)值的平均值,這個平均值就是該函數(shù)上所求點(diǎn)的值。
2 引導(dǎo)濾波加速器設(shè)計
2.1 實驗環(huán)境介紹
本文采用Zynq-7000系列的Zedboard開發(fā)板[6]作為硬件開發(fā)環(huán)境,其PS端提供了ARM Cortex-A9處理器、512 MB DDR3內(nèi)存空間和外部存儲接口。其PL端的XC7Z020 CLG481-1 EEP芯片提供了可編程邏輯陣列單元,為硬件加速提供了豐富的邏輯資源。本文采用SDSoC[7]作為軟件開發(fā)環(huán)境,它是基于Zynq-7000全可編程芯片在嵌入式系統(tǒng)中的IDE(Integrated Development Environment)。
2.2 算法結(jié)構(gòu)設(shè)計
本文將單通道的圖像數(shù)據(jù)存儲在PS端的外部存儲中,之后讀取數(shù)據(jù)到內(nèi)存中。為了獲取最大的運(yùn)算性能,在引導(dǎo)濾波函數(shù)調(diào)用前分配好算法需要的圖像緩沖空間,將內(nèi)存空間指針以參數(shù)形式傳遞給引導(dǎo)濾波函數(shù),供其使用,之后PS端調(diào)用引導(dǎo)濾波函數(shù)。本文將引導(dǎo)濾波算法分為兩部分,其中一部分是將對算法有較大影響的函數(shù)用硬件加速,硬件加速部分將數(shù)據(jù)傳到PL端,PL端將其用硬件邏輯電路實現(xiàn),對實現(xiàn)的硬件再通過流水線、并行處理和算法重構(gòu)等優(yōu)化方法對算法進(jìn)行優(yōu)化。處理完數(shù)據(jù)后,再將數(shù)據(jù)寫回到PS端。最終PS端將處理好的圖像存儲在外部存儲中。算法結(jié)構(gòu)設(shè)計如圖1所示。
2.3 優(yōu)化方法
2.3.1 流數(shù)據(jù)傳輸
為了獲取PS端和PL端的最大傳輸性能,本文使用SDSoC開發(fā)環(huán)境中的sds_alloc函數(shù)[8]在PS端申請連續(xù)的物理地址作為圖像緩沖區(qū),并在硬件函數(shù)聲明前插入指導(dǎo)編譯器的參數(shù)#pragma SDS dada zero_copy(imgIn[0:rows*cols])和#pragma SDS data access_pattern(imgIn[0:rows*cols])命令來將圖像數(shù)據(jù)轉(zhuǎn)化為流數(shù)據(jù)[8]進(jìn)行傳輸。
2.3.2 流水線優(yōu)化
為了增加程序的并發(fā)性,流水線優(yōu)化可以使當(dāng)前操作沒有完成之前就開始執(zhí)行下一個操作。環(huán)境SDSoC的PIPELINE[8,10]優(yōu)化指令可以對函數(shù)及循環(huán)進(jìn)行優(yōu)化。下面分別對函數(shù)的流水線和循環(huán)的流水線優(yōu)化進(jìn)行說明。
(1)函數(shù)的流水線操作
從圖2可以看出,func函數(shù)需要3個時鐘完成一組操作。若進(jìn)行兩組操作,在沒有進(jìn)行流水線優(yōu)化的情況下,每次操作順序執(zhí)行,最后一次輸出需要6個時鐘;而經(jīng)過流水線優(yōu)化的func函數(shù),每經(jīng)過1個時鐘就可以讀取下一組數(shù)據(jù),兩組操作完成后只需要4個時鐘周期就能夠輸出結(jié)果。由此可見,流水線優(yōu)化可以提高函數(shù)的并發(fā)性,增加算法的效率。
(2)循環(huán)的流水線優(yōu)化
從圖3可看出,用循環(huán)來對圖像像素進(jìn)行處理,假設(shè)每個像素處理時間為30個時鐘周期,若處理圖像大小為512×512,則未流水線優(yōu)化前,需要的總時鐘個數(shù)為7 864 320個時鐘周期;流水線優(yōu)化后,需要的總時鐘個數(shù)為262 174個時鐘周期,性能有了近30倍的提升。
2.3.3 并行處理
SDSoC環(huán)境提供了async和wait指令,使得程序員能夠?qū)τ布瘮?shù)的同步方式進(jìn)行控制。硬件開始工作后,PS端的async指令會交還CPU的控制權(quán),繼續(xù)執(zhí)行PS端的任務(wù),實現(xiàn)軟硬件函數(shù)并行處理。通過這種方法,可以增加系統(tǒng)的并行性,提高算法的效率。wait命令用來同步數(shù)據(jù),使得下一個函數(shù)能夠成功應(yīng)用上一個硬件函數(shù)的輸出結(jié)果,防止程序死鎖。
3 實驗結(jié)果分析
本文輸入單通道的.bmp格式文件為待處理圖像,模板大小選擇3×3,引導(dǎo)圖像和待處理圖像為同一張圖像,實驗效果如圖4所示。
其中,圖4(a)為待處理圖像和引導(dǎo)圖像,圖4(b)為經(jīng)過軟硬件協(xié)同加速器實現(xiàn)的引導(dǎo)濾波效果圖,圖4(c)為在PC上用OpenCV庫純軟件實現(xiàn)的引導(dǎo)濾波效果圖。通過對比可看出,經(jīng)過軟硬件協(xié)同加速器實現(xiàn)的引導(dǎo)濾波和在PC上純軟件實現(xiàn)的引導(dǎo)濾波在效果上基本相同。
為了比較本文提出的軟硬件協(xié)同加速器的加速效果,分別測出了在PS端對不同大小圖像實現(xiàn)引導(dǎo)濾波算法的幀率值和軟硬件協(xié)同加速器對不同大小圖像實現(xiàn)引導(dǎo)濾波算法的頻率值。實驗數(shù)據(jù)如表1所示。
4 結(jié)束語
本文實現(xiàn)了引導(dǎo)濾波的軟硬件協(xié)同加速器,并利用開發(fā)環(huán)境SDSoC所提供的優(yōu)化指令對硬件進(jìn)行了性能優(yōu)化。與CUDA實現(xiàn)的引導(dǎo)濾波相比,性能雖有所不及,但加速效果明顯,并在低功耗及開發(fā)周期上優(yōu)勢大于CUDA。本文提出的軟硬件協(xié)同加速器可直接用于內(nèi)置CPU和FPGA的嵌入式系統(tǒng)中,縮短了嵌入式工程師開發(fā)周期,提高了系統(tǒng)整體性能。
參考文獻(xiàn)
[1] HE K M,SUN J,TANG X O.Guided image filtering[C].Proceddings of the 11th European Conference on Computer Vision.Heraklion,Crete,Greece:Lecture Notes in computer Science,2010:1-14.
[2] 鄭賢輝.單幅圖像去雨雪的算法研究[D].廈門:廈門大學(xué),2014.
[3] 楊燕,白海平,王帆.基于引導(dǎo)濾波的單幅圖像自適應(yīng)去霧算法[J].計算機(jī)工程,2016,42(1):265-271.
[4] 漆琳智,張超,吳向陽.引導(dǎo)濾波的單幅圖像前景精確提取[J].杭州電子科技大學(xué)學(xué)報,2013,33(5).
[5] 王新磊,何凱,王曉文.引導(dǎo)濾波算法的CUDA加速實現(xiàn)[J].吉林大學(xué)學(xué)報,2016,34(1).
[6] Xilinx.Zynq architecture[Z].2016.
[7] Xilinx.SDSoC development environment[Z].2016.
[8] Xilinx.SDSoC environment user guide[Z].2016.
[9] CHATI H D,MUHLBAUER F,BRAUN T,et al.Hardward/software co-design of a key point detector on FPGA[C].IEEE Computer Society,2007:355-356.
[10] Xilinx.Vivado design suite user guide:High-level synthesis[EB/OL].[2016-02].http:www.xilinx.com.