李本齋,吳從中,陳家銀
(合肥工業大學 計算機與信息學院,安徽 合肥 230009)
H.264標準的編碼效率與之前的視頻壓縮標準相比有了明顯提高,但這是以運算復雜度的增加為代價的。其中,可變塊大小的全搜索運動估計的運算量在整個編碼運算量中占約60%~80%。因此,如何提高運動估計的效率成為實時編碼的關鍵。塊匹配是運動估計最流行的方法[1],其基本思想是將圖像序列的每一幀分成許多互不重疊的宏塊,并認為宏塊內所有像素的位移量都相同,然后對每個宏塊到參考幀某一給定特定搜索范圍內,根據一定的匹配準則找出與當前塊最相似的塊,即匹配塊。匹配塊與當前塊的相對位移即為運動矢量。視頻壓縮時,只需保存運動矢量和殘差數據就可以完全恢復出當前塊。它被廣泛應用于各種視頻編碼標準中,但算法復雜度和龐大的運算量一直是視頻編碼實時實現的瓶頸。因此,算法研究人員研究利用快速算法降低計算的復雜度,而硬件設計人員致力于利用并行流水線技術開發有效的硬件加速器。筆者對運動估計算法進行優化,提出了兩種適合于硬件實現的運動估計算法,設計出合理的硬件結構和加速器,構建基于PowerPC的驗證平臺,并驗證該加速器數據處理能力的正確性。
在H.264標準的搜索算法中[2],圖像序列的當前幀被劃分成互不重疊的16×16大小的子塊,而每個子塊又可劃分成更小的子塊,當前子塊按一定的塊匹配準則在參考幀中對應位置的一定搜索范圍內尋找最佳匹配塊,由此得到運動矢量和匹配誤差。運動估計的估計精度和運算復雜度取決于搜索策略和塊匹配準則,常用的匹配準則是MAD,因為它沒有乘除操作,不需要做乘法運算,實現簡單方便。通常使用求和絕對誤差(SAD)代替MAD,(i,j)點的絕對誤差值定義如下

式中:(i,j)為運動矢量(MV)的坐標,fk和 fk-1分別為當前幀和上一幀圖像的相應像素。將對應最小的SADmin的塊用于預測。運動矢量定義為
為提高運動估計的效率,出現了很多快速搜索算法,如三步法、磚石搜索法、對數搜索和等級搜索等,這些算法減少了搜索點數,降低了運算量,但數據流的不規則性和估計運算時間的不確定性使它們很難在硬件中實現。目前,硬件設計人員多采用全搜索的方法[3],即搜索前一幀搜索范圍內的所有可能搜索點,給出最佳匹配點和運動矢量,它具有規則的數據流,有很好的搜索效果,但龐大的運算量需要很多硬件資源,降低了處理速度。如編碼 1 920×1 250@50 f/s(幀/秒)的圖像,搜索窗為16×16 時,計算量約為:3×1 024×1 920×1 250×50=3 686.4×108次/秒(每秒3 686.4億次的運算)。為減少計算量,現對運動估計算法進行優化,提出以下兩種適合硬件實現的方法:
方法1:在搜索窗口內以步長2進行抽樣搜索,即每隔1個像素點選1個候選宏塊,根據匹配準則得到最佳匹配塊和運動矢量,如圖1所示。這種方法有規整的數據流,易于硬件實現,搜索精度會有所降低,但可減少一半的計算量。

圖1 每隔1個像素抽樣搜索
方法2:采用兩步搜索:1)在搜索窗口內以步長4進行初定位,即每隔3個像素點選1個候選宏塊,根據匹配準則得到初定位點。2)在初定位點相鄰的4×4區域上進行全搜索,得到最佳匹配塊和運動矢量,如圖2所示,這種方法與全搜索相比約減少1-(1/4+1/16)=11/16的計算量。

圖2 初定位方式抽樣搜索
圖3為PE(Processing Element)的內部結構。PE處理單元[4]的設計通常是先對C(當前塊)和S(參考塊)進行差值絕對值運算,然后再將得到的結果直接與上次的SAD值累加。該PE結構主要由1個運算模塊、1個SAD值的鎖存器(Latch)、1個累加單元(ALU)和1個輸出寄存器(REG)組成。運算單元主要完成C和S的絕對差值計算,將得到的SAD值鎖存在Latch中,同時將當前存于Latch中的SAD值送入累加單元進行累加。當編碼宏塊數據被掃描完一次后,累加單元中的SAD值將被送入其他單元做進一步處理,并置累加器為0,進行下一次塊匹配運算。

圖3 PE結構
在FPGA設計中,速度和資源是一對對立統一的矛盾體,要求一個系統同時具有較少的資源消耗和較高的運行頻率是不現實的。速度和資源的互換常常在FPGA設計中被用到。圖4中的速度優先的硬件結構[5]是以資源的犧牲為代價換取高的運行速度,同時數據帶寬相應增加。該結構利用16個PA(PE Array)來并行完成1個匹配點的計算,每個PA由4×4 PE組成,這樣就能同時產生16×16個當前塊數據和搜索區數據的SAD計算,對于1個16×16搜索范圍,256個搜索點采用全搜索需要256個周期完成,采用方法1需要128個周期,方法2只需要80個周期,有較快的運行速度。

圖4 速度優先的硬件結構
圖5中的資源優先的硬件結構是二維的脈動陣列結構[6],相比于前一種結構具有低硬件資源開銷、存儲帶寬小的優點。利用4×4 PE陣列分時計算完1個16×16宏塊的16個4×4子塊,計算時,搜索區數據以總線方式輸入到PE的緩存中,當前塊數據由寄存器裝入,16個PE輸出的絕對差值,被一起送入并行加法器中得到1個4×4塊的SAD。4×4 PE陣列每個周期計算1個4×4塊的SAD,在16個周期內完成16個SAD值計算,累加得到16×16宏塊的SAD值。對于1個16×16搜索范圍,256個搜索點采用全搜索需要4 096個周期完成,而采用方法1需要2 048個周期,方法2僅需要1 280個周期。運行速度變慢,但所需資源和數據帶寬都相應減少。

圖5 資源優先的硬件結構
加速器[7]的總體結構如圖6所示,包括存儲模塊、地址產生模塊、PE陣列、控制單元和輸出比較模塊。存儲模塊用于緩存當前塊和參考幀數據;地址產生模塊產生讀取所需數據的相應地址;PE陣列完成宏塊的SAD值計算;控制單元完成整個處理過程的控制和調度。MVbest為搜索到的最佳運動矢量,SADmin是對應的最小SAD值。

圖6 加速器總體結構
筆者在Xilinx Virtex-II PRO開發板上對設計的硬件加速器進行驗證,驗證平臺結構[8]如圖7所示。其中,PowerPC405是1個32位的定點硬核,負責總線的調度和各個模塊的協調工作;JTAG是調試接口,用于對程序的調試,系統有32 Mbyte的在片RAM和可擴展的DDR存儲控制器,有PLB總線和OPB總線,可以通過總線橋進行數據交互。

圖7 驗證平臺系統框圖
驗證時,首先使用EDK10.2構建PowerPC的最小系統,然后將硬件加速器集成到該系統中,編譯通過后由USB口下載到目標板,系統開始運行后通過RS-232從上位機下載待編碼的圖像數據,下載的數據保存在目標板上的256 Mbyte DDR SDRAM中。數據下載完畢后程序將待編碼數據依次寫入加速器并啟動,并將處理完的數據再寫入DDR SDRAM,待全部數據處理完畢,Power-PC將處理結果一起發送給上位機。上位機將結果與本機C代碼執行結果相比較,最終確認硬件加速器的數據處理能力是否正確。
將文中所提到的兩種優化算法用foreman,football,news序列在AVC下與全搜索進行了對比,結果見表1。可見,方法1僅有平均0.45 dB的PSNR下降卻減少了50%的計算量,方法2有平均0.67 dB的PSNR下降,減少了約68.7%的計算量。
當塊尺寸為 16,搜索范圍[-8,7],CIF@30 Hz時,對兩種硬件結構的處理速度和資源消耗等性能進行了對比,結果見表2。

表1 優化算法與全搜索性能對比

表2 兩種結構性能對比
本文對H.264運動估計算法進行優化,提出兩種適合硬件實現的搜索方法,表1的實驗數據表明,在不損失圖像質量的同時,明顯減少了運算量,提高了速度。同時與硬件相結合,給出速度優先和資源優先的兩種結構,兩種結構在速度和資源方面各有優勢,設計出運動估計的硬件加速器,在Xilinx XUP Virtex-II PRO開發板中做了驗證,結果表明該加速器能正確完成H.264運動估計的數據處理功能。
[1]畢厚杰.新一代視頻壓縮編碼標準——H.264/AVC[M].北京:人民郵電出版社,2005.
[2]YANG KM,SUNM T,WU L.A family of VLSIdesigns for themotion compensation block-matching algorithm[J].IEEE Trans.Circuits and Systems,1989,36(10):1317-1325.
[3]CHENCY,HUANGCT,CHENYH,etal.LevelC+data reuse scheme formotion estimation with corresponding coding orders[J].IEEE Trans.Circuits and Systems for Video Technology,2006,16(4):553-558.
[4]王睿,林濤,林爭輝,等.一種H.264運動估計器的VLSI設計[J].微電子學與計算機,2004(11):153-157.
[5]黃衛鋒,桑紅石,鄭兆青,等.用于H.264的高性能整像素運動估計 VLSI的設計[J].微電子學,2007(4):260-264.
[6]CHENTC,HUANGYW,CHENLG.Analysisand design ofmacroblock pipelining for H.264/AVC VLSIarchitecture[EB/OL].[2009-12-20].http://ieeexplore.ieee.org/Xplore/login.jsp?url=http%3A%2F%2Fieeexplore.ieee.org%2Fiel5%2F9255%2F29377%2F01329261.pdf%3Farnumber%3D1329261&authDecision=-203.
[7]HSU Meiyun,CHANG Haochieh,WANG Yichu,et al.Scalable module-based architecture for MPEG-4 BMA motion estimation[EB/OL].[2009-12-20].http://ntur.lib.ntu.edu.tw/bitstream/246246/2007041910021255/1/00921053.pdf.
[8]石磊,林濤,焦孟草.H.264/AVC硬件解碼器設計及其驗證策略[J].微電子學,2006(2):16-19.