H265码率控制(一)之HM代码R-λ model介绍

前言

        在HM中R-λ的码率控制引入是在k0103提案中开始引入的,代码是HM-8.0以后的版本出现的,后面经过多个提案不断的修改,如M0257提案,M0036提案等;笔者建议研究HM代码的R-λ码率控制从HM10.0版本开始这个版本的R-λ已经存在且bug比较少。

一、R-λ model介绍

1、R-D model介绍

        在了解R-λ model前建议先了解下R-D model,因为R-λ model是根据R-D model推导而来。

        指数形式的R-D函数:

        双曲线形式的R-D函数 :

        C和K是和输入图像特征相关的模型参数,D是亮度分量的MSE(Mean Square Error);

        如下图指数形式的R-D(虚线)和双曲线形式的R-D(实线)在不同视频上的测试结果,可以看出双曲线的平均相关系数^{​{R_{}}^{2}}大于0.99,指数形式的平均相关系数^{​{R_{}}^{2}}仅为0.92左右。可以看出对于 H265,双曲线模型在表征 R-D 关系方面优于指数模型。

         上图中bpp为每个像素的bits数,计算公式如下:

        R是目标码率,f为帧率,w和h为图像宽高; 

        MSE的计算公式如下:

        N为图像的总像素数,rec和org分别是重建像素和原始像素; 

2、R-λ model的来源

        λ 作为 双曲线R-D model曲线的斜率,公式如下:

        α 和β 是和输入图像特征相关的模型参数。

        下图是λ和bpp在不同视频上的特征曲线。

二、基于R-λ 的码率控制介绍

1、HM中Seq(序列)级码率控制 

      序列级码率控制的公式:

        R_{SeqTotal } 是全部图像序列预计bits,R_{left}是剩余未编码的bits,N是待编码的帧数,R_{tar}是编码的目标码率(bits) ;

 R_{codec }是以及编码的bits,N_{code}是已经编码的帧数。

此外每一帧的平均bits公式为:

 2、GOP级码率控制

        GOP级码率控制的公式:

         N_{coded}是已经编码的图像个数,SW为平滑窗口大小,R_{codec }为编码的bit代价。

         T_{GOP} 是当前GOP的目标码率,N_{GOP}是当前GOP的大小。

3、图像级码率控制

        图像级码率控制的公式:

         ωi是当前GOP中每个图片的比特分配权重。低延迟(gop为4)中不同图片的权重分配如下表:

        根据不同的权重可以给不同帧分配不同的bits,实际编码出来的帧大小如下图所示:

         如果是帧内图像则乘一个系数放大目标码率,系数如下表:

         非低延迟场景下的权重分配如下:

          非低延迟场景下的I帧bits放大系数如下:

 4、宏块级码率控制

        T_{CurrPic}当前宏块的目标码率

        Bit_{header}是编码帧头bit数如sliceHeader等,通过前一个同级别已经编码帧估计来的。ωi是当前图像中每个宏块的比特分配权重,根据MAD预测的来。

5、QP的计算公式

6、α 和β 参数的更新

        其中δα = 0.1, δβ= 0.05。

7、QP范围限制

        帧级QP的限制。

         宏块级QP限制 。

三、R-λ的改进

1、M0257-帧级码率控制的改进

        在M0257提案提出了一种帧内码率控制方案。在R-λ关系上进一步加入了复杂度C的影响。 

        帧级λ改进前: 

         帧级λ改进后:

        复杂度C基于SATD来度量,SATD是将Hadamard变换应用于原始8×8块后获得的系数绝对值之和。 

2、M0257-宏块级码率控制的改进

        M0257提案提出了一种帧内码率控制方案。在R-λ关系上进一步加入了复杂度C的影响。宏块级码控的改进-宏块bit分配权重:

        当前帧剩余可分配bit: 

        _{}R_{left}是当前剩余码率,\widetilde{R}_{left}是计算后新的剩余码率,M当前帧总的宏块数,W为平滑窗口数。

当前宏块的目标码率T_{CurrPic}计算公式为:

 

3、 M0036-帧级码率控制的改进

        通过提出一种求解数值方程的方法解出当前帧的权重,不同的帧不同的权重,不同的权重不同的bits分配。

        上式表明所有帧分配的bits总和应该等于GOP的目标bits数。 λ之间的比值如下公式:

        HM中对应的代码如下: 

        上面的代码主要作用是利用前一帧的lambda来计算新GOP中每个帧的bits分配的权重, 以及为新GOP中每个帧与分配一个初始目标码率(bits) 。然后根据GOP中每一个帧的bit权重计算当前帧的目标码率(bits),代码如下:

4、 M0036-宏块级码率控制的改进

和帧级一样M0036也有为宏块码率控制进行改进,为当前帧中每一个宏块与分配一个初始化bits权重,代码如下:

根据每个宏块的权重来计算每个宏块的目标bits和bpp,代码如下:

 最后:

        R-λ model还在改进中,新的HM会有新的改进提案,这里就不再记录。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值