吳曉光,李國(guó)平,王國(guó)中,滕國(guó)偉,趙海武
(上海大學(xué) 通信與信息工程學(xué)院,上海 200072)
基于視頻并行編碼的碼率控制算法研究
吳曉光,李國(guó)平,王國(guó)中,滕國(guó)偉,趙海武
(上海大學(xué) 通信與信息工程學(xué)院,上海 200072)
基于并行編碼的特點(diǎn),現(xiàn)有的基于串行編碼的碼率控制算法有其局限性,不能直接應(yīng)用于并行編碼。提出一種新的碼率控制算法,在編碼前將原始幀作為參考幀計(jì)算出各幀的SAD,然后利用已計(jì)算的SAD進(jìn)行幀級(jí)比特分配和動(dòng)態(tài)預(yù)測(cè)并行編碼幀的比特,實(shí)現(xiàn)了并行編碼的碼率控制。通過(guò)測(cè)試基于串行編碼的碼率控制和提出的碼率控制方案下PSNR和VBV情況,說(shuō)明所提算法的可行性。
并行編碼;碼率控制;比特預(yù)測(cè);比特分配
高清、超高清編碼技術(shù)的出現(xiàn),極大地提高了人們的視覺(jué)體驗(yàn),因此得到了廣泛應(yīng)用。與此同時(shí)編碼復(fù)雜度的增加和對(duì)實(shí)時(shí)性的要求為編碼器的實(shí)現(xiàn)提出了極大的挑戰(zhàn)。并行編碼技術(shù)是解決高復(fù)雜度、實(shí)時(shí)編碼的有效方法,因此成為國(guó)內(nèi)外學(xué)者的研究熱點(diǎn)。目前并行編碼還處于研究階段,沒(méi)有一個(gè)公認(rèn)的并行編碼框架。針對(duì)圖像的不同結(jié)構(gòu)層次(GOP,F(xiàn)rame,Slice,Macroblock)有其對(duì)應(yīng)的并行編碼模式[1],但這些方法的并行化程度不夠高。WPP[2]和Tiles[3]并行技術(shù)是HEVC針對(duì)并行編碼所提出的,但此方法只適用于HEVC標(biāo)準(zhǔn),同時(shí)存在碼率分配難以處理的問(wèn)題。文獻(xiàn)[4]提出了一種視頻并行編碼框架,極大地提高了并行化程度,在PSNR下降0.01~0.12 dB的前提下,加速比可達(dá)到12[5]。因此,本文基于該編碼框架實(shí)現(xiàn)并行編碼的碼率控制,其算法思想也可應(yīng)用于其他的并行編碼框架。
為確保編碼產(chǎn)生的可變碼流能夠在有限帶寬的信道順利傳輸,需根據(jù)緩沖區(qū)情況對(duì)碼率進(jìn)行控制。傳統(tǒng)經(jīng)典的碼率控制算法包括TM5,TMN8以及VM8等,還有一些基于上述碼率控制的優(yōu)化算法,以滿足視頻傳輸應(yīng)用中的碼率要求。上述各種碼率控制方法針對(duì)不同的應(yīng)用環(huán)境往往能有比較理想的效果,但這些碼率控制算法都是基于串行編碼框架。在視頻并行編碼中,由于并行編碼有多幀數(shù)據(jù)同時(shí)進(jìn)行編碼,在編碼當(dāng)前幀時(shí),其之前的多幀未能產(chǎn)生實(shí)際編碼比特?cái)?shù),無(wú)法確定當(dāng)前幀的緩沖區(qū)情況,因此需要對(duì)這些并行編碼幀的比特開(kāi)銷進(jìn)行預(yù)測(cè)。如果采用傳統(tǒng)的碼率控制方法,利用之前幀的信息來(lái)預(yù)測(cè)當(dāng)前幀的比特,當(dāng)并行編碼幀數(shù)較多時(shí),對(duì)并行編碼幀比特開(kāi)銷的預(yù)測(cè)將會(huì)產(chǎn)生很大誤差。基于這個(gè)特點(diǎn),限制了傳統(tǒng)碼率控制算法的使用,因此并行編碼的碼率控制一直是困擾并行編碼發(fā)展的難題。本文提出了一種新的碼率控制算法以解決這個(gè)問(wèn)題。
此外,H.264/AVC引入了率失真優(yōu)化(RDO)技術(shù),對(duì)宏塊執(zhí)行RDO,需要由碼率控制才能確定的QP作為輸入;對(duì)宏塊執(zhí)行碼率控制,需要MAD作為輸入,然而MAD只有在RDO運(yùn)行后才能獲得,形成了“蛋雞悖論”問(wèn)題。為解決這個(gè)問(wèn)題, JVT-F086[6]提案采用兩次編碼的方式,但大大增加了編碼的復(fù)雜度。JVT-G012[7]提案利用前一幀中相同位置基本單元的MAD值線性預(yù)測(cè)當(dāng)前基本單元的MAD ,如果并行編碼的碼率控制也采取該方法,編碼圖像失真將會(huì)加大。本文提出的方法,在編碼前將原始幀作為參考幀計(jì)算出各幀的絕對(duì)差值和(SAD),在碼率控制過(guò)程中利用已計(jì)算的SAD作為輸入確定QP,解決了悖論問(wèn)題。同時(shí)由于SAD不是由預(yù)測(cè)得到,對(duì)并行編碼幀比特開(kāi)銷的預(yù)測(cè)不會(huì)產(chǎn)生很大誤差,因此使得提出的碼率控制算法更加準(zhǔn)確。實(shí)驗(yàn)結(jié)果表明,該算法在保證圖像質(zhì)量的基礎(chǔ)上解決了并行編碼碼率控制的難題。
1.1 傳統(tǒng)編碼框架
如圖1所示,傳統(tǒng)的視頻編碼框架在編碼當(dāng)前幀時(shí)需要將重建幀作為參考幀進(jìn)行運(yùn)動(dòng)估計(jì)和運(yùn)動(dòng)補(bǔ)償,它所構(gòu)成的反饋回路極大地限制了編碼的并行化程度。
圖1 傳統(tǒng)的視頻編碼框架
1.2 并行編碼框架
本文所采用的并行編碼框架如圖2所示[4],針對(duì)原始序列,并行預(yù)處理模塊在進(jìn)行去平滑濾波、噪濾波等預(yù)處理的基礎(chǔ)上,通過(guò)相關(guān)性參數(shù)的計(jì)算對(duì)序列進(jìn)行場(chǎng)景檢測(cè)和判斷幀類型[4]。由于各幀之間相互獨(dú)立,可以并行處理。
圖2 并行視頻編碼框架
并行運(yùn)動(dòng)估計(jì)模塊利用預(yù)處理模塊中已經(jīng)獲得的各幀的幀類型,將原始幀作為參考幀通過(guò)整像素運(yùn)動(dòng)估計(jì)計(jì)算整像素運(yùn)動(dòng)矢量MV′,每幀運(yùn)動(dòng)估計(jì)結(jié)束后進(jìn)入編碼模塊。這種并行運(yùn)動(dòng)估計(jì)極大地提高了整個(gè)編碼框架的并行性,將編碼最耗時(shí)的整像素運(yùn)動(dòng)估計(jì)并行處理,提高了編碼效率。
并行編碼模塊中采用隔行編碼的方式,每個(gè)場(chǎng)作為一個(gè)slice,各個(gè)場(chǎng)之間獨(dú)立進(jìn)行具有參考依賴性的幀間編碼[8]。進(jìn)行宏塊模式選擇后將MV′作為起點(diǎn)進(jìn)行亞像素搜索,最終得到運(yùn)動(dòng)矢量MV。然后再經(jīng)過(guò)運(yùn)動(dòng)補(bǔ)償,變換量化以及熵編碼得到碼流。
傳統(tǒng)的串行視頻編碼碼率控制在編碼當(dāng)前幀之前, 需要更新當(dāng)前緩存區(qū)內(nèi)的比特?cái)?shù)
(1)
(2)
在整像素并行運(yùn)動(dòng)估計(jì)模塊計(jì)算當(dāng)前并行編碼各幀的SAD。在進(jìn)行碼率控制時(shí),利用已計(jì)算的SAD作為輸入來(lái)確定QP,再由確定的QP進(jìn)行編碼,解決了“蛋雞悖論”;同時(shí)利用已計(jì)算的SAD對(duì)并行編碼各幀的比特進(jìn)行動(dòng)態(tài)預(yù)測(cè),解決了傳統(tǒng)碼率控制的局限性。
其中SAD的計(jì)算如式(3)所示
(3)
式中:A代表像素區(qū)域;Sk[x,y]為視頻圖像在[x,y]位置的像素值;Pk[x,y]為根據(jù)事先設(shè)定方法及參考圖像對(duì)Sk[x,y]的預(yù)測(cè)值。
3.1 幀級(jí)比特分配
我們可以根據(jù)在并行運(yùn)動(dòng)估計(jì)中得到的當(dāng)前幀的SAD來(lái)進(jìn)行幀級(jí)目標(biāo)比特分配。如式(4)所示
(4)
式中:Ti為第i幀分配的目標(biāo)比特?cái)?shù);SADi為第i幀的SAD值;SADgroup為一組幀數(shù)固定的圖像的總SAD值,它是一個(gè)不斷更新的數(shù)值,每編完一幀就從SADgroup中減去該幀的SAD值,開(kāi)始編碼下一幀時(shí)加上該幀的SAD,從而保持這組圖像的幀數(shù)恒定;bitgroup為對(duì)應(yīng)這組圖像的剩余目標(biāo)比特?cái)?shù)。
3.2 動(dòng)態(tài)預(yù)測(cè)幀比特?cái)?shù)模型
對(duì)并行編碼各幀的編碼比特?cái)?shù)的動(dòng)態(tài)更新,創(chuàng)建模型如式(5)所示
(5)
式中:Bits為當(dāng)前單元的預(yù)測(cè)比特?cái)?shù);SAD和QP分別表示當(dāng)前單元的SAD值(已在并行運(yùn)動(dòng)估計(jì)模塊計(jì)算得出)和QP值。coeff為一個(gè)復(fù)雜度系數(shù),其值如式(6)所示
(6)
式中:QP′和SAD′分別表示前一宏塊行的平均QP值和SAD值;bits表示前一宏塊行實(shí)際的編碼比特?cái)?shù);count為更新次數(shù)。count和coeff使用衰減系數(shù)進(jìn)行更新。如式(7)和式(8)所示
count″=count′×decay+1
(7)
coeff″=coeff′×decay+coeff
(8)
式中:count″和coeff″表示更新后的值;count′和coeff′表示更新前的值;decay為衰減因子。coeff如式(6)計(jì)算。
3.3 動(dòng)態(tài)更新緩沖區(qū)參數(shù)
并行編碼的各幀編碼結(jié)束后都將進(jìn)入同一緩沖區(qū),為及時(shí)了解緩沖區(qū)情況,避免緩沖區(qū)上溢或者下溢,需動(dòng)態(tài)更新并行編碼各幀的緩沖區(qū)參數(shù),如圖3所示。
1)每幀編完一行宏塊都將根據(jù)式(6)更新其coeff,然后根據(jù)coeff以及剩余宏塊行的SAD和QP按式(5)計(jì)算并預(yù)測(cè)當(dāng)前幀剩余部分的比特。
2)并行編碼的各幀每編碼一行宏塊都將執(zhí)行上述步驟1),由當(dāng)前幀已編碼的比特?cái)?shù)和步驟1)預(yù)測(cè)的剩余比特?cái)?shù),作為當(dāng)前幀的預(yù)測(cè)比特?cái)?shù),然后根據(jù)式(2)更新當(dāng)前幀的緩沖區(qū)參數(shù)。并行編碼幀緩沖區(qū)參數(shù)的動(dòng)態(tài)更新如圖3所示。
圖3 并行編碼幀緩沖區(qū)參數(shù)動(dòng)態(tài)更新示意圖
3.4 并行碼率控制算法流程
并行碼率控制算法具體步驟如下:
1)根據(jù)獲得的整幀目標(biāo)比特?cái)?shù)Ti,以及當(dāng)前幀的SAD,由式(5)可以得到當(dāng)前幀的初始QP值。
2)在并行編碼的各幀,每編碼一行宏塊之后,按照式(6)~(8)進(jìn)行coeff更新,然后根據(jù)coeff以及SAD和QP按式(5)計(jì)算并預(yù)測(cè)當(dāng)前幀剩余部分的比特。
3)由當(dāng)前幀已編碼的比特?cái)?shù)和步驟2)預(yù)測(cè)的剩余比特?cái)?shù),作為當(dāng)前幀的預(yù)測(cè)比特,根據(jù)當(dāng)前幀預(yù)測(cè)值與目標(biāo)分配比特的差,同時(shí)考慮當(dāng)前幀的緩沖區(qū)情況調(diào)整QP值,得到下一行的QP值。
4)根據(jù)當(dāng)前幀更新后的coeff和調(diào)整后的QP值,重新預(yù)測(cè)當(dāng)前幀的比特?cái)?shù),按照式(2)更新所有正在并行編碼幀的緩沖區(qū)。
5)對(duì)于并行編碼的各幀,循環(huán)計(jì)算步驟2)~4)。
為了驗(yàn)證所提出的碼率控制算法可行性,本文采用廣電總局廣播科學(xué)規(guī)劃院6個(gè)1 920×1 080的高清序列作為測(cè)試序列:volleyball,dial,parterre,basketball,leaf,birdcage。并行編碼的多線程條件為:總線程數(shù)24,幀間線程數(shù)12。本文算法在加速比可達(dá)到12的前提下,通過(guò)測(cè)試基于串行編碼的碼率控制和本文提出的基于并行編碼的碼率控制兩種條件下PSNR和VBV緩沖區(qū)情況,證明所提出算法的可行性。在下面試驗(yàn)中,串行條件是基于串行編碼的碼率控制方法,并行條件是本文提出的基于并行編碼的碼率控制方法。
4.1PSNR對(duì)比
本文對(duì)6個(gè)高清序列進(jìn)行測(cè)試,設(shè)置運(yùn)動(dòng)估計(jì)參數(shù)為ME2,亞像素搜索參數(shù)為2,比特率為12 000 kbit/s。首先給出6個(gè)序列在串行和并行碼率控制下的平均PSNR數(shù)值,如表1所示。
表1 串行和并行條件下測(cè)試序列的平均PSNR
dB
條件parterredialvolleyballbasketballleafbirdcage串行248891624799933240697324019424908443243006并行248906424799123240461324002124827293242139
從表1可以看出,并行條件下的平均PSNR與串行條件下的比較,性能下降在0.01~0.12 dB,屬于可以接受的范圍,說(shuō)明本文算法在并行編碼多幀時(shí)沒(méi)有擴(kuò)大誤差,圖像質(zhì)量仍在理想范圍內(nèi)。
為了能更直觀地分析每個(gè)序列在串行碼率控制和并行碼率控制條件下的率失真情況,筆者繪制在并行和串行碼率控制方案下各個(gè)序列250幀的亮度分量編碼率失真對(duì)比曲線圖,如圖4所示。
圖4 測(cè)試序列在不同碼率控制條件下的每幀PSNR
由上述測(cè)試序列每幀PSNR對(duì)比圖可以看出,并行條件下每幀PSNR性能基本與串行條件下接近,符合實(shí)際應(yīng)用的需求,解決了并行編碼的碼率控制的難題。
4.2VBV緩沖區(qū)占有度對(duì)比
對(duì)于并行編碼系統(tǒng)下的碼率控制方案,除了測(cè)試PSNR性能,還需要從VBV緩沖區(qū)的充溢程度來(lái)考察其性能。對(duì)6個(gè)不同高清序列每幀的VBV情況分別在串行和并行條件下進(jìn)行測(cè)試,得到如圖5所示6組對(duì)比曲線圖。
由每幀VBV緩沖情況對(duì)比圖可以看出,并行條件下VBV沒(méi)有上溢和下溢,每幀VBV情況基本與串行條件下接近,說(shuō)明對(duì)并行編碼幀的比特預(yù)測(cè)相對(duì)準(zhǔn)確,保證了碼率控制的精確性。
本文首先分析傳統(tǒng)碼率控制方案應(yīng)用于并行編碼框架的局限性,然后研究了基于并行編碼的碼率控制方案,根據(jù)并行編碼的特性,通過(guò)幀級(jí)比特分配和動(dòng)態(tài)預(yù)測(cè)幀比特來(lái)進(jìn)行并行碼率控制。最后通過(guò)測(cè)試串行和并行條件下PSNR和VBV緩沖區(qū)來(lái)說(shuō)明本文提出的算法解決了并行編碼碼率控制的難題。
圖5 測(cè)試序列在不同碼率控制條件下的每幀VBV緩沖情況
[1] GE S,TIAN X,CHEN Y K.Efficient multithreading implementation of H.264 encoder on Intel hyper-threading architectures[C]//Proc. 2003 Joint Conference of the Fourth International Conference.Singapore:IEEE Press,2003:469-473.
[2] CHING C, ALVAREZ-MESA M,JUURLINK B.Parallel scalability and efficiency of HEVC parallelization approaches[J]. IEEE Trans. Circuit and System for Video Technology,2012,22(12):1827-1838.
[3] FULDSETH A,HOROWITZ M,XU S L.Titles for managing computational complexity of video encoding and decoding[C]//Proc. Picture Coding Symposium(PCS).Krakow:IEEE Press,2012:382-392.
[4] JIANG Xiaochen,LI Guoping.A novel parallel video coding framework for AVS+ real time encoder[C]//Proc.Pacific-Rim Conference on Multimedia.Nanjing:Springer International Publishing,2013:170-179.
[5] 蔣驍辰,李國(guó)平.基于AVS+實(shí)時(shí)編碼的多核并行視頻編碼算法[J].電子與信息學(xué)報(bào),2014,36(4):810-816.
[6] MA Siwei,GAO Wen,LU Yan,et al.Proposed draft description of rate control on JVT standard[EB/OL].[2015-05-02]. http://ftp3.itu.ch/av-arch/jvt-site/2002_12_Awaji.
[7] LI Zhengguo,PAN Feng,LIM K P,et al.Adaptive basic unit layer rate control for JVT[EB/OL].[2015-04-14].http://wftp3.itu.int/av-arch/jvt-site/2003_03_Pattaya/JVT-G12r1.zip.
[8] 于俊清,李江,魏海濤.基于同構(gòu)多核處理器的H264多粒度并行編碼器[J].計(jì)算機(jī)學(xué)報(bào),2009,32(6):1100-1109.
吳曉光(1990— ),碩士生,主研視頻編解碼技術(shù);
李國(guó)平(1974— ),博士,碩士生導(dǎo)師,主要研究方向?yàn)閿?shù)字音視頻編解碼技術(shù)、復(fù)用技術(shù)、網(wǎng)絡(luò)傳輸技術(shù)等;
王國(guó)中(1962— ),博士,教授,博士生導(dǎo)師,研究領(lǐng)域?yàn)橐曨l編解碼與多媒體通信、數(shù)字電視、視頻云計(jì)算等。
責(zé)任編輯:時(shí) 雯
Research of Rate Control Algorithm Based on Parallel Video Coding
WU Xiaoguang,LI Guoping,WANG Guozhong,TENG Guowei,ZHAO Haiwu
(CollegeofCommunicationandInformationEngineering,ShanghaiUniversity,Shanghai200072,China)
Based on the characteristics of parallel video coding, traditional rate control algorithm can not be applied to parallel coding framework directly due to its limitation.In this paper, a rate control algorithm is proposed, in which theSADis calculated before video coding and the original frame is used as reference frame. Then the rate control algorithm is accomplished by using theSADto allocate frame-level bits and predict those frame bits which be coded simultaneously.Experimental results demonstrate the feasibility of the scheme by testingPSNRandVBVunder condition of serial and parallel rate control.
parallel coding;rate control;bit prediction;bit allocation
國(guó)家自然科學(xué)基金項(xiàng)目(61271212);上海市科委重點(diǎn)項(xiàng)目資助項(xiàng)目(12511502502)
TN919.8
A
10.16280/j.videoe.2015.16.021
2015-06-24
【本文獻(xiàn)信息】吳曉光,李國(guó)平,王國(guó)中,等.基于視頻并行編碼的碼率控制算法研究[J].電視技術(shù),2015,39(16).