Google 视频压缩核心算法组工程师:详解 AV1 编码算法

本文整理自 Google 视频压缩核心算法组软件工程师陈诚在 RTC 2018 实时互联网大会编解码技术专场上的演讲分享。他在演讲中主要分享了 AV1 的研发现状,详细分享了 AV1 的编码算法、编码效果。算法

欢迎访问 RTC 开发者社区,与更多 RTC 开发者交流经验。 
浏览器


根据思科公司今年发布的报告称,预计 2021 年,视频将会成为互联网产品的主要需求,超过80%的互联网流量将会被视频占据。届时,与视频相关的服务与需求将提高约50%,而其中对超高清的需求将提高约30%。同时,互联网对直播和其它实时视频服务的需求将会是目前的15倍。微信

如此快速的发展和快速增加的需求,正是互联网公司推进新一代视频编解码技术的动力。markdown

1、AV1 与 AOM 的概况框架

新一代编解码技术 AV1 已于2018年6月定稿,它有四个特色:机器学习

  1. AV1 是一个开源、免费的生态系统,开放媒体联盟(AOM)的成员都将支持 AV1工具

  2. AOM 为 AV1 准备了资金进行法律方面的援助和专利保护性能

  3. AV1 相对于前一代产品使用了更前沿的编码技术,并取得了较好的压缩效率学习

  4. 在 AOM 的合做框架内为 AV1 提供了合做开放的环境测试

众所周知,AV1 的前身是 Google 推出的 VP9。相对于 VP9,AV1 有三个特色:Performance、Platform、Potential。AOM 的框架使得 AV1 ,以及将来视频的发展都更有活力。尽管 AV1 目前还处于研发和推广初期,咱们相信它在业界的广大支持下,会得到比 VP9 更普遍的应用。

开源媒体联盟 AOM 由 Google、亚马逊、思科等公司联合牵头成立,致力于推广和研发多媒体的视频编解码技术。除了当前与视频行业紧密相连的互联网公司外,该联盟内还有硬件设备厂商、内容供应商、主流浏览器厂商等。最近苹果也加入了 AOM。业界的生态系统也都将支持 AV1。

AV1 工做组共有四个:软件研发组、硬件研发组、Tapas 组、测试组。软件和硬件研发组联合进行 AV1 的研发,同时测试组会对 AV1 的一致性进行检测。而 Tapas 组则进行专利审核,并提供法律问题咨询。

AV1 的研发组是个颇有活力的社区。在整个 AV1 的研发过程当中,已经发表超过15篇学术论文,约有 100 多个研发提案被 AV1 采用。目前你们能够在网上下载到参考代码,大约有30万行代码,而且平均天天会有15个代码被提交上来。

AV1 从研发到推广,将会分为四个阶段:

  • 第一阶段,标准的研发与制定

  • 第二阶段,桌面浏览器对解码的支持

  • 第三阶段,推广 AV1 在更多硬件与软件的支持

  • 第四阶段,在 AOM 生态系统中支持 AV1 的软硬件编码

从2015年的研发开始,到2018年6月的定稿,咱们已经完成了第一阶段的目标。目前,咱们正处于第二阶段,Google 的 Chrome 浏览器上已经实现了软件解码。在将来的第3、第四阶段中,咱们的主要任务就是硬件设备与内容供应商对 AV1 的支持。预计2020年 AV1 将得到更普遍的应用。

2、AV1 的编码与算法

与其它视频编码软件类似,AV1 的也分为一系列连续的模块,包括分割、预测、变换、量化、熵编码、环内滤波等。在单元块划分上,AV1 支持更多的划分模式和更大的划分块。其前身 VP9 支持最大划分块为 64x64,对每一个方块能够递归地进行四个子块的划分。AV1 支持最大划分块为 128x128,对方块递归的划分有10种类型,最小的划分块为 4x4。

预测模式分为帧间预测和帧内预测。在帧内预测主要包含了四个主要工具:

  • 支持更多多种的预测模式

  • 支持从亮度值预测色度值

  • 调色板模式

  • 帧内拷贝模式

AV1 支持56个方向的预测,利用当前块的上边界和左边界,重建的图像,经过方向的差值来预测当前块的像素值。它的角度的表达方式是从8个主要的差值方向中,选择其中之一,并用一个 Delta 值来肯定精确的角度。

除了方向的预测以外,AV1还支持其它的方式对单个像素或当前渐变块生成预测。以下图所示,有四种不一样的差值方法对当前值进行预测,当前值P将会由深蓝色模块的像素差值得到。值得一提的是,另一种递归的方式对渐变块进行预测,利用滤波的方式递归地对每一个像素值进行预测,在编解码方面复杂度会有所提高。

从亮度值预测色度值的工具,它利用了视频图像当中亮度值通道与色度值通道具备高度类似性的特色,经过选择适当的参数再以重建亮度值通道来预测色度值,这个工具对于游戏视频具备很好的压缩效果。

调色板模式将块内的元素当作几种离散的颜色,不一样于直接传输像素自己的参数值,而是经过传输色块的颜色编号实现压缩的目的。AV1支持从8×8到64×64的块,支持调色板模式,编码器会自动根据视频内容选择是否使用调色板模式,如图所示的例子,左边是一个当前模块被划分红了3种不一样的颜色块,根据波前的方式逐个编码块内的方块,它的左侧和上侧的颜色信号将做为信息在熵编码中被使用。调色板模式对于当前块有单一色调的场景十分有用,通常这种场景出如今屏幕内容的压缩当中。

另外一个对于屏幕内容压缩很重要的工具叫作帧内拷贝。它的工做原理就是,在预测当前块时它会去搜索当前帧已重建的图像部分,好比下图1中第二个字母 A 和第三个字母 A,它将找到第一个已经被编码的字母A预测块,它的预测会很是准确,能够达到提升压缩效率的目的。图形中包含了很是多的字母,就会经过帧内拷贝的模式搜索到很是好的预测效果,大大提升了视频压缩效率,仅这幅图来讲,压缩效率就提高了 50%。

帧间的压缩工具比帧内的压缩工具更丰富。AV1 比 VP9 在参考帧的数量和结构上有了进一步的优化,支持8个参考帧,并可以使用其中的7个参考帧进行预测,而 VP9 只使用了其中三个。AV1 还支持分层结构进行双向预测。

在如今的视频压缩标准中,运动估计在比特率中占有很大一部分,运动的估计通常经过搜寻一个运动向量找到参考帧中对应的块对当前块进行预测。在 AV1 里咱们采用了一种方法叫作运动场投影的方法来获取运动向量,它的工做原理是经过当前帧的两个参考帧,而且找到参考帧的对应参考帧得到一个运动轨迹,将运动轨迹投影到当前来帧得到两个运动向量。当物体是线性运动时,这两个运动向量将能很好预测到物体的运动轨迹,并得到更精准的预测,从而帮咱们得到更好的压缩效果。

在咱们有了这些运动向量以后,咱们还须要传输它们。而在现有视频标准中,传输运动向量已经占据了很大的比例。因此咱们 AV1 中采起了一种叫作动态运动向量索引的方法,它不直接传输运动向量的具体坐标值,而是传输它在运动列表中的序号,而后经过查询得知所用的运动向量。运动向量经过运动场投影的方式得到并加入到运动列表中。咱们经过运动估计的测算将运动列表的向量值进行排序,再经过编码器选择对好的序号传输给解码器。

如今的视频压缩标准都支持双向预测,当咱们有了两个参考帧以后如何把它们融合在一块儿生成预测块是值得探讨的问题。AV1 在这个方面支持了多种不一样的方式来生成预测块,包括平均值运动补偿、加权运动补偿、楔形分割预测等。

运动块补偿早在 H.263 时代就被提出,在这里被 AV1 采用。它的原理是利用平滑滤波的方式将两个运动补偿块重叠在一块儿,特色是可以消除运动的不连续性带来的影响,以此提升预测准确率。双向预测中,咱们能够经过调整两个预测快的权重来达到生成不一样预测快的目的。AV1 除了支持平均运动补偿,还会根据参考帧的距离来加权生成预测块,特色是当一个参考帧距离如今帧很是近的时候它的预测准确度可能更会高,因而咱们给予它更高的权重,当另外一个参考帧距离比较远的时候咱们会给予远处的参考帧一个更低的权重,权重并不直接经过比特流传输,会经过传输序号的方式在预设置的表格里查询对应的权重。

AV1 还支持楔形分割预测,能够弥补方块运动补偿中没法准确模拟物体边界的缺点。楔形分割已经做为查表预存在编解码器中,经过编码器选择合适的最佳的楔形分割方式传输比特流来告知解码器。

方块的运动补偿有一个很大的问题,它没法模拟实际运动中的大量的卷曲和变换。AV1 采用了基于仿射变换的方块补偿来解决这个问题。AV1 支持从帧到帧的全局变换,也支持块到块的局部变换。

在变换处理方面,AV1 除了支持传统的 DCT,还支持 ADST、fADST、IDT ,因为他们都是二维可分割的,因此 AV1 共支持16种组合。同时,AV1还支持多种尺寸的变换快,最大为64x64,最小为4x4,还支持长方形的变换块尺寸。AV1 支持 DCT 是由于,它对天然信号具备近似最优解的压缩效果,而当残差信号为单调变化时,那么 ADST 和反向 ADST 会有很好的压缩效果。全等变换对于视频是阶跃变换时,会有很好的压缩效果。

相比 VP9,AV1 增长了不少变换尺寸和变换类型,这使得它的搜索空间大幅增长,编解码复杂度也有所提高。

在量化方面,AV1 在 VP9 的基础上增长了几个新的工具,包括 Delta-q 和 Quantization matrix 等。这些工具使得 AV1 的量化有了更大的灵活性,它的特殊的使用场景下具备很好的使用效果,好比使用参数矩阵可以提高主观观测的质量。

在熵编码方面,AV1 使用了多符号算数编码,能有较高的吞吐量,具有快速几率模型自适应的特色。

在视频压缩技术中,对变换后的系数矩阵的压缩和传输将占比特流的绝大部分,甚至超过50%,AV1 里针对这个变换矩阵的传输使用了分层编码的方法,分层编码将使用两次扫描对当前块的矩阵进行压缩,第一次扫描将会编码系数的绝对值,第二次编码将会编码系数的符号。让咱们用一个例子来讲明分层编码的过程。以下图所示,左侧表明当前的系数矩阵和扫描的顺序,第一行表示第一次编码,第一次编码从终止位置开始,逆扫描方向逐渐走向起始位置,深黄色的块表示当前的像素值,浅黄色表示它能用到的周围的数值信息,第二行表示第二次编码从起始位置开始一直到终止位置,第一次编码只编码系数的绝对值,第二次编码将编码系数的符号。

环内滤波是目前视频标准的必要组成部分。AV1 除了有传统的去区块滤波器,还增长了新工具,好比约束方向加强滤波器(CDEF),还有帧超分辨率重建、环内重建滤波器,以及电影颗粒胶片效果合成器。

AV1 的去区块滤波器对 Y、U、V 三个信号通道分别采用不一样的滤波强度。对 Y 通道,水平滤波和垂直滤波采用不一样的滤波强度。这个设计为去区块滤波增长了更多可优化的空间。

约束方向加强滤波器(CDEF),应用在去区块滤波以后,对每个8x8的块估计物体的方向,并沿着物体方向采用加强滤波。它能保留物体边缘的清晰度,提高重建图像的质量。

帧超分辨率重建,应用在 CDEF 以后。它首先将图像沿着水平方向降采样,只对低分辨率图像进行编码,在解码器升采样把低分率图像还原为原分辨率。这个方法显著提高了低码率下的编解码的主观观测质量。

环内重建滤波器,是另外一个重要的加强图像质量的后期处理方法。它包含了两种滤波器。编码器从二者中选择其一。Wiener 滤波器采用可分离的对称设计。自导向投影滤波器使用两个重建信号的线性组合来近似真实信号。编码器经过比较滤波结果,选择合适的参数,并传输给解码器。

电影胶片颗粒效果合成,是针对高质量视频而设计的一个工具。电影胶片的颗粒效果,很难用传统的视频压缩方法保留。AV1 将颗粒效果合成做为后期处理的步骤,对颗粒效果单独处理。它的工做原理是将电影胶片颗粒效果在编码前从原视频中分离出来。分离后的图像进行普通编解码,而颗粒效果在最后与解码后的图像合成为最终的输出视频。

3、AV1 的压缩效率对比

咱们对比了 AV1 与 VP9 和 HEVC,严谨地讲,咱们对比的是这几种编码标准所使用的参考软件实现,AV1 使用的参考软件实现是 Libaom,VP9使用的是 Libvpx,HEVC 使用的是 x265。咱们的测试环境是 AWCY,它是一个公开的测试集,包含了30多个从360p 到1080p 的测试视频文件,测试条件固定 QP60帧。在这样的测试环境下,咱们能够看到 Libaom 比 Libvpx 约有30%的压缩效率提高,比 x265 有27%的效率提高。

Facebook 也在他们实际应用场景中,对比测试了 AV一、VP9 和 H.264。AV1 的效率比 H.264 提高了 50%,比 VP9 提高了30%。

莫斯科国立大学每一年也会进行编码器的效果测试,在他们的测试结果中,AV1 取得了最佳的压缩效果,明显超越了 H.26四、H.265 和 VP9。

咱们都知道,如今的视频压缩标准用更高的编解码复杂度换取视频压缩效率的提高,固然实际应用中咱们不可能无限制提升编解码复杂度,那平衡点在哪里呢?对于视频点播的公司而言 Netflix 给出了他们的回答。他们认为 AV1 的编解码复杂度,若是能控制在 VP9 的 4-10 倍,就能够应用于他们的产品中。咱们 AV1 的复杂度是多少呢?截止今年8月初,咱们对比了 AV1 与 VP9 在速度 0 到速度 3 的编码复杂度。先解释一下,速度 0 表示压缩效率最高,但速度最慢,速度 3 反之。相比于 VP9,AV1 在速度0是 VP9的70倍,在速度3则已经下降到10倍之内。AOM 软件开发组正在进行AV1编解码的优化,这个数值也在不断降低。

4、AV1的下一步演进

AV1 当前的重要目标是编解码的优化,在编码端须要更多的 SIMD 代码支持,还要从新设计编码,尤为是下降在硬件端的复杂度。在编码方面,咱们须要加快编码速度,咱们须要更高效的分割算法,更优的滤波器类型、编码类型、运动估计算法等。

在 AV1 中,咱们使用了不少机器学习算法,它使得 AV1 能作出不少快速的决定,好比对搜寻方块划分的类型。咱们相信在接下来的工做中,更好的机器学习算法会有助于 AV1 视频编解码的加速。咱们在将来还将继续尝试其它新的视频压缩工具,好比光流的算法、基于机器学习的预测与合成的算法、基于机器学习的变换方法等。相信在 AOM 的框架下,以及各个成员与整个生态系统的支持下,AV1 在不久的未来会得到更普遍的应用。

现场提问

观众:AV1何时可让全部人使用上?
陈诚:目前 AV1 处于第二阶段,咱们已经完成了标准的定稿以及浏览器软件解码的支持。将来一两年内会完成与硬件相关的设计与优化,预计在2020年,AOM 组织内的成员将都支持 AV1,那时任何人均可以使用到它。
观众:咱们很关心 AV1的性能问题。跟其它编码器相比,在一样的质量条件下,压缩一样的内容能节省多少码率。刚刚您已经提供了一些比较详细的数据。我有一个疑问,印象中,在 Facebook 的测试中,与 H.264进行对比,AV1能节省一半的码率,咱们知道 HEVC 和 H.264 的比较也是提高了一半。从这个角度讲,AV1 和 H.265压缩比应该是至关的。但从其它报告来看,又显示 AV1 略胜于 H.265,可是数据略有浮动,有的是20%,有的是40%。您能提供一个比较权威的对比解读么?AV1到底比 H.265 强多少?
陈诚:个人说法仅是我的意见,没法做为官方解释来参考。不一样的测试环境会致使测试效果的不一样。我认为有两方面的差别致使告终果不一样。首先是所使用的测试集,其次就是测试条件不一样。关于测试条件,AV1 的研发目前主要为互联网公司的视频点播提供压缩算法。以 youtube 和 Netflix 来讲,他们是给一个固定的码流来进行压缩,而AV1与HEVC的对比是基于固定 QP 做为对比条件。AV1 的设计初衷是在一个固定码流下进行压缩,并无针对固定 QP 进行优化。这就致使了在不少的对比测试中,AV1 看起来并无比 HEVC 提高多少。我在解释是基于 youtube、Netflix 等公司在实际应用环境中的测试结果,他们认为 AV1 已经超过了 H.26四、H.265。

欢迎关注「声网Agora」微信公众号,回复“RTC”观看演讲视频回顾、获取演讲 PPT。