H.264的碼率控制算法

   H.264的碼率控制算法採用了多種技術,其中包括自適應基本單元層(Adaptive Basic Unit Layer)、流量往返模型(Fluid Traffic Model)、線性MAD模型、二次率失真模型等。並且採用了分層碼率控制策略,共分爲三層:GOP層、幀層和基本單元層。在JVT的提案中,採用的是JVT-G012碼率控制算法,該算法提出了基本單元的概念,將一幀劃分爲若干個基本單元,基本單元可能是一宏塊、一行宏塊、一場或一幀。幀層碼率控制根據網絡帶寬、緩存佔用量、緩存大小及剩餘比特來分配每一幀的目標比特;在基本單元層碼率控制中,目標比特由該幀的剩餘目標比特平均得到。這些技術的採用成功地解決了傳統碼率控制算法與H.264的率失真優化技術之間存在的因果矛盾,能較準確地控制輸出碼率,輸出視頻質量較好。

H.264中的JVT.G012算法採用的二次R—Q模型如下:

H.264的碼率控制算法 - 雪中飛燕 - 我的博客

        這一模型用於基本單元的量化參數計算,其中R代表編碼量化係數所需的碼字位數,Q指基本單元的量化步長,MAD通過以下線性預測模型進行預測:

H.264的碼率控制算法 - 雪中飛燕 - 我的博客

        其中MADcb和MADpb代表當前基本單元和前一幀相應位置處的MAD,a1,a2是模型係數,在每一個基本單元的最後一個宏塊處理中通過線性迴歸的方法進行更新。

        JVT的碼率控制比以往的標準更加困難。因爲量化參數不僅在碼率控制算法中使用而且在率失真優化中應用,從而導致一種稱爲“雞與蛋"的悖論(Chicken and Egg Dilemma):爲了在當前幀的宏塊中應用率失真優化,首先要有一個量化參數,這個量化參數通過計算當前幀的MAD(Mean Absolute Difference)得到。然而,只有在率失真優化以後才能得到當前幀的MAD。並且編碼處理所使用的信道帶寬可能是恆定的,也可能是可變的。必須同時考慮恆定比特率(Constant Bit Rate,CBR)和可變比特率(Variable Bit Rate,VBR)兩種情況。目前的碼率控制機制大多針對恆定碼率的情況.

        率失真理論是視頻編碼的一個基本部分。率失真優化(RDO)在給定的碼率限制下最小化解碼失真,Lagrangian方法可以在碼率和失真之間有效地進行折中。在H.264標準中,Lagrangian方法用於運動補償的模式選擇和幀內預測。換言之,它可以在給定的碼率限制下,最小化失真,尋找到塊的最佳運動向量和編碼模式。然而,Lagrangian方法的應用使碼率控制變得更困難,因爲QP涉及到碼率控制和失真計算。換言之,碼率控制方案在調整QP後將影響塊的運動和模式選擇。在MPEG.4碼率控制中,可以在估計QP前通過執行二次R—D模型來獲得X1,X2、MAD和目標比特數。但在H.264標準中,QP在碼率控制和RDO中都指定了,因此在執行RC時就存在一個問題:對MB執行RDO,要先通過MB的MAD決定MB的QP,然而MB的MAD只有在RDO運行後才能獲得。這就是一個蛋雞悖論。


如上所述,在H.264標準的碼率控制中存在兩個問題:
1.在執行RDO之前,MAD是未知的。
2.雖然在運動補償後可以獲得每個編碼模式的MAD,但最佳編碼模式仍然未知,所以不能決定哪個MAD可以用於估計QP。
Ma等人提出了一個新的H.264碼率控制方案,該方案沒有考慮QP與MAD之間的相關性,但它不是single—pass碼率控制算法。雖然該算法可以實現目標比特數且沒有明顯的比特變動,但執行RDO要花費2倍的時間,對宏塊而言這樣的時I司複雜度是不可接受的。

        H.264中的碼率控制方法是以提案JVT—G012爲藍本的。JVT.G012提案通過引入基本單元和線形模型的概念,提出一種自適應基本單元層碼率控制方案。基本單元可能是一幀、片或宏塊。並提出了一種線性模型,通過前一幀相應位置的基本單元預測當前基本單元MAD。爲闡述G012提案,本文首先對其中的關鍵技術進行分析。

1。基本單元的定義

       假設某一幀由Nmbpic個宏塊組成,那麼定義基本單元爲一個由Nmbpic個宏塊中連續的Nmbunit個宏塊所組成的組。那麼在該幀中的總的基本單元的個數爲:

Nunit=Nmbpic/Nmbunit

        需要注意的是,如果採用了比較大的基本單元,那麼PSNR可以達到一個較高的值,同時比特的波動也會增大。另一方面,如果採用了比較小的基本單元,比特的波動會比較的小,但是相應的會帶來PSNR的損失。

2.流量往返模型(Fluid Tramc Model)

H.264的碼率控制算法 - 雪中飛燕 - 我的博客

3.MAD的線性預測模型
       這裏,該算法一個線性模型來預測當前幀中的基本單元的MAD值,它的參

H.264的碼率控制算法 - 雪中飛燕 - 我的博客

預測模型參數a1和a2更新方法分爲三步,如下所述:
      第一步一數據點選擇:數據點是用於更新模型參數,數據點的數量以及質量對於模型的準確性有着重要的影響。通常而言,數據點越多,模型越準確。在JM86模型中,採用滑動窗口機制進行數據點的選擇,窗口大小通常爲20。
      第二步一計算模型參數:根據選中的數據點,算法收集預測的MAD和實際MAD的值,採用線性迴歸的方法,計算得到a1和a2。
      第三步一去除壞的數據點:在得到al和a2之後,根據滑動窗口中數據點的參考值,用a1和a2形成的預測模型計算數據點的預測值,然後將得到的值與數據點的原始預測值比較,計算誤差,如果誤差大於一定的值(JM中取誤差的均值),則將該數據點去除,用更新後的數據點重新計算模型參數al和a2。

H.264的碼率控制算法 - 雪中飛燕 - 我的博客

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