王佳波,楊 靜
(上海海事大學(xué) 信息與工程學(xué)院,上海 201306)
2020 年7 月1 日,國(guó)際電信聯(lián)盟視頻編碼專家組(ITU-T VCEG)和國(guó)際標(biāo)準(zhǔn)化組織活動(dòng)圖像編碼專家組(ISO/IEC MPEG)聯(lián)合制定了新一代視頻編碼標(biāo)準(zhǔn)H.266/VVC。直到標(biāo)準(zhǔn)測(cè)試模型VTM-10.0 后,通用視頻編碼(Versatile Video Coding,VVC)性能基本穩(wěn)定,在相同的峰值信噪比條件下相比HEVC 的高清視頻和超高清視頻,VCC 標(biāo)準(zhǔn)平均碼率節(jié)省了約40%[1]。
在幀間預(yù)測(cè)過(guò)程中,H.265/HEVC 采用平移運(yùn)動(dòng)模型對(duì)物體的運(yùn)動(dòng)進(jìn)行描述,即用一個(gè)運(yùn)動(dòng)矢量表示物體的運(yùn)動(dòng),但該模型不能準(zhǔn)確地描述物體的復(fù)雜運(yùn)動(dòng),例如旋轉(zhuǎn)、縮放和裁剪等[2-3]。在H.266/VVC 的幀間預(yù)測(cè)過(guò)程中采用了仿射運(yùn)動(dòng)模型,它可以更精確地表示物體復(fù)雜運(yùn)動(dòng)的類型[4]。以往的相關(guān)研究嘗試將仿射運(yùn)動(dòng)模型嵌入到運(yùn)動(dòng)補(bǔ)償幀中,但是該方法在VVC 之前一直未被采納,其原因是所提的仿射運(yùn)動(dòng)估計(jì)方法增加了視頻編碼過(guò)程的復(fù)雜度,而且在大多數(shù)應(yīng)用場(chǎng)景中該復(fù)雜度是不能忽略的[5-6]。
文獻(xiàn)[7]基于H.266/VVC 提出2 種降低仿射運(yùn)動(dòng)估計(jì)復(fù)雜度的方法,通過(guò)檢查當(dāng)前塊父塊的最佳幀間預(yù)測(cè)模式是否為Skip 模式,如果是Skip 模式,則當(dāng)前塊直接跳過(guò)整個(gè)仿射運(yùn)動(dòng)估計(jì)過(guò)程;對(duì)當(dāng)前塊的傳統(tǒng)運(yùn)動(dòng)估計(jì)的最佳預(yù)測(cè)方向進(jìn)行檢查,基于檢查結(jié)果決策是否縮減仿射運(yùn)動(dòng)估計(jì)參考幀序列的大小。文獻(xiàn)[8]基于H.266/VVC 的JEM 測(cè)試模型提出一種仿射運(yùn)動(dòng)估計(jì)架構(gòu),該架構(gòu)使得編碼器自適應(yīng)地選擇四參數(shù)或者六參數(shù)仿射模型。文獻(xiàn)[9]基于HEVC 提出一種迭代搜索最優(yōu)仿射運(yùn)動(dòng)矢量的仿射運(yùn)動(dòng)估計(jì)算法和一種仿射高級(jí)矢量預(yù)測(cè)(AAMVP)候選列表的構(gòu)建方法,其中迭代搜索最優(yōu)仿射運(yùn)動(dòng)矢量的仿射運(yùn)動(dòng)估計(jì)算法在VVC 標(biāo)準(zhǔn)中已經(jīng)被采納。
相比H.265/HEVC,H.266/VVC 視頻編碼標(biāo)準(zhǔn)的適應(yīng)場(chǎng)景更廣泛,H.265/HEVC 中的仿射運(yùn)動(dòng)估計(jì)算法難以滿足H.266/VVC 對(duì)編碼復(fù)雜度的要求,因此,本文提出一種改進(jìn)的仿射運(yùn)動(dòng)估計(jì)算法。通過(guò)優(yōu)化VVC 中AAMVP 候選列表的構(gòu)建方法,使得選擇出的候選運(yùn)動(dòng)矢量更精確,同時(shí)對(duì)VVC 中迭代搜索最優(yōu)仿射運(yùn)動(dòng)矢量的方法進(jìn)行優(yōu)化,縮短迭代搜索所需的時(shí)間。
在H.266/VVC 的幀間預(yù)測(cè)中采用與H.265/HEVC平移運(yùn)動(dòng)估計(jì)相類似的方式來(lái)實(shí)現(xiàn)仿射運(yùn)動(dòng)估計(jì)。H.266/VVC 中編碼器首先通過(guò)AAMVP 技術(shù)為當(dāng)前編碼塊構(gòu)建一個(gè)仿射運(yùn)動(dòng)估計(jì)起始運(yùn)動(dòng)矢量組合的候選列表;然后在該列表中選擇一個(gè)最優(yōu)的候選運(yùn)動(dòng)矢量組合,編碼器將該組合作為仿射運(yùn)動(dòng)估計(jì)的起始點(diǎn),通過(guò)迭代搜索確定當(dāng)前編碼塊真實(shí)的運(yùn)動(dòng)矢量組合[10-13]。
在H.266/VVC 的仿射運(yùn)動(dòng)估計(jì)中,有2 種仿射運(yùn)動(dòng)模型,分別為四參數(shù)仿射運(yùn)動(dòng)模型和六參數(shù)仿射運(yùn)動(dòng)模型。四參數(shù)仿射運(yùn)動(dòng)模型使用2 個(gè)控制點(diǎn)的運(yùn)動(dòng)矢量組合來(lái)描述當(dāng)前編碼塊的運(yùn)動(dòng)類型,如圖1 所示。六參數(shù)仿射運(yùn)動(dòng)模型用3 個(gè)控制點(diǎn)的運(yùn)動(dòng)矢量來(lái)描述當(dāng)前編碼塊的運(yùn)動(dòng)類型,相比于四參數(shù)仿射模型能更精確地表示仿射運(yùn)動(dòng)。
圖1 四參數(shù)仿射運(yùn)動(dòng)模型Fig.1 4-parameter affine motion model
當(dāng)前圖像中的編碼塊具有2 個(gè)控制點(diǎn),這2 個(gè)控制點(diǎn)的運(yùn)動(dòng)矢量為mmv(0)和mmv(1),則當(dāng)前編碼塊中任意點(diǎn)(x,y)的運(yùn)動(dòng)矢量如式(1)所示:
其中:ω為當(dāng)前編碼塊的寬度;分別為控制點(diǎn)0 和控制點(diǎn)1 運(yùn)動(dòng)矢量的水平和垂直分量。式(1)也可以改寫成矩陣形式,如式(2)~式(4)所示:
六參數(shù)仿射運(yùn)動(dòng)模型當(dāng)前編碼塊的運(yùn)動(dòng)矢量的推導(dǎo)方式與四參數(shù)仿射運(yùn)動(dòng)模型的推導(dǎo)方式相類似。
AAMVP 技術(shù)在H.266/VVC 中被用于構(gòu)建仿射迭代搜索過(guò)程中起始向量組合候選列表,同時(shí)編碼器會(huì)選擇一個(gè)最優(yōu)的候選向量組合作為迭代搜索的起始位置[14-16]。
在H.266/VVC 中AAMVP 候選列表的長(zhǎng)度被限定為2。首先編碼器按照特定的順序?qū)Ξ?dāng)前編碼塊的相鄰已編碼塊是否使用仿射運(yùn)動(dòng)估計(jì)進(jìn)行檢查,如果相鄰已編碼塊使用了仿射運(yùn)動(dòng)估計(jì),則直接復(fù)用相鄰已編碼塊的仿射運(yùn)動(dòng)信息。如果編碼器對(duì)上一步所有相鄰已編碼塊檢查完成后,AAMVP 候選列表未被填滿,則分別檢查當(dāng)前編碼塊的3 個(gè)角落相鄰塊中第1 個(gè)可用的已編碼塊的平移運(yùn)動(dòng)矢量,若3 個(gè)角落相鄰塊至少存在1 個(gè)可用的平移運(yùn)動(dòng)矢量,則將它們直接構(gòu)造組成運(yùn)動(dòng)矢量組合,并作為AAMVP 的候選項(xiàng)。經(jīng)過(guò)上述步驟,如果候選列表仍未被填滿,則編碼器直接用當(dāng)前編碼塊3 個(gè)角落的相鄰已編碼塊,對(duì)第1 個(gè)可用的已編碼塊的平移運(yùn)動(dòng)矢量進(jìn)行重復(fù)擴(kuò)充為運(yùn)動(dòng)矢量組合,作為AAMVP 候選列表的候選項(xiàng)。然后,若AAMVP 候選列表未被填滿,編碼器檢查當(dāng)前編碼塊的相鄰編碼塊的時(shí)域候選是否存在,若存在,直接作為AAMVP列表的候選項(xiàng)。最后,若候選列表仍未被填滿,編碼器直接使用零向量對(duì)AAMVP 候選列表進(jìn)行填充。圖2 所示為AAMVP 候選列表中候選來(lái)自于當(dāng)前編碼塊的相鄰已編碼塊的位置信息[17-19]。
圖2 仿射AAMVP 候選列表的構(gòu)建Fig.2 Construction of affine AAMVP candidate list
在H.266/VVC 中,編碼器從AAMVP 候選列表中選出一個(gè)最優(yōu)的候選項(xiàng),將該最優(yōu)候選項(xiàng)作為起始點(diǎn),通過(guò)迭代搜索得到當(dāng)前編碼塊真實(shí)的仿射運(yùn)動(dòng)矢量。
在迭代搜索過(guò)程中,編碼器采用最小均方誤差作為匹配準(zhǔn)則,如式(5)所示:
其中:ω和h分別為當(dāng)前編碼塊的寬度和高度;為當(dāng)前編碼塊所在的圖像;為當(dāng)前編碼塊的參考圖像。
定義第i次迭代過(guò)程的運(yùn)動(dòng)矢量變化為,則第i次迭代時(shí)的運(yùn)動(dòng)矢量如式(6)所示:
其中:(x,y)為當(dāng)前編碼塊的位置;為一個(gè)行矩陣。的轉(zhuǎn)置矩陣如式(7)所示:
經(jīng)過(guò)i次迭代后,參考點(diǎn)的像素值如式(8)所示:
其中:(xi-1,yi-1)為上一次迭代搜索時(shí)匹配塊的位置。
對(duì)式(8)進(jìn)行泰勒展開,并忽略高階項(xiàng)得到式(9):
在H.266/VVC 的測(cè)試模型VTM10.0 中,采用Sobel 算子對(duì)像素矩陣進(jìn)行卷積,求解的相對(duì)梯度,如式(10)所示:
文獻(xiàn)[9]基于H.265/HEVC 提出一種利用相鄰已編碼塊的平移運(yùn)動(dòng)信息構(gòu)造仿射AAMVP 候選方法。圖2 中編碼器首先檢查當(dāng)前編碼塊的3 個(gè)角落中所有相鄰塊的平移運(yùn)動(dòng)信息可用性,并不是像H.266/VVC 中在獲得第一個(gè)可用相鄰已編碼塊的平移信息后就立即終止與同一個(gè)角落其他相鄰已編碼塊可用性的檢查。編碼器在得到3 個(gè)角落的所有相鄰已編碼塊的可用平移運(yùn)動(dòng)信息之后,分別將3 個(gè)角落所有相鄰塊的可用平移運(yùn)動(dòng)矢量組合成向量組,同時(shí)利用準(zhǔn)則選擇DMV 最小和次小的向量進(jìn)行組合,并作為AAMVP 候選列表的兩個(gè)候選項(xiàng)。DMV 具體表達(dá)如式(11)所示:
相比于H.266/VVC的AAMVP候選列表構(gòu)建過(guò)程,優(yōu)化的AAMVP 是直接使用3 個(gè)角落的相鄰已編碼塊中第一個(gè)可用平移運(yùn)動(dòng)矢量,以構(gòu)成AAMVP 列表候選項(xiàng),文獻(xiàn)[9]基于DMV 準(zhǔn)則,利用所有相鄰已編碼塊的平移運(yùn)動(dòng)矢量構(gòu)造的AAMVP列表候選項(xiàng)更加精確,因此本文考慮把文獻(xiàn)[9]的DMV 準(zhǔn)則引入到H.266/VVC 中AAMPV 候選列表的構(gòu)建過(guò)程。對(duì)于仿射變換塊,在小程度變形的情況下,當(dāng)前塊的寬度在水平方向的變化程度接近高度在垂直方向的變化程度,而高度在水平方向上的變化程度接近寬度在垂直方向的變化程度,因此,本文對(duì)DMV 準(zhǔn)則進(jìn)行改進(jìn),提出本文算法中的準(zhǔn)則,如式(12)所示:
本文將DMV′準(zhǔn)則引入到H.266/VVC 的AAMVP 候選列表構(gòu)建過(guò)程中,得到更加精確的AAMVP 列表候選項(xiàng),使得列表的候選項(xiàng)更接近編碼塊真實(shí)的仿射運(yùn)動(dòng)矢量,從而減少后續(xù)編碼器根據(jù)AAMVP 列表最優(yōu)候選項(xiàng)迭代搜索真實(shí)仿射運(yùn)動(dòng)矢量時(shí)所需的迭代次數(shù),達(dá)到縮短編碼時(shí)間的目的。具體算法主要有以下5 個(gè)步驟。
步驟1檢查當(dāng)前編碼塊左上角相鄰塊A->C 的平移運(yùn)動(dòng)矢量的可用性,并將可用的平移運(yùn)動(dòng)矢量添加到數(shù)組amvpInfo0 中,利用變量ret0 完成檢查,確定amvpInfo0 是否為空。
步驟2檢查當(dāng)前編碼塊右上角相鄰塊D->E 的平移運(yùn)動(dòng)矢量的可用性,并將可用的平移運(yùn)動(dòng)矢量添加到數(shù)組amvpInfo1 中,利用變量ret1 完成檢查,確定amvpInfo1 是否為空。
步驟3檢查當(dāng)前編碼塊左下角相鄰塊F->G 的平移運(yùn)動(dòng)矢量的可用性,并將可用的平移運(yùn)動(dòng)矢量添加到數(shù)組amvpInfo2 中,利用變量ret2 完成檢查,確定amvpInf2 是否為空。
步驟4若根據(jù)ret0、ret1、ret2 的檢查結(jié)果判斷3 個(gè)數(shù)組amvpInfo0、amvpInfo1、amvpInfo2 中任意一個(gè)為空,則結(jié)束仿射AAMVP 候選的構(gòu)造過(guò)程,否則利用循環(huán)遍歷計(jì)算所有運(yùn)動(dòng)矢量組合的DMV′值。
步驟5將最小DMV′值對(duì)應(yīng)的運(yùn)動(dòng)矢量組合添加到AAMVP 候選列表中。
AAMVP 算法的流程如圖3 所示。
圖3 AAMVP 優(yōu)化流程Fig.3 Optimization procedure of AAMVP
編碼器在H.266/VVC 的仿射運(yùn)動(dòng)估計(jì)中進(jìn)行迭代搜索,以尋找當(dāng)前迭代位置周圍像素梯度的最小失真方向,并更新最小失真對(duì)應(yīng)的運(yùn)動(dòng)矢量,更新的運(yùn)動(dòng)矢量作為下一次迭代的初始運(yùn)動(dòng)矢量。當(dāng)前運(yùn)動(dòng)矢量對(duì)應(yīng)的率失真在每一次迭代時(shí)都會(huì)被更新,其反映了運(yùn)動(dòng)矢量匯聚到最優(yōu)運(yùn)動(dòng)矢量的速度。為避免在迭代搜索過(guò)程中像素梯度極值處收斂太慢,本文所提的算法考慮在計(jì)算當(dāng)前迭代位置的像素梯度時(shí),增加一個(gè)動(dòng)量參數(shù)以解決這個(gè)問(wèn)題。當(dāng)本次迭代的像素梯度在x或y方向上與上一次迭代的像素梯度方向相同時(shí),動(dòng)量參數(shù)能夠加速迭代搜索過(guò)程,從而減少迭代搜索過(guò)程消耗的時(shí)間。相反,當(dāng)本次迭代的梯度在x或y方向上與上一次迭代的梯度方向差異較大時(shí),動(dòng)量參數(shù)能夠減緩梯度的變化趨勢(shì),使得搜索過(guò)程更精確。該算法如式(13)所示:
考慮到包含復(fù)雜的仿射運(yùn)動(dòng)的視頻序列,梯度下降過(guò)快會(huì)導(dǎo)致迭代搜索過(guò)程中梯度不平滑,最終得到的最優(yōu)仿射運(yùn)動(dòng)矢量不夠精確,從而造成重建后的視頻序列質(zhì)量損失較大。因此,選擇六參數(shù)仿射運(yùn)動(dòng)的編碼塊的梯度下降速度相較于四參數(shù)仿射運(yùn)動(dòng)模型慢。對(duì)于快速仿射運(yùn)動(dòng)類型的編碼塊,在進(jìn)行迭代搜索最優(yōu)仿射運(yùn)動(dòng)矢量時(shí)能夠達(dá)到相對(duì)減緩其梯度下降的目的,使搜索得到的最優(yōu)仿射運(yùn)動(dòng)矢量更接近真實(shí)的仿射運(yùn)動(dòng)矢量,從而減少重建后視頻序列的質(zhì)量損失。當(dāng)前編碼塊使用六參數(shù)仿射運(yùn)動(dòng)模型且為雙向預(yù)測(cè)時(shí),動(dòng)量參數(shù)設(shè)置為0.1,其為單向預(yù)測(cè)時(shí),動(dòng)量參數(shù)設(shè)置為0.7;當(dāng)前編碼塊使用四參數(shù)仿射運(yùn)動(dòng)模型且為雙向預(yù)測(cè)時(shí),動(dòng)量參數(shù)設(shè)置為0.3,其為單向預(yù)測(cè)時(shí)動(dòng)量參數(shù)設(shè)置為0.9;當(dāng)前編碼塊不使用仿射運(yùn)動(dòng)估計(jì)時(shí),動(dòng)量參數(shù)設(shè)置為0。
本文的算法仿真實(shí)驗(yàn)以H.266/VVC 原始參考模型VTM-10.0 為平臺(tái),配置文件為encoder_lowdelay_vtm.cfg,量化參數(shù)為22、27、32 和37,測(cè)試序列為官方推薦視頻序列,測(cè)試范圍為A~F 類。實(shí)驗(yàn)平臺(tái)的硬件配置為Inter?CoreTMi5-6500 CPU,主頻為3.20 GHz,內(nèi)存為8 GB,集成開發(fā)環(huán)境為VS 2015。實(shí)驗(yàn)編碼性能使用BD-BR 和ΔT來(lái)評(píng)估算法性能。其中BD-BR 為比特比變化率,表示在圖像質(zhì)量PSNR 一致的情況下碼率的平均變化情況,若數(shù)值為負(fù)數(shù),表示能夠減少碼率;相反,表示增加了碼率[20-21]。ΔT為編碼時(shí)間減少的百分比,若為負(fù)數(shù),表示相比VVC 原始算法,序列的整體編碼時(shí)間有所降低;相反,序列的整體編碼時(shí)間得到提高。ΔT如式(14)所示:
由于文獻(xiàn)[9]所提的算法是針對(duì)H.265/HEVC,仿真平臺(tái)是H.265/HEVC 的測(cè)試模型HM-16.7,而本文所提的算法是針對(duì)H.266/VVC 中仿射運(yùn)動(dòng)估計(jì)的改進(jìn),對(duì)于本文,文獻(xiàn)[9]的仿真結(jié)果不具有參考意義。因此,本文首先對(duì)文獻(xiàn)[9]所提算法在H.266/VVC 的測(cè)試模型VTM-10.0平臺(tái)上進(jìn)行仿真,以該部分的仿真結(jié)果作為本文所提算法的對(duì)比;然后分別對(duì)本文所提算法的AAMVP改進(jìn)和迭代搜索優(yōu)化進(jìn)行仿真實(shí)驗(yàn);最后對(duì)本文所提算法的整體改進(jìn)性能進(jìn)行仿真,結(jié)果如表1所示。
文獻(xiàn)[9]所提的算法經(jīng)過(guò)改進(jìn)后被H.266/VVC標(biāo)準(zhǔn)采納,因此表1 中文獻(xiàn)[9]所提的算法在相較于VVC 標(biāo)準(zhǔn)算法的BD-BR 增加了0.001%條件下,對(duì)于測(cè)試序列的整體編碼時(shí)間平均提高了1.51%。本文在對(duì)文獻(xiàn)[9]所提的算法做了適應(yīng)于H.266/VVC的改進(jìn)之后,仿真結(jié)果表明,本文算法在AAMVP 改進(jìn)部分中參考H.266/VVC 標(biāo)準(zhǔn)算法,其在相較于VCC 標(biāo)準(zhǔn)算法BD-BR 提高0.001%的條件下,對(duì)于測(cè)試序列的整體編碼時(shí)間平均降低了2.62%,迭代搜索改進(jìn)部分參考H.266/VVC 標(biāo)準(zhǔn)算法,在相較于VCC標(biāo)準(zhǔn)算法BD-BR 增加0.014%的條件下,對(duì)于序列的整體編碼時(shí)間平均降低了11.2%,最后本文所提算法的整體性能參考H266/VVC 標(biāo)準(zhǔn)算法,在BD-BR 提高0.023%的條件下,對(duì)于序列的整體編碼時(shí)間平均降低了13%。相比文獻(xiàn)[9]所提的算法,本文算法在BD-BR 提高0.022%的條件下,對(duì)于序列的整體編碼時(shí)間平均降低了14.51%。
表1 本文算法與改進(jìn)算法的仿真結(jié)果Table 1 Simulation results of the proposed algorithm and improved algorithms %
在F 類序列中所有測(cè)試序列的BD-BR 值都為負(fù)數(shù),表示在F 類的所有序列中既節(jié)省了碼率,同時(shí)減少了編碼時(shí)間,本文所提改進(jìn)的仿射運(yùn)動(dòng)估計(jì)算法使得仿射編碼塊運(yùn)動(dòng)估計(jì)得到的運(yùn)動(dòng)信息更精確,從而提高率失真性能。然而在C 類和E 類視頻序列中,本文所提的算法具有較優(yōu)的編碼性能,相比VTM 原始算法,其在BD-BR 增加0.016%條件下,整體編碼時(shí)間縮短了15.7%。其主要原因?yàn)橄啾扔谄渌麥y(cè)試序列,C 類和E 類測(cè)試序列包含大量的仿射運(yùn)動(dòng),而本文所提的算法是對(duì)進(jìn)行仿射運(yùn)動(dòng)的編碼過(guò)程進(jìn)行改進(jìn)。
將本文所提的算法與文獻(xiàn)[7]所提的H.266/VVC中快速仿射運(yùn)動(dòng)估計(jì)算法進(jìn)行對(duì)比,實(shí)驗(yàn)結(jié)果如表2所示。從表2 可以看出,本文算法相較于文獻(xiàn)[7]減少BD-BR 的條件下,整體編碼時(shí)間的下降幅度大于文獻(xiàn)[7]所提的快速仿射運(yùn)動(dòng)估計(jì)算法,因此,本文算法具有更優(yōu)的編碼質(zhì)量和更高的編碼效率。將本文的算法與文獻(xiàn)[21]的快速編碼算法相比,文獻(xiàn)[21]算法雖然降低了編碼的計(jì)算復(fù)雜度,但是編碼后重建的視頻質(zhì)量損失較大。本文算法能夠平衡編碼后重建視頻的質(zhì)量和編碼效率。
表2 不同算法的BD-BR 和ΔT 對(duì)比Table 2 BD-BR and ΔT comparison among different algorithms %
本文基于H.266/VVC 中幀間仿射運(yùn)動(dòng)估計(jì)的分析和研究,提出一種改進(jìn)的仿射運(yùn)動(dòng)估計(jì)算法,對(duì)仿射運(yùn)動(dòng)估計(jì)中AAMVP 候選列表的構(gòu)建過(guò)程進(jìn)行優(yōu)化,以得到更精確的編碼塊仿射候選運(yùn)動(dòng)信息,同時(shí)對(duì)仿射運(yùn)動(dòng)估計(jì)中的迭代搜索真實(shí)仿射運(yùn)動(dòng)矢量進(jìn)行改進(jìn),加快迭代搜索的過(guò)程。實(shí)驗(yàn)結(jié)果表明,本文算法在BD-BR 損失較少的條件下,能夠有效降低編碼的計(jì)算復(fù)雜度。后續(xù)將在本文工作基礎(chǔ)上對(duì)其他幀間預(yù)測(cè)工具進(jìn)行優(yōu)化,進(jìn)一步降低編碼的計(jì)算復(fù)雜度。