H.266/VVC相關技術學習筆記15:視頻編碼中幀間預測技術的基本原理

今天講一下關於視頻編碼中幀間預測技術一些基本原理,然後在後續的博客中更新最新的VTM6.0版本中的現存的幀間預測技術。

首先幀間預測技術就是利用視頻中鄰近幀之間的時域相關性,使用之前已經預測編碼好的重建圖像作爲參考幀,通過運動估計和運動補償對當前的編碼圖像進行預測編碼,從而去除視頻中的時間冗餘信息,大致如下圖所示:Cur_Pic是通過運動矢量MV0和MV1指向的Ref_Pic0和Ref_Pic01去預測的。在這裏插入圖片描述
幀間預測編碼流程如下圖所示(用PPT畫的,可能比較粗糙~),大致流程爲,把當前原始幀與重建幀存儲器輸出的前一重建幀(也稱參考幀)同時輸入到運動估計模塊,經搜索比較後得到運動矢量(MV)。將此運動矢量輸入到運動補償模塊,用該MV“補償”輸入的重建參考幀,得到當前編碼幀的預測幀。然後預測幀和當前原始幀的差值即爲幀間預測誤差。運動矢量也要傳送到解碼端。解碼器利用反量化、反變換後得到的有損的殘差值在和運動補償後得到的預測幀相加就能得到當前的重建幀。
在這裏插入圖片描述

幀間預測分爲單向預測(P幀)以及雙向預測(B幀),顧名思義,單向就是當前幀只參考一個方向上的參考幀,雙向則在前後兩個方向上都有參考幀。

一、運動估計
運動估計是最H.264就已經存在的一種幀間預測技術,是幀間預測必不可少的一部分,該技術的核心就在於通過當前編碼塊在其參考幀中去搜索一個最匹配的參考塊,然後計算出其運動矢量,一般在整個視頻中第一個幀間預測幀肯定要用運動估計去搜索其MV,因此運動估計搜索出來的MV需要傳到解碼端,除了傳MV以外,還需要傳送幀間預測殘差,參考幀索引。

二、MV的預測技術
雖然運動估計的幀間預測大大壓縮了原始的視頻數據量,但是仍然需要將運動矢量本身的數據量傳送到解碼端,如果對每個塊的運動矢量都進行編碼,那仍然需要花費相當數目的比特數,特別是在選擇小尺寸的編碼塊時比特開銷顯著增加。但是有一個問題值得注意,就是一個物體的運動往往會覆蓋多個圖像塊,所以空間相鄰的塊的MV就具有很強的相關性。因此,當在有了可以參考的參考幀以後,後續的B、P幀就不需要去參考幀中搜索MV,而可以根據當前空域相鄰的一些已編碼塊的MV去預測當前塊的MV,但是由於空域的覆蓋範圍有限,爲了能夠顧及當前塊的中心位置以及右下角的位置,因此還需要時域相鄰的塊來預測當前的MV。
由此後續延伸出多種MV預測的技術,這裏我們先大體上分爲兩類,AMVP(高級運動矢量預測)模式和Merge(融合)模式。這兩個技術的核心就在於需要去構建一個MV的候選列表,通過空域相鄰的塊和時域相鄰的塊去按照一定的規則去構造該候選列表,目前的版本中,AMVP候選列表的長度爲2,Merge候選列表的長度爲6,但是構造方式都是一樣的。

我們可以根據下圖所示去構造候選列表:
①首先檢查空域相鄰的塊是否有可用的MV,並檢查冗餘,檢查順序順序爲:A1——>B1——>B0——>A0——>B2。空域相鄰最多選出4個候選。

② 再檢查時域相鄰的塊,並檢查冗餘,檢查順序如下:BR——>CT。時域相鄰最多選出1個候選。時域的候選具體可以參考TMVP技術:H.266/VVC相關技術學習筆記:VVC中TMVP技術(時域Merge列表的構建)

③如果空域時域檢查完後,Merge列表仍沒有填滿5個(如果已經填滿了5個,則不使用HMVP方法),則採用基於歷史的參考空間候選技術(HMVP),同時也要檢查冗餘,該技術我後續會講一下的。H.266/VVC相關技術學習筆記:幀間預測中的HMVP技術(基於歷史的MV預測)

④當上述的三種填充方法填充完之後,如果填滿剛好5個或者仍不足5個,則使用成對組合平均法去填充Merge列表,同時仍要檢查冗餘,但是成對組合平均法最多隻能填充一個候選。該技術具體如下:
H.266/VVC相關技術學習筆記:VVC中成對平均候選技術(用於Merge列表的構建)

⑤如果上述4種方法都沒能填滿候選列表,則最後用零矢量(0,0)補滿候選列表。

這裏之所以選用固定的候選數量,是考慮到解碼時候的並行處理,並且提高魯棒性

在這裏插入圖片描述
好了,講了半天還沒有提到AMVP和Merge最大的區別在哪裏,下面我來解釋一下:

  1. 首先是Merge模式,之所以叫融合模式,就是將其相鄰各個塊的MV融合到一個列表中,然後根據率失真代價去獲取其中最優的一個MV作爲當前塊的MV,當然這個預測得到的MV並不需要傳送到解碼端,而是隻需要傳送該選中的MV在Merge候選列表中的索引即可,然後在解碼端通過該索引直接通過相鄰塊獲取當前塊的MV,最終通過運動補償計算預測值。

  2. 其次是AMVP模式,這也稱inter模式,該模式需要構造長度爲2的MV候選列表,首先需要通過運動估計獲取當前編碼塊最準確的原始MV,然後和候選列表中的MV相減得到MV差值(MVD),然後將該MVD連同候選索引傳送到解碼端,在解碼端通過預測的MV以及MVD恢復出原始的MV(這裏就比較類似幀內預測在解碼端得到重建值的過程)。之所以AMVP候選長度只爲2,有兩方面的原因:
    ① 一方面,編碼器由於要計算MVD,因此必須完成運動估計,而運動估計又是一項非常耗時的操作,因此較少的候選意味着較少的運動估計,可以降低複雜性。
    ②另一方面,在inter模式下需要傳送MVD到解碼端,因此較少的候選數量不會給編碼效率帶來太大的影響。

我們可以看出,AMVP需要向解碼端傳送幀間預測殘差、MVD、候選索引、參考幀、幀間預測標誌(標識單向還是雙向)。而Merge模式僅僅需要傳送殘差、候選索引

除了上述兩種主流模式外,還有一種編碼效率最高、所需傳送的信息最少的一種模式,稱爲Skip模式,該模式是一種特殊的Merge模式,是不需要傳送殘差的Merge模式,因此在CU模式判決中,首選必須先判斷是否爲幀間的Skip模式。

上面所講的就是視頻編碼中幀間預測技術的一些最基礎的原理,後續的博客我會更新當前最新的VVC中Merge模式的一些變種以及非Merge模式的幀間預測技術。請大家敬請期待,我會繼續努力爲大家帶來滿滿的乾貨的~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章