楊 栩
(成都師范學院物理與工程技術(shù)學院,四川成都 611130)
隨著視頻會議系統(tǒng)的逐步普及,其作為最重要的視頻編碼應用之一越發(fā)受到工業(yè)界和學術(shù)界的重視.人像視頻是視頻會議最主要的應用場景,在帶寬限制條件下的視頻數(shù)據(jù)傳輸面臨著諸多挑戰(zhàn),碼率控制[1]在對實時性要求比較高的低延時視頻會議系統(tǒng)中占據(jù)著舉足輕重的地位.新一代視頻編碼標準VVC(Versatile Video Coding)采用R-λ模型[2-3],碼率控制算法根據(jù)帶寬、緩沖器大小確定各個GOP(Group of Pictures)、幀、編碼樹單元CTU(Coding Tree Unit)的目標比特數(shù),然后通過R-λ-QP模型計算編碼幀的量化參數(shù)QP(Quantization Parameter)進行編碼.編碼失真主要來自量化過程,量化步長的大小和失真大小成正比關(guān)系;所以,獨立率失真優(yōu)化下的拉格朗日乘子λ和量化步長Δ間存在密切關(guān)系,在高碼率下,他們之間的關(guān)系表達式為
λ=c·Δ2
(1)
其中,c為常數(shù),量化步長和量化參數(shù)間存在函數(shù)映射關(guān)系.文獻[4]證明了常數(shù)c的取值為0.85.實際上,拉格朗日乘子不僅與量化參數(shù)有關(guān),還與多個編碼參數(shù)有關(guān),比如文獻[5]指出拉格朗日乘子還與信源方差相關(guān).所以直接通過量化參數(shù)建立的QP-λ關(guān)系還不是最優(yōu)表達式.文獻[6]提出了基于全局拉格朗日乘子的全局率失真優(yōu)化,認為整個視頻序列應該共享同一個全局拉格朗日乘子并獲得了非常大的率失真性能提升;文獻[7]解釋了獨立RDO和依賴RDO所對應的拉格朗日乘子的區(qū)別,說明考慮時域依賴關(guān)系的全局拉格朗日乘子能夠?qū)崿F(xiàn)全局優(yōu)化.為了進一步提升VVC碼率控制精度和率失真性能,本文應用遞歸泰勒展開法[8]計算全局拉格朗日乘子并應用到VTM12.0參考軟件CTU(Coding Tree Unit)級碼率控制,取得了較大的性能提升.
比特分配是碼率控制算法中最為關(guān)鍵環(huán)節(jié),優(yōu)化比特分配是提高編碼性能和碼率控制精度的前提.VTM采用分層比特分配結(jié)構(gòu),在GOP層[9]、幀層、CTU層分別進行比特分配,越往下,碼率分配越準確.VTM在各個層次上平均分配目標碼率,為了逐步消除已編碼單元產(chǎn)生的碼率控制誤差,通過滑動窗口來平滑碼率波動,通過下列式子實現(xiàn)分層碼率分配,即
(2)
(3)
(4)
(5)
其中,Rtar為目標碼率,F(xiàn)R為幀率,Rpic為平均每幀的比特數(shù),Tgop、Tpic、Tctu分別為分配給待編碼GOP、編碼幀、編碼單元的目標比特數(shù);SW是平滑比特分配的滑動窗,Ncoded、Rcoded、Ngop、Rcodedgop、ωpic、ωctu、∑notcodedpicgopωpic、∑notcodedctupicωctu分別為已編碼幀數(shù)、已消耗比特、GOP幀數(shù)、GOP內(nèi)已編碼幀數(shù)、編碼幀所占權(quán)重、編碼單元所占權(quán)重、未編碼幀所占權(quán)重之和、幀內(nèi)未編碼CTU權(quán)重之和.
圖1 VTM12.0參考代碼在 LDP下GOP結(jié)構(gòu)Fig.1 GOP structure of vtm12.0 under LDP
VVC在LDP(Low Delay P)配置下每個GOP包含8幀圖像,編碼樹單元CTU大小為128*128,一個GOP中各幀分別屬于不同的層次,分別為關(guān)鍵幀所在的第一層Level1,偶數(shù)幀所在的第二層Level2,奇數(shù)幀所在的第三層Level3.每幀都有4個參考幀,分別為時域最近鄰的前一幀以及已編碼的最近鄰三個關(guān)鍵幀,圖1給出了VTM12.0在LDP下POC(picture order count)序號從f8n到f8n+8的一個GOP的編碼結(jié)構(gòu).
對于CTU級的碼率分配,文獻[2]提出編碼器根據(jù)編碼單元的權(quán)重占比來預分配,CTU級根據(jù)R-λ模型來計算權(quán)重系數(shù),當前編碼CTU的計算參數(shù)由上一幀同位置CTU相關(guān)參數(shù)確定.假設編碼單元所在編碼幀被分配到的比特數(shù)為Rpic.每個編碼單元獨立求解最優(yōu)編碼參數(shù)問題.即
(6)
D和R分別為編碼失真和編碼比特消耗,λi為第i個編碼單元對應的拉格朗日乘子,Ji為第i個編碼單元的率失真代價,編碼器通過最小率失真代價Ji來進行編碼模式選擇,編碼模式主要指幀內(nèi)及幀間預測模式.
可得CTU級R-λ模型,即
D=C·R-k
(7)
其中,C和K為模型參數(shù).
(8)
式(8)中每個編碼單元有Ri=bppi·Ni,其中Ri、bppi、Ni分別為編碼單元目標比特數(shù)、每像素所占比特以及像素數(shù),λi為編碼單元的拉格朗日乘子,其初始值為幀級拉格朗日乘子.所以編碼單元的比特分配關(guān)鍵在于確定權(quán)重系數(shù)ωctu與式(10)中相關(guān)參數(shù)的關(guān)系,即
(9)
(10)
ωctuj為第j個編碼單元權(quán)重系數(shù),Rpic為當前幀分配的比特數(shù),ωctui、λi分別為當前編碼單元的權(quán)重系數(shù)和拉格朗日乘子,ri為第i個編碼單元分配的比特數(shù).
根據(jù)前文可知,為了簡化編碼問題,降低復雜度,將各編碼單元看作在時域上相互獨立的個體,各編碼單元使用的相關(guān)參數(shù)在時域上互不影響,通過拉格朗日乘子法將約束性優(yōu)化問題轉(zhuǎn)換為非約束性優(yōu)化問題.雖然這樣簡化了問題,但是也人為切斷了編碼單元間在時域上的相關(guān)性,這樣的優(yōu)化只是局部優(yōu)化,編碼性能的提升需要考慮編碼單元時域、空域相關(guān)性.
文獻[8]提出了一種基于遞歸泰勒展開法RTE(Recursive Taylor Expansion)的數(shù)學求解方法來求解全局拉格朗日乘子.本文用RTE來求解幀內(nèi)CTU共享的全局拉格朗日乘子,并用于優(yōu)化CTU級的比特分配.
根據(jù)上文的R-λ模型,可得幀級分配的比特與各編碼單元分配的比特關(guān)系為
(11)
(12)
截斷式(12)4階及其以上項,通過盛金公式計算出全局拉格朗日乘子λg并應用與實際編碼.實際編碼實驗中經(jīng)過4次遞歸就能達到遞歸結(jié)束條件.
將λg應用到更新比特分配公式中.通過改變編碼單元的權(quán)重占比來優(yōu)化比特分配,這里的權(quán)重占比不僅跟全局拉格朗日乘子有關(guān),還與編碼過程中的更新參數(shù)αi、βi有關(guān).
(13)
(14)
(14)式中ri'為第i個編碼單元優(yōu)化分配后的比特數(shù).
圖2 優(yōu)化比特分配算法流程圖Fig.2 Flow chart of bit optimization algorithm
在實際編碼過程中,需要將遞歸泰勒展開法所求全局拉格朗日乘子應用到比特優(yōu)化分配中,初始值由幀級拉格朗日乘子代替.具體流程如圖2所示.
為驗證本文方法有效性,將算法應用于CTU級比特優(yōu)化分配并集成到VVC/H.266參考軟件VTM12.0的碼率控制算法中,編碼器配置為LDP,實驗選用提案JCTVC-L1100[10]建議的ClassE中的全部3個人像視頻序列,標準測試序列特征如表1所示.
表1 標準測試序列特征Tab.1 Characteristics of standard test sequence
實驗計算機配置為Inter(R)Core(TM)i7-7700K CPU@4.2 GHz,內(nèi)存為16 GB,基于X64的處理器,64位Windows10專業(yè)版操作系統(tǒng).
參考軟件VTM12.0在不開啟碼率控制的情況下,分別用QP值22、27、32、37去編碼每個測試序列,所得的4個碼率值作為碼率控制實驗的目標碼率.實驗通過對比VTM自帶的碼率控制算法和本文提出的算法,分別記為VTM_RC和RTE_RC.編碼器配置文件為encoder_lowdelay_P_vtm.cfg.
碼率控制算法是在目標碼率的限定下,盡可能降低失真,而且編碼時間是衡量算法復雜度的重要參數(shù).所以,碼率控制算法的好壞,不僅要看碼率控制的精度,還要看編碼時間和率失真性能,如表2所示.本實驗以固定QP為22、27、32、37不開啟碼率控制的VTM12.0為基準,將基準碼率作為實驗的目標碼率,分別計算VTM12.0自帶的碼率控制算法(VTM_RC)以及基于遞歸泰勒展開法的碼率控制算法(RTE_RC)相較于基準的BD-rate.在相同比較基準下,測試算法的BD-rate越小,其性能越好.表2列出了2種算法相較于VTM12.0基準BD-rate,可以看出,RTE_RC算法相較于基準的BD-rate為-1.6%,遠好于VTM-RC算法相較于基準的4.97%.本文算法的率失真性能都得到了不同程度的提升.表2中△R表示碼率控制精度也即實際編碼碼率和目標碼率的相對誤差,△T表示編碼時間節(jié)省.這兩個性能指標將在后文詳細說明.
表3給出了RTE_RC算法總體平均PSNR為40.03 dB,相較于VTM_RC的39.79 dB增長了0.24 dB.RTE_RC算法率失真性能有了很大提高.為了更直觀觀察率失真性能提升情況,選取部分測試序列來分析.圖3給出了2個測試序列”Johnny”、”KristenAndSara”在LDP下不同算法的率失真曲線對比圖.可以很清晰看出本文算法RTE_RC率失真性能更好.
表2 優(yōu)化比特分配算法測試結(jié)果(%)Tab.2 test results of bit optimal allocation algorithm
表3 不同算法碼率/PSNR/編碼時間對比Tab.3 bit rate / PSNR / encoding time of video sequence under different algorithms
圖3 測試序列Kristen and Sara/Johnny在不同算法下率失真曲線對比圖Fig.3 rate distortion performance comparison in the test sequence Kristen and Sara / Johnny
可以看出本文算法RTE_RC率失真性能相較于參考代碼碼率控制算法VTM_RC率失真性能有了較大提升.
碼率控制精度是碼率控制算法中的核心,最好的碼率控制結(jié)果是分多少比特用多少比特.
通過計算實際編碼碼率和目標碼率的誤差來描述碼率控制精度,計算式為
(15)
上式中,Rtar表示目標碼率,Ract表示實際編碼碼率.△R越小,表明碼率控制精度越好.表2列出了每個測試序列在4個目標碼率下的平均碼率的相對誤差,數(shù)據(jù)顯示VTM_RC在LDP下對全部測試序列的平均碼率相對誤差為0.72%;而本文算法RTE_RC在LDP下對全部測試序列的平均碼率相對誤差僅為0.008 3%.碼率控制精度得到了極大提高.
編碼時間是衡量算法復雜度的重要指標,正如視頻編碼標準的更新?lián)Q代,雖然提升了壓縮率,但是卻是以犧牲更大的編碼時間作為代價.本文算法(RTE_RC)和參考軟件碼率控制算法(VTM_RC)編碼人像視頻測試序列所用絕對時間如表3所示.可以看出,本文所提算法總共花費時間77.78 h,低于VTM_RC的82.02 h,編碼時間降低5.17%.
表2的△T表示以VTM12.0不開啟碼率控制固定QP的編碼時間為基準,算法VTM_RC和RTE_RC相較于基準的時間變化率,△T為正數(shù)表明編碼時間相較于基準時間有增加,反之,△T為負數(shù)表明編碼時間相較于基準時間有降低.計算式為
(16)
上式中Tqp表示用固定QP編碼該視頻序列所花時間,Trte表示用RTE_RC算法編碼該視頻序列所花時間.通過表2可以看出,相比VVC參考代碼碼率控制算法,本文算法在所有視頻序列上編碼時間都有降低.這主要是因為優(yōu)化比特分配后,給幀內(nèi)變化較大CTU分配較多比特,變換平緩CTU分配較少比特,長遠來看,這間接提升了編碼性能,會增加選擇skip模式的幾率,這樣會節(jié)省編碼時間.
隨著低延時實時視頻會議系統(tǒng)的普及,視頻會議系統(tǒng)對低延時要求越來越高,這對碼率控制提出了更高要求,如何進一步提高碼率控制精度和率失真性能,同時降低編碼時間是碼率控制面臨的主要問題.本文通過遞歸泰勒展開法計算每幀的全局拉格朗日乘子,并應用于更新CTU權(quán)重占比計算,以此來優(yōu)化人像視頻的比特分配.實驗證明,本文算法能較大提高碼率控制精度及率失真性能,而且編碼復雜度有所降低.