孟翔,殷海兵,黃曉峰
(杭州電子科技大學(xué)通信工程學(xué)院,浙江 杭州 310018)
隨著各種對(duì)高清視頻的需求,JCT-VC 提出了新一代高效視頻編碼(HEVC)標(biāo)準(zhǔn)[1],其采用高級(jí)編碼工具,包括基于四叉樹的編碼單元(coding unit,CU)、變換單元(transform unit,TU)以及預(yù)測(cè)單元(prediction unit,PU)。與H.264[2]相比,在相同圖像質(zhì)量情況下,HEVC 可以節(jié)省高達(dá)50%的比特率。
CU/PU/TU 的組合方案可以大大提高編碼效率,但是基于率失真優(yōu)化(rate distortion optimization,RDO)[3]的模式?jīng)Q策都需要為大量候選模式進(jìn)行RDO 成本計(jì)算,其中涉及前向變換、量化、逆量化、逆變換和熵編碼,這會(huì)造成極大的計(jì)算復(fù)雜度,阻礙了有效并行技術(shù),導(dǎo)致硬件實(shí)現(xiàn)效率降低。
一些學(xué)者針對(duì)如何減少碼率和失真的計(jì)算復(fù)雜度問題展開研究,Zhao 等[4]提出廣義高斯分布模型來估計(jì)碼率,使用在量化中丟掉的比特來估計(jì)失真;Tu 等[5]和Wang 等[6]采用量化系數(shù)之和與其對(duì)應(yīng)系數(shù)坐標(biāo)來估計(jì)碼率;Liu等[7]提出一種基于二元分類的線性模型來估計(jì)碼率。Sun 等[8]嘗試簡(jiǎn)化RDO 過程,使用變換系數(shù)來估計(jì)碼率和失真,Chen 等[9]和Sharabayko等[10]采用信息熵來估計(jì)碼率??紤]到硬件資源,一些學(xué)者提出了有利于硬件實(shí)現(xiàn)的快速RDO 算法[11-14],雖然節(jié)省了大量的硬件資源,但是算法過于簡(jiǎn)單造成了嚴(yán)重的性能損失?,F(xiàn)有工作并未充分探索熵編碼特性,這會(huì)導(dǎo)致壓縮質(zhì)量顯著下降[15]。
本文的主要貢獻(xiàn)如下:對(duì)每個(gè)語法元素進(jìn)行碼率分析,并根據(jù)結(jié)果建立碼率模型;提出一種加權(quán)量化系數(shù),能夠較好地反映碼率信息;采用建模的方式估計(jì)頭信息碼率;從變換域建模估計(jì)失真,避免多余的重構(gòu)過程;避免了上下文概率狀態(tài)的實(shí)時(shí)更新,有利于硬件實(shí)現(xiàn)。
HEVC 原始的碼率與失真計(jì)算流程如圖1 所示,其中熵編碼技術(shù)會(huì)涉及上下文狀態(tài)的實(shí)時(shí)更新,系數(shù)之間產(chǎn)生較強(qiáng)的依賴性,這不利于硬件并發(fā)的實(shí)現(xiàn)并會(huì)產(chǎn)生很大的編碼復(fù)雜度,失真計(jì)算會(huì)經(jīng)過冗長(zhǎng)的重構(gòu)過程,進(jìn)一步加劇了編碼的復(fù)雜性。
圖1 HEVC 原始碼率失真計(jì)算流程
為了簡(jiǎn)化編碼的復(fù)雜度,采用碼率與失真預(yù)估的方式來替代原有的計(jì)算過程。引入碼率失真算法后的計(jì)算過程如圖2 所示,可以看出碼率失真預(yù)估算法大大簡(jiǎn)化了原始HEVC 算法的流程,同時(shí)避免了上下文概率狀態(tài)的實(shí)時(shí)更新和冗長(zhǎng)的重構(gòu)過程,更有利于硬件并發(fā)與流水線技術(shù)的實(shí)施。
圖2 引入碼率失真算法后的計(jì)算過程
在RDO 過程中,碼率一般由兩部分組成:
其中,Rhead表示編碼頭信息所需碼率,Rres代表編碼量化系數(shù)所需碼率。在編碼量化系數(shù)時(shí),需要編碼多個(gè)語法元素。
首先,變換單元會(huì)被分為若干個(gè)4×4 大小的系數(shù)塊組(coefficient group,CG),按反向掃描順序首先掃描到的非零系數(shù)為最后一個(gè)非零系數(shù)位置(last coefficient position,LCP),編碼器需要對(duì)LCP 信息進(jìn)行編碼,然后對(duì)每個(gè)CG 進(jìn)行判斷,代碼子塊標(biāo)志(code sub block flag,CSBF)表示該 CG 內(nèi)是否存在非零系數(shù),有效系數(shù)標(biāo)志(significant coefficient flag,SCF)表示當(dāng)前系數(shù)是否非零,系數(shù)符號(hào)標(biāo)志(coefficient sign flag,CSF)表示當(dāng)前系數(shù)是否為正,前8 個(gè)非零系數(shù)中,系數(shù)大于1(greater than 1,G1)表示當(dāng)前系數(shù)絕對(duì)值是否大于1,對(duì)于第一個(gè)大于1 的系數(shù),系數(shù)大于2(greater than 2,G2)表示該系數(shù)絕對(duì)值是否大于2,最后系數(shù)剩余部分(remaining,RM)會(huì)被編碼。
為了更加直觀地分析碼率,本文統(tǒng)計(jì)了在不同TU 大小和不同量化參數(shù)(quantization parameter,QP)下,各個(gè)語法元素所占的碼率比重,如圖3 所示,編碼模式為隨機(jī)訪問(random access,RA)模式,可以看出,在TU 4×4 和TU 8×8 大小下,LCP 語法元素占有較大比重,分別為32.2%與25.8%,G1 與CSF 語法元素碼率占比較為均勻,SCF 碼率綜合占比最大,因此如何著重分析碼率占比較大的語法元素非常關(guān)鍵。
圖3 TU 級(jí)別下各語法元素碼率比重
跳過模式是合并模式的一種特殊情況,其CU 內(nèi)不包含任何殘差信息。對(duì)于每個(gè)單元,CU跳過標(biāo)志被用來表示該CU 是否為跳過模式。其根據(jù)相鄰CU 跳過標(biāo)志的不同會(huì)使用3 種上下文模型。本文實(shí)驗(yàn)發(fā)現(xiàn)跳過標(biāo)志所消耗的碼率均值在不同QP 下有著較強(qiáng)的線性關(guān)系。當(dāng)相鄰單元均為非跳過模式時(shí),碼率與QP 之間的關(guān)系如圖4 所示。
圖4 跳過標(biāo)志碼率與QP 的關(guān)系
其中,R_0 和R_1 分別表示編碼0(非跳過模式)和1(跳過模式)所消耗的碼率。實(shí)驗(yàn)測(cè)試環(huán)境為RA 編碼模式,測(cè)試序列為BasketballPass,測(cè)試幀數(shù)為30。圖4 中的×表示各QP 下碼率消耗的平均值。事實(shí)上,隨著QP 的增加,CU 更有可能被編碼為跳過模式。因此,編碼1 消耗的比特逐漸減少,編碼0 消耗的比特逐漸增加。
因此可以根據(jù)QP 進(jìn)行建模,式(2)中定義了跳過標(biāo)志的碼率估計(jì)模型。
其中,0α與0β表示編碼0 時(shí)的模型系數(shù),1α與1β表示編碼1 時(shí)的模型系數(shù),在相鄰單元都為非跳過模式時(shí),0α=0.016 89,0β=0.183 3,1α=?0.107 3,1β=5.814。當(dāng)相鄰單元只有一個(gè)為跳過模式或都為跳過模式時(shí),其碼率模型可以采用相同的方法分析。
在頭文件碼率中,編碼預(yù)測(cè)模式所消耗碼率占有較大比例,對(duì)亮度塊來說,最優(yōu)預(yù)測(cè)模式從兩類中選出,一類是來自相鄰單元的3 種高概率模式(most probability mode,MPM),另一類為低概率模式(low probability mode,LPM)。prev_intra_luma 會(huì)被用來描述該模式是否為MPM模式,與跳過標(biāo)志建模類似,QP 與碼率關(guān)系如圖5所示。
圖5 預(yù)測(cè)模式QP 與碼率的關(guān)系
最后該部分模型如式(3)所示:
其中,0γ=0.041 73,0δ=0.138 4,1γ=?0.026 8,1δ=1.578。
對(duì)于色度塊,從5 個(gè)候選模式中選擇最佳模式。intra_chroma_pred_mode 用于描述最佳模式是否與最佳亮度模式相同,該部分建模類似于prev_intra_luma。
在現(xiàn)有工作中,Sheng[16]采用量化系數(shù)總和(sum quantized coefficient,SQC)作為系數(shù)部分碼率估計(jì)的特征。但是,當(dāng)TU 的SQC 相同時(shí),其碼率消耗會(huì)有較大的差異。造成這一誤差的原因之一是:在編碼過程中,上下文概率模型轉(zhuǎn)換會(huì)導(dǎo)致嚴(yán)重的系數(shù)間串行依賴。為解決此問題,本文提出加權(quán)量化系數(shù)總和(sum weighted quantized coefficient,SWQC)。
在圖3 中,SCF 語法元素總體比其他語法元素占據(jù)更大的比例。因此,本文重點(diǎn)分析因編碼SCF 語法元素而產(chǎn)生的系數(shù)依賴性。實(shí)際上,SCF的上下文模型選擇受許多因素影響,包括當(dāng)前塊是否為亮度塊、下方和右側(cè)的CSBF 值等。因此,本文將CG 分為7 類,如圖6 所示。
圖6 加權(quán)量化系數(shù)的分類方法
在圖6 中,CSBF(0,0)代表下方和右方CG的CSBF 值均為0。TU 4×4 為第1 類。對(duì)于第一個(gè)CG,存在DC 系數(shù)并且為低頻區(qū)域,非零系數(shù)多于其他CG,因此將第一個(gè)CG 分為第2 類。最后一個(gè)非零CG 具有LP 語法元素,分為第3 類。根據(jù)下方和右方CSBF 取值分為第4、5、6、7 類。
本文使用線性回歸方法確定權(quán)重,使用CG級(jí)別碼率進(jìn)行訓(xùn)練。不同組將獲得不同的權(quán)重,加權(quán)量化系數(shù)總和累積作為TU 級(jí)碼率估計(jì)的特征。第3 類中有一個(gè)特殊情況,最后一個(gè)非零CG具有LP 語法元素,其碼率消耗主要來自LP 信息,為了簡(jiǎn)化算法,將第3 類的權(quán)重設(shè)置為1。該部分碼率模型如式(4)所示:
其中,W kj代表權(quán)重系數(shù),k表示由圖6 確定的CG 類別,Lij代表量化系數(shù),N為TU 塊大小。在QP 為32時(shí),各TU 大小下Rwqc與碼率之間關(guān)系如圖7 所示。
圖7 TU 級(jí)別加權(quán)量化系數(shù)總和與碼率的關(guān)系
權(quán)重系數(shù)從序列BasketballPass 獲得。將其應(yīng)用于序列BQsquare,其與TU 級(jí)別碼率的相關(guān)系數(shù)(R2)與均方差(MSE)見表1,其中擬合方式均為線性擬合,擬合公式為y=ax+b,其中a、b為模型參數(shù)??梢钥吹絊WQC 比SQC具有更小的均方差和更高的相關(guān)系數(shù)。這證明了使用SWQC 在碼率估計(jì)方面將獲得更高的精準(zhǔn)度。
表1 均方差與相關(guān)系數(shù)
在熵編碼中,高概率事件將消耗較少的比特,而低概率事件將消耗較多的比特。經(jīng)過變換、量化等步驟后,非零系數(shù)出現(xiàn)在低頻區(qū)域的概率要大于高頻區(qū)域。因此,碼率消耗將隨著系數(shù)分布的不同而有著較大的變化。本文定義ηc為CG 級(jí)別最后一個(gè)非零系數(shù)的正向掃描位置。當(dāng)ηc較小時(shí),表示非零系數(shù)分布在低頻區(qū)域。ηz表示CG內(nèi)第一個(gè)與最后一個(gè)非零系數(shù)之間的零系數(shù)個(gè)數(shù)。當(dāng)ηz較小時(shí),表示非零系數(shù)分布更加集中。這兩個(gè)特征可以很好地描述系數(shù)的分布,該部分碼率定義如下:
QP 為32 時(shí),其與碼率的關(guān)系如圖8 所示。
圖8 TU 級(jí)別位置信息與碼率的關(guān)系
在TU 4×4 與TU 8×8 兩種情況下,編碼LCP位置信息時(shí),其碼率占比較大,由圖3 可知其占比分別達(dá)到32.2%與25.8%,但是TU 16×16 與TU 32×32情況下,其碼率占比只有16.7%與9.1%。在考慮到模型復(fù)雜度與硬件資源的情況下,本文只針對(duì)TU 4×4 與TU 8×8 情況考慮LCP 位置信息,LCP 語法元素碼率組成如下:
其中,Rpre表示前綴碼,采用常規(guī)編碼模式;Rsuf為后綴碼,采用等概率編碼模式;本文定義特征bη為前綴碼和后綴碼的總碼元個(gè)數(shù),并使用它來估計(jì)編碼LCP 信息所消耗的碼率。
此外,在不同TU 大小下,各個(gè)語法元素碼率占比波動(dòng)較大,但CSF 語法元素卻很平穩(wěn),占比平均為17.1%,因?yàn)樵撜Z法元素采用等概率編碼方式,因此本文定義特征nη為非零系數(shù)個(gè)數(shù)并納入考慮范圍。
最終模型如下:
其中,bη只有在TU 大小為4×4 與8×8 的情況下才會(huì)使用;0θ~4θ為模型參數(shù),由線性回歸訓(xùn)練所得到。圖9 為QP 等于32 時(shí),REst與真實(shí)碼率之間的關(guān)系,測(cè)試序列為BasketballPass。可以看出,兩者之間有著很強(qiáng)的線性關(guān)系。
圖9 預(yù)估碼率與真實(shí)碼率的關(guān)系
碼率估計(jì)算法流程如下。
輸入量化系數(shù)矩陣L,4×4 權(quán)重矩陣kW 。
輸出預(yù)估碼率REst。
說明量化系數(shù)矩陣L尺寸取決于當(dāng)前TU塊尺寸,取值范圍為4×4、8×8、16×16、32×32。K取值范圍為1~7,由圖6 所示方法決定。步驟3中C為系數(shù)組矩陣,大小為4×4。
步驟1根據(jù)式(2)、式(3)計(jì)算頭信息碼率。
步驟2遍歷系數(shù)矩陣L,確定LCP 位置并計(jì)算bη參數(shù)。
步驟3當(dāng)前TU 大小為4×4,計(jì)算Rwqc=否則計(jì)算
步驟4統(tǒng)計(jì)cη參數(shù),同時(shí)記錄零系數(shù)的個(gè)數(shù)zη,根據(jù)式(5)計(jì)算出Rzpos。
步驟5統(tǒng)計(jì)非零系數(shù)個(gè)數(shù)nη,遍歷L結(jié)束。
步驟6如果TU 尺寸為4×4、8×8,根據(jù)式(7)得出REst;否則令ηb= 0,代入式(7)得出REst。
碼率估計(jì)算法流程如圖10 所示。
在HEVC 中,計(jì)算量化過程如下:
圖10 碼率估計(jì)算法流程
其中,Q ij為量化值,y ij為變換系數(shù),Sc =2qbits/Qstep是和QP 有關(guān)的縮放系數(shù)。在變換域中,失真可以由式(9)統(tǒng)計(jì):
其中,y為變換系數(shù),yi為重構(gòu)后的變換系數(shù)。為了簡(jiǎn)化重構(gòu)過程,本文分別定義了原始縮放后系數(shù)Pi j=yij×Sc 和近似重構(gòu)后的變換系數(shù)Ti j=Qij?iQBits,并統(tǒng)計(jì)了兩者間的差異,定義如下:
因此被縮放后失真近似為:
將式(11)代入式(9):
其中,iQbits=qbits+shift,化簡(jiǎn)后有:
其中,shift 是與TU 大小有關(guān)的偏移量。為了更精準(zhǔn)地估計(jì)碼率,本文引入與QP 相關(guān)的模型參數(shù)α(QP)其在QP 取值為22、27、32、37 時(shí)分別等于0.86、0.89、0.92、0.95。預(yù)估失真與真實(shí)失真關(guān)系如圖11 所示。
失真估計(jì)算法具體流程如下。
輸入量化系數(shù)矩陣Q,變換系數(shù)矩陣Y。
輸出預(yù)估失真DEst。
步驟1遍歷系數(shù)矩陣Q,計(jì)算Tij=Qij?iQBits,得到近似重構(gòu)后的變換系數(shù)。
步驟2計(jì)算dij=(Pij?Qij?iQBits)2,為該系數(shù)縮放后失真。
步驟3去除縮放比例,由式(13)得到
步驟4矩陣Q遍歷結(jié)束,引入α(QP)模型參數(shù),累加得
由以上可以看出,失真的計(jì)算在進(jìn)行前向變換量化的時(shí)候就已經(jīng)計(jì)算完畢,省去了逆變換、逆量化、重構(gòu)等過程。這種做法雖然忽視了逆量化、逆變換因取整和位移等操作造成的誤差,但是這些誤差的數(shù)值很小,在可接受范圍內(nèi),同時(shí)可以節(jié)省大量的時(shí)間。從圖11 可以看出,預(yù)估失真與真實(shí)失真有著很強(qiáng)的線性關(guān)系,這也證明了本文失真估計(jì)算法的優(yōu)越性。
為了評(píng)估文中所提出的快速碼率失真估計(jì)算法,采用HEVC 參考代碼HM16.0 進(jìn)行實(shí)驗(yàn),實(shí)驗(yàn)配置為:RA 模式,關(guān)閉RDOQ 功能,關(guān)閉變換跳過功能,其余均為默認(rèn)配置。實(shí)驗(yàn)中QP 取值為:22、27、32、37。實(shí)驗(yàn)采用H.265 標(biāo)準(zhǔn)測(cè)試序列[17]進(jìn)行測(cè)試,碼率變化率(BD-BR)[18]當(dāng)作評(píng)價(jià)指標(biāo)。
為了衡量計(jì)算復(fù)雜度的變化,本文定義了時(shí)間變化率TΔ 定義如下:
圖11 預(yù)估失真與真實(shí)失真的關(guān)系
其中,TProRDO為本算法進(jìn)行RDO 過程所消耗的時(shí)間,THMRDO為原始HEVC 算法進(jìn)行RDO 過程所消耗的時(shí)間,ΔT為正表示編碼時(shí)間的減少,與HM 算法相比,本文快速算法的率失真性能和整體表現(xiàn)見表2。其中,*表示僅使用碼率預(yù)估的性能損失,**表示碼率與失真預(yù)估的性能損失。表2中還列出了近年來典型的碼率失真估計(jì)算法,并做了比較。
與原始HM 算法相比,只使用碼率估計(jì)算法,參考文獻(xiàn)[9]的算法BD-BR 總體上升1.32%,本文算法BD-BR 總體上升0.96%,性能提升0.36%,對(duì)于有較多細(xì)節(jié)畫面的視頻序列,例如PartyScene、BQsquare、BasketballPass 和SlideEditing,參考文獻(xiàn)[9]的算法BD-BR 分別上升1.92%、1.68%、1.31%、1.81%,性能損失較為嚴(yán)重,本文算法在這些序列下BD-BR 分別上升0.75%、0.43%、0.37%、1.24%,皆優(yōu)于參考文獻(xiàn)[9]。對(duì)于平穩(wěn)的序列,例如 FourPeople、Johnny 和KristenAndSara,參考文獻(xiàn)[9]算法BD-BR 分別上升1.17%、1.35%、1.57%。同樣地,本文算法BD-BR分別上升1.09%、1.16%、1.12%,因此無論是在具有較多細(xì)節(jié)還是較為平穩(wěn)的視頻序列中,本文算法皆優(yōu)于參考文獻(xiàn)[9]提出的算法。
表2 在Random Access 下的模型性能
在同時(shí)使用碼率估計(jì)與失真估計(jì)算法時(shí),相較于原始HM 算法,參考文獻(xiàn)[8]的算法BD-BR總體上升2.49%,同時(shí)RDO 時(shí)間節(jié)省47.40%。對(duì)于高分辨率的視頻序列,如Traffic、Nebuta、Kimono,其BD-BR 分別上升1.99%、0.98%、1.58%,性能損失較低;對(duì)于低分辨率的序列,即D 類視頻序列,其BD-BR 上升分別為3.14%、3.02%、2.72%、3.45%,性能損失較大,這說明參考文獻(xiàn)[8]的算法在高分辨率的序列上有著較好的性能。在時(shí)間節(jié)省方面,參考文獻(xiàn)[8]的算法在序列SlideEditing 和RaceHorses 可以達(dá)到66.32%和60.78%,但是在Johnny 和KristenAndSara 序列下,其時(shí)間節(jié)省僅為32.30%與31.23%,最大值與最小值之間相差35%,這說明參考文獻(xiàn)[8]的算法時(shí)間節(jié)省并不均勻,其算法不具有較強(qiáng)的普適性。本文在同時(shí)使用碼率與失真估計(jì)算法時(shí),BD-BR 總體上升了1.74%,RDO 時(shí)間節(jié)省49.76%,相較于參考文獻(xiàn)[8]的算法,性能有0.75%的性能提升,同時(shí)多獲得了2.36%的時(shí)間節(jié)省。對(duì)于高分辨率的視頻序列,如Traffic、Nebuta、Kimono,其BD-BR分別上升2.36%、0.96%、1.63%;在低分辨率視頻序列(D 類)下,本文算法BD-BR 僅上升1.25%、1.31%、1.12%、1.47%,這證明了本文算法有著更好的率失真性能。在序列Nebuta 中,本文可以達(dá)到59.44%的RDO 時(shí)間節(jié)省,為測(cè)試序列中的最大值;在序列Traffic 中可以達(dá)到40.82%的RDO時(shí)間節(jié)省,為最小值,其相差大約19%,與參考文獻(xiàn)[8]算法的35%相比,可以證明本文算法節(jié)省時(shí)間更加均勻,有著更好的普適性。
在A 類高分辨率視頻序列中,由于編碼每幀圖像所需碼率較多,會(huì)進(jìn)行較多的RDO 模式?jīng)Q策過程,這意味著使用碼率失真估計(jì)算法會(huì)產(chǎn)生較大誤差,本文算法在A 類視頻序列性能平均損失僅為1.69%。在分辨率較低的D 類序列中,在RA 模式下,編碼每幀所需的碼率較少,但這也意味著更多的系數(shù)被量化為0,導(dǎo)致失真計(jì)算會(huì)有較大的誤差,本文算法在D 類序列上平均損失僅為1.28%,表2 數(shù)據(jù)表明在各個(gè)分辨率下,都有著優(yōu)于參考文獻(xiàn)[8]算法和參考文獻(xiàn)[9]算法的性能表現(xiàn)。圖12~圖15 為在各個(gè)分辨率下的視頻序列R-D 性能曲線,對(duì)比了原始的HM16.0 算法和本文的碼率失真估計(jì)算法,可以看出本文的算法性能在各個(gè)分辨率下都極其接近原始HM 算法的性能,這也證明了本文算法的優(yōu)越性。
圖12 序列ParkScene(1 920 dpi×1 080 dpi)的R-D 曲線
圖13 序列BQMall(832 dpi×480 dpi)的R-D 曲線
圖14 序列BQsquare(416 dpi×240 dpi)的R-D 曲線
圖15 序列Johnny(1 280 dpi×720 dpi)的R-D 曲線
本文針對(duì)HEVC 率失真優(yōu)化過程中復(fù)雜的碼率與失真計(jì)算問題,提出一種快速碼率失真估計(jì)算法。通過實(shí)驗(yàn)證明,本文算法與目前典型算法而言,在性能與時(shí)間節(jié)省方面都有著較大的提升,后續(xù)工作主要有兩部分:一是對(duì)權(quán)重系數(shù)進(jìn)行進(jìn)一步優(yōu)化,探索其與位置參數(shù)的動(dòng)態(tài)關(guān)系,使得碼率模型能夠更精準(zhǔn)地估計(jì)碼率;二是探索碼率與失真模型在全幀內(nèi)編碼中的應(yīng)用,找出其與幀間編碼參數(shù)之間的差異,使得模型能夠適應(yīng)更復(fù)雜的編碼場(chǎng)景。