天天看點

h264的碼率控制 JVT-G012

開始看h264的碼率控制,很多地方都提到 G012,拿來做為參考比較,看來很有必要研究清楚。

偶這人,E文文檔不翻譯的話,看過就忘了,于是草草翻譯了下,因為不打算做B幀,也不準備在同一幀中使用不同的MB,這些地方就跳過了。

Title: Adaptive Basic Unit Layer Rate Control for JVT

1.     Introduction

編碼器使用碼率控制來控制編碼碼流變化的bit rate特性,以追求給定目标bit rate下的高品質解碼。碼率控制是以成為了編碼器的必要部分,并在标準中被廣泛的研究,比如MPEG2,MPEG4,H.263等等。是以,他也被JVT充分的研究。JVT的碼率控制與其他的标準相比更加困難。這是因為量化參數被同時應用到碼率控制算法(rate control algorithm)和碼率失真最優化(rate distortion optimization RDO)中,這樣在進行碼率控制研究的時候導緻了蛋雞悖論:要對目前幀的宏塊進行RDO,需要用目前幀或者宏塊的MAD決定每個宏塊的QP值。然而,目前幀或宏塊的MAD隻有在RDO之後才能算出。此外,可用的編碼信道帶寬也可能是固定的或是随時間變化的。是以我們需要同時考慮固定bit rate(CBR)和可變bit rate(VBR)。然而現存的方案集中與CBR。

JVT通過引入基本單元的概念和線性模型,提出了一種自适應基本單元層的碼率控制算法。這個基本單元可以是幀,條帶,或者宏塊MB,線性模型通過前一幀的相關位置的基本單元來預測目前幀目前基本單元的MAD。蛋雞悖論解決如下:目前幀的目标碼率采用漏桶(leaky bucket)模型和線性跟蹤理論根據預先定義的幀率,目前緩沖區占有率,目标緩沖區級别和可用的信道帶寬計算。因為未編碼的基本單元MAD未知,是以剩餘的bit平均配置設定到未編碼的目前幀基本單元中。目前基本單元的MAD靠線性模型使用前一幀相關位置的基本單元的MAD來預測。二次率失真模型(RD)用于計算相應的QP,這個值用與目前基本單元中每個宏塊的最小率失真(rate distortion optimization)我們同時也關注VBR。我們設計了虛拟緩沖區來根據信道帶寬的動态變化而調整編碼程式。該緩沖區是不能向上或者向下溢出的。因為該模型和漏桶模型基本一緻,我們的碼率控制是以符合理想參考解碼器(hypothetical reference decoder)

我們測試VBR和CBR來驗證我們的設計。VBR比特率曲線是一條預定義的曲線。他表明實際生成的比特數保持接近比特率曲線并且緩沖并沒有溢出。CBR中,我們的碼率控制方案的編碼效率與使用固定QP值的比較。編碼的計算率由我們的碼率控制方案指定。我們方案的編碼效率提高了1.02dB,所有測試序列的平均PSNR提高了0.32dB。我們也同使用AHM2.0軟體AHG推薦的F086進行比較。PSNR提高了1.73dB,最高損失0.25dB,必須提及的是我們的方案是one pass而F086是two pass(two pass:采用2次編碼,每一幀的第一次編碼用來産生第2次編碼所需要的編碼政策)

  1. Preliminary Knowledge

在這一章中,我們提出關于H.264碼率控制的相關問題。

2.1 The Chicken and Egg Dilemma

涉及碼率控制的MB編碼過程如下

因為QP由碼率控制和RDO指定,這裡就有個問題,當進行碼率控制時:為MB做RDO,MB的QP應該首先使用MB的MAD決定。然而,目前MB的MAD隻有在做了RDO之後才能得到。這是一個典型的蛋雞悖論。是以,H.264的碼率控制要比MPEG2,MPEG4,H.263的更加困難。學習H.264的碼率控制,我們必須解決這個問題去建立目前MB的MAD。除此之外,我們也應該計算目前MB的目标碼率和決定共享相同QP的連續MB數量。為了解決這些問題,我們需要下列的預備知識。

2.2 Definition of A Basic Unit

基本單元的概念定義。

定義1:假設一幀由MB組成,基本單元定義為一組由MB組成的連續MB,其中屬于

在一幀中基本單元的總數如下

                                                                                (1)

假設一個基本單元可以為MB,條帶,場,幀。例如,一個QCIF大小的視訊序列 = 99. 根據定義1, 可以為 1, 3, 9, 11, 33, or 99. 相應的 分别為 99, 33, 11, 9, 3, and 1,

這表明使用一個較大的基本單元,可以實作較高的PSNR值同時碼率波動也就更大。換句話說,使用較小基本單元,碼率波動會顯著變小,但是會輕微損失PSNR

2.3 A Fluid Flow Traffic Model

我們現在提出一種流體流動通信模型(fluid flow traffic model)來計算目前編碼幀的目标bit。辨別一組圖檔(GOP)的總幀數。表示在ithGOP中的jth幀,表示編碼jth幀後虛拟緩存的占有率。那麼我們得到

                                        (2)

其中A()是ithGOP中jth幀生成的比特數。u()是可用信道帶寬,可以使VBR,也可以是CBR,是預定義的幀率,是緩存大小,其最大值由不同的level和profile決定。

注意初始緩沖區的值設定為,這個是可以設定為其他的值的,通常,初始緩沖區值可以設定為一個小的值如果比特波動很小的話。

這個模型和漏桶模型[7]類似,令,在我們的設計中,我們保證碼流包含在上述的虛拟緩存中,是以,當碼流以參數 and輸入到HRD,中,HRD緩存是不會向上或者向下溢出的,換句話說,我們的碼率控制方案是符合HRD的。

2.4  A Linear Model for MAD Prediction

現在引入線性模型在目前幀中預測目前基本單元的MAD。

這個同樣是依賴于前一幀中相關位置的基本單元。假設目前幀中目前基本單元的預測MAD和前一幀相關位置基本單元的實際MAD分别表示為為 和,線性預測模型由下式給出

                                                                     (3)

其中 和為預測模型的2個相關系數。 和的初始值分别設定為1和0,他們在每個基本單元被編碼後更新。線性模型被用來解決蛋雞悖論。

使用基本單元的概念和模型(2)模型(3),我們方案的步驟如下:

1. 使用fluid traffic模型(2)和線性跟蹤理論[5]計算目前幀的目标bit

2.  把剩餘的bit平均配置設定給給目前幀的未編碼基本單元。

3. 使用前一幀相關位置的基本單元的實際MAD通過線性模型(3)來預測目前幀基本單元的MAD。

4. 使用二次RD模型計算相應的參數

5.  使用來自step4的QP計算目前基本單元每個MB的RDO

如果基本單元選擇為幀,那麼我們的碼率控制方案由2層組成:GOP層和幀層。否則,應該加上基本單元層碼率控制。他們會在下面詳細說明。

繼續閱讀