李 申,柴志雷,2,嚴(yán) 偉,夏 珺,趙建斌
1(江南大學(xué) 物聯(lián)網(wǎng)工程學(xué)院,江蘇 無(wú)錫 214122 2(數(shù)學(xué)工程與先進(jìn)計(jì)算國(guó)家重點(diǎn)實(shí)驗(yàn)室,江蘇 無(wú)錫 214125 3(北京大學(xué) 軟件與微電子學(xué)院,北京 102600)
與H.264/AVC算法相比,H.265/HEVC算法可以在保證視頻質(zhì)量相同的前提下,將視頻碼率降低一半,即壓縮比提高一倍,這大大減少了對(duì)通信帶寬和存儲(chǔ)空間的占用.然而由于H.265算法采用了更為復(fù)雜的宏塊劃分機(jī)制和預(yù)測(cè)模式,使得其編碼速度較H.264算法降低數(shù)倍[1].因此H.265算法的加速問(wèn)題自H.265標(biāo)準(zhǔn)發(fā)布以來(lái)就一直是視頻編解碼領(lǐng)域研究的熱點(diǎn)和難點(diǎn)[2].
目前國(guó)內(nèi)外相關(guān)研究多集中于幀間預(yù)測(cè)算法及幀內(nèi)預(yù)測(cè)算法的軟件加速方面,幀內(nèi)模式判決的硬件結(jié)構(gòu)及加速方面的研究相對(duì)較少.文獻(xiàn)[3]-文獻(xiàn)[8]在不同程度上對(duì)幀內(nèi)模式判決算法在軟件層次進(jìn)行了加速,但加速比不理想,不能完全滿足實(shí)際應(yīng)用的需求.文獻(xiàn)[9]提出了一種基于FPGA的H.265編碼器,主要通過(guò)對(duì)原始圖像進(jìn)行下采樣來(lái)達(dá)到快速模式判決的目的,造成編碼質(zhì)量有了一定的損失.幀內(nèi)編碼幀作為幀間算法的參照對(duì)象,其質(zhì)量的好壞直接決定了同一個(gè)GOP(Group of Pictures,畫(huà)面組)中的幀間視頻編碼質(zhì)量.因此,如何進(jìn)行快速高效的幀內(nèi)模式判決是H.265算法加速的關(guān)鍵問(wèn)題之一.
H.265幀內(nèi)預(yù)測(cè)和編碼算法引入了多達(dá)35種幀內(nèi)預(yù)測(cè)模式和4種CU(Coding Unit)劃分尺度,使得其算法復(fù)雜度很高[1].一方面,本文通過(guò)CU的重新劃分和組合來(lái)解決不同尺度下的編碼塊劃分問(wèn)題,將多層次大尺度CU的模式判決問(wèn)題轉(zhuǎn)化為單一層次多個(gè)小尺度CU模式判決的疊加問(wèn)題;另一方面,通過(guò)塊內(nèi)細(xì)粒度并行和塊間窗口流水的方式實(shí)現(xiàn)并行編碼架構(gòu);最終基于FPGA實(shí)現(xiàn)了快速模式判決.在嵌入式平臺(tái)Xilinx ZCU102上的實(shí)驗(yàn)結(jié)果表明,本文算法最高可達(dá)到93.6x的加速比,且編碼后的視頻平均PSNR僅降低0.71dB.
H.265幀內(nèi)預(yù)測(cè)算法的基本思想與H.264相近,是將原始視頻幀分塊劃分,利用像素的空間相關(guān)性,通過(guò)左側(cè)和上側(cè)的像素值對(duì)某一預(yù)測(cè)塊進(jìn)行預(yù)測(cè),并對(duì)預(yù)測(cè)塊與原始?jí)K的殘差進(jìn)行變換和編碼.
對(duì)于亮度分量,CU的尺寸包括64×64(Largest CU,LCU)、32×32、16×16、8×8(Smallest CU,SCU)共4種尺度,色度分量在YUV420采樣模式下CU邊長(zhǎng)減半.
幀內(nèi)預(yù)測(cè)包含3類共35種預(yù)測(cè)模式.分別是Planar模式(模式0)、DC模式(模式1)和Angular模式(模式2~模式34)[7].
H.265幀內(nèi)預(yù)測(cè)模式判決(Mode Decision, MD)主要解決兩個(gè)問(wèn)題:1)當(dāng)前CU是否需要繼續(xù)向下劃分;2)每個(gè)CU采取何種預(yù)測(cè)模式.
JCT-VC給出的標(biāo)準(zhǔn)參考模型HM中采用了四叉樹(shù)遞歸的方式進(jìn)行,最優(yōu)模式判定以率失真代價(jià)(RDcost)為依據(jù).具體做法是:從LCU逐層向下劃分,直至SCU遞歸返回,分別計(jì)算每種尺度下35種幀內(nèi)預(yù)測(cè)模式的最優(yōu)解.若某一尺度下,4個(gè)最優(yōu)解的RDcost之和小于上層最優(yōu)RDcost,則進(jìn)行CU劃分,否則不進(jìn)行CU劃分.如圖1所示.四叉樹(shù)遞歸調(diào)用結(jié)構(gòu)導(dǎo)致該算法的時(shí)間復(fù)雜度和空間復(fù)雜度均很高[1,5].

圖1 一次四叉樹(shù)遞歸劃分示意圖
與原始的自頂向下四叉樹(shù)遞歸劃分模式不同,本文提出了一種自底向上的逐層累加的幀內(nèi)判決預(yù)測(cè)模式,其改進(jìn)之處包括以下2個(gè)方面:
首先,對(duì)于一種給定的幀內(nèi)預(yù)測(cè)模式m(0≤m≤34),不再重復(fù)計(jì)算不同深度下的RDcost,深度d(0≤d≤2)的RDcost由深度為d+1的RDcost累加得到,如式(1)所示:
(1)

其次,對(duì)于幀內(nèi)模式劃分的判定,引入了分割代價(jià)C.根據(jù)視頻編碼理論,如果在某一深度不進(jìn)行四叉樹(shù)分割,能夠節(jié)省編碼時(shí)間、減小碼率(但是會(huì)造成視頻質(zhì)量在一定程度的下降),C即四叉樹(shù)分割的懲罰項(xiàng).對(duì)于分割S的判定可由式(2)確定:
(2)
下面以DC模式為例,證明上述判決過(guò)程與原始判決方法可以相互替代,DC模式的計(jì)算公式如式(3)所示.其中Px,y代表坐標(biāo)為(x,y)的參考像素值,N代表當(dāng)前CU的尺寸,?表示算術(shù)右移操作.
(3)
證明:假設(shè)當(dāng)前CU深度為d,尺寸為2N,則深度為d+1的CU尺寸為N.下面分2種情況進(jìn)行討論.
情況1.當(dāng)前CU符合DC分布,則深度為d+1的區(qū)域也符合DC分布.即當(dāng)前CU的MD應(yīng)為m=1,S=false.
深度為d時(shí):
(4)
深度為d+1時(shí):
(5)
(6)
根據(jù)式(2)可得S=false,即不進(jìn)行劃分.
情況2.深度為d+1的部分CU符合DC分布,深度為d的CU也不符合DC分布.
(7)
則針對(duì)DC模式需要深度為d的CU進(jìn)行劃分.
同理,對(duì)于Planar模式和Angular模式,可以通過(guò)分類討論的方式對(duì)本方法的有效性加以證明,不再贅述.
本文基于高層次綜合(High Level Synthesis,HLS)方法設(shè)計(jì)了兼容AXI(Advanced eXtensible Interface)接口的并行幀內(nèi)模式判決IP.HLS是一種將C/C++語(yǔ)言描述向HDL描述轉(zhuǎn)化的方法,通過(guò)接口約束、資源約束、時(shí)序約束等能夠快速實(shí)現(xiàn)硬件原型設(shè)計(jì)[10,11].
如圖2所示,針對(duì)SCU,在進(jìn)行模式判決時(shí),可能用到的參考像素區(qū)域按順時(shí)針?lè)较虬ˋ、B、C、D、E共5個(gè)部分.

圖2 SCU與參考像素
通過(guò)這些區(qū)域得到預(yù)測(cè)值之后,再與SCU的原始像素值相減得到殘差,進(jìn)而進(jìn)行模式判決.H.265幀內(nèi)預(yù)測(cè)共有35種可能的預(yù)測(cè)模式,將這些數(shù)據(jù)拷貝35份,這35種幀內(nèi)預(yù)測(cè)模式就可以同時(shí)進(jìn)行.依據(jù)35種預(yù)測(cè)模式的特點(diǎn)可以將它們分為6組,如表1所示.在FPGA的具體實(shí)現(xiàn)過(guò)程中,為了減少代碼描述上的冗余,可以將35種算法分組進(jìn)行實(shí)現(xiàn),然后通過(guò)HLS提供的UNROLL指令進(jìn)行展開(kāi),從而達(dá)到并行化的目的.

表1 幀內(nèi)預(yù)測(cè)模式及其分組
若重構(gòu)值不可用(如當(dāng)前SCU處于視頻幀的左上角時(shí),這些區(qū)域不存在),則采用H.265標(biāo)準(zhǔn)給出的默認(rèn)值defaultVal.
defaultVal=2?(bit_depth-1)
(8)
bit_depth代表視頻分量的像素點(diǎn)的位寬,本文為8.
由于傳統(tǒng)的RDcost計(jì)算模式速度較慢,本文采用SAD作為RDCost的替代評(píng)價(jià)準(zhǔn)則,計(jì)算公式如式(9)所示.
(9)
由于SCU的預(yù)測(cè)需要用到周圍像素的重構(gòu)值,這導(dǎo)致下一個(gè)SCU的處理必須等待上一個(gè)SCU的重構(gòu)結(jié)果,且SCU重構(gòu)的周期較長(zhǎng),從而導(dǎo)致算法無(wú)法實(shí)現(xiàn)SCU間的并行.為了減少反饋回路的耗時(shí),本文在進(jìn)行模式判決時(shí)采用原始值代替重構(gòu)值進(jìn)行[4].
多個(gè)SCU的并行會(huì)受到硬件資源的限制,本文采用流水的方式將單個(gè)SCU的幀內(nèi)模式判決硬件進(jìn)行復(fù)用.
二維圖像在內(nèi)存中采用一維的方式進(jìn)行存儲(chǔ),但SCU是二維的,若直接將DDR中的數(shù)據(jù)按SCU分塊加載至FPGA片上RAM,則會(huì)出現(xiàn)“地址跳躍”的問(wèn)題.
對(duì)于通用CPU來(lái)說(shuō),其主頻在GHz數(shù)量級(jí),同時(shí)具備多級(jí)緩存和預(yù)測(cè)-命中機(jī)制,“地址跳躍”并不會(huì)造成大的時(shí)間開(kāi)銷;本文中FPGA的工作頻率為200 MHz,為了避免造成不必要的時(shí)間浪費(fèi),本文設(shè)計(jì)了DDR-BRAM-LUT 3級(jí)物理存儲(chǔ)結(jié)構(gòu),分別對(duì)應(yīng)視頻幀-行緩存-窗口和參考像素緩存這3級(jí)邏輯存儲(chǔ)結(jié)構(gòu),如圖3所示進(jìn)行這種結(jié)構(gòu)劃分的依據(jù)是:DDR位于FPGA片外,容量最大但存取速度最慢;BRAM位于FPGA片內(nèi),容量較小但存儲(chǔ)速度較快;LUT也是FPGA的片內(nèi)資源,可以直接進(jìn)行快速訪問(wèn)而不像BRAM那樣需要事先指定存取地址.

圖3 三級(jí)物理與邏輯存儲(chǔ)結(jié)構(gòu)
具體做法如下:先將視頻信號(hào)載入DDR中,依據(jù)當(dāng)前幀與當(dāng)前處理的窗口對(duì)應(yīng)的行位置,進(jìn)行17行緩存(初始化時(shí)首行為默認(rèn)值defaultVal).同時(shí)開(kāi)辟參考像素緩存和行緩存,及時(shí)對(duì)參考像素與SCU窗口進(jìn)行緩存,并將SCU窗口和參考像素送入并行MD模塊,SCU窗口可以在行緩存中進(jìn)行流水化處理.如圖4所示.

圖4 SCU間流水處理示意圖
基于FPGA的幀內(nèi)模式判決的總體結(jié)構(gòu)如圖5所示.視頻數(shù)據(jù)從DDR通過(guò)AXI總線載入行緩存,原始像素依據(jù)窗口劃分分別進(jìn)入35個(gè)并行處理窗口w0~w34及35組并行參考像素緩存R0~R35(每組包括上側(cè)和左側(cè)兩部分),通過(guò)35個(gè)預(yù)測(cè)器P0~P34得到35種模式下的預(yù)測(cè)結(jié)果,利用SAD評(píng)價(jià)函數(shù)得到RDCost.單一尺度下可給出當(dāng)前尺度的最優(yōu)結(jié)果,多尺度下依據(jù)單一尺度的結(jié)果進(jìn)行疊加和修正,并采用本文2.3節(jié)提出的判決方法進(jìn)行CU決策,最終將決策結(jié)果通過(guò)AXI總線寫(xiě)回DDR.在DDR的讀寫(xiě)過(guò)程中,利用HLS工具通過(guò)高層次約束的方法實(shí)現(xiàn)高效AXI4 Master訪存接口,不再需要手工使用硬件描述語(yǔ)言實(shí)現(xiàn)DDR控制和訪問(wèn).

圖5 基于FPGA的幀內(nèi)模式判決總體結(jié)構(gòu)
為了驗(yàn)證本文架構(gòu)的有效性,基于FPGA對(duì)本文提出的架構(gòu)進(jìn)行了高層次綜合(HLS)實(shí)現(xiàn).
實(shí)驗(yàn)主要指標(biāo)及主要參數(shù)配置如下:
1)實(shí)驗(yàn)平臺(tái):采用Xilinx ZCU102板卡,該板卡搭載了xczu9eg芯片,包括可編程邏輯(Programmable Logic,PL)和處理器系統(tǒng)(Processing System,PS)兩部分.其中PL端FPGA平臺(tái)采用的時(shí)鐘頻率為200MHz;PS端ARM平臺(tái)為Cortex A53 四核處理器,主頻為1GHz,4G DDR.
2)測(cè)試軟件:標(biāo)準(zhǔn)參考模型HM的編碼質(zhì)量較好,但運(yùn)行速度與其他現(xiàn)有的開(kāi)源模型相比較慢,在實(shí)際場(chǎng)景中應(yīng)用較為困難[7,8].基于此,本文選取Kvazaar[7,8]作為基本測(cè)試軟件,同時(shí)開(kāi)啟GCC編譯器的-O3優(yōu)化,確保發(fā)揮CPU的最佳性能.
3)量化參數(shù)(Quantization Parameter,QP):分別取QP=22、27、32、37進(jìn)行實(shí)驗(yàn),然后取四種情況下的平均值進(jìn)行對(duì)比.
4)測(cè)試序列:本文采用JCT-VC提供的標(biāo)準(zhǔn)視頻測(cè)試序列,取每個(gè)視頻序列的前100幀進(jìn)行測(cè)試.
5)對(duì)比與評(píng)價(jià)方法:本文將算法分別在PS端(ARM)運(yùn)行原始的H.265幀內(nèi)預(yù)測(cè)MD算法,PL端(FPGA)運(yùn)行改進(jìn)之后的H.265幀內(nèi)預(yù)測(cè)MD算法.依據(jù)處理速度、碼率、PSNR等多方面進(jìn)行對(duì)比,同時(shí)將本文結(jié)果與其他文獻(xiàn)結(jié)果進(jìn)行對(duì)比分析.
本算法的硬件實(shí)現(xiàn)所占用的FPGA邏輯資源如表2所示,考慮到視頻幀的分辨率不同,本文的設(shè)計(jì)具備一定的伸縮性,最高可處理分辨率為1080p(即1920×1080)的視頻.
不同平臺(tái)下的處理速度對(duì)比如圖6所示,可以看出本文算法在的運(yùn)行時(shí)間較原始算法有了大幅下降.

圖6 不同平臺(tái)下的處理速度對(duì)比柱狀圖
記原始MD算法在ARM平臺(tái)上的運(yùn)行時(shí)間為T(mén)A,本文改進(jìn)后的硬件MD算法在FPGA平臺(tái)上的運(yùn)行時(shí)間為T(mén)F.
則加速比:
(10)
支持的幀率:
(11)
具體數(shù)據(jù)如表3所示.從表3可以看出,本文硬件MD算法最大可以支持1080p@29fps的幀率,達(dá)到了93.6的加速比.綜合圖6、表3可知,與軟件算法相比,硬件算法運(yùn)行時(shí)間受圖像分辨率的影響變化較小,針對(duì)不同分辨率的視頻,硬件處理速度穩(wěn)定在30ms/幀上下,軟件算法處理時(shí)間隨圖片分辨率的變大而不斷增大.

表3 硬件MD算法的加速比和支持的幀率
表4是本文與軟件加速方法的對(duì)比.僅從算法角度進(jìn)行優(yōu)化得到的速度提升不高[3,4],多核并行的方法能夠獲得更高的加速比[5-7],但是由于嵌入式平臺(tái)的運(yùn)算性能較差,這種加速方式在嵌入式平臺(tái)獲得的加速效果有限[8].本文利用FPGA進(jìn)行算法加速,在對(duì)原始算法進(jìn)行改造之后,能夠進(jìn)行細(xì)粒度的并行,可以得到更好的加速效果.

表4 本文與軟件加速方法對(duì)比

表5 本文與其他FPGA實(shí)現(xiàn)對(duì)比(Intra MD部分)
表5是本文與其他FPGA算法實(shí)現(xiàn)對(duì)比,與其他FPGA實(shí)現(xiàn)相比,本文采用了HLS的開(kāi)發(fā)方法,在算法運(yùn)行的性能上能得到與HDL開(kāi)發(fā)方法相近的指標(biāo),且HLS方法采用兼容C的模式進(jìn)行開(kāi)發(fā),開(kāi)發(fā)效率較HDL方法高,同時(shí)也便于在開(kāi)源框架上進(jìn)行算法移植和硬件并行化工作[10,11].不足之處是HLS方法的資源耗費(fèi)較HDL多,HLS工具有待于進(jìn)一步優(yōu)化.值得指出的是,為了減少邏輯資源的耗費(fèi)并提高處理速度,文獻(xiàn)[9]在MD過(guò)程中對(duì)原始圖像進(jìn)行了下采樣處理,利用差值算法減少了需要緩存和運(yùn)算的像素點(diǎn)數(shù)目.若本文采取類似的處理方法,從理論上也能夠使邏輯資源消耗得到顯著下降,同時(shí)實(shí)現(xiàn)處理速度的提升.

表6 編碼質(zhì)量對(duì)比實(shí)驗(yàn)結(jié)果
為了進(jìn)一步說(shuō)明本文算法對(duì)視頻編碼質(zhì)量的影響,本文統(tǒng)計(jì)了不同序列的相對(duì)于原始算法PSNR和Bit-Rate變化情況.表6是編碼質(zhì)量對(duì)比的實(shí)驗(yàn)結(jié)果.由實(shí)驗(yàn)結(jié)果可知,針對(duì)不同的測(cè)試序列,本文提出的并行模式判決架構(gòu)PSNR與碼率均略有下降,但總體來(lái)看,視頻編碼質(zhì)量與原始算法差異不大.
本文將H.265編碼過(guò)程中的MD算法改造為SCU MD的疊加問(wèn)題,在編碼塊內(nèi)部通過(guò)細(xì)粒度并行實(shí)現(xiàn)快速模式判決,在編碼塊之間通過(guò)窗口流水方式實(shí)現(xiàn)資源復(fù)用和快速處理,并且在FPGA上利用HLS工具進(jìn)行了硬件設(shè)計(jì)和實(shí)驗(yàn)驗(yàn)證.實(shí)驗(yàn)結(jié)果表明,在保持視頻質(zhì)量一定,碼率無(wú)較大提升的前提下,本設(shè)計(jì)在嵌入式平臺(tái)Xilinx ZCU102上最高可以達(dá)到93.6x的加速比,只帶來(lái)平均約0.71dB的質(zhì)量損失,具備一定的實(shí)際應(yīng)用價(jià)值.后期將進(jìn)行H.265其他模塊的FPGA移植和加速工作,從而形成一個(gè)完整的嵌入式視頻編碼系統(tǒng).