G012翻译

开始看h264的码率控制,很多地方都提到 G012,拿来做为参考比较,看来很有必要研究清楚。

 

草草翻译了下,因为不打算做B帧,也不准备在同一帧中使用不同的MB,这些地方就跳过了。

 

Title:

 Adaptive Basic Unit Layer Rate Control for JVT

 

 

 

1.      Introduction

 

 

编码器使用码率控制来控制编码码流变化的bit rate特性,以追求给定目标bit rate下的高质量解码。码率控制因此成为了编码器的必要部分,并在标准中被广泛的研究,比如MPEG2MPEG4H.263等等。因此,他也被JVT充分的研究。JVT的码率控制与其他的标准相比更加困难。这是因为量化参数被同时应用到码率控制算法(rate control algorithm)和码率失真最优化(rate distortion optimization RDO)中,这样在进行码率控制研究的时候导致了蛋鸡悖论:要对当前帧的宏块进行RDO,需要用当前帧或者宏块的MAD决定每个宏块的QP值。然而,当前帧或宏块的MAD只有在RDO之后才能算出。此外,可用的编码信道带宽也可能是固定的或是随时间变化的。因此我们需要同时考虑固定bit rateCBR)和可变bit rateVBR)。然而现存的方案集中与CBR

 

 

 

JVT通过引入基本单元的概念和线性模型,提出了一种自适应基本单元层的码率控制算法。这个基本单元可以是帧,条带,或者宏块MB,线性模型通过前一帧的相关位置的基本单元来预测当前帧当前基本单元的MAD。蛋鸡悖论解决如下:当前帧的目标码率采用漏桶(leaky bucket)模型和线性跟踪理论根据预先定义的帧率,当前缓冲区占有率,目标缓冲区级别和可用的信道带宽计算。因为未编码的基本单元MAD未知,所以剩余的bit平均分配到未编码的当前帧基本单元中。当前基本单元的MAD靠线性模型使用前一帧相关位置的基本单元的MAD来预测。二次率失真模型(RD)用于计算相应的QP,这个值用与当前基本单元中每个宏块的最小率失真(rate distortion optimization)我们同时也关注VBR。我们设计了虚拟缓冲区来根据信道带宽的动态变化而调整编码程序。该缓冲区是不能向上或者向下溢出的。因为该模型和漏桶模型基本一致,我们的码率控制因此符合理想参考解码器(hypothetical reference decoder

 

我们测试VBRCBR来验证我们的设计。VBR比特率曲线是一条预定义的曲线。他表明实际生成的比特数保持接近比特率曲线并且缓冲并没有溢出。CBR中,我们的码率控制方案的编码效率与使用固定QP值的比较。编码的计算率由我们的码率控制方案指定。我们方案的编码效率提高了1.02dB,所有测试序列的平均PSNR提高了0.32dB。我们也同使用AHM2.0软件AHG推荐的F086进行比较。PSNR提高了1.73dB,最高损失0.25dB,必须提及的是我们的方案是one passF086two passtwo pass:采用2次编码,每一帧的第一次编码用来产生第2次编码所需要的编码策略)

 

Preliminary Knowledge

 

 

在这一章中,我们提出关于H.264码率控制的相关问题。

 

2.1  The Chicken and Egg Dilemma

 

涉及码率控制的MB编码过程如下

 

 

因为QP由码率控制和RDO指定,这里就有个问题,当进行码率控制时:为MBRDOMBQP应该首先使用MBMAD决定。然而,当前MBMAD只有在做了RDO之后才能得到。这是一个典型的蛋鸡悖论。因此,H.264的码率控制要比MPEG2MPEG4H.263的更加困难。学习H.264的码率控制,我们必须解决这个问题去建立当前MBMAD。除此之外,我们也应该计算当前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( )ithGOPjth帧生成的比特数。u( )是可用信道带宽,可以使VBR,也可以是CBR 是预定义的帧率, 是缓存大小,其最大值由不同的levelprofile决定。

 

注意初始缓冲区的值设置为 ,这个是可以设置为其他的值的,通常,初始缓冲区值可以设置为一个小的值如果比特波动很小的话。

 

这个模型和漏桶模型[7]类似,令 ,在我们的设计中,我们保证码流包含在上述的虚拟缓存中,因此,当码流以参数  and 输入到HRD,中,HRD缓存是不会向上或者向下溢出的,换句话说,我们的码率控制方案是符合HRD的。

 

2.4   A Linear Model for MAD Prediction

 

现在引入线性模型在当前帧中预测当前基本单元的MAD

 

这个同样是依赖于前一帧中相关位置的基本单元。假设当前帧中当前基本单元的预测MAD和前一帧相关位置基本单元的实际MAD分别表示为为  ,线性预测模型由下式给出

 

                                                                      (3)

 

其中  为预测模型的2个相关系数。  的初始值分别设置为10,他们在每个基本单元被编码后更新。线性模型被用来解决蛋鸡悖论。

 

使用基本单元的概念和模型(2)模型(3),我们方案的步骤如下:

 

1.  使用fluid traffic模型(2)和线性跟踪理论[5]计算当前帧的目标bit

 

2.   把剩余的bit平均分配给给当前帧的未编码基本单元。

 

3.  使用前一帧相关位置的基本单元的实际MAD通过线性模型(3)来预测当前帧基本单元的MAD

 

4.  使用二次RD模型计算相应的参数

 

5.   使用来自step4QP计算当前基本单元每个MBRDO

 

如果基本单元选择为帧,那么我们的码率控制方案由2层组成:GOP层和帧层。否则,应该加上基本单元层码率控制。他们会在下面详细说明。

 

 

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/myclu/archive/2007/08/28/1761788.aspx

 

 

3.      GOP Layer Rate Control

 

 

 

在这一层中,我们需要为每个GOP中未编码的帧计算剩余bit总数 ,并决定每个GOP初始QP值。和【5】一样,我们假设GOP结构为IBBPBBP或者IPPPI为帧内编码,P为帧间编码,B为双向预测帧。GOP的长度通常为15-304

 

3.1  Total Number of Bits

 

 

 

ith GOP开始时,分配给ith GOP的比特数如下:

 

                                                    (4)

 

 

 

在(4)中我们可以看到下一个GOP的编码结果依赖与前一个GOP。为了保证所有的GOP有同样的质量,每个GOP应该使用自己的预算。换言之,每个GOP编码后,缓存占有率应该保持在 。因为信道带宽会随时变化, 每一帧都回更新:

 

                                     (5)

 

 

 

In the case of CBR, i.e. , Equation (5) is simplified as

 

                                                                  (6)

 

In other words, Equation (5) is also applicable to the CBR case.

 

 

 

3.2  Starting Quantization Parameter of Each GOP

 

在我们的方案中,将第一个GOP的初始QP定义为 GOPI帧和第一个P帧用 编码, 由可用的信道带宽和GOP长度预先定义。通常,可用带宽大则选择小的 ,带宽小则选择大的 .在同样的带宽下,如果GOP长度加15 1

 

其他GOP的初始QP计算如下。

 

                                                       (7)

 

其中 是前个GOPP帧的总数, 是前个GOP中所有P帧的QP值之和。和 一样, GOP长度和可用信道带宽决定。

 

I帧和第一个P帧使用 编码。

 

4.      Frame Layer Rate Control

 

帧层码率控制方案包括2个阶段:预编码和发布编码(post encoding

 

 

 

4.1  Pre-Encoding Stage:

 

 

 

这个步骤的目标是为所有的帧计算QP值,我们首先提出一种简单的计算BQP值的方法。

 

 4.1.1 Quantization parameters of B frames

 

 

 

4.1.2 Quantization Parameters of P Frames

 

 

 

计算PQP值通过下面2步:

 

 

 

步骤1:确定每个P帧的目标比特数,步骤1又由2个子步骤组成。

 

步骤1.1 宏观控制(在图像中预先分配)

 

通过预先定义每个P帧的目标缓存level来实现Bit分配。目标缓存level的功能是为每个P帧计算目标bit。然后用于计算QP。因为第一个P帧的QPGOP层提供,我们只需要预先定义GOP中其他P帧的目标缓存level

 

在编码ith GOP中的第一个P帧之后,我们充值目标缓存level的初始值如下:

 

                                                                           (12)

 

其中 是编码第一个P帧之后的缓存实际占用率

 

后续P帧的目标缓存level由下式决定

 

                 (13)

 

其中 p帧的平均复杂权重, B帧的平均复杂权重。 为目标缓存level 用下式计算。

 

                                                           (14)

 

  为相应帧编码得到的bit数,  为相应的QP

 

假如没有B帧,公式(13)简化为

 

                                                      (15)                  

 

容易看出 有关。因此,如果实际缓存值精确的和预定义目标缓存level一致,就可以保证每个GOP使用自己的预算。然而,因为RD模型和MAD预测模型并不精确,因此实际缓存值和目标缓存level存在差距。因此我们需要计算每帧的目标bit去减少实际缓存值和目标缓存level的差距。这个使用微观控制实现。

 

Step 1.2 Microscopic control (target bit rate computation).

 

使用线性跟踪理论【6】,ith GOPjth 帧的目标bit分配由目标缓存level,帧率,可用信道带宽和实际缓存占用率决定。

 

                                                      (16)

 

其中g是一个常量,没有B帧时,典型值为0.75,否则为0.25。如果实际生成bit数在目标附近,可以容易看出

 

                                            (17)

 

因此,一个更严格缓存调整(更接近目标bit)可以同过选择更大的g来实现。

 

同时,目标bit计算的时候剩余bit数也应该考虑在内

 

                                          (18)

 

 

 

目标bit  的加权和

 

                                                        (19)

 

其中 是一个常量,其典型值是无B帧时0.5,否则为0.9

 

 Step 2计算QP,实现RDO

 

当前P帧的MAD通过模型(2)使用前个P帧的实际MAD值预测。

 

QP 相应的目标bit使用【1.2】提供的二次模型计算。细节可以在『1.2.5』找到,因此本节不详细描述。为了维持连续帧视觉效果的平滑,QP 由下式决定

 

                                                       (20)

 

其中 是前个P帧的QP值。

 

最终QP 还被下式限制

 

                                                                   (21)

 

QP值随后使用【7.8】中的方法来计算当前帧每个MBRDO。编码模式由下列性能指标的最小值决定。

 

                                               (22) with

 

                                                  (23)

 

如果图像为P帧或者B帧并且SAD为标准所接受,运动估计的lambda如下

 

                                                                               (24)

 

 

 

4.2  Post-encoding Stage:

 

 

 

在这一节中有3个主要的任务:更新model3)参数 ,二次RD模型的参数,和决定有多少帧需要被跳过。

 

在编码一副图像之后,model3)的参数,和二次RD模型一样需要被更新。和【1.2】中RD模型的方法类似,使用【5】来计算窗口大小代替【1.2

 

 

 

一帧的编码之后,实际生成bit数,A( 被加入当前缓存占用率。为了确保更新的缓存占用率不过高,帧跳过参数 被设置为0并增加知道其后的缓存状态达到【1】要求

 

                                                                        (25)

 

其中缓存值更新如下

 

                                               (26)

 

 

 

 

 

 

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/myclu/archive/2007/08/29/1763412.aspx

 

5.      Basic Unit Layer Rate Control

 

如果没有使用帧做为基本单元层,那么在我们的方案中将添加基本单元层的码率控制。

 

和帧层的码率控制一样,I帧使用单一的QP进行编码。它的计算和帧层控制中的一样。B帧也是使用单一QP值编码,计算方法同帧层的几乎一样,  使用相关帧的所有基本单元的平均QP值代替。

 

在剩余的章节中,我们为每个P帧提供基本单元层的码率控制。

 

和帧层一样,我们应该首先决定每个P帧的目标码率。这个过程和帧层是一样的。比特数被分配给每个基本单元。因为在当前帧中每个未编码基本单元的MAD未知,我们给当前帧的每个未编码单元平均的分配剩余的bit

 

基本层码率控制选择一帧中所有基本单元的QP值,因此生成bit的和更加接近与帧目标

 

下面是控制方法的步骤

 

步骤1 计算当前基本单元的结构bittexture bits 。这一步由下面3个子步骤完成。

 

步骤1.1 计算当前基本单元的目标比特数

 

  表示当前帧未编码基本单元剩余的比特数和未编码基本单元数。  and 为他们的初始值。当前基本单元的目标比特数由 给出。

 

步骤1.2 为所有的已编码基本单元计算生成的平均头比特数(header bits

 

                                                           (27)

 

其中 lth基本单元的实际头比特数, 是前一帧所有基本单元的估算?

 

步骤1.3 计算结构比特数

 

                                                                             (28)

 

 

 

步骤2 使用前一帧相同位置的基本单元的MAD通过模型(3)预测当前帧当前基本单元的MAD

 

步骤3 使用二次RD模型计算当前基本单元的QP,我们需要考虑下面3个因素。

 

1 当前帧的第一个基本单元

 

                                                                                    (29)

 

其中 是前一帧中所有基本单元的平均QP值。

 

2 .在这种情况下,QP值应该大于前个基本单元的以便生成bit接近

 

                                                                         (30)

 

其中 是前个基本单元的QP,减掉blocking artifacts,当 大于8的时候DQuant1,否则为2.

 

为了保持视觉效果的平滑,QP值由下式限制

 

                                                 (31)

 

其中 3 低于一行中的MB,否则为6

 

3 此外,在这种情况下,我们应该首先使用二次模型计算QP ,和情况2类似,他由下式决定

 

                                          (32)

 

目标是减少blocking artifacts,也就是保持视觉效果平滑,他依赖与下式

 

                                                 (33)

 

 

 

步骤4 在当前基本单元中为所有MB计算RDO

 

步骤5 更新剩余bit数和当前帧中未编码基本单元数.

 

步骤6 一帧编码结束后,更新 .

 

为了获得平均PSNRbit波动的折中, 取自实时视频通信中一行的MB, 而在其他程序中 9.

 

注意: 为了降低使用在不同QPMB中使用的bit,H264的语法应该修改,bit流开始的时候加入一个标志位用来只是基本单元中的实际MB数。之后我们就只需要编码基本单元之间QP值的不同来取代那些MB

 

6.      Experimental Results

 

 

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/myclu/archive/2007/08/29/1763432.aspx

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值