陳華煒,吳林煌
(福州大學 先進制造學院,福建 晉江 362200)
碼率控制作為視頻編碼中的基本技術(shù),在帶寬受限的實際通信中起著至關(guān)重要的作用,其功能是為各個粒度找到合適的量化參數(shù),使其在指定的碼率約束情況下率失真代價(Rate Distorition cost,RD cost)最小。碼率控制技術(shù)主要通過動態(tài)地調(diào)整編碼參數(shù)來實現(xiàn),涉及目標比特分配和編碼參數(shù)的計算。目標比特分配主要是依據(jù)目標碼率、幀率、緩存區(qū)占滿度以及圖像的復(fù)雜度等信息,在圖像組(Group of Pictures,GOP)、圖像(Picture)、編碼單元(Coding Unit,CU)等不同粒度分配合適的目標比特。編碼參數(shù)的計算主要是依據(jù)目標比特以及碼率控制模型的參數(shù),給當前幀或是當前編碼單元設(shè)定適當?shù)木幋a參數(shù),以使得最終的輸出碼率穩(wěn)定地維持在目標碼率。在HEVC(High Eiffciency Video Coding)[1]早期版本的參考軟件HM8.0中,碼率控制算法采用文獻[2]所提出的URQ(Unified Rate Quantization)二次模型,也被稱為Q域碼率控制,即建立比特R與量化參數(shù)(Quantized Parameter,QP)之間的二次關(guān)系;文獻[3]針對R-Q模型存在的不足,通過以拉格朗日乘子λ為紐帶建立了R-λ與λ-QP模型,并采用固定幀比例分配比特方案來獲得編碼單元的量化參數(shù);文獻[4]則利用率失真優(yōu)化理論提出自適應(yīng)動態(tài)調(diào)整幀比特分配算法改進R-λ模型碼率控制。由于λ域碼率控制算法在碼率精確度和編碼性能上都優(yōu)于Q域碼率控制算法,實現(xiàn)了0.56%的碼率精確度與1.08 dB的RD性能提升,后續(xù)該算法也被集成進HEVC參考軟件當中。
上述碼率控制算法都忽略了編碼過程中數(shù)據(jù)依賴性對碼率控制的影響。具體來說,提高一個重要幀的編碼質(zhì)量將有助于減少所有以其為參考幀的編碼幀失真。因此,在時空相關(guān)的編碼環(huán)境中,考慮最優(yōu)比特分配更有利于編碼質(zhì)量的提高。例如,針對HEVC碼率控制算法所進行的研究中,文獻[5]針對現(xiàn)有比特率模型對于視頻內(nèi)容的動態(tài)變化敏感提出一個幀級比特率模型,文獻[6]、文獻[7]、文獻[8]提出了基于視頻內(nèi)容特征的比特分配方法,都提升了率失真性能。而在H.264/AVC軟件編碼器x264[9]中,采用了宏塊樹(Macroblock-tree,MB-tree)技術(shù)來考慮宏塊(Macroblock,MB)級別的數(shù)據(jù)依賴性。該技術(shù)由x265[9]繼承,并命名為編碼單元樹(Coding Unit-tree,CU-tree)。x265作為一款高性能的軟件編碼器,在工業(yè)界有著重要地位。在x265的原有算法中,每幀都有其幀級基礎(chǔ)量化參數(shù),并通過CU-tree算法確定各個CU的量化參數(shù)偏移量。對每個CU來說,其量化參數(shù)等于幀級基礎(chǔ)量化參數(shù)與CU-tree所計算的對應(yīng)偏移量之和。文獻[10]針對CU-tree方法,提出了一種新的線性失真?zhèn)鞑ツP蛠砉烙嬀幋a時間依賴性,并引入了量化的影響來提升編碼性能。然而,x265對于其初始幀幀級量化參數(shù)PQ0的確定,卻沒有考慮任何視頻內(nèi)容特征而僅僅依據(jù)經(jīng)驗確定,后續(xù)幀級QP也僅由長期歷史幀復(fù)雜度決定。文獻[11]利用初始幀的熵與幀內(nèi)DC16×16的預(yù)測值作為復(fù)雜度衡量,與每像素比特bpp一起建立與PQ0的關(guān)系式;文獻[12]利用平均絕對誤差(Mean Absolute Difference,MAD)來擬合bpp與PQ0的關(guān)系;文獻[13]預(yù)編碼一個GOP,利用宏塊方差以及兩幀像素絕對誤差和預(yù)測圖像復(fù)雜度建立R-C-Q模型,從而獲得PQ0提升了RD性能。但這些研究或是沒有考慮編碼時域關(guān)系,或是需要在前幾幀編碼完成后才能進行,且計算復(fù)雜、運算量大,還有進一步改進的空間。
為了克服上述問題,本文充分利用前瞻模塊所得到的信息,考慮后續(xù)幀對初始幀的參考程度和初始幀梯度信息,對初始幀基礎(chǔ)PQ0進行估計;對后續(xù)P幀,利用下采樣哈達瑪變換絕對誤差和(Sum of Absolute Transformed Difference,SATD)評估當前幀復(fù)雜度,對P幀基礎(chǔ)QP進行修正。實驗結(jié)果表明,改進的算法能有效提升RD性能。
CU-tree的本質(zhì)是評估每個CU的信息量,有助于待編碼視頻幀的預(yù)測。每個CU根據(jù)CU-tree所計算的遺傳代價propagate_cost表示未來幀依賴于這個CU的程度,被初始化為0,并由CU-tree推導得出。對于每一幀,CU-tree在每個CU上執(zhí)行如下步驟。
(1)計算從當前CU繼承到其參考CU的信息分數(shù),稱為傳播分數(shù)F,例如一個CU的幀間代價cinter只有幀內(nèi)代價cintra的80%,說明幀間預(yù)測節(jié)省了20%的編碼消耗,則該CU的信息有20%來自幀間預(yù)測,定義如下:
式中:cinter和cintra分別為幀內(nèi)模式和幀間模式的SATD代價之和。如果cinter遠大于cintra,F(xiàn)設(shè)為0。
(2)該CU依賴于其參考CU的信息總量稱為傳播量A:
式中:cpre為該CU提供給后續(xù)幀的信息。
(3)由于參考CU不一定位于CU的網(wǎng)格上,因此參考系中多個參考CU的傳播代價根據(jù)重疊區(qū)域累積:
式中:aoverlap/acu為參考部分所占一個完整CU的面積比。
(4)在幀的所有CU完成上述信息反向傳播的計算后,參考幀中的CUs的量化偏移量計算如下:
式中:s是一個由實驗得出的常數(shù)。
x265中定義了幀級的基本量化尺度:
原算法的缺點來自于對初始幀量化參數(shù)的計算。對于初始幀,C0表示為
式中:t表示一個與視頻序列分辨率有關(guān)的常數(shù)(當分辨率大于720p時,t=2.5;否則t=1),R0則為每幀平均比特。因此對于初始幀而言,其基礎(chǔ)量化參數(shù)值的確定只與當前視頻序列的分辨率、目標比特(即每像素比特bpp)有關(guān)。當視頻序列的bpp相同時,不同視頻序列初始幀的基礎(chǔ)量化參數(shù)PQ0將會得到相同的值。顯然,最佳的PQ0不應(yīng)只考慮bpp的因素,還應(yīng)考慮到視頻內(nèi)容的影響,內(nèi)容包括時域以及空域。
關(guān)于bpp與PQ0的關(guān)系,已有許多文獻進行研究,本文根據(jù)文獻[12]中的方法進行分析,得出bpp與PQ0的關(guān)系如下式:
式中:參數(shù)集{a1,a2,a3,a4,b1,b2,b3}以“Basketballpass”作為基準序列的取值為{403,-131.3,-29.95,15.02,36.86,31,23.03,-0.055 67,2.089,-16.86}。
對于運動平緩、背景相對固定的場景來說,初始幀作為后續(xù)幀的參考,應(yīng)該具有良好的編碼質(zhì)量,因此它需要被賦予更多的比特、更小的PQ0;而對于運動劇烈、背景變換頻繁的場景,后續(xù)幀對初始幀的參考程度減弱,應(yīng)該賦予初始幀較少的比特以及較大的PQ0,使得后續(xù)幀有足夠的編碼比特和穩(wěn)定的編碼質(zhì)量。同時,初始幀本身的視頻內(nèi)容特征也對PQ0尤為重要,對初始幀信息豐富的應(yīng)賦予較多比特、較小PQ0;對信息較少的應(yīng)賦予較少比特、較大PQ0。因此,一個視頻序列的空時域內(nèi)容特征會影響到PQ0的選擇。
空域方面,通過實驗比較熵、Intra-16×16 DC預(yù)測的值以及圖像梯度三者作為衡量圖像復(fù)雜度方法的有效性,發(fā)現(xiàn)基于梯度的方法不僅具有更好的區(qū)分能力,而且具有計算復(fù)雜度低的特點[14]。因此,本文選擇圖像梯度作為衡量視頻序列初始幀空域內(nèi)容特征的方法,梯度值G的計算公式如下:
式中:I(i,j)表示圖像(i,j)位置處像素的亮度值,w與h分別表示視頻序列一幀圖像的寬度與高度。
時域方面,CU-tree模塊中,CU塊的質(zhì)量取決于它在未來幀中被引用的程度。如果一個CU塊很快就發(fā)生遮擋、移動等情況,那么CU-tree算法將降低其質(zhì)量。因此,CU塊的遺傳代價能夠很好地反映該CU相對于后續(xù)CU的參考程度,且不引入額外計算復(fù)雜度,計算簡便。
因此,可以通過計算初始幀每個子塊CU的遺傳代價值之和來統(tǒng)計出初始幀的遺傳代價,根據(jù)該遺傳代價進行時域復(fù)雜度估計,以提高視頻編碼質(zhì)量。初始幀的遺傳代價定義為
式中:PCU_n表示CU-tree中所計算的第n個CU的遺傳代價,由式(3)可得,n表示每幀具有的8×8CU塊數(shù)量,w與h分別表示視頻序列一幀圖像的寬度與高度。
結(jié)合2.2節(jié)的分析,本文提出一種新型的利用x265中前瞻模塊內(nèi)容確定視頻時空內(nèi)容特征計算方法。計算公式如下:
式中:α為加權(quán)系數(shù),其取值大于0并小于1。為了確定α的取值,本文對多個測試序列進行實驗,統(tǒng)計了不同α取值對R-D性能、碼率控制精度以及擬合最佳PQ0程度的影響,最后將α的值定為0.5。
對于任意一個測試序列以不同比特率進行編碼,PQ0是bpp與時空內(nèi)容特征共同影響的結(jié)果,最終的最佳PQ0確定為
其中參數(shù)集 {c1,c2,c3}以“Basketballpass”作為基準序列取值為{-0.055 67,2.089,-16.86}。
為了避免某些極端情況下初始幀量化參數(shù)修正過多的問題,對PQ0作進一步的限定。PQ0的上限也不能超過HEVC標準規(guī)定的最大值51,下限不能過低,否則容易造成緩沖區(qū)溢出現(xiàn)象。故PQ0限定為
在x265編碼器中,幀級Qscale的定義如式(5)所示。由于(后續(xù)用Cplxr表示)是歷史所有編碼圖像累積復(fù)雜度,并沒有考慮到當前幀的圖像復(fù)雜度。因此隨著編碼增加,幀級Qscale對最近的幀復(fù)雜度變化愈發(fā)不敏感。故對于幀級的QP確定,應(yīng)該同時考慮歷史幀的長期影響以及當前幀的短期影響。
對于一幀圖像,在x265編碼的前瞻階段便能夠獲得當前幀下采樣SATD值,而當前幀的圖像復(fù)雜度Cplxr只能在編碼完畢后獲得。考慮下采樣SATD值與當前幀Cplxr關(guān)系,如圖1所示,SATD與Cplxr具有相同的變化趨勢。
圖1 KristenAndSara序列SATD與Cplxr值
因此,用式(15)來擬合SATD與Cplxr的關(guān)系:
利用當前幀的預(yù)估Cplxrn來計算當前P幀的短期,公式為
當前P幀的幀級基礎(chǔ)Qscale,即要編碼的第n幀圖像,結(jié)合了長期(5)與短期(17)的影響,其表述為
對于B幀,其定義與原始的x265算法相同,由P幀以及ΔPQBP確定。
本文所提出的碼率控制算法在x265編碼器2.8版本平臺上實現(xiàn),以驗證算法的性能。測試選取了14個HEVC標準測試序列,其目標碼率設(shè)置如表1所示,以medium作為測試預(yù)設(shè)檔次,開啟CU-tree模塊,每個測試序列編碼100幀。以峰值信噪比(Peak Signal to Noise Ratio,PSNR)和結(jié)構(gòu)相似度(Structural Similarity,SSIM)作為率失真性能評價標準。為了更加綜合地比對所提出算法的性能,在同平臺同配置情況下,與x265中原有的ABR+VBV算法進行了性能對比。其中,ABR模式指平均比特率(Average Bit Rate,ABR),VBV模式指視頻緩沖檢驗器(Video Buffer Verifier,VBV),用來進一步調(diào)節(jié)QP。
表1 測試序列及目標碼率設(shè)置
碼率控制的目標是使在視頻編碼輸出后的實際碼率近似等于目標碼率,并且使得編碼視頻失真最小。因此,輸出碼率的準確性是衡量碼率控制算法性能的一個重要指標。定義碼率相對誤差的公式為
式中:Rreal是編碼后輸出的實際碼率,Rtarget是設(shè)置的目標碼率。
從表2可以看出,在以表1為標準設(shè)定目標碼率之后,本文所提出的碼率控制算法碼率平均誤差為3.13%,x265軟件ABR+VBV模式下碼率平均誤差為3.10%,本文所提算法與原有算法的碼率控制精度幾乎一致,說明所提算法能夠準確地滿足所給出的目標比特約束。
表2 碼率相對誤差比較
RD性能也是一個衡量視頻編碼系統(tǒng)的重要指標。BD-rate表示在相同的編碼質(zhì)量情況下,對比方法相對于原方法節(jié)省的比特百分比。本文算法與x265編碼器中原有的“ABR+VBV”模式下的率失真RD性能比較如表3所示,在比較率失真性能時同時采用峰值信噪比(PSNR)與結(jié)構(gòu)相似度(SSIM)作為指標。可以看到,相對于原始算法,以PSNR為指標,BD-rate平均減少了14.33%;以SSIM為指標,BD-rate平均減少了16.22%,說明本文算法的率失真性能要優(yōu)于原有算法。這是因為初始幀量化參數(shù)的選取在碼率控制中起到了重要作用,如果選取過小,會導致對初始幀分配過量比特,使得后續(xù)編碼比特不足影響編碼質(zhì)量;如果選取過大,會導致初始幀的編碼質(zhì)量降低,并且由于失真?zhèn)鬟f,初始幀編碼質(zhì)量會嚴重影響到后續(xù)編碼幀,從而導致整體質(zhì)量下降。因此,對初始幀進行基礎(chǔ)量化參數(shù)的確定,能夠有效提升視頻圖像質(zhì)量,如分辨率為720p的Class E測試序列皆為運動緩慢且具有單調(diào)背景的序列,初始幀量化參數(shù)的選擇對該場景尤為重要,其以PSNR為指標的BD-rate平均減少26.58%,比SSIM為指標的BD-rate平均減少22.80%,效果顯著。
表3 BD-rate性能比較
圖2—圖5分別為測試序列BQTerrace和測試序列KristenAndSara的BD-rate(SSIM)與BD-rate(PSNR)率失真性能曲線圖。從圖中可以明顯看出,應(yīng)用本文所提算法之后,率失真性能要優(yōu)于x265原有算法。
圖2 BQTerrace序列SSIM性能
圖3 BQTerrace測試序列PSNR性能
圖5 KirstenAndSara序列PSNR性能
圖4 KirstenAndSara序列SSIM性能
圖6—圖9為主觀質(zhì)量對比圖。在每個子圖中,左側(cè)的圖片是由本文所提出算法所進行編碼的視頻序列圖片,右側(cè)是采用原始x265所進行編碼的視頻序列圖片。相比于x265,經(jīng)過本文算法編碼的視頻保留了更多細節(jié)。如圖6為BasketballPass序列第11解碼幀,目標比特率256 kb·s-1。右側(cè)原始算法所展現(xiàn)的圖片中,背景以及人物都出現(xiàn)了一定程度的模糊,而左側(cè)采用所提算法之后,背景與人物的主觀效果都要優(yōu)于右側(cè)圖片。
圖6 256 kb·s-1的 BasketballPass序列
圖7 384 kb·s-1的 BasketballDrill序列
圖8 512 kb·s-1的 Johnny 序列
圖9 2 000 kb·s-1的 BQTerrace 序列
對于圖8的Johnny序列,可以觀察到,對于人們所更加關(guān)注的人臉部分,右側(cè)圖片略有一點模糊,而左側(cè)圖片更好地保留了原有的細節(jié),體現(xiàn)了人臉的特征。另外,由于本文的P幀基礎(chǔ)QP算法考慮了短期影響,能夠更好地響應(yīng)當前幀復(fù)雜度變化,也得到了一定程度的PSNR增益。例如,圖7BasketballDrill序列的解碼第94幀,左側(cè)PSNR值為32.07 dB,右側(cè)為31.10 dB,獲得了0.97 dB的PSNR增益。
為了進一步提升x265中碼率控制的性能,本文首先回顧了x265中的CU-tree算法與幀基礎(chǔ)QP確定算法,之后通過前瞻模塊中的CU-tree考慮各個CU塊的遺傳代價作為時域特征,考慮梯度作為空域特征,與每像素比特共同確定初始幀基礎(chǔ)QP。此外,通過前瞻模塊所計算的下采樣SATD值,推導出當前幀圖像復(fù)雜度值,計算當前幀對編碼的短期影響,與歷史幀復(fù)雜度一起確定P幀基礎(chǔ)QP。在默認預(yù)設(shè)條件下,相比于x265中原有的“ABR+VBV”模式碼率控制算法,提出的算法率失真性能BD-rate(PSNR)與BD-rate(SSIM)分別降低了14.33%與16.22%,而比特率相對誤差幾乎沒有變化,有效提升了編碼質(zhì)量,并能很好地適應(yīng)不同特性的視頻序列。