Code前端首页关于Code前端联系我们

视频编码和解码中的机器学习调查

terry 2年前 (2023-09-23) 阅读数 140 #AI人工智能

机器学习在视频编解码中的探索

为什么视频编解码器很重要?

大家都知道,从技术难度上来说,视频编解码并不是对称的,编码器比解码器复杂很多。那么机器学习可以对编码进行哪些优化呢?

机器学习在视频编解码中的探索

目前大家讨论的三种编码标准是:一种是MPEG组织的,一种是从VP9到AV1的开源且免版权税的,还有一种是我们在中国开发的从AVS到AVS2、AVS3系列。

编码标准每天都在变化,并且不断向前发展。而大家都会想知道为什么视频编码如此重要?

以JPEG为例,它是一个经历了数十年发展的图像标准。那么为什么近几十年来JPEG没有被击败,反而得到了广泛的应用呢?最重要的是,利用广泛的商业用途和简单的实施。接下来我希望通过下图向大家解释为什么视频编解码如此重要。

机器学习在视频编解码中的探索

2013年,Google推出VP9来取代H.264编码器。国外用户一般使用两种手机观看YouTube。他们在Android中看到的是VP9代码流。由于Apple不支持VP9硬件解码,iPhone用户看到的是H.264流。

Google曾经做过一个统计,比较了全球范围内(中国除外)VP9和H.264的播放时间。从上图可以看出,在印度、非洲等网络带宽较差的市场,VP9显着优化了用户体验,首屏时间大幅缩短,延迟明显降低。

采用新一代编解码器的应用也带来了用户体验的提升和新业务推广的可能性,这也印证了视频编解码器的重要性。

机器学习在视频编解码中的探索

在编码器中,无论是HEVC还是AV1,都有一个分区的概念。熟悉编码的朋友都知道,HEVC和AV1中都有四叉树分区。

比如他在AV1中的超级块大小是128*128。它可以继续向下分裂四叉树。每个128*128的图像块可以分为4个64*64的块,每个64*64可以分为4个32*32。类似地,例如在AV1中,可以将其划分为至少4*4的图像块。

需要为图像宏块创建分区图。统计显示,视频编码器端RDO分区评估的计算占编码器复杂度的80%以上。

那么这个时代如何利用机器学习来尝试优化呢?

机器学习在视频编解码中的探索

如上图所示,第一行的四张图像代表帧间压缩,第二行的四张图像是帧间压缩的示例。它表明不同的图像块需要不同的分区。

原因是每个图像块的内容不同。在帧内压缩的情况下,细节和纹理越多,块就越详细。帧间压缩主要是将残差分成块,这主要取决于帧间预测是如何进行的。从这个角度来看,划分本身是由预测的内容和方式决定的。

然后我们可以从每个图像块的内容中提取某些属性。众所周知,当QP值比较大时,即失真程度比较高时,整个块的内容趋于平滑,会选择较大的块。如果 QP 相对较小,则选择更详细的分布。从这些方面可以看出,在划分的情况下,从块的角度,可以从内容和编码方式中提取相关特征,通过离线训练从机器学习中得到决策结果。

机器学习在视频编解码中的探索

上图的论文是北航徐迈老师和他的学生们的作品。他们的基本分区分类基于神经网络(这里主要使用卷积神经网络)。

分区时,一般的方法是分层进行。例如,块大小为64*64。这个时候你就要决定是否要下去了。做4个32*32然后决定到32。是否继续划分,即逐层决定。

本文是初步尝试。经过神经网络的训练和学习后,输出的是图像块完整划分的最终结果,同时将多级决策的结果输出到所得的划分图中。这种方法的优点是可以最小化神经网络本身引入的复杂度,并且一次性导出结果。

此外,还包括使用卷积神经网络决策过程中的提前终止决策。因为随着网络深度和每层节点数量的增加,神经网络本身也会引入新的复杂性。本文的结果将与HM进行比较,编码器侧的速度将提高约50%。

机器学习在视频编解码中的探索

AV1 是一个开放标准和开源编解码器。我们与Google合作,贡献了开源libaom。上图是我们的屏幕截图。由于机器学习方法的使用,编码器得到进一步优化。

从图中可以看到,这个CL并没有使用深度学习,而是使用了一个非常简单的神经网络。一般来说,CL中的神经网络结构有一到两层,每层大约有128个节点。所以它不是深度学习,而是一个相对简单的网络结构。

以前编码器优化经常采用经验思想,即从第一层、第二层到第三层划分时,可以提取当前块层的方差,或者可以将当前块分为四。提取每个子块的方差,对其进行分析,然后做出决定并输入硬编码的阈值。当块参数的大小低于某个阈值或高于某个阈值时,继续分裂。所有这些决策都可以被神经网络取代,因为现在可以通过积累大量数据来训练一个简单的网络,然后使用该网络生成决策来确定四叉树是否需要进一步分割。

如上图所示,使用简单的神经网络可以将编码器速度提高 10-20%。因此,当我们使用机器学习方法时,并不一定是深度学习,因为神经网络的概念已经存在很长时间了。它主要利用大数据进行训练,从数据集设计网络并建模相对复杂的非线性关系。 ,进一步提高编码速度和效率。

ML 到编码性能

机器学习在视频编解码中的探索

AV1 是一个使用神经网络和机器学习概念来进一步加速编码器的示例。使用神经网络代替经验决策。

那么神经网络能否帮助我们提高视频压缩的压缩性能呢?下面我将通过三个例子来分享我们如何利用神经网络和深度学习来提高编码性能。

机器学习在视频编解码中的探索

首先是来自超分理念的分享。大家都知道压缩会导致信息丢失。丢失信息后,我们希望能够在解码或编码端的内循环过程中重建丢失的信息。如果我们能做到这一点,我们就能进一步提高编码性能。由于压缩是两个系统合二为一,因此它既可以在一定的比特率下提高图像质量,也可以在一定的图像质量下节省比特率。如果能够在一定的码率下重建丢失的信息,则可以进一步提高图像质量,进而进一步节省码率。通过提高图像质量,在码率降低后,失真图像的质量可以恢复到原始码率的图像质量水平。

AV1 包含更多工具,使其能够比 HEVC 等现有编码标准得到进一步改进。其中一种工具称为“恢复”,它提供两种滤波器,一种是维纳滤波器,另一种是自引导投影滤波器。仅此工具的 BDRate 性能提升就在 1-1.5% 之间。

如上右图所示,这是修复说明。那么它是如何恢复信息的呢?我们可以将每个像素视为多维空间中的一个点,因此一小时的视频必须有n帧,每帧有m个像素。如果将每个点视为一维,那么每个视频实际上都是高维空间中的一个点。有了这个想法,上图右侧的X就是原始视频。当按下时,获得高维空间中的另一个点。如果这两点重叠,则为无损编码过程。在高维空间中,这两点相距越远,失真就越大。重建的过程就是试图让压缩后的点X越来越接近原始点的过程。

AV1 具有受控滤波器概念。通过这个滤波器,可以将解压后的X恢复为两个点,X1和X2,即可以得到两个滤波器的结果。做完之后我发现这两点离原来的点还很远。然后AV1进一步通过X1和X2创建一个平面,并将原始视频对应的点投影到当前平面上。可以看到投影后得到的点更加接近原点了。这就是重构的过程。

最终,AV1只需要在码流中传递α和β两个参数,这两个参数需要高精度的传输。可以在解码端使用相同的恢复来恢复更高质量的图像。从这一点可以看出,这个工具可以实现1%以上的BDRate提升。我们可以利用学习的概念来获得更好的图像恢复,因此很自然地想到使用高分辨率的方法。

目前,超分辨率在机器学习中得到广泛应用。图像压缩后,可以通过学习重建更高质量的图像。该图像可以用在我们现有的编码结构中,以达到更好的编码性能。

机器学习在视频编解码中的探索

这是我们与杭州师范大学丁丹丹教授合作的论文,主要研究重建图像。它可以用在四个方面:一是插值滤波;第二,环路中的滤波器;第三,通过使用多个参考帧,可以再现更清晰的参考图像;第四,外环后处理滤波器。

都是从学习的角度出发,利用已知的参考帧来重建更高分辨率、更高质量的参考帧。或者使用插值滤波,因为得到插值也相当于重建了一些原始信息。从我们的训练集数据中获得的信息存储在神经网络结构及其相应的参数中,加上从现有视频数据中获得的重构信息,重构信息用于提高编码性能。

机器学习在视频编解码中的探索

上图是另一个例子,包括前向和后向帧在空间和时间上的联合重建。

机器学习在视频编解码中的探索

重建的最终结果是超分辨率图像。在相同码率下,该技术可用于解码,进一步提高视频质量。在使用多帧分辨率的视频重建过程中,由于每个视频帧都有运动向量的概念,因此本文的主要贡献是在原有方法的基础上进行像素对齐。这是视频处理与图像相比的特殊之处。

机器学习在视频编解码中的探索

徐迈老师的另一项工作是利用学习来恢复编码过程中丢失的信息,但它不是提高分辨率,而是提高图像质量并去除编码图像中的伪影。

在编解码过程中,我们发现每一帧的质量都有波动。由于每帧图像的QP不同,每帧的质量也会有所不同。有些帧的质量比较好,比如我们通常所说的关键帧。本文将这样的框架称为PQF。

如果我们能够识别PQF图像,并利用学习方法来补偿和提高低质量图像的质量,那么我们不仅会提高原始低质量图像的质量,还会优化图像中每张图像的质量序列到更高的水平。

视频帧的质量保持稳定非常重要。例如,在针灸中,需要插入许多针。如果每根针的力度都差不多,病人就会感觉良好。如果突然的注射非常强烈,人们就会记住那次注射的感觉。人眼以同样的方式观看视频。

首先,第一个任务是找出视频中哪些帧的质量更好,因为原始视频当前在解码器中不可用。这项工作主要使用类似于图像质量评估的方法来完成,无需参考图像。有一项关于没有原始视频的无参考质量评估的研究,本文借鉴了该领域的工作。

第一步,每帧提取36个特征,连续5帧总共提取180个特征进行训练。这里使用支持向量机方法进行聚类,并在训练后识别图像的质量。

机器学习在视频编解码中的探索

第二步是在识别出更好的图像后,使用神经网络来提高质量较差的图像的图像质量。首先进行运动补偿,即找到一个质量相对较低的帧以及其前后两个质量相对较高的帧(PQF),并在这三个帧之间进行像素级运动估计的过程。运动估计和运动补偿完成后,进行质量改进。

大家都知道,在训练神经网络的过程中,我们需要一个ground Truth。运动向量很难得到groundtruth,所以这里不是训练运动向量,而是得到重建帧和原始帧之间的关系。找到训练神经网络的最小差异。该神经网络由MC子网和质量改进子网两部分组成,最小化复合MSE函数,然后使用训练好的神经网络重建较低质量的图像,最终实现整体视频质量的一致性。

机器学习在视频编解码中的探索

第三篇论文也利用深度学习来提高视频编码效率。这个想法是,当人眼观看视频时,它会对某些区域更敏感,而对某些区域不太敏感。

例如,当我们观看足球比赛时,我们对球的质量更敏感,而对草坪的变形不太敏感。人眼在不同的区域有不同的敏感度,所以我不需要压缩和转移这些区域。也就是说,我在编码器端分析它们,识别这些区域,然后在解码器端合成它们。编解码的工作就是分析和综合。审判。

由于有内容分析,而机器学习在这方面更有优势,所以本任务就是利用学习方法将每个图像帧划分为两个区域。一个区域对人眼不敏感,另一区域对人眼不敏感。部分区域将被保留。剩下的区域可以使用传统方法(例如AV1方法)进行压缩,并且可以合成那些容错性较高的区域。

在我们的具体工作中,我们实际上是使用AV1全局运动概念来首先识别这些区域对应的全局运动向量,最后在编码结束时使用参考帧和全局运动向量来重建省略的区域,相当于将运动变形方法应用于某些区域的替换和合成。在这项工作中,神经网络主要用于图像预处理和分割。在编码过程中,由于使用了AV1中的全局运动工具,所以最后的部分就是与AV1对齐的编码过程。

机器学习在视频编解码中的探索

右图是图像分割的实验结果。哪些区域是纹理更复杂的区域,哪些区域对人眼更敏感。在这项工作中,我们发现将图像帧分为两个区域——纹理区域和非纹理区域,然后对纹理区域进行变形合成具有相对较好的效果。

与图像相比,视频代表了三维时间线。如果对每一帧都进行运动畸变,帧与帧之间的效果会不一致,那么人眼很容易看出差异,主观感知效果会比较弱。 。

举个简单的例子,我们以前是实时沟通的(比如Facetime)。在手机上,手机有两个CPU核心,所以我们自然会想到并行。例如,H.264可以在编码器侧使用切片并行性的概念。每个图像帧将被分为上切片和下切片。

例如,一个图片帧共有22行,您可以分别对顶部和底部11行进行编码。但当QP比较大、码率比较低时,由于上下片独立编码,失真结果差异较大,编译出来的视频中心会观察到一条线。如果单独查看每个帧,您将看不到该线,但如果播放视频,该线将可见。这就是视频与图像的不同之处。框架之间存在一致性问题。

当时我们分析,出现中线主要是因为两次切割的分布过于一致。每一帧都是半上半下,太整齐了。一种解决方案是让上下片的行数相似,但不完全固定,使得每个CPU核心的计算次数基本相同,从而达到并行的目的,但同时引入一个随机变量。 (随机变量)所以上下切片的行数会略有不同,并且不同的行数会在帧之间随机变化,因此行将不可见。

这个例子进一步说明了在处理视频时需要考虑视频播放对时间连续性的感知影响。对于主观评估与图像相关的视频质量来说,这是一个相当大的挑战。因此,当我们使用纹理分析和视频合成来提高视频压缩性能时,我们不会对每一帧进行运动扭曲。相反,我们使用编码器中使用的分层结构来仅映射该结构的最顶层。一帧层(或者简称为 B 帧)使用扭曲。这样得到的视频感知效果是比较理想的。

用于感知编码的ML

机器学习在视频编解码中的探索

机器学习也可以用于视觉感知编码(perceptualcoding)。我们这些制作视频编码器的人都有质量评估标准。质量评估大概经历了三代的变化:

第一代主要使用PSNR。在信号丢失的过程中,一般的评估就是知道丢失了多少信息,所以用PSNR来衡量。

在第二代中,当我们衡量视频质量时,我们认为视频是针对人眼的。人眼不敏感的区域不需要太多努力。即使畸变很大,人眼也无法察觉。因此,视频编码的评估标准被制定为使用更能对应人类主观视觉的指标。

第三代,随着机器学习或者人工智能的发展,很多时候比如大量的监控视频不再是人眼可见的,而是用于机器分析。

例如,我们的编码通常是一个低吞吐量的过程。通常,人眼对低频信号更敏感,无论是 JPEG、MPEG 还是 AV1。当我们为块分配比特率时,我们进行变换的原因是为了将更多的能量压缩到低通滤波器中,并且我们经常会丢弃大量高通滤波器以去除人眼不敏感的信息。然而,机器的分析过程与人眼的观察并不完全一致。比如看视频的时候,视频大多是稳定的。当一个人或物体突然出现时,就意味着出现了高频信息。此类信息对于机器分析更有用。

机器学习在视频编解码中的探索

由于机器分析参考,质量指标会有不同的评估标准。

接下来会发生什么

机器学习在视频编解码中的探索

这是今年 CVPR 的一篇文章。这是从他的网站下载的视频。原文是视频的翻译。前面已经提到了,这是一个视频分析+合成的过程。

机器学习在视频编解码中的探索

机器学习在视频编解码中的探索

可以想象,如此大量的视频,您可以从简单的图形中恢复复杂的高清视频内容。这个时候你就会看到他神奇的蜕变门槛。这实际上提供了视频压缩的新视角。我们刚开始创业的时候,投资人也会说,现在你做压缩,当机器学习AI发展到一定程度的时候,是不是所有的图像、视频都可以用一个非常复杂的深度学习神经网络来代替,最终可以用在什么领域?解码器?通过神经网络重建任何视频并将从码流中提取的信息添加为神经网络的输入怎么样?

机器学习在视频编解码中的探索

最后,学习对我们的压缩有什么影响?通常大家都说“一图胜千言”。一张图片可以传达如此多的内容,而一个视频远不止“千言万语”。关于我刚才提出的问题,机器学习可以用来取代所有压缩标准吗?之前使用的传统运动补偿+变换阈值的方法怎么样?我今天的回答是否定的。

我们相信在不久的将来5-10年,压缩会继续朝着现有基本编码结构的方向演进,但各个模块都可以被神经网络或者机器学习取代,但基本框架不会改变。

总结起来,主要有两点:首先,机器学习将使视频分析、理解和压缩之间的联系更加紧密。例如,许多高速公路视频用于监控交通并使用车牌识别。但如果只关注视频中的车牌,那么大的高清视频就会被压缩成一串数字。那么不同场景的压缩就需要对视频进行预先分析。其次,通过机器学习,视频重建技术将在视频编码过程中发挥越来越重要的作用。视频可以使用一些神经网络工具来重建非常复杂的信息。具体地,在视频编解码中,由于编码端存在活动视频,因此在编码端可能会生成一些有助于解码端重构的信息。该信息可以放置在码流中并发送给解码器,以进一步帮助解码器重建更高质量的视频。这种方法可以称为“编码器驱动的解码器端重建”,应该比解码器端的独立重建技术更有潜力。机器学习也将有更大的发展空间。

作者:声网
链接:https://juejin.im/post/5beb88b0f265da61682aecba
来源:掘金
版权归作者所有,商业转载请联系作者授权。非商业转载请注明出处。

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门