专栏首页音视频技术AVS3关键技术、性能和复杂度分析

AVS3关键技术、性能和复杂度分析

本文由北京大学的范逵博士在LiveVideoStack线上分享第三季,第七期的内容整理而成,本次分享将主要从AVS3关键技术介绍、AVS3性能测试两个方面介绍AVS3基准档次中新采纳的编码工具,并分析这些编码工具的性能和计算复杂度。

文 / 范逵

整理 / LiveVideoStack

大家好,我是来自北京大学的范逵,本次分享的主题是AVS3关键技术介绍、性能和复杂度分析。

首先做一个自我介绍,我于2019年博士毕业于北京大学,2018-2019年新加坡南洋理工大学访问学者,2016-2019年间担任MPEG Internet Video Coding(IVC)标准专题小组副主席,目前担任AVS3标准参考软件维护人。主要研究领域是视频编解码算法、视频编码快速算法以及图像和视频处理三个方面。

1. AVS发展历史

本次分享将主要从AVS发展历史、AVS3关键技术介绍、AVS3性能测试和AVS3资料获取四个部分展开。

1.1 AVS1与AVS+

AVS1指第一代AVS标准,制定起始于2002年,于2006年2月颁布,性能与同期国际标准MPEG-2相当。AVS+于2012年7月获批成为广电行标,性能与同期的MPEG-4 AVC/H.264相当。

1.2 AVS2及其产业化

第二代的AVS标准简称AVS2,于2016年5月被颁布为广电行标,2016年的12月30日被颁布为国家标准,压缩效率与国际标准H.265/HEVC相当,但在全I帧编码以及监控场景编码中性能优于HEVC。在产业化方面,AVS2视频标准全面应用于IPTV和广东省4K超高清,解码芯片已由华为海思、晨星(Mstar)等研发并推向市场,广播级AVS2超高清实时编码器由深圳优微视觉等公司推向市场。

1.3 AVS3

说到AVS3,就不得不提AVS3的封闭开发。在去年十二月厦门会议后AVS标准工作组决定进行封闭开发,从去年的12月10日到2019年1月28日,历时48天完成了AVS3第一阶段标准制定任务,AVS3 Baseline Profile编码性能相比AVS2和HEVC提升超过20%。2019年3月9日的青岛会议上,AVS3的基准档次起草完成,预计于2022年投入应用,我国的AVS3+5G+8K产业发展将领先全球部署。之后进行的标准制定工作是AVS3 High Profile,即AVS3第二阶段标准,预计会在2020年6月制定完成,目标编码性能比AVS2提升一倍,也就是在现有AVS3 Baseline Profile的基础上提升20-30%的性能。

2. AVS3 关键技术介绍

2.1 基础块划分结构

AVS3采用了QT+BT+EQT的基础块划分结构,在上一代标准(AVS2和HEVC)中采用的是四叉树(QT)划分将一个CU划分为四个subCU。在AVS3中除了支持四叉树划分,还支持二叉树(BT)和EQT划分。其中,BT可以将一个CU划分为左右/上下两个subCU;EQT包含水平和竖直两种工字型划分方式,将一个CU划分为4个subCU,该技术由字节跳动公司提出。

AVS3中QTBT+EQT基础块划分结构在码流中的表征方式如上图所示。首先判断是否为QT,如果是QT,直接进行四叉树划分,如果不是QT就需要进一步判断是否不划分,如果不划分就结束判断,如果需要划分还要再判断是EQT还是BT,无论是EQT还是BT都需要判断是水平还是竖直划分。

基础块划分中很重要的一个部分是划分约束,在AVS3中所包含的约束划分为三种。第一种为划分尺寸约束,主要是指QT、BT和EQT最大/最小可使用的CU尺寸,括号中的数值为AVS3参考软件中设置的默认数值。除此之外的约束包括划分深度,AVS3中最大划分深度为6层;另外AVS3中编码单元最大的宽高比是1:8;QT划分要优先于BT/EQT划分,一旦进入BT/EQT划分就无法再进行QT划分。

第二种约束是边界约束,边界约束有三个,在图像右边界的时候只能进行BT的竖直划分,在图像下边界的时候只能进行BT的水平划分,在图像右下角边界只能进行QT划分。

第三种是VPDU的约束,VPDU约束更多是为了配合硬件实现的方便,如果当前单元出现了128x64/64x128的CU,就必须划分成两个64x64的CU。

2.2 帧间编码工具

2.2.1 AMVR

首先介绍自适应矢量精度,简称AMVR,在上一代AVS和HEVC标准中,运动矢量的精度均为¼像素,AVS3中新引入了½、1、2、4四种像素精度。在编码端对这五个像素精度进行编码,通过RDO过程选择最优的运动矢量精度,并将对应的索引传输到解码端。由于需要进行五次编码尝试,这会极大地增加编码端的复杂度,所以在AMVR中引入了三种快速算法:提前跳出、基于历史的MVR搜索策略以及对应不同的运动矢量精度设计了对运动估计的加速。AMVR由三星公司提出。

2.2.2 HMVP

HMVP是基于历史信息的运动矢量预测,该方法由字节跳动公司提出。HMVP技术从先前编码块拷贝八个运动信息候选到FIFO中,FIFO保持不断更新。上图中间部分反映了FIFO以先进先出的方式进行更新的例子,在这个例子中FIFO的第三个HMVP候选与刚刚编码完成的运动信息相同,这个重复的候选首先会被移除,在FIFO的尾部会加入当前编码单元的运动信息。如果当前编码单元的运动信息与FIFO中任意候选的运动信息均不相同,就会去掉FIFO中第一个候选,再将最新的运动信息加到FIFO末尾,保证FIFO中永远保留八个最新的运动候选。

HMVP中的运动候选与AVS2中已有的运动候选一起进行标识,使用Unary的方式进行二值化。AVS2中包含了五个运动候选,但在AVS3中去掉了对称模式,只剩余四个运动候选,再加上HMVP的8个候选一共是12个候选。

2.2.3 UMVE

UMVE技术,中文名为高级运动信息表达,该技术是在已经生成的运动候选基础上进行偏移,从而得到更优的运动候选。例如上图所示,将一个运动候选作为起始点,从上下左右四个方向进行搜索,偏移分别为¼、½、1、2、4像素,起始点有两个(2 base),四个偏移方向(4 direction)和5种offset,总共生成40个运动候选,该方法由三星公司提出。

2.2.4 AFFINE

已有的标准中支持的MV都是两个参数的(即X方向和Y方向的偏移),这种运动模型称为平移运动。4参数可以表达更丰富的运动模型,包括缩放、旋转或者斜切,6参数代表Affine模型,可以表达更复杂的运动。在AVS3中的仿射运动补偿支持4参数和6参数的运动模型,使用的运动矢量精度是1/16像素,针对尺寸大于16x16的CU,按照8x8的小块进行运动补偿。该技术由华为公司提出。

AVS3中的AFFINE技术可以分为AFFINE skip/direct和AFFINE inter两个部分。AFFINE skip/direct就是使用当前块周围的一些信息从而导出AFFINE模型和当前块的运动矢量,在目前的AVS3中最多支持5个AFFINE模式候选,并且需要将AFFINE index传输到解码端。AFFINE skip/direct运动候选列表的构建主要分为三步,第一是从临近AFFINE编码单元拷贝Affine模型;第二是利用当前块周围角点的运动信息生成AFFINE模型;最后,如果当前AFFINE运动矢量候选没有到达五个,就填充零。

AFFINE inter是在AFFINE skip/direct基础上加入了MVD,每一个控制点均需传输MVD。

2.2.5 PBT

PBT是基于位置的变换,被应用于帧间预测残差块,可以更好地拟合帧间残差特性。例如上图中左下角四分之一的区域分别标识了0,1,2,3,他们对应的水平和竖直的变换组合如右表中所示,通过在不同区域使用不同的变换组合,实现更高效的残差信号表达。PBT允许的变换类型包括DCT8和DST7。使用该方法的编码单元尺寸最大为32x32,最小为8x8,且编码单元长宽比不大于2。该方法由清华大学提出。

2.3 帧内编码工具

2.3.1 Intra DT

Intra Derived Tree简称Intra DT,叫做帧内衍生模式,这个方法主要是在编码单元的基础上加上了PU的概念,该方法总共支持六种PU划分(水平/竖直各三种),使用非对称和长条形划分方式,提升帧内编码效率。使用条件包括编码单元尺寸最大64x64,最小16x16,编码单元长宽比小于4,且当前编码单元使用IPF时,禁用Intra DT。该方法由清华大学提出。

IPF是由北大深研院提出的,该方法针对的问题是目前帧内预测中会忽略一些参考像素点与当前预测单元之间的关联性,通过预测滤波的方式可以有效增强空间关联性,从而提升帧内预测精度。如左图所示,预测方向是从右上到左下,生成当前帧内预测块主要使用的是MRB这一条参考像素点,预测样本块的左侧因为没有考虑与URB的关联性,所以预测效果较差。为了解决这一问题,IPF使用了URB中的参考像素对帧内预测块进行滤波,滤波器包括三种类型,分别为水平、竖直的2-tap滤波器和同时对水平和垂直方向滤波的3-tap滤波器,3-tap滤波器被应用在非角度预测模式以及右下对角模式。

TSCPM是一种分量间预测技术,通过探索不同分量之间的线性关系去除分量间冗余,如公式所示,recL代表亮度分量的重建值,通过两个线性参数α和β生成chroma的预测值predC。之所以称该技术是Two-Step,是因为它分为两个步骤执行。首先使用Co-located luma块,通过参数α和β生成尺寸相同的临时预测块;第二步再进行下采样,得到色度分量的预测值,该方法由字节跳动公司提出。

2.4 滤波器

2.4.1 deblock去块滤波器

在AVS3中直接继承了AVS2中的去块滤波方案,但由于严格的滤波条件,AVS2中现有的去块滤波方案常常会引入严重的块效应。这个问题在AVS3中的deblock去块滤波器中得到解决。首先滤波条件被放宽并且对滤波器系数进行了优化,另外简化了色度分量的去块操作,从而降低了色度滤波的计算复杂度。

3. AVS3性能测试

3.1 测试条件

性能测试采用了AVS3的通用测试条件进行测试,软件使用了AVS3的参考软件HPM-3.3,对比软件为RD-19.5和HM-16.20,配置使用random access(RA)。

3.2 Basic structure

AVS3基础结构相对于AVS2的平均性能增益为10.56%。基础结构不仅包括基础块划分结构,还包括对参考帧结构的优化和编码端决策的优化。AVS3的编码时间和解码时间相比AVS2均有下降,尤其是解码时间缩短为AVS2参考软件的一半。原因是AVS3的参考软件HPM已经经过了部分优化,该参考软件由北大深研院和华为公司共同提出。在HPM中主要包含三部分优化,第一个部分是所设计的数据结构较为简单,第二个是寻址方式更加快捷,第三个是在HPM中已经对关键的模块进行了数据并行加速。

相比HEVC,AVS3的编码性能增益为9.45%,编码时间是HEVC的一倍,解码时间略有上升。

之后进行tool-off测试,即在AVS3的参考软件中只关闭单个工具的性能,tool-off的实验结果基本可以反映单个工具在AVS3标准中的性能。上图中显示HMVP、UMVE、AFFINE和AMVR的性能分别为0.81%、0.94%、1.94%和3.87%。图中关闭UMVE后编码时间上升,这是因为UMVE和HMVP的运动候选是放在一起优化的,使用SATD进行粗选对编码端进行加速,随后再使用RDO进行编码决策。由于这个快速算法是放在UMVE工具下,所以在关闭UMVE之后时间有所上升。AMVR关闭之后时间减少30%,由此可见AMVR对时间复杂度的影响是非常大的。

IntraDT和IPF的性能分别是0.4%和0.71%,TSCPM在Y/U/V分量中的性能分别是0.51%、9.28%和9.20%,由于TSCPM主要是对色度分量的优化,因此它的主要性能来自于色度。IntraDT、IPF和TSCPM都是针对Intra的工具,所以在random access的配置下性能不是太高,IntraDT、IPF在All Intra配置下的性能分别是0.6%和1.4%。

总体性能对比结果来看,AVS3相比AVS2编码性能高出23.52%,时间复杂度增加了一倍,解码复杂度是AVS2参考软件的一半。相对HEVC平均编码性能提高了22.25%,时间复杂度大概是HEVC的7倍,解码时间略有上升。

4. AVS3资料获取

LiveVideoStack 招募

LiveVideoStack正在招募编辑/记者/运营,与全球顶尖多媒体技术专家和LiveVideoStack年轻的伙伴一起,推动多媒体技术生态发展。同时,也欢迎你利用业余时间、远程参与内容生产。了解岗位信息请在BOSS直聘上搜索“LiveVideoStack”,或通过微信“Tony_Bao_”与主编包研交流。

本文分享自微信公众号 - LiveVideoStack(livevideostack)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-08-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • pcl1.8 vs2.13 qt5.7实现点云显示

    好吧,虽然转载了别人的博客,那个步骤确实是我想要的,还挺详细,但是考虑到别人可能会将其删除等原因,还是自己写篇日志,记录下。(PS:弄这个东西搞了快3个月的时...

    点云PCL博主
  • Python 小白的吸星大法

    在学习 Python 过程中,尤其是小白入门阶段,会遇到很多"别人家"光鲜的标签,今天我们来看两个常见的。

    短短的路走走停停
  • qt动态切换语言教程

    在C++ GUI Qt4一书中,动态语言切换也就是Qt的国际化是属于Qt的高级部分,今天就来让高级的部分简单化。

    用户5908113
  • QtCreator画UML

      Qt君和往日一样,被分配了一个任务,就是设计一个网络模块。Qt君看到任务一到就来劲了,立马就做了起来。

    Qt君
  • Windows10下Qt程序打包发布 (与配置环境变量)

    当初对程序还很懵懂的时候(现在是蒙圈),就很想知道程序是怎么被打包发布的。虽然现在还不会制作安装包,但是在Qt官方提供的工具下,可以制作Windows下Qt的“...

    用户5908113
  • Qt中QString 和 int char char*等相互转换

    在编写Qt程序过程中经常遇到各种数据类型的转换,故此写下来方便自己和大家的查找。叮!!!

    用户5908113
  • Windows编译libjpeg库

      由于VC++6的编译方法与VS2017方法基本相同,这里使用VS2017的编译环境编译。

    Qt君
  • Windows 嵌入python解释器

    这次主要记录在windows下嵌入python解释器的过程,程序没有多少,主要是头文件与库文件的提取。

    用户5908113
  • hello大皮——微型 python web 框架:Bottle (一)

    Bottle 是一个非常小巧但高效的微型 Python Web 框架,它被设计为仅仅只有一个文件的Python模块,并且除Python标准库外,它不依赖于任何第...

    用户5908113
  • 系列文章(一)|VS2013-Qt5.5.1-动态编译-VTK7.0.0

    7. VS2013-Qt5.5.1-VTK7.0.0-Boost1.6.1-Qhull2015.2-FLANN1.8.4-Eigen3.2.8-OpenNI2....

    点云PCL博主

扫码关注云+社区

领取腾讯云代金券