在RTC 2018实时互联网大会期间,Visionular Inc. 的联合创始人兼首席科学家Zoe Liu进行了主题演讲,分享了关于视频编解码的前沿探索。
为什么视频编解码如此重要?
视频编码和解码在技术复杂度上并不对称,编码器通常比解码器复杂得多。那么,机器学习如何优化编码过程呢?
目前讨论较多的三种编码标准包括:MPEG组织的标准、从VP9到AV1的开源且无版税的标准,以及国内自主研发的从AVS到AVS2、AVS3系列。编码标准不断进步,但为何视频编码如此重要呢?
以JPEG为例,它是一个广泛使用的图像标准,历经多年依然被广泛采用,很大程度上得益于其广泛的商业用途和易实现性。接下来,我们将通过下图解释视频编解码的重要性。
2013年,谷歌推出了VP9以取代H.264编码器。在海外市场,用户使用YouTube时,Android设备上看到的是VP9流,而iPhone由于不支持VP9硬件解码,只能看到H.264流。谷歌统计了全球范围内(除中国外)VP9和H.264的播放时长。从图中可以看到,在印度、非洲等网络带宽较差的地区,VP9的应用显著改善了用户体验,减少了卡顿,提高了首屏加载速度。
采用新一代编解码器的应用不仅提升了用户体验,还推动了新业务的发展,这也再次证明了视频编解码的重要性。
在编码器中,无论是HEVC还是AV1,都涉及到分区的概念。熟悉编码的人都知道,HEVC和AV1中都有四叉树分区的概念。例如,AV1中的superblock大小为128×128,可以进一步细分为4个64×64,再细分至32×32,直至最小的4×4。对于图像宏块,需要制作一个分区映射。研究表明,视频编码器端分区RDO评估的计算占据了编码器复杂度的80%以上。那么,如何利用机器学习进行优化?
如图所示,第一行的四张图是帧内压缩的例子,第二行是帧间压缩的例子。它们展示了不同图像块需要不同的分区。原因在于每个图像块的内容不同。对于帧内压缩,细节和纹理较多的区域需要更精细的分区;而对于帧间压缩,主要关注残差块,即帧间预测的效果。因此,分区取决于内容和预测模式。
在图像块内容上提取特征,可以观察到,当量化参数(QP)较高时,图像趋于平滑,此时选择较大的分区。反之,QP较低时,选择更精细的分区。从这些方面可以看出,分区可以根据内容和编码模式提取相应的特征,通过离线训练,可以从机器学习中获得决策结果。
北航徐迈教授与其学生的一项研究展示了基于神经网络(主要是卷积神经网络)的分区基本分类。实际操作中,分区通常是分级进行的,例如,64×64的块需要决定是否进一步细分。这项研究尝试通过神经网络训练学习,输出图像块最终完整的划分结果,将多级决策结果一次性输出为最终的划分图。这种方法的优势在于最大限度降低了神经网络带来的复杂度,一次性导出结果。此外,它还包含早期终止决策,因为网络深度和每层节点数增加时,神经网络也会带来新的复杂度。这项研究的结果显示,在编码端速度提升了约50%。
AV1是一个开放的标准,是一个开源的编解码器。我们与谷歌合作,共同贡献了libaom开源代码。从图中可以看到,CL中使用的不是深度学习,而是一个简单的神经网络。通常,CL中的神经网络结构只有一到两层,每层节点数在128左右。因此,这里不是深度学习,而是采用了一个较为简单的网络结构。
以往在优化编码器时,常采用经验性的方法,即在分区时,从一级到二级再到三级,提取当前块的方差,或将当前块一分为四,提取每个子块的方差,进行分析后做出决策,给出硬编码阈值。当块参数大小低于某个阈值或高于某个阈值时,继续进行分区。所有这些决策都可以用神经网络替代,因为此时可以通过积累大量数据对一个简单的网络进行训练,同时用该网络生成决策,判断是否需要继续进行四叉树分区。从图中可以看出,使用一个简单的神经网络可以将编码器速度提升10%-20%。因此,在采用机器学习方法时,不一定需要深度学习,因为神经网络的概念早已存在,主要依靠大数据训练,从数据集中设计网络,对复杂的非线性关系建模,从而提升编码器的速度和编码效率。
机器学习如何提升编码性能
AV1就是一个实例,它采用了神经网络和机器学习的概念,进一步提升了编码器的速度。使得经验决策可以用神经网络代替。
那么,神经网络能否帮助我们提升视频压缩性能呢?接下来,我将通过三个例子,分享我们如何在编码性能提升上运用神经网络和深度学习。
首先是超分辨率的概念。我们知道,压缩会造成信息丢失,因此希望在编码或解码过程中重建丢失的信息。如果能做到这一点,就可以提升编码性能。因为压缩是一个双刃剑,要么在一定码率下提升画质,要么在一定画质下节省码率。如果能在一定码率下重建丢失的信息,就可以进一步提升画质,进而节省码率,通过画质提升将降码率后的失真图像质量恢复到原码率的水平。
AV1采用了更多的工具,从而使其比现有编码标准(如HEVC)有更好的表现。其中一个工具称为restoration,提供了两个滤波器——维纳滤波器和自指导投影滤波器。仅这一工具的BDRate性能提升就在1%-1.5%之间。
AV1中有一个指导滤波器的概念,通过该滤波器可以从解码后的X恢复成X1和X2。然而,即使如此,这两点与原始点仍相差甚远。因此,AV1进一步通过X1和X2建立一个平面,将原始视频对应的点在该平面上投影。可以看到,投影后的点离原点更近了,这就是重建的过程。最终,AV1只需在码流中传递两个参数α和β,解码端用相同的restoration就可以恢复出高质量的图像。从这一点可以看出,这一工具可以提升BDRate 1%以上,我们可以通过学习的概念得到更好的图像复原,因此自然想到了超分辨率方法的应用。
现在,超分辨率已经在机器学习中得到了广泛应用。压缩后的图像可以通过学习重建出更高分辨率的图像,利用这些图像可以提升编码性能。
我们与杭州师范大学的丁丹丹老师合作撰写了一篇论文,主要探索重建图像。这四个方面可以应用:插值滤波、环路滤波、利用多个参考帧重建更清晰的参考帧、环路外后处理滤波。这些都是从学习的角度出发,利用已知参考帧重建更高清的参考帧,或者利用插值滤波重建丢失的信息。从训练数据中获得的信息存储在神经网络结构及其相应参数中,加上已有视频数据进行重建,利用重建信息提升编码性能。
进一步的例子包括在时空上进行联合重建。最终重建结果是一个超分辨率图像。同样码率下,解码端可以使用该技术提升视频质量。在多帧分辨率重建过程中,由于每帧视频有一个运动矢量的概念,这篇论文的主要贡献在于在原有方法基础上做像素对齐,这是视频相对于图像处理上的一个重要特点。
徐迈教授的另一个工作是利用学习恢复编码过程中丢失的信息,而不是提高分辨率,而是提高图像质量,去除编码后图像的瑕疵。
我们在编码解码过程中发现,每一帧的质量有波动,由于量化参数(QP)的不同,每帧质量会有所不同,有些帧质量较好,我们通常称之为关键帧。这篇论文中把这些帧称为PQF。如果我们能识别出这些质量较高的帧,用学习的方法提升质量较差的帧,不仅可以提高这些帧的质量,还可以优化整个序列中各帧的质量。
视频帧间质量保持平稳至关重要。例如,做针灸时,如果每针力度相近,患者会感觉良好。如果突然一针力度很大,人会记住那一针。观看视频也是一样。首先,通过类似无参考图像质量评估的方法识别视频中哪些帧质量较高。在没有原始视频的情况下,借鉴该领域的研究成果。
第一步,从每一帧提取36个特征,连续5帧提取180个特征进行训练。采用支持向量机方法进行聚类,训练识别帧质量。
第二步,识别出较好的帧后,利用神经网络提升质量较差帧的图像质量。先做运动补偿,即找到质量较低的帧及其前后质量较高的两帧,进行像素级运动估计。完成运动估计和补偿后,再提升质量。
我们知道,在神经网络训练中需要ground truth,运动矢量很难获取ground truth,因此这里不是训练运动矢量,而是通过重建帧与原帧之间的差异最小化来训练神经网络。该神经网络有两个部分:运动补偿子网和质量增强子网,对MSE函数实现最小化,最终用训练出的神经网络重建质量较低的图像帧,达到整体视频质量的一致性。
第三个工作也是利用深度学习提升视频编码效率,其理念是人眼对视频某些区域更敏感,对某些区域则不那么敏感。例如,在观看足球比赛时,对球的质量更敏感,对草地的失真不那么敏感。不同区域人眼敏感度不同,可以不对这些区域进行压缩和传输。编码端分析这些区域,在解码端进行合成。由于其中包含内容分析,机器学习在这方面有较大优势。因此,这项工作利用学习方法将每帧图像分为两个区域,一部分区域是人眼不敏感的,另一部分保留下来。对于保留区域,可以采用传统方法(如AV1的方法)进行压缩,对于容错性较大的区域,则可以合成。
我们的具体工作中,实际上利用了AV1的全局运动概念,首先识别这些区域的全局运动矢量,最终用参考帧和全局运动矢量重建编码端省去的区域,相当于通过运动变形方法合成某些区域。该神经网络主要用于前处理,分割图像。在编码过程中,由于采用了AV1的全局运动工具,最终这项工作实现了AV1对齐的编码过程。
右图是图像分割的实验结果,哪些区域纹理复杂,哪些区域人眼敏感。在这项工作中,我们将一帧图像划分为纹理区和非纹理区,对纹理区进行变形合成,效果较好。
视频相比图像,由于引入了时间轴,如果每一帧都进行变形合成,帧与帧间效果不一致,人眼容易察觉,主观感知效果较差。例如,在早期实时通信(如Facetime)中,由于手机有两个CPU核,自然而然会想到并行。例如H.264可以采用编码器端切片并行的概念,每个图像帧分为上下两个切片。例如,一幅图像共22行,可以分别对上下11行进行编码。但在QP较大、码率较低的情况下,由于上下两个切片独立编码,失真结果差异较大,导致视频中间会出现一条线。单独看每一帧时,这条线是看不见的,但如果播放视频,这条线就会显现出来。这就是视频和图像的区别,需要考虑帧间一致性问题。
当时分析得出,出现中间这条线主要是因为两个切片划分过于一致,每帧都是上下各一半,过于整齐。一种处理方法是使上下两个切片的行数接近但不完全相同,这样可以使每个CPU核的计算量基本相等,达到并行目的,同时引入随机变量,使上下两个切片的行数略有不同,并且不同行数帧与帧间随机变化,这样那条线就看不到了。
这个实例进一步说明,在处理视频时,必须考虑视频播放时的时间连续性感知效果。这是视频相对于图像在主观质量评估上的一大挑战。因此,在用视频纹理分析与合成提升视频压缩性能的方法中,并不是对每一帧都进行变形合成,而是利用编码器中采用的层次结构,只对位于最顶层的图像帧(或简单来说,只针对B帧)采用变形方法。这样得到的视频感知效果相对较好。
机器学习在感知编码中的应用
机器学习还可以应用于视觉感知编码。我们做视频编码器都有质量评估标准。质量评估经历了三代变迁:
第一代,主要采用PSNR。信号在丢失过程中,通常想知道信息丢失了多少,因此用PSNR衡量。
第二代,当我们衡量视频质量时,考虑到视频是给人看的,人眼不敏感的区域不需要花大力气,即使失真再大,人眼也感知不到。因此,视频编码的评测标准发展为用那些与人的主观视觉更加匹配的指标衡量。
第三代,随着机器学习或人工智能的发展,许多监控视频不再是为了给人看,而是供机器分析。例如,我们的编码通常是一个低通过程,人眼对低频信号更敏感。无论是JPEG、MPEG还是AV1,当我们对块进行码率分配时,之所以做变换,是因为希望将能量更多地压缩到低频部分,而高频部分则会大量丢弃,去掉人眼不敏感的信息。但机器在分析过程中与人眼的观测不完全一致,例如在监控视频中,大部分时间视频是稳定的,突然有人或物出现时,即高频信息出现,这类信息对机器分析更有用。
由于机器分析的需求,使得质量指标有了不同的评判标准。
下一步是什么?
这是一篇来自CVPR的论文,从其网页下载的视频,原文标题为视频翻译。前面提到,这是一个视频分析+合成的过程。
可以想象,视频数据量巨大,从一个简洁的图形恢复出复杂的高清视频内容,这时可以看到其神奇的变化。这实际上为视频压缩提供了新的视角。创业初期,投资者也会问,现在在做压缩,而机器学习AI发展到一定程度,所有图像和视频是否都可以用一个复杂的深度学习神经网络来代替,最终在解码端通过神经网络重建任意视频?
最后,学习对我们的压缩产生了什么影响?通常人们会说“一图胜千言”,一帧图像可以表达很多内容,对于一个视频远不止“千言”。那么,刚刚提到的问题,是否可以用机器学习代替所有压缩标准和以前采用的运动补偿+变换阈的传统做法呢?我的回答是否定的。
我们认为在未来5到10年内,压缩还会按照现有的基本编码结构的方向发展,但每个模块都有可能被神经网络或机器学习代替,基本框架不会改变。
总结下来主要有两点:一是通过机器学习,视频的分析、理解和压缩之间的联系会更加紧密。例如,高速公路上的视频监控,采用车牌识别,但对于一个视频,如果只关注车牌,可能会将高清视频压缩成一串数字。不同场景的压缩需要对视频做一些前期分析。二是通过机器学习,视频的重建技术将在视频编码流程中扮演越来越重要的角色。视频可以用一些神经网络工具重建出复杂信息。特别是针对视频编码和解码,一些有助于解码端重建的信息可以在编码端生成,因为编码端有源视频。这些信息可以放在码流中传送到解码端,进一步辅助解码端重建出更高质量的视频。这种方法称为“编码器引导下的解码端重建”,相比解码端独立重建技术应具有更大潜力。机器学习在此过程中也有更大的施展空间。