?

基于HLS和PYNQ圖像縮放的硬件加速器設計

2023-08-26 01:35趙思捷高尚尚王如剛王媛媛周鋒郭乃宏
關鍵詞:插值法圖像處理框架

趙思捷 ,高尚尚 ,王如剛 ,王媛媛 ,周鋒 ,郭乃宏

(1.鹽城工學院 信息工程學院,江蘇 鹽城 224051;2.鹽城雄鷹精密機械有限公司,江蘇 鹽城 224006)

隨著現代電子技術的迅速發展,人們對機器視覺以及圖像處理的要求逐漸提高。目前,圖像處理技術主要集中在基于PC機、DSP等傳統平臺技術和基于現場可編程門陣列(field programmable gate array,FPGA)硬件平臺技術等[1-3]?;趥鹘y的PC機平臺中,存在體積較大、不方便攜帶以及對高速圖像信號難以實時處理等缺點,使得該技術不能運用在無人機偵查等場合?;贒SP平臺的技術中,只能處理某些特定的圖像算法,不能實現實時圖像信息的采集與處理;若利用多個DSP芯片并行運算實現快速處理,則大大提高了系統的成本。FPGA是在可編程器件PAL、GAL、CPLD的基礎上進一步發展的產品,可以更加高效地處理數據,既解決了定制電路的不足,又克服了原有可編程器件門電路個數有限的缺點。但FPGA使用的是硬件描述性語言,開發難度大、可移植性差,因此利用FPGA對圖像進行實時處理是一種挑戰。

近些年,隨著Xilinx公司高層次綜合(highlevel synthesis, HLS)工具的運用,可以使用C、System C 和C++語言代替傳統的Verilog語言進行編程,大大降低了開發難度,減少了開發時間[4];而PYNQ框架的出現不僅縮短了開發周期,提高了開發效率,還可以實現高性能應用程序如并行硬件執行、實時信號處理、高幀率視頻處理和硬件加速算法等[5]的運用。

由于HLS工具可以減少FPGA的植入時間,而PYNQ框架可以提高生產力[6],因此它們在理論研究中得到了大量的運用。Vashist等[7]使用HLS提供的xfOpenCV庫實現了Canny的邊緣檢測,提出了使用xfOpenCV庫可以更好地檢測帶有噪聲圖像的邊緣,但是它并沒有在PYNQ框架上使用;張瑞琰等[8]提出了基于PYNQ框架的高精度異構無預選框檢測模型,處理時長由ARM端的9.228 s縮減到FPGA端的0.008 s,大大提高了檢測模型的速度;Cui等[9]提出了基于PYNQ框架的核相關濾波異構跟蹤系統,該系統具有良好的實時性,跟蹤速度平均為27.9 幀/s,具有較高的執行效率,易于開發和移植,具有一定的工程參考價值。

基于以上研究,本文提出了基于HLS和PYNQ的圖像處理硬件加速器設計,利用HLS工具實現縮放算法,再經過優化、仿真、綜合后生成IP核;在Vivado 2018.3硬件平臺上連接IP核,并輸出硬件描述文件和比特流文件;把PYNQ鏡像復制到SD卡并啟動開發板,再在瀏覽器上打開Jupyter Lab進行運行驗證和分析。

1 縮放算法

在圖像處理過程中,圖像縮放是對圖像大小作一定的調整,目的是為了適應顯示區域的大小。圖像縮放包含圖像的縮小和放大,分別稱為圖像的下采樣和上采樣,一般是利用圖像的插值實現的。常見的圖像插值算法有最近鄰算法、雙線性插值法和雙三次插值法等[10-11],其中最近鄰算法具有計算量小、算法簡單、處理速度快、占用資源少等特點,但采樣后的圖像具有明顯的不連續現象,且圖像放大時會出現馬賽克,縮小時會有失真現象;雙線性插值法具有連續性好,縮小時具有較好的圖像品質,但放大時會有一定的細節損失;雙三次插值法具有計算精度高、圖像品質好等特點,但算法復雜、計算量大。

經綜合比較,本文采用雙線性插值法進行加速測試,原因是雙線性插值法比最近鄰算法只是計算量稍大一些,但縮放后圖像質量高,基本克服了最近鄰插值算法灰度值不連續的特點。

雙線性插值又稱為雙線性內插,即在兩個方向上分別進行一次線性插值(在一個方向上使用線性插值,然后在另一個方向上再使用線性插值執行雙線性插值),如圖1所示。

圖1 雙線性插值坐標Fig. 1 Bilinear interpolation coordinates

圖1中,設二元函數z=f(x,y),A、B、C、D點的坐標分別為(x0,y0)、(x1,y0)、(x1,y1)、(x0,y1),若P點的橫、縱坐標分別為x'、y',則要在A、B、C、D中通過插值法計算點P的z軸坐標z',計算步驟如下:

(1)根據AD與BC的線性關系,得:

(2)設P0、P1分別為線段AD、BC上的任意一點,其z軸坐標分別為Z0、Z1,令α=(x-x0)/(x1-x0),則P0、P1的z軸坐標分別為:

(3)令β=(y-y0)/(y1-y0),則P點在z軸上的坐標z'為:

整理式(4),得z'表達式為:

2 硬件加速器設計

2.1 系統整體設計

根據對縮放算法的特性分析,可以發現執行縮放算法時一方面需要系統控制和過程調度,另一方面需要大量的計算。因此,硬件加速器的實驗開發板采用Xilinx公司的ZYNQ-7000系列XC7Z020CLG400-2芯片為核心,實驗平臺采用Vivado2018.3、HLS 2018.3以及Firefox。

在縮放算法中,由于涉及的數據重復程度高,但計算結構并不繁瑣,因此采用具有并行加速度特性的PL(programmable logic)端來實現(即FPGA來實現);算法涉及的復雜結構化過程控制與調度部分,由PS(processing system)端來實現(即ARM來實現)。PS與PL的互聯完成了硬件加速器控制流與數據流的交互。

硬件加速器整體系統如圖2所示。從圖2可以看出,該系統分成3部分。在第一部分的HLS里,編寫縮放算法的C代碼和C測試代碼;功能驗證成功后,添加優化指令并進行高層次綜合;高層次綜合后再對結果進行評估。評估時,如果速度、資源等不滿足條件,則需要重新優化設計,直到滿足條件后,導出RTL作為IP核。第二部分由開發板的PL端和PS端組成,PL端的作用是在Vivado平臺上設計Block design并連接IP核,然后導出.hwh文件和.bit文件;PS端的作用是在ARM上啟動裝有PYNQ鏡像的SD卡。第三部分是通過網線或者USB連接PC端,在Firefox上打開Jupyter Lab運行代碼并查看結果。

圖2 整體系統框圖Fig. 2 Block diagram of overall system

2.2 HLS設計

為了加速傳統“寄存器傳輸級(register transfer level,RTL)”開發FPGA的時間,Xilinx公司推出了可以提升行為抽象等級的編譯器Vivado HLS。該編譯器可以使用C++對算法進行設計開發,并最終綜合成HDL描述。

HLS設計流程如圖3所示。在編寫C代碼時,首先使用hls::AXIvideo2Mat函數將AXI4-Stream格式的輸入圖像轉換成HLS工具可以處理的hls::Mat格式,然后調用HLS Video Library 里的函數或者自定義算法函數進行圖像處理,最后使用hls::Mat2AXIvideo函數將hls:Mat格式的圖像轉換成FPGA可以處理的AXI4-Stream格式;同時結合C測試代碼驗證算法功能的有效性,并進行高層次綜合;然后根據高層次綜合的評估結果,觀察FPGA中的資源使用情況,以及支持的最高時鐘頻率是否滿足條件等。如果不滿足條件,則需要重新優化,直到滿足條件為止,然后導出IP核。

圖3 HLS設計流程圖Fig. 3 Flow chart of HLS design

在上述過程中還需要對代碼進行優化,而優化HLS代碼的方式有約束和指令兩種。約束是指對時鐘周期、資源利用情況等指標進行限制,確保實驗結果能夠滿足系統要求;而指令的添加可以優化C代碼中的循環、數組和運算延時等,能夠在很大程度上改變RTL的輸出結果。因此,本文在設計縮放算法代碼時,添加了如下優化。

(1)#pragma HLS UNROLL:FPGA可以實現并行處理,所以代碼可以展開循環,并創建多個獨立的操作,即在單個時鐘里并行處理for循環中的操作。

(2)#pragma HLS PIPELINE:PIPELINE可以允許上一個操作完成前,同時執行下一個操作,即循環流水線操作,以提高系統的吞吐率。

(3)#pragma HLS LOOP_FLATTEN OFF:可以防止優化等級過高,把嵌套循環結構優化成單層次循環結構。

(4)#pragma HLS dataflow:可以使各個圖像處理函數能夠并行執行,并獲得高質量處理結果。

(5)將輸入圖像和輸出圖像綜合成AXI4-Stream接口:

#pragma HLS INTERFACE axis port=INPUT_STREAM

#pragma HLS INTERFACE axis port=OUTPUT_STREAM。

(6)將圖像行數和列數配置成AXI4-lite接口:

#pragma HLS INTERFACE s_axilite port=rows

#pragma HLS INTERFACE s_axilite port=cols。

在高層次綜合后,經對綜合結果評估后得到資源占用情況,如表1所示。從表1可以看出,縮放算法占用資源較少,能夠滿足系統的要求。

表1 縮放算法占用資源情況Table 1 Resource usage of scaling algorithms

2.3 Overlay設計

Overlay設計本質上就是ZYNQ的PL端設計,它既可以加速軟件應用程序,也可以定制相應的硬件平臺。

縮放算法的Overlay系統框圖如圖4所示。圖4中1號位置所指的IP是HLS綜合后導出的縮放IP,它采用的是雙線性插值算法,上采樣支持小于或等于8倍的放大比例,下采樣支持大于或等于25%的縮小比例。2號位置所指的IP是Vivado平臺自帶的IP,可以直接添加。DRAM中的數據是DMA IP利用位寬轉換IP將32位圖像數據轉換成縮放IP可處理的24位圖像數據;數據處理完畢后,將24位圖像數據轉換成32位圖像數據,再經過DMA傳到DRAM。其余方框是系統根據設計自動生成的。

圖4 縮放算法的Overlay系統框圖Fig. 4 Block diagram of Overlay system with scaling algorithm

IP核添加完成后,進行配置和連線,從而完成Overlay的設計。

2.4 PYNQ 框架

隨著Python的流行,Xilinx公司推出了可以使用Python語言和特定庫的PYNQ框架。該框架利用ZYNQ中的FPGA和ARM快速構建高性能的嵌入式應用程序,不僅免除了傳統的SDK開發方式,還代之以不限平臺的瀏覽器開發,極大地方便了軟件開發人員使用硬件設備。PYNQ框架包括以下幾層:

(1) FPGA為主的硬件層:FPGA部分的設計被稱為Overlay設計,在Vivado2018.3平臺上搭建并連接好IP核后,點擊綜合分析,在生成bit流文件后,就可以在軟件上調用API,實現FPGA邏輯功能的動態切換以及PS和PL的協同交互。

(2) Linux內核加Python為主的軟件層:主要是運行在ZYNQ的ARM端,可以通過Python調用API庫來訪問FPGA端的處理單元。

(3) Jupyter Lab為主的應用層:Jupyter Lab是一個基于瀏覽器的交互式實驗環境,在這環境里,可以使用Python語言運行代碼、查看結果和可視化分析等。

3 實驗與結果

在Firefox上打開在線編輯工具Jupyter Lab,然后導入文件庫,下載Bitstream文件,最后將準備存放在SD卡中圖片加載到DDR3中。圖片加載完成后,Jupyter Lab會顯示原始圖像的尺寸。為了方便調用,可以創建 DMA 和Resize IP對象,然后通過Overlay字典查看DMA IP和Resize IP的配置信息(IP字典會顯示具有 AXI Lite 接口且需要用戶進行控制調配的AXI IP)。

鑒于計算復雜,Jupyter渲染大圖片時可能需要一段時間。為了獲得更好的視覺效果,可以將顯示圖片的畫布在Jupyter Lab上增加一倍。

圖5為在Jupyter Lab中實現Resize IP的情況。由圖5可知,加載的測試圖片大小為3840 pixels×2400 pixels,在Jupyter Lab上執行Resize IP后的圖像大小為1920 pixels×1200 pixels,測試圖片縮小為原圖像的一半。此外,本文在Jupyter Lab上還設計軟件版本的縮放算法,該算法是由Python環境和PYNQ框架提供的OpenCV庫實現的。

圖5 在Jupyter Lab中實現Resize IPFig. 5 Implementing Resize IP in Jupyter Lab

Resize IP執行時間如表2所示。從表2可以看出,軟件實現本文算法的執行時間為1110 ms,而硬件實現本文算法的執行時間為213 ms,硬件加速下處理性能提升了5倍左右。

表2 Resize IP執行速度Table 2 Execution speed of Resize IP

4 結論

針對CPU上無法滿足圖像實時處理的需求,提出了一種基于PYNQ框架的圖像處理加速器設計。首先選取縮放算法作為圖像加速測試的算法,再利用HLS工具使用C++語言完成了Resize IP的設計,最后在Jupyter Lab上完成了算法的驗證與分析。

實驗結果表明,基于PYNQ硬件平臺的執行速度約是軟件平臺的5倍,極大地提高了算法的處理速度;并且硬件平臺系統是模塊化IP設計,便于移植和二次開發,在計算機圖像處理領域具有一定的工程應用價值。

猜你喜歡
插值法圖像處理框架
框架
廣義框架的不相交性
《計算方法》關于插值法的教學方法研討
《計算方法》關于插值法的教學方法研討
基于圖像處理的機器人精確抓取的設計與實現
機器學習在圖像處理中的應用
WTO框架下
基于圖像處理的定位器坡度計算
基于二次插值法的布谷鳥搜索算法研究
一種基于OpenStack的云應用開發框架
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合