天天看點

HEVC/VVC中R-Lambda碼率控制算法原理1. 比特配置設定2. 碼率控制

文章目錄

  • 1. 比特配置設定
    • 1.1 GOP級比特配置設定
    • 1.2 幀級比特配置設定
    • 1.3 LCU級比特配置設定
  • 2. 碼率控制
    • 2.1 λ的計算和更新
    • 2.2 參數QP的确定

VVC中碼率控制算法沿用了HEVC中經典的 R-λ碼率控制模型, R-λ由中科大的李斌博士提出(詳情參考

JCTVC-K0103

)。 R-λ模型的基礎為視訊編碼中 R(比特 bpp)和 D(失真 MSE)之間的雙曲線模型,即

D ( R ) = C R − K D(R) = CR^{-K} D(R)=CR−K

R-λ模型中λ是R-D曲線的斜率,對上式求導,可得

λ = − ∂ D ∂ R = C K ⋅ R − K − 1 ≜ α ⋅ R β \lambda=-\frac{\partial D}{\partial R} = CK\cdot R^{-K-1} \triangleq \alpha \cdot R^ \beta λ=−∂R∂D​=CK⋅R−K−1≜α⋅Rβ

其中 α α α和 β β β是和視訊内容相關的參數。

碼率控制主要可分成兩個步驟:

1. 首先是比特配置設定,即将序列目标比特以一定政策确定GOP、幀和LCU各級單元的目标編碼比特。

2. 依據配置設定到的目标比特,通過調整編碼單元的編碼參數,以達到配置設定到的目标比特。

1. 比特配置設定

一般情況下,序列第一幀所需配置設定的比特需要特殊考慮,第一幀的品質會很大程度上影響後續的編碼效率和品質。實際應用中,第一幀的編碼參數會根據一些先驗知識進行設定。編碼第一幀所需比特由于缺乏必要先驗資訊很難預測,一般采取的政策即給第一幀多配置設定,以保證品質。

首先定義平均每幀比特

R p i c A v g = R t a r / F R R_{picAvg} = R_{tar} / FR RpicAvg​=Rtar​/FR

其中 R t a r R_{tar} Rtar​為目标比特,FR為幀率。

1.1 GOP級比特配置設定

一般來說,每個GOP所配置設定的比特應該是一樣的,但是由于實際編碼的比特和目标比特總是有差異,GOP級比特配置設定引入滑動視窗SW來消除每個GOP的實際編碼比特與目标比特的誤差,每個GOP所配置設定的比特計算如下

T G O P = R p i c A v g ⋅ ( N c o d e d + S W ) − R c o d e d S W × N G O P T_{GOP} = \frac{R_{picAvg}\cdot (N_{coded} + SW) - R_{coded}}{SW} \times N_{GOP} TGOP​=SWRpicAvg​⋅(Ncoded​+SW)−Rcoded​​×NGOP​

公式寫成這樣可能比較不容易了解,換個表達如下

T G O P = T p i c A v g × N G O P T_{GOP} = T_{picAvg}\times N_{GOP} TGOP​=TpicAvg​×NGOP​ 其中 T p i c A v g = R p i c A v g + R p i c A v g ⋅ N c o d e d − R c o d e d S W T_{picAvg} = R_{picAvg} + \frac{R_{picAvg} \cdot N_{coded} - R_{coded}}{SW} TpicAvg​=RpicAvg​+SWRpicAvg​⋅Ncoded​−Rcoded​​

顯然, R p i c A v g R_{picAvg} RpicAvg​為目标碼率, R p i c A v g ⋅ N c o d e d − R c o d e d R_{picAvg} \cdot N_{coded} - R_{coded} RpicAvg​⋅Ncoded​−Rcoded​為誤差項,需要以SW為長度進行修正。

1.2 幀級比特配置設定

定義 T G O P T_{GOP} TGOP​為目前GOP目标比特, C o d e d G O P Coded_{GOP} CodedGOP​為目前GOP已消耗比特, ω \omega ω為目前GOP中每幀圖檔比特配置設定權重,于是目前幀所配置設定的比特計算如下

T p i c = T G O P − C o d e d G O P ∑ m = 0 N R P ω p i c _ m × ω c u r r P i c T_{pic} = \frac{T_{GOP} - Coded_{GOP}}{ \sum_{m=0}^{N_{RP}} \omega_{pic\_m}} \times \omega_{currPic} Tpic​=∑m=0NRP​​ωpic_m​TGOP​−CodedGOP​​×ωcurrPic​

需要注意,I幀所配置設定的比特由bpp決定。

1.3 LCU級比特配置設定

類似于幀級比特配置設定政策,每個LCU所配置設定到的比特通過下式計算:

T L C U = T c u r r P i c − B i t H − C o d e d p i c ∑ A l l N o t C o d e d L C U ω L C U × ω c u r r L C U T_{LCU} = \frac{T_{currPic} - Bit_{H}-Coded_{pic}}{\sum_{AllNotCodedLCU} \omega_{LCU}} \times \omega_{currLCU} TLCU​=∑AllNotCodedLCU​ωLCU​TcurrPic​−BitH​−Codedpic​​×ωcurrLCU​

其中 B i t H Bit_{H} BitH​為所有頭資訊編碼所需比特,由之前對應已編碼幀所用比特預測得到。 ω L C U \omega_{LCU} ωLCU​為每個LCU碼率配置設定權重,由之前屬于同一level 的已編碼幀對應位置的LCU的預測誤差(原始和預測信号的MAD)計算得到。

2. 碼率控制

2.1 λ的計算和更新

根據 λ \lambda λ與R之間的關系 λ = − ∂ D ∂ R = C K ⋅ R − K − 1 ≜ α ⋅ R β \lambda=-\frac{\partial D}{\partial R} = CK\cdot R^{-K-1} \triangleq \alpha \cdot R^ \beta λ=−∂R∂D​=CK⋅R−K−1≜α⋅Rβ,即 λ \lambda λ可由R通過 α \alpha α和 β \beta β直接計算得到。但是 α \alpha α和 β \beta β是和序列内容特性相關的參數,不同内容其值差異顯著。R-λ模型通過引入如下算法解決此問題,首先使用下式計算幀和LCU的 λ \lambda λ

λ = α b p p β \lambda = \alpha bpp ^ {\beta} λ=αbppβ

這裡 α \alpha α和 β \beta β對每幀和每個LCU都是不同的。為了實作内容自适應, α \alpha α和 β \beta β會在編碼過程中不斷更新,在完成一個LCU或者一幀圖像的編碼後, α \alpha α和 β \beta β更新方式如下

λ = α o l d b p p r e a l β o l d \lambda = \alpha_{old} bpp_{real} ^ {\beta_{old}} λ=αold​bpprealβold​​ α n e w = α o l d + δ α × ( ln ⁡ λ r e a l − ln ⁡ λ c o m p ) × α o l d \alpha_{new} = \alpha_{old} + \delta_{ \alpha } \times (\ln\lambda_{real}-\ln\lambda_{comp} ) \times \alpha_{old} αnew​=αold​+δα​×(lnλreal​−lnλcomp​)×αold​ β n e w = β o l d + δ β × ( ln ⁡ λ r e a l − ln ⁡ λ c o m p ) × ln ⁡ b p p r e a l \beta_{new} = \beta_{old} + \delta_{ \beta } \times (\ln\lambda_{real}-\ln\lambda_{comp} ) \times \ln{bpp_{real}} βnew​=βold​+δβ​×(lnλreal​−lnλcomp​)×lnbppreal​

其中 b p p r e a l bpp_{real} bppreal​為編碼實際的bpp, λ r e a l \lambda{real} λreal為實際使用λ。

記住以下這個公式:

R = ( λ α ) 1 β ≜ α 1 ⋅ λ β 1 R=( \frac{ \lambda }{\alpha })^{\frac{1}{\beta}}\triangleq \alpha_1 \cdot \lambda^{\beta_1} R=(αλ​)β1​≜α1​⋅λβ1​。

2.2 參數QP的确定

當 λ \lambda λ确定之後,QP的計算方式如下

Q P = c 1 × ln ⁡ ( λ ) + c 2 QP = c_1 \times \ln(\lambda)+c_2 QP=c1​×ln(λ)+c2​

其中 c 1 c_1 c1​和 c 2 c_2 c2​分别等于4.2005和13.7122。

繼續閱讀