HEVC/H.265面試問題準備(PART 2. 預測+變換+量化)

近期因爲要準備暑期實習以及後期的秋招環節,再一次溫習了《新一代高效視頻編碼H.265/HEVC原理、標準與實現》經典書籍,現在記錄下有關閱讀心得以及可能面試的問題(所有的答案都是我自己思考的或者網絡/書上摘抄的,因爲本人水平有限,如果有錯誤或者需要補充可以私聊我)。

第四章. 預測

1. 預測編碼消除了什麼冗餘?

  • 幀內預測模式和IBC模式消除了空間冗餘,利用當前圖像已編碼像素生成預測值。
  • 幀間預測模式消除了時間冗餘,利用已編碼圖像的重建像素值生成預測值。

2. 繪製預測編解碼的基本過程。

  • 當前輸入像素值爲x(n),p(n)是x(n)的預測值(利用已編碼像素的重建值x’(n)預測得到),二者之差就是殘差e(n)。
  • 殘差e(n)經過量化(有損,不可逆),變成e’(n)(其他無損的過程可以忽略不計)。再經過熵編碼等步驟,就變成碼流在信道上傳輸了。
  • e’(n) 和 p(n) 相加就得到重建值x’(n)(不考慮環路濾波等處理)。x’(n)經過預測器就得到了預測值p(n),即第一步。

預測編碼
解碼過程是編碼一部分的逆過程。對碼流熵解碼得到e’(n),和 p(n) 相加就得到重建值x’(n)。
預測解碼

3. 爲什麼不採用基於像素的運動估計和運動補償?(師姐畢設答辯被問過)

  • 要給每個像素指定一個MV,需要估計大量的未知量,其解通常並不能反映場景中物體真實的運動情況,而且複雜度過高。
  • 要給每個像素指定一個MV,會引入太多bits來signal這些MV,其實是不划算的。

4. 爲什麼不採用基於區域的運動表示法?

  • 基於區域的運動表示法,把一幅圖像分成多個區域,每個區域恰好表徵一個完整的運動物體。
  • 準確的劃分方式需要大量的計算才能確定,複雜度過高。
  • 由於運動物體形狀通常不規則,區域的劃分需要大量的信息來表徵,可能是不划算的。

5. 常見的運動估計準則
ME準則
其中,SAD不含乘除法,複雜度低,便於硬件實現,使用最廣泛。

6. HEVC幀內預測

HEVC中35種IPM是在PU的基礎上定義的,但是具體實現是以TU爲單位的。
幀內預測時,因爲PU之間存在依賴關係,PU必須包含一個或者多個完整TU。PU可以以四叉樹形式劃分TU,PU內所有TU共享一種IPM。
幀內預測的步驟主要有3個:

① 判斷當前TU相鄰參考像素是否可用。

  • 如果TU處於圖像、Slice、Tile邊界,相鄰像素可能不存在或者不可用,此時用最鄰近像素進行填充。所有都不可用,用pow(2,bitDepth-1)填充(8:128,10:512)。

② 參考像素濾波。

  • DC模式和4 * 4 大小的TU不進行濾波。
  • TU越大,進行參考像素濾波的模式越多,具體可查閱標準。
  • 針對 32 *32大小的TU,在SPS中開啓強濾波選項,且滿足一定條件時(通過公式判斷出上行或者左列參考像素變化緩慢),可以進行強濾波。
  • 常規濾波使用一個3抽頭濾波器,濾波係數是[0.25, 0.5, 0.25]。
  • 強濾波在水平和垂直兩個方向進行,每個像素濾波後的值和距離左上角像素點的距離有關。

③ 根據濾波後的參考像素值計算TU的預測像素值。

  • Planar模式:相當於水平、垂直兩個方向預測值的平均值。
  • DC模式:首先計算當前TU左側和上方參考像素的平均值dcValue,再根據像素位置,對dcValue進行調整得到預測值。
  • 角度模式:
    (1) 首先根據模式編號,查表得到在水平和垂直方向上的偏移值。
    (2) 再用“投影像素法”將某方向的像素投影到另外的方向,便於計算。
    (3) 最後根據相關公式利用參考像素計算出預測值。

投影

7. TZSearch快速搜索算法

  • 確定搜索起點(AMVP確定若干MVP,RDcheck找出最優的MVP作爲搜索的起點)
  • 以1爲步長,按照下圖所示的菱形或者正方形模板在搜索範圍內進行搜索,步長以2的整數次冪遞增,以RD cost最小的點作爲該步驟的搜索結果。
    菱形
    正方形
  • 若上一步最優點對應的步長是1,在最優點附近做兩點搜索。
  • 若上上步最優點對應的步長大於某閾值,以該點爲中心,在一定範圍內做全搜索,選擇RD cost最小的點爲最優點。然後重複菱形或者正方形模板在搜索範圍內進行搜索,直到臨近兩次細化搜索得到的最優點一致時,停止搜索,得到最優MV。

8. Merge和AMVP技術的聯繫與區別

  • 聯繫:都使用了空域和時域MV預測的思想,通過建立候選MV列表,選取最優MV作爲當前PU的預測MV。
  • 區別:
    ① Merge是一種編碼模式。該模式下,MV = MVP,不用編碼MVD。AMVP只是用於MVP的預測,用作構建MVPcand以及找到ME的起始點。
    ② 二者MVPcand的構建方式和長度不同。
    Merge:4個空域 + 1個時域 = 5個MVP
    AMVP:2個空域 + 1個時域 ===> 合併保留前兩個MVP

第五章. 變換

1. 變換編碼消除了什麼冗餘?
頻域冗餘。
變換編碼把殘差從空間域轉換到變換域,以變換系數的形式加以表示。預測後殘差大多爲0或者很小,能量可以從空間域的分散分佈轉換爲變換域的相對集中分佈。

2. HEVC使用的DCT和DST變換

  • 使用整數變換,既避免了舍入誤差導致的編解碼失配問題,也提高了運行速度。
  • DCT使用Ⅱ類DCT,逆變換對應於Ⅲ類DCT。支持的尺寸除了AVC支持的 4 * 4 、8 * 8,還有大尺寸的 16 * 16 和 32 * 32。
  • DST使用Ⅶ類DST,逆變換對應於Ⅵ類DST。僅支持幀內的4 * 4模式使用 4 * 4 的整數DST,原因在於幀內預測殘差有如下特徵:距離預測像素越遠,預測殘差幅度越大,更適合使用DST。
  • DCT和DST變換通過一系列操作,如二維分解爲一維,再分解成矩陣相乘,部分標量因子放在後續的量化部分進行操作。

3. TU, 變換單元

  • TU是HEVC中變換、量化與熵編碼的基本單位,支持4 * 4 、8 * 8、16 * 16 和 32 * 32的大小。

  • CU可以以四叉樹劃分TU。

  • PU和TU都是由CU劃分得到,二者無確定關係。一個PU可以含多個TU,一個TU也可以跨越多個PU。

  • 但是,在intra塊中,PU可以包含1個或者多個TU,但是一個TU最多隻能對應一個PU,這是因爲相鄰PU存在依賴關係,已編碼的PU須用於預測與之相鄰的PU。
    TU
    4. 哈達瑪變換

  • 哈達瑪矩陣元素都是±1,是正交對稱矩陣。

  • 哈達瑪變換僅含有加減法運算,運算複雜度低,容易實現。

  • AVC中,用於intra 16 * 16塊DC係數的變換,進一步去除相關性。HEVC中因爲使用大TU同樣可以很好地去除相關性,所以取消了該步驟。

  • 哈達瑪變換用於計算殘差信號SATD。SATD一定程度上可以反應殘差在頻域中的大小,性能接近DCT且複雜度低,所以可以用於快速模式選擇。

  • HEVC的幀內預測RMD過程就是用SATD先篩選出若干個候選IPM,來節省時間。

  • HEVC的幀間預測亞像素精度ME也使用了SATD。這是因爲與整像素ME相比,亞像素ME匹配誤差不會太大,需要考慮殘差在變換域的特徵,所以用SATD做預測誤差衡量準則可以提高編碼性能。

第六章. 量化

1. 視頻編碼中什麼步驟導致了有損?
量化。
量化是指將信號的連續取值(或者大量可能的離散值)映射爲有限多個離散幅值的過程,實現信號取值多對一的映射。這是視頻編碼產生失真的根本原因。

2. 量化爲何可以取得一定的壓縮效果?
視頻編碼中,殘差進行DCT和DST後,變換系數一般具有較大的動態範圍。對變化係數進行量化可以有效減小信號取值空間,從而取得更好的壓縮效果。

3. HEVC中的傳統標量量化
在這裏插入圖片描述
對於I圖像,f取1/3。對於P/B圖像,f取1/6。
關於這個f的取值問題,我曾經分享過一篇博客,也和大佬討論過這個取值問題:

https://www.cnblogs.com/TaigaCon/p/4266686.html?from=timeline
大佬:“我的理解就是控制舍入的操作,可以作爲一個參數來調節。但是調節的力度是比較微弱的。在一幀內都採用定QP 編碼時調節這個參數應該會有一定的細微差別。但實際編碼中會使用塊級的碼控,他的作用就不明顯了,甚至可以忽略了。而且文中也介紹了要和紋理強度聯繫起來調更好,就是自適應的調節,又增加了難度。文中沒有回答的一個問題是爲什麼幀內幀間使用的f不一樣?”
我:我淺顯的理解是,f的取值可能和幀內、幀間預測的編碼效率、殘差分佈特性有關。幀間預測的編碼效率相比幀內高,殘差的DCT係數相比更集中在0值附近,f取小值保證了壓縮效率。而I幀幀內預測的去相關能力沒有那麼強,增大f,減小量化死區,作爲後續幀的參考幀一定程度上保證了細節和圖像質量。我之前沒怎麼研究過這些,是今天看書臨時看到的,也不知道是不是想的有問題。

4. HEVC中的RDOQ
傳統的標量量化器是以失真最小爲目的進行設計的。RDOQ將率失真優化與量化過程相結合。對於一個變化係數,給定多個可選量化值,利用RDO準則從中選出一個最優的量化值。
HM軟件內的RDOQ步驟:

  • 確定當前TU每個係數的可選量化值,進行預量化。根據|Li|大小確定可選量化值
    預量化
    可選量化值

  • 利用RDO準則確定當前TU所有係數最優量化值。

  • 此外,利用RDO準則確定當前TU每一個係數塊組(CG)是否量化爲全零組。(若整個CG量化爲全零,CABAC時只需要1個bit就可以signal整個CG,對於當前CG僅含極少個數幅值較小的非零係數,可能有一定的率失真性能提升。)

  • 利用RDO準則確定當前TU“最後一個非零係數”的位置。

5. HEVC中的量化組QG

  • HEVC中新引入了QG的概念,規定一個CTB可以包含一個或者固定大小的QG,同一個QG內所有含有非零係數的CU共享一個QP,不同QG可以用不同的QP。
  • QG是固定的正方形像素塊,大小N由PPS指定,必須處於最大CU和最小CU之間(包含)。CU和QG沒有固定的大小關係,可以互相完整的包含彼此。
  • 當QG包含多個CU時,所有CU公用當前QG預測QP;當CU包含多個QG時,CU的QP等於第一個QG的預測QP。

6. 量化矩陣

  • 量化矩陣的原理是對不同位置的係數使用不同的量化步長。利用人眼對視頻中高頻細節不敏感的特徵,對高頻係數使用較大的量化步長,低頻係數使用較小的量化步長。
  • 量化矩陣作用於比例縮放過程中,變換後的DCT / DST係數將與相同大小的量化矩陣中對應位置的係數相除,所得的結果作爲量化模塊的輸入。
    量化矩陣
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章