本文介绍视频编码的Adaptive Reconstruction LevelsARL)技术。
视频编码标准规定了从码流得到重建视频的解析解码过程。重建像素由预测像素和预测残差构成,并进行后续的环路滤波。对于预测残差,首先由码流解析得到量化系数,然后进行反量化(scaling)得到(重建)变换系数,然后进行反变换(transformation)得到(重建)预测残差系数。
图中显示了HEVC标准中的有关的解码过程,以及反量化过程。接下来重点关注反量化过程。
图中显示了HEVC标准中规定的反量化过程。简化整理可以得到右边的形式,d表示重建变换系数,TransCoeffLevel表示量化系数。在参考软件HM实现中反量化使用的是右下的形式,piCoef表示重建变换系数,piQCoef表示量化系数;可以看出是与标准规定完全符合的,只不过写成了将两个乘法移动到了分母移位部分而已。
视频编码的量化将变换系数多对一映射到有限个量化系数值在码流中传输;在解码端,量化系数经过反量化映射到有限个重建变换系数值。
HEVC标准中反量化由量化系数l乘以量化步长Qstep,其中Qstep由量化参数QP决定,满足Qstep(4)=1和Qstep(QP+6)=2Qstep(QP)。Qstep是一个浮点数,为了简化实现需要进行定点化,将其分离出小数部分保留6位二进制小数精度[1],近似成由一个整数与2的次幂做乘除法的形式。然后重建变换系数需要进行整数化,即对l乘以Qstep的值进行整数化,采用四舍五入取整。最后由于反变换实现,因此在反量化过程中还需要再放大2^(15-BitDepth-Log2(nTbS))倍,这样可以得到最终的反量化公式如右边所示,这个公式和标准中规定的反量化过程是完全一致的。因此通过以上近似过程就可以理解标准中规定的反量化过程的意义。
HEVC标准没有规定量化过程,而是让编码端实现决定。在HEVC编码器中通常使用的一种量化方法是Dead Zone plus Uniform Threshold Quantization(DZ+UTQ),由变换系数|c|除以量化步长Qstep再加上一个偏移参数θ再向下取整,偏移参数θ用于控制舍入取整程度。同样需要对Qstep进行定点化,对除法进行定点化,将其分离出小数部分保留20位二进制小数精度,近似成由一个整数与2的次幂做乘除法的形式。最后由于变换实现,因此在量化过程中还需要缩小2^(15-BitDepth-Log2(nTbS))倍,这样可以得到最终的量化公式如右边所示。在参考软件HM实现中DZ+UTQ使用的是右上的形式,可以看出与推导公式是完全一致的;其中对于I slice,θ值取1/3,对于非I slice,θ值取1/6,均保留9位二进制小数精度。因此通过以上近似过程就可以理解HM中使用的量化公式的意义。
以上讨论了视频编码的量化和反量化过程。量化过程对输入变换系数进行空间划分,映射到有限个量化系数值;反量化过程对量化系数进行样值重建,映射到有限个重建变换系数值。图中给出了一个量化和反量化所对应的空间划分和样值重建的示意图,其中量化使用的是DZ+UTQ,反量化使用标准规定。
考虑由量化和反量化过程引入的失真,使用误差平方和(SSE)进行衡量。输入变换系数由空间划分根据其所处的空间将其映射到对应的量化系数、再由样值重建将其映射到对应的重建变换系数,误差值就是输入变换系数和重建变换系数的差值。因此可以得到失真的计算公式如下边所示。
因为反量化需要符合标准规定,因此对优化的研究主要集中在编码端量化部分。例如RDOQ是一种会尝试对输入变换系数量化到不同的量化系数值测试它们的码率失真性能,然后选取具有最优率失真性能的量化系数值作为最终量化系数结果的一种量化方法,该方法相比于DZ+UTQ方法能取得很好的率失真性能,但与此同时也会造成编码端的量化过程的复杂度上升。
为了解决一些量化方法造成编码端复杂度上升过多的问题,参考文献[2]提出了一种对反量化部分优化的方法,即ARL。ARL方法的样值重建没有使用简单的量化系数乘以量化步长;由失真的计算公式可以知道,失真由输入变换系数和重建变换系数的误差值产生,因此具有最小失真的重建变换系数应该是被映射到该重建变换系数的所有输入变换系数的平均值;得到量化系数对应的最小失真重建变换系数后,这些重建变换系数按照一定方法传输到解码端,从而可以实现一种自适应的样值重建。另外,在实现中为了避免两次编码带来的延迟问题,可以使用之前帧收集的统计结果来导出当前帧的重建变换系数样值。
HM-16.9中的ARL没有采取以上的传输重建变换系数的形式,而是使用通过修改量化参数来自适应调整重建样值从而不用修改标准。该功能通过adaptive qpselection配置项控制。该功能将量化系数幅度绝对值分为31类,根据其中量化系数幅度绝对值为1~29的输入变换系数的统计信息来计算修改后的量化步长QstepNext进而计算修改后的量化系数QPnext。
在实现中该功能按slice进行;使用前一slice收集的统计结果来导出修改量化参数用于当前slice。在编码一个slice开始时,对于非帧内slice,基于基础量化参数和之前导出的修改量化参数来设置当前slice使用的量化参数;在编码一个CTU结束时,统计其中非帧内CU的亮度Y分量的信息;在编码一个slice结束时,根据已经统计的信息结果来更新计算当前基础量化参数对应的修改量化参数,用于给后续slice使用。
参考文献:
[1]Sze, Vivienne & Budagavi, Madhukar & Sullivan, Gary & Editors,. (2014). High Efficiency Video Coding (HEVC): Algorithms and Architectures. 10.1007/978-3-319-06895-4.
[2]J. Wang, X. Yu and D. He, "Hard-decision quantization with adaptive reconstruction levels for High Efficiency Video Coding," 2011 12th Canadian Workshop on Information Theory, 2011, pp. 62-65, doi: 10.1109/CWIT.2011.5872124.
关 注 我 们 
  实验室网站:http://viplab.fudan.edu.cn/
  OpenASIC官方网站:www.openasic.org
  知乎专栏:http://zhuanlan.zhihu.com/viplab
  微信公众号:OpenASIC
继续阅读
阅读原文