率失真优化与码率控制

率失真优化

基于率失真优化理论选择最佳的编码参数(如编码模式、预测模式、量化等参数)。

在给定码率\(R_c\)下,

\[min \quad D(B), \quad s.t. \ R(B) < R_c \]

该约束性问题可以通过引入拉格朗日因子\(\lambda\),转化为非约束性问题:

\[min \quad J = D(B) + \lambda \ R(B) \]

\(J\) 就是率失真代价 (RD Cost)。
在视频编码中,\(\lambda\) 的取值与量化参数有比较固定的函数关系。

率失真优化问题即为:在所有参数集中,选取使\(J\)最小的参数集。

最优化: https://www.cnblogs.com/xingshansi/p/6628785.html

码率控制

码率(速率)控制属于率失真优化的范畴,主要工作是建立编码码率与量化参数的关系模型,根据目标码率确定量化参数。

\[Q^* = (Q^*,\cdots,Q_N^*) = \underset{(Q,\cdots,Q_N)}{argmin} \sum_{i=1}^N D_i, s.t.\sum_{i=1}^N R_i \leq R_c \]

率失真优化在编码器中不同层次(CTU级、CU级、PU级、TU级等)的运用

附:CTU可以划分成为CU、CU在预测的时候被划分成为PU、CU在变换量化的时候被划分成为TU

  1. 在CTU级的应用
    在总比特数R受限的情况下选择一个CU(CU从8x8到64x64)的划分模式,使得一个CTU的总失真D最小
  2. 在CU级的应用
    在总比特数R受限的情况下,适当的选择选择PU划分模式和TU(TU从4x4到32x32)划分模式,使得一个CU的总失真D最小
  3. 在PU级的应用
    对于帧内预测,就是从35中帧内模式中选出最优的一种,使得PU的失真D最小;对于帧间预测,选出最优的运动模式(包括运动矢量、参考图像、预测权值等)使得PU的失真D最小
  4. 在TU级的应用
    在最优的PU的模式下,选取最优的TU模式

HM实际的优化方式

  1. 对于CTU
    1. 遍历所有的CU划分模式,确定最优的CU划分模式
    2. 对于确定的CU,遍历所有的PU模式和TU模式的组合,确定最优的PU模式和TU模式
    3. 对于其中的每一个PU,遍历所有的预测模式,选取最优的预测模式
  2. 对于变换
    采用Hadamard变换代替实际的DCT/SDT变换。
  3. 其他快速的策略
    1. 提前终止策略(Early_CU)
      如果当前CU的最优编码模式是MODE_SKIP模式,那么终止该CU后续四叉树划分和模式判决
    2. 早期跳出模式(Early_Skip)
      如果CU的PU划分模式是PART_2Nx2N,预测模式是MODE_INTER,运动矢量差MVD是(0,0),且预测残差不包含非零变换系数(就是变换系数全是0),就判定当前模式是最优模式,跳过剩余的模式,直接进行下一步的四叉树分割及子CU模式判决
    3. 快速CBF策略(CBF_Fast)
      如果CU的预测模式是MODE_INTER,其对应的预测残差不包含非零的变换系数,就跳过该CU的其余候选模式,当前模式为最优模式,且直接进行下一步的四叉树分割
    4. 缩减AMP模式
      依据两个参数来判断是否缩减当前AMP模式。具体是利用在进行AMP模式判决当前的最优分割模式,以及父亲节点CU内采用的分割模式和预测模式,来确定候选编码中可使用的AMP模式

率失真优化过程

根据目标码率,先确定量化参数QP,然后根据QP确定出拉格朗日参数λ!然后根据λ和一组编码参数计算失真

  1. 分层递归遍历所有的CU划分模式,选取最优的CU划分模式,这个过程称为CU划分模式判别
  2. 对于其中的每一个CU,遍历所有的PU模式,选取最优的PU模式,并在此基础上选择最优的TU模式
  3. 对于其中的每一个PU,遍历所有的预测模式,选取最优的预测模式,这个过程称为预测模式判别
    1. 帧内预测模式
      1. 遍历所有的预测模式,得到每种模式下的残差信号,再对残差信号进行Hadamard变换计算SATD值
      2. 利用SATD值计算每种预测模式的率失真代价,选取率失真代价最小的几种模式(与PU大小相关)为预测模式集
      3. 将已编码相邻块的预测模式补充到预测模式集中
      4. 遍历模式集合中的所有模式,并对残差信号进行正常编码(熵编码),计算率失真代价
      5. 选取最优的预测模式作为该PU的最优模式
      6. 当亮度块的模式确定之后,把该模式以及DC、planar、水平方向模式、垂直方向模式作为色度块的候选模式,选取最优的模式即可
    2. 帧间预测模式
      1. HEVC采用了Merge和AMVP技术,更加高效地表示帧间预测参数,但是这两种方式有比较大的区别,因此帧间预测可以分成Merge帧间预测模式和非Merge帧间预测模式(采用AMVP技术),分别选取最优的Merge帧间预测模式和非Merge帧间预测模式,然后从中选取最优的模式
      2. 对于Merge帧间预测模式,遍历所有的候选模式,计算率失真代价,选择率失真代价最小的模式为最优模式。当采用merge帧间预测模式I按摩,且预测残差信号的编码比特数为零时,只需要编码skip标识和merge索引两个语法元素,此时该模式称为MODE_SKIP模式
      3. 对于非Merge帧间预测模式(采用AMVP技术)
        1. 根据AMVP技术确定MVP列表,计算每个MVP的率失真代价,得到最优的MVP
        2. 以最优MVP为起始点,进行整像素运动预测,得到最优的整像素运动矢量
        3. 以整像素运动矢量为中心,进行半像素搜索,从周围的8个点确定最优的半像素精度运动矢量
        4. 以半像素精度矢量为中心,进行1/4像素精度的运动搜索,确定最优的1/4像素精度运动矢量
    3. PU模式判别
      1. 计算2Nx2N模式的率失真代价,将其作为最优代价,如果预测残差的编码比特数为零,那么满足CBF_Fast,直接跳至11,并将2Nx2N作为最优的PU模式
      2. 如果CU的深度已经取得最大值,且inter_4x4_enabled_flag是1,那么执行3,否则执行4
      3. 计算NxN模式的率失真,更新最优代价和模式,如果预测残差的编码比特数为零,那么满足CBF_Fast,直接跳至11,并将NxN作为最优的PU模式
      4. 计算Nx2N模式的率失真代价,更新最优代价和模式,如果预测残差的编码比特数为零,那么满足CBF_Fast,直接跳至11,并将Nx2N作为最优的PU模式
      5. 计算2NxN模式的率失真代价,更新最优代价和模式,如果预测残差的编码比特数为零,那么满足CBF_Fast,直接跳至11,并将2NxN作为最优的PU模式
      6. 如果TestAMP_Hor为1,当前CU执行水平方向上的AMP模式,否则执行本步骤。计算2NxnU模式的率失真代价,更新最优代价和模式,如果预测残差的编码比特数为零,那么满足CBF_Fast,直接跳至11,并将2NxnU作为最优的PU模式;否则计算2NxnD模式的率失真代价,更新最优的代价和模式,如果预测残差的编码比特数为零,那么满足CBF_Fast,直接跳至11,并将2NnD作为最优的PU模式
      7. 如果TestAMP_Ver为1,当前CU执行垂直方向上的AMP模式,否则执行本步骤。计算nLx2N模式的率失真代价,更新最优模式和代价,如果预测残差的编码比特数为零,那么满足CBF_Fast,直接跳至11,并将nLx2N作为最优的PU模式;否则计算nRx2N模式的率失真代价,更新最优模式和代价,如果预测残差的编码比特数为零,那么满足CBF_Fast,直接跳至11,并将nRx2N作为最优的PU模式
      8. 注意上面的都是帧间的模式,现在需要计算帧内2Nx2N模式的率失真代价,更新最优模式和代价
      9. 如果当前CU深度为最大值,计算帧内NxN模式的率失真代价,更新最优模式和代价
      10. 如果当前CU大于或等于PCM模式所允许的最小单元,并且代价大于PCM模式,那么更新最优模式和代价
      11. 结束搜索,得到最优的PU模式。注意对于每一种PU模式,都要夯实不同的TU划分,选取最优的TU模式,因此最优的PU模式包含了最优的TU模式
    4. CU划分模式判决
      1. 把CTU作为CU,计算率失真代价(最优PU模式时),此时应包含CU分割标志(split_flag)的编码比特数
      2. 对CU进行四叉树划分,计算每个子CU的最小率失真代价,并对所有子CU的率失真代价求和,得到该CU的率失真代价
      3. 为每个子CU作为CU重复2
      4. 重复3直到编码的最大深度
      5. 从最大的编码深度,比较4个子CU与CU的率失真代价,一次选出最优的划分方式。
      6. 对于每个CU,如果其帧间2Nx2N模式为MODE_SKIP,则满足Early_SKIP条件,直接结束该CU的进一步划分
posted @ 2021-11-15 19:21  land5cape  阅读(828)  评论(0编辑  收藏  举报