前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >为编码器的实现计算整数范围

为编码器的实现计算整数范围

作者头像
用户1324186
发布2022-02-18 10:15:16
4780
发布2022-02-18 10:15:16
举报
文章被收录于专栏:媒矿工厂媒矿工厂

来源:Picture Coding Symposium 2021 主讲人:Jonathan Heathcote 内容整理:冯冬辉 本文来自 PCS2021 Special Session 2 的第 4 场演讲,讲者介绍了一种新的启发式方法,能够更好地估计在视频编解码器中所需要的比特数,并验证编解码器实现在实践中是否真的使用了足够的比特。与以往方法相比,这种方法更稳健,也避免了对实际需要的比特数做出昂贵的高估,也不会迫使在编解码器的设计上做出妥协。

目录

  • 整数溢出失真
    • 简单图像测试
    • 数学分析整数范围
    • 削波与质量妥协
    • 前述方法的不足
  • 提出的方法
    • 编码端
  • 解码器
  • 总结

整数溢出失真

Jonathan 首先介绍了视频编解码器产生的整数溢出失真,如下图所示。事实上,很难计算出编解码器中整数需要多大才能避免这个问题。设计的足够大的整数实际上并不够大,当然太大的整数也会造成实现成本上升。

整数溢出失真

本文介绍了一种新的启发式方法,用于产生测试模式图像,可以将其输入视频编解码器,以计算出你实际上需要多少比特。这样可以避免在实践中发生整数溢出,还可以验证现有的视频编解码器是否用了足够的比特。

当视频编码器被输入一个视频信号时,信号范围往往是固定的,例如 8 位或 10 位视频。随着各种处理,信号范围逐渐发生变化,在处理链条的不同步骤上变大或变小。解码器内则进行相反的过程,最终这些信号会回到一个与开始时非常相似的范围内。

之所以说非常相似,因为在有损编解码器中,在最终输出的图片中会有一些小的过冲和欠冲,这就是为什么大多数视频编解码器在其处理的最后一步包括一个削波阶段。但本文忽略这一点,更加关注编解码器内部。

简单图像测试

信号范围变化

简单来说,可以给编解码器提供一系列的图像,并测量它们通过系统时的信号有多大,来估计编解码器的整数范围。

编码器内的信号范围

如上图所示,对于不同输入图像,信号范围可以有 2-3 个比特的变化。正是这种变化性使得这种方法特别危险。当使用一部分测试图像为编码器设定整数范围后,在现实世界也很偶尔会遇到图片超过范围。

下面是一个例子。讲者正通过一个视频编解码器与你交谈,已经减少了所有整数的大小,到目前为止,一切看起来都很好。

示例:正常的编码图像

但如果稍微改变一下摄像机的角度,就会有很多图片失真,尽管表面上这是一个相当相似的场景。所以这显然不是计算需要多少比特的好方法。

示例:失真的编码图像

数学分析整数范围

现实中,可以通过数学分析来确定编解码器内的信号范围。发生在编解码器内的视频处理步骤往往是线性的,而线性系统是非常容易进行数学分析的。

不幸的是,有损视频编解码器通常包括一个量化阶段。这个量化阶段在很大程度上是一个非线性过程,卡在一个相当友好的线性系统中间。因此,这意味着实际上无法准确计算出编解码器所需的比特数,也无法计算出视频编码器或解码器的最坏情况下的信号是什么样子。

但幸运的是,可以用一些方法来计算信号范围的理论上界。如下图所示,这些理论上界反映了这样一个事实:最初一组测试图像并没有产生尽可能高的信号范围,而且很可能最终低估了所需的整数位数。

数学分析的整数范围上界

但是,在实践中也无法使用这种技术来计算整数范围,因为这意味着使用了比真正需要的大得多的整数范围。浪费硬件,浪费能源,浪费性能。

削波与质量妥协

另一种在许多主流编解码器中流行的方法是,使用饱和算术或在信号链条的不同点上添加额外的削波级(clip stage),以便将信号保持在一个明确的范围内。

削波方法

这完全避免了整数溢出的问题,但添加削波级或使用饱和运算,也降低了图片的质量。从本质上讲,这是压缩质量与整数范围问题的妥协。

前述方法的不足

不幸的是,这些方法都不理想。

  1. 如果使用一系列的测试图像,可能会低估所需的比特数,从而在实际场景中遇到整数溢出的情况。
  2. 如果使用理论界限,可能会发现建造的硬件比实际需要的要多,因此会浪费额外的钱和性能。
  3. 如果放弃质量来完全避免这个问题,显然这不是一定要做的事情。

提出的方法

设计了一种启发式的测试模式图像,你可以将其送入视频编解码器,在处理图片时故意在编解码器中产生极大的信号。利用这些特殊的图像,你可以对你的编解码器所需整数范围做出可靠的估计。更重要的是,你可以用这些测试图像对照真实的硬件和真实的软件来验证你实际上已经使用了足够的比特。

这项工作最初源于一个为视频编解码器 SMPTE ST 2042-1(VC-2)制作一致性测试的项目。VC-2 是一个简单的帧内编解码器,但尽管如此,它仍然遵循与任何其他视频或图像编解码器相同的一般原则,这使它成为这项工作的理想模型。

简单的 VC-2 编码器

在 VC-2 编码器中,图片首先被小波变换转换为变换系数以方便压缩,之后的量化步骤条件细节水平以实现期望码率,最后进行熵编码器将其转化为更有效的二进制表示。VC-2 解码器遵循相反的过程,它使用熵解码器来获取变换值,对它们进行反量化,然后通过反变换将它们送回,最后得到一个自然图像。研究中可以忽略熵编码阶段。

简单的 VC-2 解码器

那么如何产生一些测试模式,在编解码器中产生极端的信号呢?

编码端

先观察编码器,挑选一个变换系数值,尝试产生一个输入图片,以使该值达到最大。在这一点上还没有碰到量化器,因此从输入图片到感兴趣的这个变换值的处理是一个完全的线性过程,这意味着可以通过数学分析来确定最坏情况下的图像。

在这种情况下,可能会得到一个看起来如下图所示的测试模式图像,之后可以对信号通过编码器的所有不同路径重复这一过程。

创建编码器测试模式

一旦产生了所有测试模式,就可以把它们收集到一个视频帧上,并开始把它们送入编解码器,观察实际的信号范围。

堆叠编码器测试模式

编码器测试模式的信号范围

可以发现,它们产生的信号非常接近理论上限值。事实上,这些数值在实践中也基本相同,因为大部分处理是以完全线性的方式进行的,这意味着理论上限值实际上是所需比特数的精确值。

解码器

当涉及到解码器时,事情就不那么简单了。类似地,对于解码器,可以在其输出端选择一个值,之后追溯用于计算的中间值,一直追溯到原始图像的输入像素。但不幸的是,从输入图片到目标像素的过程并不是线性的,这是因为在编码器的末尾和解码器之前的量化步骤是非线性的。因此直接计算出最坏情况下的图片可能是什么样子在实践中是难以实现的,这也是论文的关键贡献所在。

创建解码器测试模式,困难的量化步骤

讲者提出了一种启发式方法,用于产生测试模式,在解码器中的期望点产生极大的信号值。这种方法是基于以下观察:

创建解码器测试模式,观察能量泄露

目标像素是涉及一系列输入像素的计算结果,在正常情况下,当这些值到达目标输出时,除了相应的输入像素外,其他的都被抵消。但一旦编码器引入了一些量化技术,这些值不再完全抵消,因此一些来自周围输入像素的能量开始泄漏到目标值中。

启发式尝试最大限度地增加泄漏量,以使输出值的大小尽可能大。按照这个方法,可以解决如何产生尽可能大的变换系数的问题。因为这些变换系数是在编码器量化之前计算出来的,可以使用数学线性分析技术,准确地计算出每个变换系数的最坏情况的输入信号。因此,最终得到了一系列如下所示的测试模式。

创建解码器测试模式,打通全过程

这里的目标当然不是单独最大化这些数值,实际上是想尽可能同时最大化这些变换系数。但为了简单起见,在启发式方法中,所做的是将所有这些不同的测试模式堆叠起来,将对目标像素影响最大的测试模式放在堆叠的最上面,然后将它们压制成一个单一的测试模式图像。这种相当粗糙的方法并不能保证找到最差的整体信号组合,但在实践中还可以接受。

可以使用这种技术来寻找测试模式,使通过解码器的每条不同路径的信号水平最大化。当然,也可以用这种技术为解码器的中间阶段产生测试模式。

创建解码器测试模式,堆叠测试模式图像

一旦得到了所有这些测试模式,就可以把它们送入编码器,然后把产生的比特流送入解码器,测量其中产生的信号范围。

如果把测试模式在解码器中产生的信号水平绘制出来,你可以立即看到,产生的信号水平比先前测量的任何自然图像都要大得多。此外,信号水平在很多地方都非常接近上界方法的预测值,这表明产生的信号水平确实非常接近编解码器可能遇到的真正的最大信号水平。

解码器测试模式的信号范围

测试模式结果的另一个特点是,它们没有跟踪那些理论上界中出现的非常大的峰值。当然,这种启发式方法不能保证产生最坏情况的信号,但尽管如此,它仍然给了信心,即这些峰值很可能是过度的估计。

因此,如果你使用测试模式来估计你需要的比特数,你可能会在你的编解码器中节省多达 3-4 个比特。论文中包括一些更详细的讨论,说明测试模式产生的信号水平如何与来自各种来源的信号进行比较,包括 JVET 测试集和随机噪声信号。

总结

总之,如果你正在设计或构建一个视频编解码器,你需要采取的一个小而重要的步骤是计算出你的整数需要多少位,以避免尴尬的整数溢出破坏图像。

现有的方法并不理想,论文引入了一种新的启发式方法,能够更好地估计在视频编解码器中所需要的比特数,并验证编解码器实现在实践中是否真的使用了足够的比特。

这种方法比以前的方法更稳健,它也避免了对实际需要的比特数做出昂贵的高估,也不会迫使在编解码器的设计上做出妥协,在编解码器中引入额外的剪切和其他滤波操作。

最后附上演讲视频:

http://mpvideo.qpic.cn/0bc3auaa2aaasmaaiwhaufqvabodbucqadia.f10002.mp4?dis_k=5572f2d6efe7ba9a3f9de034c563e8ea&dis_t=1645150474&vid=wxv_2222648923993800706&format_id=10002&support_redirect=0&mmversion=false

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-01-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 媒矿工厂 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 整数溢出失真
    • 简单图像测试
      • 数学分析整数范围
        • 削波与质量妥协
          • 前述方法的不足
          • 提出的方法
            • 编码端
            • 解码器
            • 总结
            相关产品与服务
            图像处理
            图像处理基于腾讯云深度学习等人工智能技术,提供综合性的图像优化处理服务,包括图像质量评估、图像清晰度增强、图像智能裁剪等。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档