沙 月,楊 靜
(上海海事大學(xué)信息工程學(xué)院,上海 201306)
作為最新一代的視頻編碼技術(shù),H.266/VVC 始于2016 年并于2020 年7 月完成了version 1 版本的定稿。從整體上而言,H.266 依然沿襲了H.265 中基于塊的混合編碼框架,但是對于不同的編碼部分,H.266 標(biāo)準(zhǔn)都在不同程度上引入了一些新技術(shù),如在圖形劃分方面,H.266 的編碼樹單元CTU 的最大尺寸從64×64 擴(kuò)展到128×128,從而匹配更大的圖像尺寸。此外,H.266 采用基于四叉樹并嵌套多類型樹的劃分方式,包括二叉樹和三叉樹,從而將HEVC 中的編碼單元(CU)、預(yù)測單元(PU)、變換單元(TU)的概念進(jìn)行統(tǒng)一[1-2]。H.266 幀內(nèi)預(yù)測的模式數(shù)量為67,并且支持寬角度預(yù)測[3]。在幀間預(yù)測方面,H.266 在H.265 的Merge 以 及AMVP(Advance Motion Vecter Prediction)等模式的基礎(chǔ)上拓展了一些新技術(shù),這些新技術(shù)使得H.266 的編碼效率比H.265 提升約50%,但是與此同時,H.266 的編碼復(fù)雜度大幅提升,對于硬件資源的要求越來越高。
本文對H.266 中基于傳統(tǒng)Merge 模式的HMVP(History-based Motion Vector Prediction)技術(shù)進(jìn)行優(yōu)化。通過存儲臨時的HMVP 候選列表來解決原有HMVP 候選列表在換行后無法參考之前運(yùn)動信息的問題,在構(gòu)建Merge 候選列表時,通過設(shè)立相關(guān)的閾值并根據(jù)列表中已有的空時域候選數(shù)量,合理簡化HMVP 列表的去冗余過程,從而進(jìn)一步提升H.266的編碼性能并降低編碼復(fù)雜度。
傳統(tǒng)Merge 技術(shù)的主要思想是采用空域和時域MV(Motion Vecter)進(jìn)行聯(lián)合預(yù)測,通過建立MV 候選列表并利用最小率失真(RD)準(zhǔn)則進(jìn)行率失真代價計(jì)算,從而選取一個性能最優(yōu)的MV 作為當(dāng)前PU的預(yù)測MV[4]。
1.1.1 空域候選MV 構(gòu)造
空域候選MV 的構(gòu)造過程如圖1 所示。其中:A1、A0 分別表示當(dāng)前PU 的左下方以及和左下方距離最近的PU;B1、B0 分別表示當(dāng)前PU 右上方以及和右上方距離最近的PU。根據(jù)H.265 中的相關(guān)規(guī)定,空域最多可以提供4 個候選MV,即可以從5 個候選MV 中選擇4 個,其選擇的優(yōu)先級從高到低依次為A1→B1→B0→A0→(B2),B2 為替補(bǔ)選擇,當(dāng)A1、B1、B0、A0 中有一個或多個不存在時才能選擇B2 作為替補(bǔ)。
圖1 空域候選MV 的構(gòu)造示意圖Fig.1 Construction diagram of spatial candidate MV
值得注意的是,當(dāng)CU 的劃分方式為N×2N、nL×2N或nR×2N時,如圖2(a)所示,左邊預(yù)測塊可以按照正常的方式進(jìn)行預(yù)測,但是對于右邊的預(yù)測塊,A1 位置的運(yùn)動信息將不能再被使用,否則可能出現(xiàn)PU1 和PU2 采用相同運(yùn)動信息的情況,這與2N×2N的劃分方式相同。因此,運(yùn)動信息的選取順序變?yōu)锽1→B0→A0→B2。同理,如圖2(b)所示,當(dāng)CU 的劃分方式為2N×N、2N×nU或2N×nD時,PU2 位置的運(yùn)動矢量候選不能選擇B1 的運(yùn)動信息,因此,運(yùn)動信息的選取順序變?yōu)锳1→B0→A0→B2。
圖2 矩形劃分中空域候選MV 的構(gòu)造示意圖Fig.2 Construction diagram of spatial candidate MV in rectangular division
1.1.2 時域候選MV 構(gòu)造
時域候選MV 利用同位預(yù)測單元的運(yùn)動信息進(jìn)行構(gòu)造,如圖3 所示。需要注意的是,時域候選列表不能直接采用所選擇的預(yù)測單元的運(yùn)動信息,需要根據(jù)其與參考圖像的位置關(guān)系經(jīng)過一定比例的縮放才能使用。具體過程如圖3 所示,從同位幀Col-Pic中找出2 個相當(dāng)于TBR 或TCT 位置(如圖1 所示)的同位預(yù)測單元作為候選位置,選擇其一(TBR 優(yōu)先)為時域參考預(yù)測單元Col-PU,設(shè)tb是當(dāng)前幀Curr_Pic與其參考幀Curr_Ref 之間的時間距離,td為同位幀Col_Pic 與其參考幀Col_Ref 之間的時間距離,則當(dāng)前預(yù)測單元Curr_PU 的運(yùn)動矢量MMVCurr_PU可由Col_PU 的運(yùn)動矢量MMVCol_PU根據(jù)tb和td的比值進(jìn)行縮放得到,即:
圖3 Merge 時域MV 的伸縮示意圖Fig.3 Expansion diagram of Merge time domain MV
此外,對于B幀而言,由于其需要確定2個候選MV,因此可以使用組合雙向預(yù)測的方法來補(bǔ)充Merge候選。本文考慮在List0 和List1 已導(dǎo)出的4 個候選中選取時域MV 然后進(jìn)行兩兩組合,去除候選相同的組合還剩下12 種組合,擇優(yōu)選擇加入到候選列表中,最后再按需要決定是否增加零候選進(jìn)入列表[5]。
傳統(tǒng)Merge 技術(shù)利用相鄰塊的運(yùn)動信息來進(jìn)行預(yù)測,但在某些特殊情況下(如圖像被物體遮擋),當(dāng)前編碼塊可能與不相鄰的塊更相似,解決該問題的一種簡單方法是獲取來自非相鄰塊的運(yùn)動信息,但是,這一過程對于硬件實(shí)施而言較為困難[6]。為此,H.266 提出HMVP 技術(shù),該技術(shù)通過創(chuàng)建一個有限的緩沖區(qū)來存儲先前編碼塊的運(yùn)動信息,先前編碼塊的運(yùn)動信息被定義為HMVP 候選,多個HMVP 候選被存儲在HMVP 列表中,并且會對該表格在編碼和解碼過程中進(jìn)行實(shí)時維護(hù)[7]。當(dāng)一個塊被編解碼完成后,再按照先進(jìn)先出(FIFO)的規(guī)則將該塊的運(yùn)動信息添加到HMVP 列表的尾部[8]。在添加新候選的過程中,需要進(jìn)行冗余度檢測以確保新進(jìn)入的候選不能與列表中已有候選的運(yùn)動信息重復(fù),若出現(xiàn)重復(fù),需要舍棄先前的候選,之后的候選逐一向前移動,最后再將新候選添加到HMVP 列表尾部[9-11]。HMVP 候選列表更新過程如圖4 所示。
圖4 HMVP 候選列表更新過程Fig.4 HMVP candidate list update process
在實(shí)際過程中,HMVP候選以編碼樹單元CTU 行為單位進(jìn)行維護(hù)和更新,每當(dāng)進(jìn)入一個新的CTU 行時,列表就會被清空,其過程如圖5 所示。
圖5 HMVP 候選列表換行清空過程Fig.5 HMVP candidate list wrapping and clearing process
當(dāng)HMVP 列表更新完成后,列表以逆序方式進(jìn)入Merge 候選列表中,即按索引號從5 到0 的順序加入[12-14]。為了確保后續(xù)的運(yùn)動補(bǔ)償過程是有意義且有效的,同樣需要對此過程進(jìn)行冗余度檢查。H.266的Merge 模式候選數(shù)量為6,但空時域候選最多的可選數(shù)量與H.265 相同,仍然分別為4 個和1 個[15-16],在空時域候選結(jié)束后,若列表未滿,則可以使用HMVP候選進(jìn)行補(bǔ)充。為了獲得編碼復(fù)雜度和編碼性能之間的平衡,HMVP 候選列表的數(shù)量也被設(shè)為6[17-19]。值得一提的是,在更新HMVP 列表時,需要檢查當(dāng)前已編解碼的塊是否可用,所謂可用是指該塊即不是幀內(nèi)預(yù)測塊也不是仿射變換塊。最終的Merge 候選列表構(gòu)建過程如圖6 所示。
圖6 基于HMVP 候選的Merge 列表建立過程Fig.6 Merge list establishment process based on HMVP candidates
H.266 中基于HMVP 技術(shù)的候選模式存在以下問題:
1)HMVP 候選列表的更新和維護(hù)以CTU 行為單位進(jìn)行,并且每個CTU 行使用同一個HMVP 候選列表。但是,在每一個CTU 行編碼完成后進(jìn)入下一個CTU 行時,之前的HMVP 候選列表會被清空。因此,下一行CTU 的第一個CU 在進(jìn)行編碼時無法參考之前的候選列表。這種算法模式只考慮各CTU 行之間的獨(dú)立性卻沒有考慮它們之間的相關(guān)性[20]。在幀間預(yù)測中,運(yùn)動矢量的預(yù)測十分關(guān)鍵,如果某個運(yùn)動信息預(yù)測不準(zhǔn),會給后續(xù)的預(yù)測造成很大的干擾,甚至導(dǎo)致一連串的預(yù)測錯誤。
2)在整個Merge 列表的構(gòu)建過程中,需要進(jìn)行2 次冗余度檢查:一次是在更新HMVP 列表的過程中,新加入的HMVP 候選要與已經(jīng)進(jìn)入的候選依次進(jìn)行比較;另一次是將HMVP 候選加入到Merge 候選列表中時,要與Merge 列表中原有的空時域候選依次進(jìn)行比較。本文假設(shè)Merge 列表中原有的空時域候選數(shù)量為Morigin,Merge 列表最多可以容納的HMVP 候選數(shù)為Mmax,HMVP 列表中將要進(jìn)行查驗(yàn)的候選數(shù)為Mcheck。本文分2 種情況來討論所需進(jìn)行的冗余度檢查次數(shù):
(1)若Mcheck≥Mmax,此時,當(dāng)HMVP 候選列表的前Mmax-1 個候選(這里的“前”是指HMVP 列表中索引較大的候選)和Merge 候選列表的原有Morigin個空時域候選都不同,但其余HMVP 候選的運(yùn)動信息都與Morigin個空時域候選中的某個候選一致時,所需的冗余度檢查次數(shù)最多,總數(shù)為:
(2)當(dāng)Mcheck 通過計(jì)算可以看出,這種方式在構(gòu)建Merge 列表時冗余度檢查次數(shù)可以高達(dá)14 次,即這種方式比較繁瑣,有較大的優(yōu)化空間。此外,由于當(dāng)Merge 候選列表中可用的候選數(shù)達(dá)到5 個時列表的構(gòu)造過程就會結(jié)束,即當(dāng)HMVP 候選列表中候選的數(shù)量達(dá)到最大值6 時,處于末端的候選將無法被采用?;谏鲜龇治?,本文考慮設(shè)置某些條件,當(dāng)滿足該條件時對要進(jìn)行冗余度檢查的HMVP 候選數(shù)量進(jìn)行相應(yīng)的限制,進(jìn)而降低復(fù)雜度。 本文針對H.266 的候選決策進(jìn)行如下改進(jìn): 1)對于HMVP 候選列表在換行時會清除列表而導(dǎo)致下一行CTU 的第一個CU 在編解碼時無法參考之前運(yùn)動信息的問題,本文提出一種改進(jìn)方案,其核心思想是:當(dāng)進(jìn)入一個新的CTU 行開始編碼時,使用一個臨時存儲的HMVP 候選列表,這個臨時存儲的HMVP 候選列表來自于上一個CTU 行中與其相鄰的CTU 編碼完成后所更新的HMVP 候選列表,這樣就解決了首個CU 編碼時不能參考以往HMVP 候選的問題,并且這2 個CU 之間距離較近,其運(yùn)動信息具有很大的參考性。改進(jìn)的HMVP 候選列表換行過程如圖7 所示。 圖7 改進(jìn)的HMVP 候選列表換行過程Fig.7 Improved HMVP candidate list wrapping process 2)通過對冗余度檢查的過程進(jìn)行優(yōu)化,以簡化基于HMVP 技術(shù)的Merge 候選列表,從而在盡量不影響編碼效果的情況下減少冗余度檢查次數(shù)。本文設(shè)置閾值來限制檢查次數(shù),依據(jù)Merge 列表中已有的Morigin個空時域候選來確定將要進(jìn)行冗余度檢查的HMVP 候選數(shù)量。此外,由上文分析可以得知,當(dāng)HMVP 候選列表中候選數(shù)量達(dá)到最大值6 時,最多也只能有5 個候選被采用,最末端的候選來自于上一個已編碼塊,其運(yùn)動信息與當(dāng)前已有的空時域列表重復(fù)的概率較大,因此,本文考慮刪除最末端的候選,即只讓0 到4 索引的候選有機(jī)會加入Merge列表。對將要進(jìn)行冗余度檢查的Mcheck個候選做出如下定義: 根據(jù)改進(jìn)方案可知:當(dāng)Merge 候選列表中原有的Morigin個空時域候選數(shù)量大于等于2 時,則無需對所有的HMVP 候選進(jìn)行查驗(yàn)(因?yàn)椴捎媚嫘蚣尤氲姆绞剑詮牡箶?shù)第二個開始檢查),完成后若還可以繼續(xù)向Merge 列表補(bǔ)充候選,其余的HMVP 候選可以直接加入直到完成列表構(gòu)建;當(dāng)Merge 候選列表中原有的空時域候選只有一個時,此時需要對除了最末端的候選外所有的候選進(jìn)行檢查;當(dāng)Merge列表中無可用的空時域候選時,無需進(jìn)行冗余度檢查。在此方案下,根據(jù)式(2)計(jì)算出的優(yōu)化冗余度檢查次數(shù)如表1 所示。 表1 改進(jìn)方案的冗余度檢查次數(shù)Table 1 Redundancy check times of improved scheme 由表1可以看出,改進(jìn)方案的最大冗余度檢查次數(shù)降為6次,改進(jìn)后最終的Merge列表構(gòu)建過程如圖8所示。 圖8 改進(jìn)算法的Merge 候選列表構(gòu)建過程Fig.8 Merge candidate list construction process in improved algorithm 本文實(shí)驗(yàn)基于H.266 標(biāo)準(zhǔn)測試軟件VTM 10.0,所用計(jì)算機(jī)配置為因特爾酷睿i5-6500 CPU @3.2 GHz,內(nèi)存為8 GB,操作系統(tǒng)為Windows 10 X64,運(yùn)行環(huán)境是Microsoft Visual Studio 2017。測試序列為H.266 標(biāo)準(zhǔn)測試中的A1、A2、B、C、D、E、F 共7 組序列,測試環(huán)境為隨機(jī)接入(RA)方式,量化參數(shù)(QP)依次取22、27、32、37。實(shí)驗(yàn)數(shù)據(jù)中的BD-rate 表示在圖像質(zhì)量PSNR 一致的情況下碼率的平均變化情況,若其數(shù)值為負(fù)數(shù),表示節(jié)省了碼率,編碼性能得到提升;反之,表示碼率有所損失。編解碼時間的百分比值是與標(biāo)準(zhǔn)編碼器比較的結(jié)果,其中,EncT 是改進(jìn)算法的總編碼時間占標(biāo)準(zhǔn)算法總編碼時間的比例,EncT-inter 是改進(jìn)算法幀間預(yù)測的時間占原算法幀間預(yù)測的時間比例。測試結(jié)果如表2 所示。 表2 改進(jìn)算法對各序列的測試結(jié)果Table 2 Test results of the improved algorithm for each sequence % 由表2 可以看出:對于亮度分量Y 而言,幾乎所有測試序列的BD-rate 值都為負(fù)數(shù),平均節(jié)省了0.46%的碼率,編碼性能有所提高,其率失真性能的提高主要來自于改進(jìn)的HMVP 候選列表更新過程,使得運(yùn)動信息的預(yù)測更加準(zhǔn)確;MarketPlace、RitualDance、BlowingBubbles、BQSqure 等序列的改善效果較好,而BasketballDrive、BasketballDrill、BasketballPass、RaceHorses 等序列的改善效果較差,分析其原因可以發(fā)現(xiàn),效果較好的幾個序列的共同特征是其紋理特性較為均質(zhì)和平坦,效果較差的幾個序列的紋理特性為非均質(zhì)且運(yùn)動較為劇烈;由于改進(jìn)的HMVP 列表在換行更新過程中參考了上一行中與其相鄰的CU 所使用的HMVP 列表,因此算法對于較為平坦的序列能夠進(jìn)行更好地預(yù)測,對于運(yùn)功較為劇烈的序列則效果較差,極少數(shù)正值是由于少數(shù)情況下簡化的去冗余過程會導(dǎo)致少許編碼損失,但幾乎可以忽略不計(jì);對于另外2 個色度分量而言,出現(xiàn)了少量的波動情況,其主要原因是色度分量在幀間預(yù)測的過程中采取直接使用亮度分量的劃分形式和運(yùn)動信息,不另外單獨(dú)進(jìn)行劃分和預(yù)測,由此導(dǎo)致有時預(yù)測不夠準(zhǔn)確,殘差較大,但總體而言,色度分量的編碼性能也有少量提升;在編碼復(fù)雜度方面,對于所有的測試序列,改進(jìn)算法的編碼復(fù)雜度均有所下降,編碼總時間降低比例值在1.21%~7.72%之間,平均為4.09%,對于幀間預(yù)測過程而言,其編碼時間降低比例值在3.52%~17.54% 之間,平均為10.87%。 將本文算法與文獻(xiàn)[21]所提基于直接模式(DM)的統(tǒng)一色度候選優(yōu)化算法(算法1)、基于DM 的色度多核變換算法(算法2)以及文獻(xiàn)[22]所提分量間線性模型(CCLM)算法(算法3)、亮度幀內(nèi)模式編碼優(yōu)化算法(算法4)進(jìn)行對比實(shí)驗(yàn),由于文獻(xiàn)[21]中未進(jìn)行Class D 和Class F 的測試,因此只對Class A1、Class A2、Class B、Class C、Class E 這5 類序列進(jìn)行比較,實(shí)驗(yàn)結(jié)果如表3、表4 所示。從中可以看出,本文算法亮度分量的BD-rate 值均小于對比算法,編碼時間也具有明顯優(yōu)勢。 表3 5 種算法的BD-rate(Y)值比較結(jié)果Table 3 Comparison results of BD-rate(Y)values of five algorithms % 表4 5 種算法的編碼時間比較結(jié)果Table 4 Comparison results of coding time of five algorithms % 本文對H.265 中傳統(tǒng)的候選決策和H.266 中基于HMVP 技術(shù)的Merge 候選決策進(jìn)行分析,針對HMVP 候選列表換行清空而導(dǎo)致的無法參考先前運(yùn)動信息的問題,以及在構(gòu)建Merge 候選列表過程中存在的繁瑣的去冗余過程,提出一種改進(jìn)的候選決策算法。該算法通過臨時存儲HMVP 列表的方法來優(yōu)化原有HMVP 候選列表中CTU 行在換行時出現(xiàn)的不足,并根據(jù)Merge 列表中已有的空時域候選來合理選擇去冗余的HMVP 候選數(shù)量,以簡化在構(gòu)建Merge 列表時的去冗余過程。實(shí)驗(yàn)結(jié)果表明,該算法能夠在提升編碼性能的同時降低編碼復(fù)雜度。后續(xù)將結(jié)合基于子塊的幀間預(yù)測技術(shù)來優(yōu)化算法,以提升其編碼效率并進(jìn)一步降低編碼復(fù)雜度。3 改進(jìn)的候選決策算法
4 實(shí)驗(yàn)與結(jié)果分析
5 結(jié)束語