熊啟金,丁永強(qiáng),林志堅
(福州大學(xué) 物理與信息工程學(xué)院,福建 福州 350108)
隨著信息技術(shù)的發(fā)展,視頻行業(yè)正在從高清向超高清時代轉(zhuǎn)變。為了滿足在有限的帶寬下傳輸更高質(zhì)量的視頻數(shù)據(jù),視頻編碼聯(lián)合組提出了新一代高效視頻編碼(High Efficiency Video Coding,HEVC)標(biāo)準(zhǔn)。與上一代視頻編碼標(biāo)準(zhǔn)(Advanced Video Coding,AVC)相比,HEVC采用更加靈活的四叉樹塊劃分結(jié)構(gòu)[1]和豐富的幀內(nèi)預(yù)測模式[2],在保證相同視頻質(zhì)量條件下,碼率可節(jié)省50%,但計算復(fù)雜度也成倍增加[3],不利于編碼器的硬件實現(xiàn)。
幀內(nèi)預(yù)測利用相鄰像素之間的關(guān)系消除圖像空域上的冗余[4],是HEVC的重要環(huán)節(jié)之一,其硬件實現(xiàn)成為研究人員關(guān)注的熱點。文獻(xiàn)[5]提出一種基于殘差哈達(dá)瑪變換和頭比特代價補償?shù)膸瑑?nèi)預(yù)測模式?jīng)Q策算法,簡化了幀內(nèi)預(yù)測率失真優(yōu)化硬件實現(xiàn)的預(yù)處理過程,但沒有考慮粗選代價對預(yù)測塊劃分決策的影響;文獻(xiàn)[6]提出一種簡化的預(yù)測模式和塊劃分決策,在一定程度上簡化了幀內(nèi)預(yù)測率失真過程,但沒有突破幀內(nèi)預(yù)測對重構(gòu)數(shù)據(jù)的依賴性,無法對整個硬件回路進(jìn)行全流水線設(shè)計;文獻(xiàn)[7]提出一種9路預(yù)測模式并行的硬件架構(gòu),但其并行模式?jīng)]有充分利用預(yù)測電路的并行性,導(dǎo)致電路利用率不高;文獻(xiàn)[8]提出一種對64×64和32×32預(yù)測單元進(jìn)行下采樣成16×16大小進(jìn)行預(yù)測計算,在一定程度上縮小了電路面積,但下采樣方式的準(zhǔn)確度不高,且該方法使用較多的時鐘周期,無法實現(xiàn)實時的超高清視頻編碼。
為了能夠在更小的電路面積下實現(xiàn)更高分辨率和幀率的實時視頻編碼,本文提出了一種幀內(nèi)預(yù)測模式高度并行的全流水硬件架構(gòu)設(shè)計,具體工作如下:① 在模式?jīng)Q策時,采用經(jīng)哈達(dá)瑪變換后的絕對誤差和(Sum of Absolute Transformed Difference,SATD)與預(yù)測模式編碼的碼率之和作為幀內(nèi)率失真代價,從而打破了幀內(nèi)預(yù)測對重構(gòu)數(shù)據(jù)的依賴,為硬件實現(xiàn)全流水電路設(shè)計提供了條件。② 在編碼單元(Coding Uint,CU)層間劃分決策時,采用代價補償?shù)姆绞綄ψ訅K的代價進(jìn)行補償,解決由于粗選代價導(dǎo)致CU層間劃分不合理的情況。③ 在硬件架構(gòu)上,提出基于4×4基本塊的18路預(yù)測模式并行的全流水硬件電路,在節(jié)省硬件資源的同時,充分利用電路的復(fù)用性,極大提高了數(shù)據(jù)吞吐率。
在HEVC標(biāo)準(zhǔn)測試模型(HEVC Test Model,HM)中[9],幀內(nèi)模式?jīng)Q策會經(jīng)過預(yù)測模式粗選和細(xì)選兩個階段[10]。在模式粗選過程中,首先將基于殘差的SATD值從35種預(yù)測模式中得到若干個最佳預(yù)測模式并放入侯選模式列表中;然后參考上方和左側(cè)預(yù)測單元(Prediction Unit,PU)的最佳預(yù)測模式生成當(dāng)前PU最可能的模式列表(Most Probable Mode,MPM),并將其添加到侯選模式列表中。在細(xì)選階段,將粗選過程中得到的侯選模式列表中若干個模式采用碼率失真優(yōu)化(Rate Distortion Optimization,RDO)計算得到率失真代價(Rate Distortion cost,RDcost)并決策出最佳預(yù)測模式,RDcost計算公式如下:
(1)
式中:J表示RDcost的值,D表示重構(gòu)像素與原始像素之間的失真情況,由原始像素和重構(gòu)像素之間的平方誤差和(Sum of Squared Difference,SSD)得到,R表示當(dāng)前模式編碼后的碼流比特率,λ為拉格朗日常數(shù),用以平衡圖像失真情況和碼率的比重,與量化參數(shù)(Quantizer Parameter,QP)相關(guān),Oorig為原始像素值,Rreco為重構(gòu)像素值,| |表示取絕對值。
RDO過程是幀內(nèi)預(yù)測最復(fù)雜的部分[11-12],其過程如圖1所示。幀內(nèi)預(yù)測的失真情況需要經(jīng)過預(yù)測、變換量化、反變換反量化后,通過對原始像素和重構(gòu)像素求SSD值得到。幀內(nèi)預(yù)測的碼率需要經(jīng)過預(yù)測、變換量化、熵編碼等完整的編碼過程[13]后得到。最后通過對二者求和,才能得到最終RDcost。
圖1 HM幀內(nèi)預(yù)測RDcost計算過程Fig.1 Calculation process of HM intra prediction RDcost
由圖1可知,HM提供的RDO算法進(jìn)行代價計算將會消耗大量的硬件資源且無法滿足幀率較高的實時編碼需求。為了降低RDO的計算復(fù)雜度,文獻(xiàn)[14]采用殘差的絕對誤差和(Sum of Absolute Difference,SAD)估算RDcost,但是SAD僅能反映殘差時域的信息,雖然可以降低計算復(fù)雜度,但會導(dǎo)致編碼器性能的明顯下降。文獻(xiàn)[15]采用殘差的SATD值估算RDcost,盡管SATD值能夠反應(yīng)殘差在頻域的信息,且性能接近于離散余弦變換后的殘差值,但是忽略了幀內(nèi)預(yù)測編碼后的頭信息碼率。HEVC在編碼時,對于預(yù)測模式屬于MPM列表中的模式,編碼其在MPM列表中的索引號,而對于不在MPM列表中的模式則采用5 bit固定碼長的語法元素進(jìn)行編碼。為打破幀內(nèi)RDO對重構(gòu)數(shù)據(jù)的依賴,降低硬件設(shè)計的復(fù)雜度,并保持一定的性能,本文采用殘差的SATD和模式號的編碼比特數(shù)來估算幀內(nèi)預(yù)測的RDcost,以簡化幀內(nèi)預(yù)測的率失真優(yōu)化過程,其計算過程如圖2所示。
圖2 本文幀內(nèi)預(yù)測RDcost計算過程Fig.2 Decision process of this paper RDcost partition
考慮到幀內(nèi)預(yù)測的碼率信息不僅僅包含預(yù)測模式,還涉及劃分方式、量化系數(shù)等頭信息,故為了平衡SATD與碼率的比重,通過對不同權(quán)重的拉格朗日系數(shù)進(jìn)行實驗統(tǒng)計分析,根據(jù)性能測試結(jié)果,提出采用3.5×sqrt(λmode)作為拉格朗日系數(shù)。考慮到浮點數(shù)不利于硬件實現(xiàn),對碼率值進(jìn)行向下取整,最終得到本文的RDcost算法模型,其計算公式如下:
(2)
在編碼結(jié)構(gòu)層面,HEVC采用更加靈活的四叉樹塊編碼劃分結(jié)構(gòu),編碼樹單元可根據(jù)四叉樹向下劃分成64×64~8×8四個層次的CU。對于幀內(nèi)預(yù)測中CU又可根據(jù)N×N和2N×2N的方式向下劃分成PU。對于CU層間劃分決策,HM采用了自下而上,迭代處理的計算方式。如圖3所示,首先計算出4個子塊最佳模式的率失真代價之和并與其父塊最佳模式的率失真代價進(jìn)行比較,選擇小的代價作為當(dāng)前CU的代價,并確認(rèn)當(dāng)前CU的劃分方式。然后依次向上迭代,最終獲取當(dāng)前編碼樹單元中所有CU的最佳劃分方式和對應(yīng)的最佳預(yù)測模式。
圖3 CU塊劃分決策過程Fig.3 Decision process of CU partition
對于CU的層間決策,為了簡化硬件實現(xiàn)的復(fù)雜度,現(xiàn)有的方案均直接采用粗選代價直接作為CU層間決策的代價。文獻(xiàn)[8]采用殘差的SATD值與頭比特估計值之和的粗選代價作為CU層間決策的代價,其CU層間劃分結(jié)果如圖4(a)所示。相較于基于標(biāo)準(zhǔn)測試模型HM16.7的CU層間劃分結(jié)果,如圖4(b)所示,其4×4和8×8的塊相對較多。
(a) 粗選代價
(b) HM16.7
(c) 代價補償圖4 不同代價下的CU劃分結(jié)果Fig.4 Results of CU partition at different costs
這是由于圖像中存在相對不平坦的區(qū)域,使用較小的預(yù)測塊進(jìn)行預(yù)測時,預(yù)測值和原始像素的接近程度越高,殘差的SATD值越小,從而在此區(qū)域中決策出較多的小塊。若圖像存在較多的小塊,則會對編碼器后續(xù)的重構(gòu)和熵編碼模塊造成巨大的負(fù)擔(dān),從而影響硬件編碼器的速度。
基于以上考慮,本文統(tǒng)計了常用QP下不同尺寸CU不向下劃分的概率,如表1所示。其中8×8 CU表示的是劃分為2N×2N模式PU的概率。為了CU劃分更加合理且易于硬件實現(xiàn),本文在CU層間決策時,對子塊的代價和添加一個補償值,然后再與父塊的代價進(jìn)行比較,從而增加劃分大塊的概率。對于補償值的研究,本文通過統(tǒng)計常用QP下各尺寸CU下子塊的代價之和與父塊的代價差距分布,以表1中各尺寸CU下向下劃分的概率為基準(zhǔn),提出表2所示的各尺寸CU子塊對應(yīng)的補償值。經(jīng)測試,添加補償值后圖像CU層間劃分結(jié)果如圖4(c)所示,可見在采用本文所提對粗選代價進(jìn)行補償?shù)姆绞较?圖像CU層間劃分結(jié)果明顯好于粗選代價直接劃分,且接近于HM劃分情況。
表1 不同尺寸CU不向下劃分概率Tab.1 Probability of CU with different sizes not partition downwards under
表2 不同尺寸CU的代價補償值Tab.2 Cost compensation value of different size CU
如表3所示,針對不同類型的測試序列,基于標(biāo)準(zhǔn)測試模型HM16.7對本文所提優(yōu)化算法性能進(jìn)行測試。由表3可以看出,本文算法在同等碼率下的視頻質(zhì)量指標(biāo)BD-PSNR的損失僅為-0.343 5 dB,編碼性能指標(biāo)BD-rate對比HM16.7也僅增加5.91%,說明本文算法對編碼器性能的影響不大,可用于硬件設(shè)計上的實現(xiàn)。
表3 本文算法的編碼性能Tab.3 Coding performance of the algorithm in this paper
如圖5所示,HEVC幀內(nèi)預(yù)測定義了35種預(yù)測模式,包含直流模式,平面模式和角度模式。角度模式中將模式2~17作為水平預(yù)測模式,19~34作為垂直預(yù)測模式。水平模式采用左側(cè)參考像素作為主參考像素,垂直模式采用上方參考像素作為主參考像素。對于預(yù)測電路的設(shè)計,傳統(tǒng)方案均采用預(yù)測模式并行的方式來提高吞吐率,文獻(xiàn)[5]采用4路預(yù)測模式并行的方式,但其數(shù)據(jù)吞吐率低,無法滿足高幀率高分辨率的視頻實時編碼需求。由圖5可知,水平模式和垂直模式關(guān)于模式18對稱,在預(yù)測過程中,預(yù)測點的權(quán)值和參考像素在主參考像素列表中的位置完全一樣。因此,參考像素濾波模塊只需要按照水平預(yù)測模式和垂直預(yù)測模式對濾波后的參考像素進(jìn)行整理,對稱的預(yù)測模式可以采用同一個預(yù)測電路進(jìn)行預(yù)測。
圖5 幀內(nèi)35種預(yù)測模式Fig.5 35 prediction modes of intra
為提高幀內(nèi)預(yù)測的精度和效率,HEVC采用一維3抽頭低通濾波器對不同尺寸不同模式下的預(yù)測塊選擇性地進(jìn)行平滑濾波處理。本文對不同預(yù)測模式下需要進(jìn)行濾波的尺寸進(jìn)行了歸納統(tǒng)計,如表4所示。
表4 不同模式下需要濾波的PU大小Tab.4 Filtering PU size required for different modes
從表4可以看到,在不同模式下,需要濾波的預(yù)測單元尺寸呈現(xiàn)一定的規(guī)律性。本文充分利用此特性,從濾波電路復(fù)用的角度,提出如表5所示的18路預(yù)測模式并行的方案進(jìn)行預(yù)測電路的設(shè)計,充分發(fā)揮預(yù)測電路的復(fù)用性,提高電路的數(shù)據(jù)吞吐率。按照本文預(yù)測模式并行的設(shè)計方案,在第1路預(yù)測模式中,只有模式1在非4×4 PU下需要濾波,其余情況不需要濾波。第2路預(yù)測模式不需要濾波,第3~4路非4×4 PU下需要濾波,第5~16路16×16及以上PU需要濾波,第17~18路只有32×32及以上PU需要濾波。因此,在濾波后的參考像素中只需分成五類進(jìn)行整理,并按照垂直和水平模式的不同將最終的參考像素分為主副參考像素輸入到預(yù)測電路中,每個批次就可以使用相同的預(yù)測電路。此方案可以充分發(fā)揮電路的復(fù)用性,在節(jié)省電路面積的同時提高數(shù)據(jù)吞吐率。
表5 18路預(yù)測模式并行方案Tab.5 18-path predictive mode parallel scheme
對于不同尺寸的PU,傳統(tǒng)硬件架構(gòu)通常單獨使用一個電路。如文獻(xiàn)[14]提出4種不同尺寸的PU并行預(yù)測,雖然在一定程度上提高了運行速度,但是占用了大量的硬件資源。因此,本文提出基于4×4基本塊復(fù)用的18路預(yù)測模式全并行流水的硬件架構(gòu),將CTU按Z掃描順序劃分成256個4×4的基本塊,依次對不同尺寸的預(yù)測單元流水處理,充分利用了電路的復(fù)用性。本文所設(shè)計的硬件架構(gòu)如圖6所示。
主要包括參考像素獲取電路、參考像素濾波電路、預(yù)測電路、殘差計算電路、哈達(dá)瑪變換電路等。其中參考像素獲取電路采用原始像素作為輸入,根據(jù)4×4基本塊的位置和PU尺寸的大小獲取當(dāng)前PU上方和左側(cè)參考像素。參考像素濾波電路分為強(qiáng)濾波電路和常規(guī)濾波電路,二者同時對輸入的參考像素進(jìn)行濾波處理后輸入到參考像素整理電路。參考像素整理電路對濾波后的參考像素和未濾波的參考像素按照并行預(yù)測模式的需要進(jìn)行分類整理,并按照垂直模式和水平模式的不同,將最終的參考像素整理成主參考像素和副參考像素輸入到并行預(yù)測電路。預(yù)測電路根據(jù)輸入的參考像素完成預(yù)測并和原始像素求差得到4×4基本塊的殘差值輸入到哈達(dá)瑪變換模塊。哈達(dá)瑪變換模塊按照PU塊的尺寸不同,對變換后的值進(jìn)行累加得到當(dāng)前PU最終的SATD值。碼率值獲取電路是按照本文幀內(nèi)模式?jīng)Q策的算法根據(jù)QP的不同提前將碼率值計算好并存儲在只讀存儲器中,使用過程中采用查表的方式進(jìn)行讀取,以此簡化硬件實現(xiàn)復(fù)雜度。
本文硬件架構(gòu)采用高度并行的全流水線設(shè)計,電路開始工作時,第一個時鐘開始對當(dāng)前CU層編碼樹單元編號為0的基本塊第一批預(yù)測模式處理,第二個時鐘對其第二批預(yù)測模式處理,第三個時鐘對編號為1的基本塊第一批預(yù)測模式處理,依次類推,整個電路處于流水工作的過程,完成當(dāng)前PU層編碼樹單元的256個基本塊35種預(yù)測模式的計算后會繼續(xù)計算下一個PU層的編碼樹單元,直至完成當(dāng)前編碼樹單元5層預(yù)測單元的遍歷計算。為了提高硬件的處理速度,對于64×64的預(yù)測單元,本文采用32×32預(yù)測單元的數(shù)據(jù)進(jìn)行復(fù)用,以減少編碼時間。本文硬件架構(gòu)每個時鐘周期可同時處理一個4×4基本塊的18個預(yù)測模式計算,數(shù)據(jù)吞吐率可達(dá)288個像素每時鐘周期,理論上完成一個編碼樹單元從64×64至4×4預(yù)測單元的遍歷計算只需2 082個時鐘周期。
在Xilinx Virtex-7系列型號為xc7vx485tffg1761-3 FPGA實驗平臺上對本文硬件架構(gòu)進(jìn)行綜合實現(xiàn),綜合結(jié)果表明,本文架構(gòu)使用的硬件資源為99 k查找表和57 k的寄存器,最高主頻可達(dá)219 MHz,最大可實現(xiàn)1080P@210FPS或4K@52FPS全I(xiàn)幀模式下的視頻實時編碼,支持幀內(nèi)35種預(yù)測模式和所有預(yù)測塊尺寸。本文硬件架構(gòu)與已有的設(shè)計方案對比結(jié)果如表6所示,文獻(xiàn)[16]提出了一種全流水的幀內(nèi)預(yù)測硬件架構(gòu),雖然在1080P和4K視頻的實時編碼幀率上與本文一致,但是其所消耗的LUT資源是本文的兩倍以上,寄存器資源接近4倍,且其方案僅支持32×32~4×4大小的PU,不支持64×64的PU。文獻(xiàn)[17]在幀內(nèi)模式?jīng)Q策代價計算時考慮了變換量化和熵編碼過程,其性能優(yōu)于本文算法1.52%,但其所消耗的硬件資源是本文的兩倍,且最大只支持1080P@45FPS的實時視頻編碼,不適用于高分辨率高幀率的應(yīng)用場景。文獻(xiàn)[18]雖然所消耗的硬件資源較低,但實時的編碼幀率僅為1080P@60FPS,遠(yuǎn)低于本文架構(gòu)。文獻(xiàn)[19]采用殘差的SATD值作為幀內(nèi)模式?jīng)Q策的代價,但并沒考慮幀內(nèi)預(yù)測模式頭信息編碼比特率的影響,雖然降低了硬件實現(xiàn)的復(fù)雜度,但其編碼性能指標(biāo)BD-rate損失較大,高于本文算法6.75%,且僅支持1080P@30FPS的視頻實時編碼。
表6 硬件綜合結(jié)果對比Tab.6 Hardware synthesis results and comparison
面對HEVC幀內(nèi)預(yù)測硬件實現(xiàn)的高復(fù)雜度特性,本文在保證一定性能的前提下,面向硬件對幀內(nèi)預(yù)測算法進(jìn)行優(yōu)化,打破了幀內(nèi)預(yù)測過程中對重構(gòu)數(shù)據(jù)的依賴,降低了硬件實現(xiàn)的復(fù)雜度。在硬件架構(gòu)設(shè)計上,基于本文所提優(yōu)化算法,設(shè)計出采用基于4×4基本塊復(fù)用的18路預(yù)測模式并行全流水硬件架構(gòu),數(shù)據(jù)吞吐率可達(dá)每時鐘周期處理288個像素,最高可實現(xiàn)4K@52FPS的實時視頻編碼。實驗結(jié)果表明,本文方案綜合性能優(yōu)于其他已有方案。