文獻標識碼: A
DOI:10.16157/j.issn.0258-7998.2016.11.010
中文引用格式: 劉聲,韓俊剛,韓帥. 引導濾波的軟硬件協同加速器設計與實現[J].電子技術應用,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等人提出了引導濾波(Guided Filter)[1]算法。該算法與雙邊濾波最大的相似之處就是同樣具有保持邊緣的特性,不同之處在于它還克服了去偽影的影響。該算法被大量用于圖像處理領域中,在去雨雪[2]、去霧[3]、前景提取[4]、圖像去噪、圖像增強、級聯采樣等方面有很好的處理效果。
但是,隨著處理圖像的尺寸不斷擴大,基于CPU處理的引導濾波算法越來越不能滿足人們的需求,因此,王新磊等[5]用CUDA實現了引導濾波GPU加速。為使引導濾波能在嵌入式領域達到實時處理,本文提出了基于FPGA對引導濾波實現加速的方法。
1 引導濾波算法介紹
引導濾波理論的基礎是局部線性模型。該模型認為:任意函數上的任意一點與該點鄰近部分的點可以看成是線性關系,一個復雜的函數可以用很多局部線性函數來表示。若需要求出該函數上某一點的值,只需求出所有包含該點的線性函數的值,并求出這些線性函數值的平均值,這個平均值就是該函數上所求點的值。
2 引導濾波加速器設計
2.1 實驗環境介紹
本文采用Zynq-7000系列的Zedboard開發板[6]作為硬件開發環境,其PS端提供了ARM Cortex-A9處理器、512 MB DDR3內存空間和外部存儲接口。其PL端的XC7Z020 CLG481-1 EEP芯片提供了可編程邏輯陣列單元,為硬件加速提供了豐富的邏輯資源。本文采用SDSoC[7]作為軟件開發環境,它是基于Zynq-7000全可編程芯片在嵌入式系統中的IDE(Integrated Development Environment)。
2.2 算法結構設計
本文將單通道的圖像數據存儲在PS端的外部存儲中,之后讀取數據到內存中。為了獲取最大的運算性能,在引導濾波函數調用前分配好算法需要的圖像緩沖空間,將內存空間指針以參數形式傳遞給引導濾波函數,供其使用,之后PS端調用引導濾波函數。本文將引導濾波算法分為兩部分,其中一部分是將對算法有較大影響的函數用硬件加速,硬件加速部分將數據傳到PL端,PL端將其用硬件邏輯電路實現,對實現的硬件再通過流水線、并行處理和算法重構等優化方法對算法進行優化。處理完數據后,再將數據寫回到PS端。最終PS端將處理好的圖像存儲在外部存儲中。算法結構設計如圖1所示。
2.3 優化方法
2.3.1 流數據傳輸
為了獲取PS端和PL端的最大傳輸性能,本文使用SDSoC開發環境中的sds_alloc函數[8]在PS端申請連續的物理地址作為圖像緩沖區,并在硬件函數聲明前插入指導編譯器的參數#pragma SDS dada zero_copy(imgIn[0:rows*cols])和#pragma SDS data access_pattern(imgIn[0:rows*cols])命令來將圖像數據轉化為流數據[8]進行傳輸。
2.3.2 流水線優化
為了增加程序的并發性,流水線優化可以使當前操作沒有完成之前就開始執行下一個操作。環境SDSoC的PIPELINE[8,10]優化指令可以對函數及循環進行優化。下面分別對函數的流水線和循環的流水線優化進行說明。
(1)函數的流水線操作
從圖2可以看出,func函數需要3個時鐘完成一組操作。若進行兩組操作,在沒有進行流水線優化的情況下,每次操作順序執行,最后一次輸出需要6個時鐘;而經過流水線優化的func函數,每經過1個時鐘就可以讀取下一組數據,兩組操作完成后只需要4個時鐘周期就能夠輸出結果。由此可見,流水線優化可以提高函數的并發性,增加算法的效率。
(2)循環的流水線優化
從圖3可看出,用循環來對圖像像素進行處理,假設每個像素處理時間為30個時鐘周期,若處理圖像大小為512×512,則未流水線優化前,需要的總時鐘個數為7 864 320個時鐘周期;流水線優化后,需要的總時鐘個數為262 174個時鐘周期,性能有了近30倍的提升。
2.3.3 并行處理
SDSoC環境提供了async和wait指令,使得程序員能夠對硬件函數的同步方式進行控制。硬件開始工作后,PS端的async指令會交還CPU的控制權,繼續執行PS端的任務,實現軟硬件函數并行處理。通過這種方法,可以增加系統的并行性,提高算法的效率。wait命令用來同步數據,使得下一個函數能夠成功應用上一個硬件函數的輸出結果,防止程序死鎖。
3 實驗結果分析
本文輸入單通道的.bmp格式文件為待處理圖像,模板大小選擇3×3,引導圖像和待處理圖像為同一張圖像,實驗效果如圖4所示。
其中,圖4(a)為待處理圖像和引導圖像,圖4(b)為經過軟硬件協同加速器實現的引導濾波效果圖,圖4(c)為在PC上用OpenCV庫純軟件實現的引導濾波效果圖。通過對比可看出,經過軟硬件協同加速器實現的引導濾波和在PC上純軟件實現的引導濾波在效果上基本相同。
為了比較本文提出的軟硬件協同加速器的加速效果,分別測出了在PS端對不同大小圖像實現引導濾波算法的幀率值和軟硬件協同加速器對不同大小圖像實現引導濾波算法的頻率值。實驗數據如表1所示。
4 結束語
本文實現了引導濾波的軟硬件協同加速器,并利用開發環境SDSoC所提供的優化指令對硬件進行了性能優化。與CUDA實現的引導濾波相比,性能雖有所不及,但加速效果明顯,并在低功耗及開發周期上優勢大于CUDA。本文提出的軟硬件協同加速器可直接用于內置CPU和FPGA的嵌入式系統中,縮短了嵌入式工程師開發周期,提高了系統整體性能。
參考文獻
[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].廈門:廈門大學,2014.
[3] 楊燕,白海平,王帆.基于引導濾波的單幅圖像自適應去霧算法[J].計算機工程,2016,42(1):265-271.
[4] 漆琳智,張超,吳向陽.引導濾波的單幅圖像前景精確提取[J].杭州電子科技大學學報,2013,33(5).
[5] 王新磊,何凱,王曉文.引導濾波算法的CUDA加速實現[J].吉林大學學報,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.