周帥燃,楊 靜
(上海海事大學(xué) 信息工程學(xué)院,上海 201306)
與之前的H.264/高級視頻編碼(AVC)來說,高效視頻編碼(HEVC)標(biāo)準(zhǔn)[1]在相似的視頻質(zhì)量下節(jié)省了大約50%的比特率.這主要是因?yàn)樵贖EVC當(dāng)中引用了新的四叉樹劃分對圖像結(jié)構(gòu)進(jìn)行劃分成樹單元(Coding Tree Unit,CTU),其中最大編碼單元(Largest Coding Unit,LCU)尺寸為64×64,最小編碼單元(Shortest Coding Unit,SCU)尺寸為8×8.雖然這樣使編碼劃分更加靈活,預(yù)測模式更加準(zhǔn)確,但是同樣也極大增加了編碼復(fù)雜度,Correa G等人[2]實(shí)驗(yàn)得到HEVC的編碼時(shí)間是AVC編碼的253%,這顯然不可能順利應(yīng)用在現(xiàn)實(shí)生活中,因此,有必要將HEVC的編碼復(fù)雜度降低到可以接受的范圍,并且其編碼性能的損失可以忽略不計(jì).
近些年來,在降低HEVC編碼復(fù)雜度的研究中已經(jīng)看到了巨大的進(jìn)步,出現(xiàn)了各種有效的方法.盡管這些方法大都是運(yùn)用在幀間預(yù)測模式上,但是也有必要降低HEVC幀內(nèi)編碼復(fù)雜度,毋笑蓉等人[3]提出了一種基于機(jī)器學(xué)習(xí)的隨機(jī)森林分類算法,有效提高了幀內(nèi)編碼劃分速度.朱威等人[4]提出一種結(jié)合紋理信息和方向信息特征,分析編碼單元的紋理劃分特征與最佳編碼單元之間的相關(guān)性,來判斷是否提前終止劃分.易清明等人[5]提取編碼單元紋理特征并線下訓(xùn)練支持向量機(jī)模型,從而對編碼深度進(jìn)行快速?zèng)Q策,并根據(jù)CU紋理復(fù)雜度,對紋理簡單的CU提前終止劃分,對紋理復(fù)雜的CU直接進(jìn)行劃分[6].Yao-Dong T等人[7]通過對當(dāng)前CU以及進(jìn)一步劃分的四個(gè)子CU的率失真代價(jià)(RDO)進(jìn)行對比,來決定當(dāng)前CU是否劃分.黃勝等人[8]采用差分矩陣來表示紋理的復(fù)雜度,采用子塊相似度來對CU是否劃分進(jìn)行判決.Song Y等人[9]設(shè)計(jì)了一種離散全變差的像素插值求解計(jì)算,利用像素之間的差值得到的全變差與設(shè)定好的閾值相比較,來確定編碼單元是否劃分.
上述算法中紋理復(fù)雜度雖然被大量使用,但根據(jù)不同使用場景,紋理特征仍然有被挖掘利用的潛能.在編碼率失真性能不受到影響的前提下降低編碼復(fù)雜度,本文結(jié)合傳統(tǒng)方法和深度學(xué)習(xí)提出了一種應(yīng)用在編碼單元決策的算法.針對64×64編碼單元,通過綜合分析紋理復(fù)雜度和量化參數(shù),利用閾值來決策編碼單元是否劃分;而針對32×32和16×16紋理復(fù)雜度較高的編碼單元,不能簡單通過閾值來準(zhǔn)確預(yù)測是否提前劃分,故設(shè)計(jì)一種CNN結(jié)構(gòu)提前終止劃分(訓(xùn)練數(shù)據(jù)庫來源于Li T等人研究[10]).
本節(jié)從3個(gè)部分詳細(xì)描述了編碼單元快速劃分算法,首先針對大小為64×64的編碼單元提出了基于閾值紋理分類的模型.其次針對32×32和16×16的編碼單元設(shè)計(jì)一種CNN網(wǎng)絡(luò).最后對編碼單元快速劃分算法進(jìn)行了總結(jié).
針對64×64的編碼單元,本文利用相鄰均方誤差來測量它的紋理復(fù)雜度,并用大量實(shí)驗(yàn)綜合考慮閾值與量化參數(shù)(QP)和CU深度的關(guān)系,建立閾值與64×64編碼單元之間的關(guān)系.
標(biāo)準(zhǔn)差(SD)是常用度量紋理復(fù)雜度的指標(biāo)之一,它能準(zhǔn)確的反映出全局的紋理復(fù)雜度,但是具有較弱的局部復(fù)雜性反映能力,而相鄰均方誤差(NMSE)就能彌補(bǔ)這種缺陷,因此本文選取NMSE作為圖像紋理復(fù)雜度,NMSE計(jì)算表達(dá)式如下:
(1)
(2)
本文通過大量的實(shí)驗(yàn)發(fā)現(xiàn)閾值與CU劃分深度、QP和紋理復(fù)雜度高度相關(guān),圖1顯示了在QP=32的情況下4個(gè)序列上的最佳CU分布(PeopleOnStreet,BasketballDrill,RaceHorses and Cactus).由圖1可以看出,5種大小的CU所占比例都不超過40%,因此在閾值分析的時(shí)候需要考慮CU的大小.圖2是BasketballDrillText的第1幀CU在QP(22,27,32,37)的分布.從圖2被選中的灰色方格可以看出隨著QP的不斷減小,越來越多高深度的CU顯現(xiàn)出來,這是因?yàn)樵赒P較小的時(shí)候,CTU往往被劃分為較小尺寸的CU,主要是為了避免較大的失真度.因此可以看出QP也是閾值建模的重要因素.通過以上分析,并根據(jù)大量實(shí)驗(yàn)數(shù)據(jù)得出閾值與QP之間的關(guān)系如圖3所示.
圖1 序列PeopleOnstreet、Catus、Johnny和ChinaSpeed CU分布圖Fig.1 Distribution of the sequence PeopleOnstreet,Catus,Johnny and ChinaSpeed CU
圖2 BasketballDrillText第1幀CTU分布圖Fig.2 BasketballDrillText CTU distribution of the first frame
圖3 QP與閾值之間的關(guān)系Fig.3 Relationship between QP and threshold
本文選取在QP=22時(shí)閾值為1.7,QP=27時(shí)閾值為2.2,QP=32時(shí)閾值為2.8,QP=37時(shí)閾值為3.6.即將等式(1)中NMSE的值與閾值作比較,若NMSE的值大于閾值,則對64×64的編碼單元直接劃分,相反則提前終止劃分.
深度學(xué)習(xí)在實(shí)踐過程中往往需要大量的學(xué)習(xí)樣本,并對每個(gè)學(xué)習(xí)樣本標(biāo)記類別,本文選取學(xué)者李天一[10]建立的HEVC幀內(nèi)預(yù)測編碼數(shù)單元數(shù)據(jù)庫(CTU Partion of Intra Mode HEVC,CPIH)為訓(xùn)練樣本,以防測試序列與訓(xùn)練樣本存在相關(guān)性.
CPIH數(shù)據(jù)庫是以高分辨拍攝的2000張分辨率為4928×3264原始圖像集,此外每組圖像集又被下采樣分辨率為2880×1920,1536×1024,768×512的圖像集,并且每一幀都由原始HM編碼器進(jìn)行編碼,不僅保證了足夠多變的訓(xùn)練數(shù)據(jù),也提高CTU預(yù)測劃分精準(zhǔn)度.
本文設(shè)計(jì)分離的CNN結(jié)構(gòu)提高劃分效率.首先將CU深度引入內(nèi)核大小,使內(nèi)核大小與CU大小一致,以避免部分紋理細(xì)節(jié)損失[11].其次將QP引入損失函數(shù),以提高樣本的擬合度.具體的CNN結(jié)構(gòu)如圖4所示.
圖4 CTU 32×32和16×16的CNN結(jié)構(gòu)Fig.4 CNN structure for CTU 32×32 and 16×16
輸入層(Input Layer):CNN模型輸入是不同CU大小的矩陣,CU的輸入大小(32×32,16×16),對應(yīng)著每個(gè)CU的亮度.
卷積層(Convolution Layer):針對32×32CTU,并行運(yùn)用8×8和4×4兩個(gè)內(nèi)核,8×8內(nèi)核可以在32×32 CTU中有效地提取紋理特征的4個(gè)8×8子CU,4×4內(nèi)核可以增強(qiáng)紋理細(xì)節(jié)并避免填充.針對16×16CTU,并行運(yùn)用4×4和2×2兩個(gè)內(nèi)核.對于非重疊卷積,本文將內(nèi)核步幅統(tǒng)一設(shè)置為2×2,在第一層卷積之后,通過與非卷積重疊的2×2內(nèi)核進(jìn)行卷積來進(jìn)行操作,直至最后特征圖大小為2×2.
歸并層(Concatenation Layer):將卷積層所產(chǎn)生的兩組分別具有256個(gè)2×2特征圖串聯(lián)在一起,然后通過串聯(lián)層轉(zhuǎn)換為向量.歸并后的特征圖由不同來源組合而成,有助于獲得全局和局部特征.
全連接層(Full Connection Layer):歸并后的級聯(lián)向量要流經(jīng)三個(gè)全連接層,包括兩個(gè)隱藏層和一個(gè)輸出層,在第二層全連接層和輸出層之間,在CNN訓(xùn)練過程當(dāng)中,會(huì)以50%的概率隨機(jī)丟失,避免過擬合,提高網(wǎng)絡(luò)泛化能力.
由于ReLU具有很快的收斂速度,所有卷積層和隱藏的全連接層都是有用修正線性單元(rectified linear units,ReLU),并且根據(jù)輸出結(jié)果為劃分或者不劃分,輸出層采用S型(Sigmod)函數(shù)進(jìn)行激活,使輸出層都位于(0,1)之間.
本節(jié)總結(jié)了整體CU劃分過程,針對64×64的編碼單元,首先通過計(jì)算紋理復(fù)雜度與我們經(jīng)驗(yàn)所得的閾值進(jìn)行比較判斷是否劃分,如果小于則不劃分,大于則進(jìn)行下一步判
斷,對其他不同大小的CTU使用CNN分類器來決定是否劃分.整個(gè)算法流程如圖5所示.
圖5 算法總流程圖Fig.5 Overall flow chart of the algorithm
本文提出的算法以HM16.5標(biāo)準(zhǔn)為基礎(chǔ),所配置的文件是內(nèi)部主文件,量化參數(shù)是22、27、32、37,測試序列是JCT-VC的推薦測試序列.結(jié)果分析的硬件是Intel Core i7-8700 CPU,3.2GHz主頻,16GB內(nèi)存,Windows10 64操作系統(tǒng)的計(jì)算機(jī)進(jìn)行的.本文選取編碼時(shí)間減少的百分比ΔTS、比特率變化百分比ΔBR和峰值信噪比變化ΔPSNR來衡量編碼性能和質(zhì)量,計(jì)算公式如下所示:
(3)
(4)
ΔPSNR=PSNRprop-PSNRHM
(5)
式(3)中THM和Tprop分別代表原始算法編碼所需時(shí)間和所提出的算法需要的時(shí)間,式(4)中BRHM和BRprop分別代表原始編碼的比特率和所提算法的比特率,式(5)中PSNRHM和PSNRprop分別代表原始編碼的峰值信噪比和所提算法的峰值信噪比.
表1為本文算法與原始HM16.5算法之間的對比結(jié)果,由表可看出本文算法在編碼比特率僅增加2.15%和峰值信噪比(PSNR)損失0.11dB的狀況下,平均節(jié)省60.28%的幀內(nèi)編碼時(shí)間.為了評估本文算法整體性能,本文還與其他兩種先進(jìn)的算法進(jìn)行比較,為了公平起見,使用相同的配置文件encoder intra main.cfg對16個(gè)標(biāo)準(zhǔn)測試序列進(jìn)行編碼.表1中PartyScene 和BlowingBubbles等此類型測試序列紋理比較復(fù)雜,算法測試性能較差,主要原因是這種類型視頻序列在編碼過程中一般要遍歷到較深的編碼深度,視頻優(yōu)化空間較小.總體來說,本文算法優(yōu)化后的視頻序列在主觀視覺上與原始編碼后的效果基本無差別.
表1 本文算法實(shí)驗(yàn)結(jié)果Table 1 Experimental results of this algorithm
表2顯示了本文算法與其他文獻(xiàn)在幀內(nèi)快速編碼算法的性能對比.從表中可以看出,Li T[10]和Liu D[12]等人得出的編碼比特率分別增加2.38%和8.56%,均高于本文算法得到的比特率.而在PSNR損失方面,Li T[10]等人提出的算法與本
表2 與其他優(yōu)秀算法比較Table 2 Comparison with other excellent algorithms
文算法相近,而Liu D[12]等人提出的算法遠(yuǎn)高于本文算法得到的PSNR.最重要的是在編碼時(shí)間方面,本文算法分別比上述研究的算法快2.91%和14.06%.故可以看出本文算法整體編碼性能表現(xiàn)更加優(yōu)秀.
為了降低HEVC幀內(nèi)編碼復(fù)雜度,本文提出了一種基于紋理分類的深度卷積神經(jīng)網(wǎng)絡(luò)(CNN)模型來對CTU的劃分進(jìn)行預(yù)測.針對64×64的編碼單元,通過分析QP、紋理復(fù)雜度與CU深度之間的關(guān)系,大量進(jìn)行數(shù)據(jù)實(shí)驗(yàn),建立閾值來快速對其進(jìn)行劃分判斷.針對32×32和16×16編碼單元,本文設(shè)計(jì)了兩種不同的CNN結(jié)構(gòu)來決斷它們是否劃分.實(shí)驗(yàn)結(jié)果表明,本文算法與原始HM16.5算法相比,可節(jié)省60.28%的編碼時(shí)間,而在編碼比特率和峰值信噪比的損失方面可忽略不計(jì).