HEVC/H.265面試問題準備(PART 5. 率失真優化+速率控制)

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

第十一章. 率失真優化

1. 率失真優化的作用

  • 視頻壓縮要在編碼比特率和失真二者之間進行平衡,來保證在一定視頻質量的條件下儘可能減少編碼比特率或者在一定編碼比特率下儘量減小失真。
  • 利用率失真優化,可以選擇到合適或者最優的編碼工具/模式/參數,以實現最優的編碼性能。比如,對於P幀的一個CU,可以選擇intra / inter / ibc mode其中一種,而intermode之中,又可以選擇非常多備選的MV。總之,通過率失真優化可以選擇最優的編碼參數。

2. 常見的客觀視頻失真測度
平方誤差和SSD、均方誤差MSE、絕對誤差和SAD、峯值信噪比PSNR。

指標1
指標2

3. 簡單理解拉格朗日率失真優化
將約束性問題通過引入拉格朗日因子λ轉變爲非約束性問題,從而方便計算最優解。
在視頻編解碼中,需要平衡失真(distortion)和碼率(rate),對應的約束性問題就是下式:
RDO
即在給定的限定碼率Rc下,尋求最優的B(目標函數,此處指編碼參數/方法/工具),使得失真最小。引入拉格朗日因子λ後,轉爲非約束性問題,變爲下式:
RDO
至於拉格朗日因子λ的取值,一般根據經驗或者在可選範圍內遍歷選擇。視頻編碼中,λ和QP有固定的函數關係。Rate control時,可以根據以下順序選擇參數 Rc ===> QP ===> λ 或者直接Rc ===> λ。所以,約束性問題最後可以變爲:
RDO
4. HEVC中的率失真優化方法
① GOP層
考慮:當前圖像的失真D與當前圖像的編碼比特數R有關,還和前面已編碼參考幀的圖像質量(失真)有關。實驗表明,當前圖像失真和參考圖像的失真有線性關係。
② Slice層
除了環路濾波可能跨slice,其他預測、熵編碼等環節slice之間是相互獨立的。因爲Slice中包含整數個CTU,但是CTU之間互相相關(Intra、Inter等),目前不怎麼考慮該部分。
③ CTU層
CTU劃分爲CU的組合選擇:對每一種CU劃分模式,對每個CU編碼,選擇最優的劃分模式。
④ CU層

  • CU劃分爲不同PU,PU選擇不同的劃分模式。
  • CU劃分爲不同TU。(此處爲了降低複雜度,只對最優PU嘗試補充TU)。
    ⑤ PU層
    選擇最優預測模式Intra / Inter / IBC … 和預測參數 (IPM / MVP / MV / BV …)。

5. HM中的率失真優化快速模式判決策略

  • Intra prediction時,有RMD環節。先用Hadamard變換代替DCT/DST對殘差進行變換,計算SATD值。D(mode)就是SATD值,R(mode)是編碼IPM的編碼比特數,根據D+λR選擇若干個模式作爲粗選。遍歷這幾個粗選以及附近相鄰的模式,計算D(此處是複雜的編碼失真)+λR選擇最優模式。
  • Inter prediction時,需要選擇參考幀、mvp、mv等參數。使用Merge模式時,D(mode)使用SATD值進行計算。

第十二章. 速率控制

1. 速率控制的核心和主要步驟
核心是建立編碼速率和量化參數的關係模型,根據目標碼率確定視頻編碼參數中的量化參數。
主要步驟主要有 比特分配 和 量化參數確定。
① 比特分配
就是根據時域、空域的相關性(視頻內容、緩衝區狀態、信道帶寬),給每個編碼單元(可以是GOP、frame、slice、CTU、CU級別)分配最優比特數。該步驟關鍵是考慮各編碼單元之間率失真性能的相關性,實現最優比特分配。
② 量化參數確定
就是根據分配比特數比特數,依據其與量化參數的關係模型,爲該編碼單元確定量化參數。
Rate control

2. 速率控制設置緩衝區的優缺點

  • 優點:
    ① 速率控制算法並不能完美保證實際碼率和目標碼率完全一致,在編碼器和傳輸信道中間建立一個緩衝區,可以一定程度上平滑二者的差別。
    ② 引入緩衝區可以容忍一定的速率波動,以避免編碼速率與信道速率隨時保持一致引起的視頻質量波動。
    buffer
  • 缺點:
    ① 消耗存儲空間。
    ② 引入時延。
    緩衝區越大,適應信道速率的能力越強,但是消耗的存儲空間也越大,而且導致解碼時延增大。緩衝區大小需要由允許的最大時延以及運營成本決定。對於有限的緩衝區,RC時需要避免緩衝區溢出。

3. 含有緩衝區的速率控制算法(流體流量模型)
簡單總結,就是此時刻的充盈度是 在上一時刻的充盈度的基礎上,加上流進來的bits(實際編碼速率,由編碼器輸入),減去流出去的bits(由緩衝區輸出到信道)。
此外,設置一條警戒線(閾值線TH)。超過TH,說明實際編碼速率偏高,保持下去會有溢出的危險,所以需要降低實際編碼速率。如果低於TH,說明實際編碼速率偏低,可以適當提高來提高視頻質量。
在這裏插入圖片描述
在這裏插入圖片描述
3. HEVC速率控制(JCTVC-K0103)
具體分爲
① 比特分配
GOP級目標比特分配 ===> 圖像級目標比特分配 ===>CTU級目標比特分配

  • GOP級目標比特分配
    1
    在這裏插入圖片描述
    很明顯,這就是上面所說的流體流量控制模型。u/Fr是每幀編碼的目標bits數目。u/Fr * Nvc就是準備流出的bits(由緩衝區輸出到信道),Rvc就是流進來的bits(實際編碼速率,由編碼器輸入)。二者的差值作爲調整實際編碼速率的反饋值。SW可以控制調整的精度,越小調整越快,但是容易導致GOP之間比特波動較大。

  • 圖像級目標比特分配
    一個GOP中爲每幅圖像分配對應的比特數。該比特數主要由兩部分決定——當前GOP總目標比特數,GOP剩餘編碼比特數,二者分別對應下面公式前後兩部分。
    在這裏插入圖片描述
    其中,第一部分與每幅圖像的分配權重Wf有關,體現不同圖像在GOP中的重要性,可以查表得到。
    在這裏插入圖片描述
    第二部分與每幅圖像的分配權重Wf有關之外,還與已編碼比特數RGc有關。
    在這裏插入圖片描述

  • CTU級目標比特分配
    根據當前圖像的總目標比特數爲每個CTU確定目標比特數。
    在這裏插入圖片描述

② 量化參數確定
先根據編碼單元的目標比特數得到λ,再由λ和QP的關係確定每個編碼單元的QP值。
圖像級量化參數確定 ===>CTU級量化參數確定

  • 圖像級量化參數確定
    使用雙曲函數。得到λ如下
    在這裏插入圖片描述
    在這裏插入圖片描述
    QP如下
    在這裏插入圖片描述
    在這裏插入圖片描述
  • CTU級量化參數確定
    與圖像級量化參數確定相似,也是先根據編碼單元的目標比特數得到λ,再由λ和QP的關係確定每個編碼單元的QP值。不斷更新相關參數即可。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章