率失真优化量化 (RDOQ) 是一种编码优化技术,可以对其进行修改,而不会影响比特流是否符合标准。
在视频编码器操作中,量化步骤是唯一负责通过量化和减少变换系数的数量来减少有损数据的步骤。因此,量化变换系数的计算对压缩效率具有显著影响。利用标量量化的编码器所提供的压缩效率(在速率失真方面)可以通过选择更复杂的量化变换系数的计算方式来显著提高(它不是标准化的,可以以任何方式执行)。
在视频压缩技术的发展过程中,已经开发了许多旨在改进量化系数计算的方法。由于其效率,RDOQ被选为HEVC测试模型开发中两种可能的量化方法之一。
改进的量化器可以考虑量化误差和传输变换系数所需的位数,并确定量化变换系数的最佳集合。可以对每个变换系数块(即HEVC中的变换单元(TU))执行优化,并且通过最小化拉格朗日函数来计算最优成本。
该方法的一般思想是找到与最低RD成本相对应的量化变换系数的最佳集合。理论上,确定量化系数的最佳集合需要通过评估所有可能的组合进行穷举搜索。由于编码器的极端计算复杂性,穷举方法是不切实际的。因此,引入了快速次优方法。此外,在[1] “速率失真优化量化(RDOQ)”这一名称已被提出,并被广泛采用。
RDOQ的目的是找到表示编码块中的残差数据的量化变换系数的最佳或次最佳集合。RDOQ计算编码块中的图像失真(由变换系数的量化引入)和编码相应量化变换系数所需的比特数。基于这两个值,编码器通过计算RD成本来选择更好的系数值。
率失真优化量化过程
RDOQ的主要思想是确定TB中的第i个系数(表示为\(c_i\))的最优量化水平,或者在两个候选量化水平之间[上限舍入水平(表示为\(l_{i,ceil}\))和下限舍入水平(称为\(l_{i,floor}\))],或者特别地,在三个候选之间,或者通过在 \(l_{i,ceil}=2\)的情况下额外考虑 0,\(l_{i,ceil}\)和\(l_{i,floor}\)的值计算如下:
其中QStep是对应于量化参数(QP)的量化步长。RDOQ过程需要所有候选量化级别的RD代价,其中产生最小RD代价的量化级别被选为最优级别。每个候选级别的RD代价导出为:
其中\(D(c_i,r_{li})\)是系数\( c_i \)被量化为\( l_i \)时的量化误差,\( r_{li} \)是其重构(即反量化),\(R(l_i)\) 是量化级别 \(l_i\) 的熵编码产生的码率。 λ是对应于QP的拉格朗日乘数。
注意,(2)中的量化误差\(D(c_i,r_{li})\)可以表示为
其中 \(l_{i,float} \)是由 \(|c_i|/QStep \)计算的量化中的实际浮点数。 现在, \(R(li) \)被计算为:
如(4)中,\(R(li) \)需要 \(R_{li}^{Sig}\)、 \(R_{li}^{1}\)、 \(R_{li}^{2}\)、 \(R_{li}^{Rem}\),分别为与量化级别相关的4个语法元素(SE)的各自速率[3],即coeff_sig_flag、coeff_abs_lev_greater1_flag、coeff_abs_lev_greater2_flag、coeff_abs_remaining 。这四个 SE 的含义如表 I 所示。
请注意,在 HEVC 中,coeff_sig_ falg、coeff_abs_lev_greater1_falg和 coeff_abs_lev_greater2_ falg的 bin 是上下文编码的,而 coeff_abs_remaining 的 bin 是旁路编码的 [4]。为了估计 SE 的个体速率,需要执行实际的熵编码和上下文更新过程。然而,在 HEVC 参考软件中,速率 \(R_{li}^{Sig}\)、 \(R_{li}^{1}\)、 \(R_{li}^{2}\)是根据级别重要性、位置和上下文从预定义的查找表中估计的;通过使用 Golomb–Rice 代码和 Exp-Golomb 代码对低复杂度估计进行二值化 coeff_abs_remaining(表示为 Rem)来估计速率 \(R_{li}^{Rem}\)。 Rem 的值计算如下,其中 absLevel 是量化级别的绝对值:
表 II 显示了 coeff_abs_remaining 的二值化。 coeff_abs_remaining 二值化后,\(R_{li}^{Rem}\) 计算如下:
其中\({Length}^{prefix}\)和\({Length}^{suffix}\)分别是二值化后前缀和后缀的长度。由于HEVC变换系数左移15以表示整数域中速率的分数部分,并且还使用缩放系数估计失真,因此对\(R_{li}^{Rem}\) 左移15。
The RDOQ in HEVC
RDOQ已包含在HEVC参考软件(HM)中,并在HEVC开发和性能期间广泛使用。本节介绍了适用于HEVC的RDOQ算法。
HM中RDOQ的自适应与HEVC残差编码技术密切相关。在HEVC中,变换单元的大小可以从4×4到32×32像素不等,并且只允许方形单元。变换和扫描后,系数被划分为包含16个变换系数的系数组(CG)(图3)。HEVC变换系数编码的详细描述见[2]。
编码器中的RDOQ操作可分为三个阶段:变换系数的量化、系数组(CG)的消除和最后一个非零系数的选择。
A. 变换系数的量化
在该阶段中,编码器分别对每个变换系数执行计算。在第一步中,编码器通过使用无死区的均匀量化器量化变换系数的幅度来计算值Level。在下一步中,编码器考虑分析的量化系数的两个附加幅度:1级和0级。对于每一个提到的系数幅度,编码器计算用所选幅度编码系数的RD成本,并选择RD成本最低的一个。
值得一提的是,当与等于Level的系数幅度值进行比较时,将幅度设置为0值。与设置较低幅度值(级别1)相比,允许更显著的比特率降低。然而,通过将幅度设置为0来消除所选变换系数可能会导致显著失真。
B. 消除系数组
在该阶段中,编码器对每个变换系数组(CG)执行计算。编码器计算消除整个CG的RD成本。整个CG的消除是通过将CG中的所有系数量化为零来执行的。编码器计算所分析CG的消除的RD成本,如果消除允许降低成本,则消除所选择的CG。
整个CG的消除可以导致显著的比特率降低(不需要为CG内的每个系数发送sig_coeff_flag),同时向重建图像引入显著的失真。
C. 最后一个非零系数的选择
RDOQ的最后阶段是在步骤A和B之后针对TU中的所有剩余CG执行的。RDOQ算法分析系数以找到最佳的(短期RD成本)最后非零系数位置。包括此步骤是因为编码器必须编码比特流中最后一个非零系数的(x,y)坐标。
D. RD cost 的计算
在RDOQ操作期间,编码器必须计算所考虑的每一组变换系数或系数组的成本。可以通过考虑编码所选系数CG或TU所需的比特数(B)、引入的失真(D)以及通过拉格朗日乘数对两个值进行加权来计算该成本(RD_cost):
\(RD\_cost = D+\lambda \cdot B\)
在不同的实现中,编码器可以使用引入的失真的精确或估计值以及编码所选变换系数、系数组或变换单元所需的比特数。使用估计值会导致最佳系数集选择中的一些错误,并导致压缩性能下降。然而,速率和失真的估计可以加快编码器的操作。
Reference
[1] M. Karczewicz, Y. Ye, I. Chong, “Rate Distortion Optimized Quantization”, ITU-T SG 16/Q 6 VCEG, document: VCEG-AH21, Jan. 2008.
[2] J. Sole, R. Joshi, N. Ngyuen, T. Ji, M. Karczewicz, G. Clare, F. Henry, A. Duenas, “Transform Coefficient Coding in HEVC”, IEEE Transactions on Circuits and Systems for Video Technology, vol. 22, no. 12, pp. 1765-1777, Dec. 2012.
[3]J. Sole et al., “Transform coefficient coding in HEVC,” IEEE Trans. Circuits Syst. Video Technol., vol. 22, no. 12, pp. 1765–1777, Dec. 2012.
[4]V. Sze and M. Budagavi, “High throughput CABAC entropy coding in HEVC,” IEEE Trans. Circuits Syst. Video Technol., vol. 22, no. 12, pp. 1778–1791, Dec. 2012.
《率失真优化量化 (Rate-Distortion Optimized Quantization RDOQ)》有一个想法