基于AI的超分辨技术在图像恢复和图像增强等领域的应用前景,受到了学术界的关注,但在RTC领域中很多算法并不能满足实际场景下的应用需求。本次分享我们邀请到了网易云信音视频算法工程师袁振老师探讨超分辨技术在RTC领域大规模落地应用所面临的机遇与挑战。
文 / 袁振
整理 / LiveVideoStack
大家好,我是袁振,现在就职于网易云信,主要负责视频后处理算法的开发和研究。今天我将和大家分享AI驱动的超分辨技术应用现状,主要是结合我之前的研究方向,以及当前的业务需求,来向大家分享一下基于深度学习的超分技术在RTC领域落地应用所面临的一些机遇和挑战。
我的分享主要包括以下四部分内容。
1. 图像超分辨技术的简要概述
1.1 超分辨技术的提出
有的同学可能会问,什么是超分辨?比较直观的理解,超分辨就是将一张低分辨率图像,通过某种算法、模型生成一张高分辨图像的过程,并且在这个过程中尽可能地恢复出更多的细节信息。比较通俗的理解,超分辨就是从小图生成大图的计算机视觉任务。
超分辨这一概念最早是在20世纪60年代由Harris和Goodman提出的,一开始也被称为频谱外推法。但是在研究初期,频谱外推法只是在一些比较理想的条件下,进行的一些仿真,所以一开始并没有得到广泛的认可。直到后来,单张图像超分辨方法提出之后,超分辨重建技术才开始得到广泛的研究和应用。目前,它已经成为图像增强、乃至整个计算机视觉领域重要的研究方向。
1.2 超分辨技术的分类
根据超分辨对象,超分辨技术可以分成单张图像的超分辨以及多张图像的超分辨两种类型。其中,单张图像的超分辨方法只根据低分辨率图像自身的信息就可以完成到高分辨图像的重建,是目前学术界研究的重点。单张图像的超分辨方法根据原理的不同,也可以分为基于插值、重构、学习的方法。
其中基于插值的方法是最简单、也是应用最为广泛的方法,像我们平时应用最多的用于图像缩放的算法,基本上都是基于插值的方法。它的优点是算法比较简单,实时性比较好,所以目前应用最广泛,但缺点是,在插值的时候没有充分利用图像的像素信息,效果比较平滑,不能恢复出更多细节信息。它的主要思想是选择合适的插值窗口和插值函数来对低分辨率图像中一定范围内的像素信息进行加权计算,来得到一个新的像素值,插入到图像中,从而实现图像的放大。根据插值窗口和插值函数不同,基于插值的方法也有很多类型:像最简单的最近邻插值方法,它是直接将待插值像素点最近的像素值,赋值给新的像素值,它的插值窗口大小是1×1;其他的插值方法比如双线性和双三次插值,使用了更大的插值窗口以及一些更高阶的插值函数,超分辨的效果也更好。总体来说,插值窗口越大,基于插值的超分辨方法的效果也会越好。
基于重构的方法,它主要是利用了图像的降质退化模型,假定图像是经过了一定的退化过程,才得到了低分辨率的图像,然后根据这一信息,完成高分辨图像的逆向重建。这种方法在一些特定的领域具有比较好的效果,但是由于在实际的场景中,图像退化的因素多种多样,假设的先验信息并不准确,因此重构的方法在实际应用中,并不是很广泛。
然后就是基于学习的方法,也是目前效果最好也是学术界研究最多的一种方法。它的核心包括两个部分:一个是算法模型的建立,另一个就是训练集的选取。根据算法模型和训练集,基于学习的方法也可以分为传统学习方法和深度学习方法。一般来说,传统学习方法的算法模型比较简单,训练集也往往比较小。深度学习方法一般是指采用大量数据训练的卷积神经网络的方法,也是目前效果最好的超分辨方法。因此接下来我将重点介绍基于深度学习的超分辨方法的发展过程。
1.3 DL-based SR
首先SRCNN是深度学习方法在超分辨问题的首次尝试,它是一个比较简单的卷积网络,由3个卷积层构成,每个卷积层所负责的职能也各不相同,其中第一个卷积层的作用主要是负责提取出抽象的高频信息,第二个卷积层则负责完成从低清特征到高清特征的非线性映射,最后一个卷积层的作用是重建出高分辨率的图像。SRCNN的网络结构比较简单,超分辨效果也有待改善,不过它确立了深度学习方法在处理超分辨这类问题时的三个基本过程。后来的一些深度学习方法不管网络有多复杂,卷积层有多深,基本也是遵循着这一思想去进行超分辨的重建。后来的 ESPCN、FSRCNN也都基于SRCNN进行了一些改进,总的来说它们的网络层数仍然比较浅,卷积层数一般不会超过10,超分辨的效果也不是特别理想。因为在当时,深度卷积网络的训练是存在一些问题的。一般对于卷积神经网络来说,当网络层数增加的时候,它的性能也会增加,但在实际应用中,人们发现当网络层数增加到了一定程度的时候,由于反向传播的原理,就会出现梯度消失的问题,导致网络的收敛性变差,使得模型性能降低。这个问题直到ResNet提出了残差网络结构之后,才得到了比较好的解决。
VDSR网络是残差网络以及残差学习思想在超分辨问题上的首次应用,将超分辨网络的层数首次增加到了20层,它的优点是可以利用残差学习的方式,直接学习残差特征,这样的话网络的收敛会比较快,超分辨效果也更好。后来的一些卷积神经网络也提出了更复杂的结构, 比如SRGAN提出使用生成式对抗网络来生成高分辨的图像,SRGAN由2部分组成,一个是生成网络,另一个是判别网络。生成网络的作用是根据一张低分辨率的图像来生成一张高分辨的图像,而判别网络的作用是将生成网络生成的高分辨图像尽量判定为假,这样网络在训练的时候,生成网络和判定网络两者之间不断博弈,最终达到平衡,从而可以生成细节纹理比较逼真的高分辨图像,具有更好的主观视觉效果。其他的深度卷积网络方法比如SRDenseNet、EDSR、RDN,它们使用了一些更复杂的网络结构,网络的卷积层也越来越深,在单张图像上的超分辨效果也是越来越好。
以上是我对超分辨技术发展的总体趋势的简单总结,基本上可以概括为从传统方法,到深度学习方法,从简单的卷积网络方法到深度残差网络方法。在这个过程中,超分辨模型结构越来越复杂,网络层次越来越深,单张图像的超分辨效果也越来越好,不过这也会有一定的问题,在后面我会具体介绍到。
2. 超分辨技术应用现状
根据我的调研,目前在业界已经落地的超分辨项目,应用场景可以概括为视频和图像两个领域,具体包括低质视频的修复,比如一些老旧电影、电视剧或者质量比较差的视频,这在一些视频网站上比较常用;还有电视和直播分辨率的提升,比如一些网络TV或者直播平台;此外在移动端,主要应用于图像画质的优化,比如手机相机分辨率的提升。下面我会介绍几个具体的例子分别介绍这三类应用场景。
2.1 爱奇艺ZoomAI
第一个是爱奇艺推出的ZoomAI,它是一个比较成熟的深度学习工具包,主要针对目前网络视频所存在的一些低质退化问题,是各种视频处理和增强方法的集合,它主要应用的场景包括用户在上传网络视频的时候,由于拍摄手段不专业导致的噪点和模糊问题,还有一些老旧电影、电视剧由于在拍摄时分辨率比较低,以及后来数字化过程中引入的噪点和划痕问题,导致网络视频画质低下。ZoomAI针对这些低质视频存在的问题,提出了一系列不同的视频处理算法,像超分辨、去噪、锐化等等。这些算法模块都是由一个或若干个深度学习模型组成,并且相互独立,可以根据用户的不同需要,实现不同场景视频的增强和修复。
我们比较关注其中的超分模块,ZoomAI的超分模块提出了两种策略。学术界在探究超分辨问题时,一般经典的做法是采用均方误差作为损失函数去约束整个网络的训练,均方误差是一种L2型的损失函数,好处是可以重建得到具有更大峰值信噪比的超分辨图像,不过峰值信噪比并不能代表人眼的主观感受。当使用L2损失作为损失函数时,需要对异常值进行平方处理,所以当异常值比较大的时候,损失也会比较大。这样导致对噪声特别敏感,在宏观上,表现为生成图像会出现模糊预测的问题。
ZoomAI针对学术界这种常用的训练模式所存在的问题,提出了两种策略上的改进,首先它在训练集中加入了一些模糊操作。这样网络在训练时,数据和标签之间,不仅有从低分辨特征到高分辨特征的映射关系,也存在从模糊到清晰的映射关系,生成的图像会具有更好的细节。针对MSE损失函数所存在的模糊预测问题,ZoomAI则是引入了另外一种损失函数,来改善之前均方误差所产生的模糊预测问题。
右边这张图像是传统的插值方法和ZoomAI中基于深度学习的超分辨方法的对比,可以看到双三次插值后的图像细节是比较差的,发丝的纹理和细节基本上是看不太清。基于深度学习的方法,生成的图像具有更丰富的细节和边缘。不过ZoomAI也存在一些局限,因为它是由若干个模块组成的,每个模块都包含了一个或者若干个深度学习模型,导致它的计算量比较大,只是在自己服务端进行视频处理,没有办法在接收端做到视频的实时处理。另外,由于计算量的限制,在手机端也没有用到深度学习的方法。
2.2 虎牙直播AI超分
下面是一个直播超分辨的例子,上图是去年的一篇报道,虎牙的技术团队利用他们基于深度学习的超分技术实现了S9赛事视频从1080P到4K的两倍超分,并且可以达到60帧,画面延时仅仅增加了100毫秒。
我当时看到这个新闻时是比较震惊的,对于从1080P到4K的两倍超分,计算量是特别大的,而且关键是还要达到60帧,延迟的增加也在可接受范围之内。后来仔细看完文章之后,发现他们的超分也是在自己的服务端进行的,先是在服务端的GPU转码集群内做了超分处理,然后再通过虎牙比较强大的分发平台去分发给用户。这样其实与我们目前的业务场景是相悖的,因为RTC领域更多是希望窄带高清的应用场景,在不牺牲用户画质的前提下,尽可能减少网络带宽。这种方法由于是在分发之前做了超分,所以传输的视频比较大,所需要占用的带宽也比较大,没有办法在接收端实时实现。
2.3 移动端画质增强
这两个是应用在移动设备上图像超分的落地项目,其中一个是vivo和商汤合作的,基于深度学习的手机相机分辨率增强的项目;另一个是谷歌和腾讯在他们各自社交平台上所推出的图像省流的项目,据说可以在不牺牲图像质量的前提下,来尽量减少用户流量,可以降低高达75%的带宽。
3. 视频任务的需求与SR的挑战
上面三个例子是几个比较有代表性的已经落地的比较成熟的超分辨项目,总体来说,这些项目依然没有办法在客户端尤其是移动端做到实时处理。接下来我将介绍一下,RTC领域对于视频任务提出的一些需求,以及目前基于深度学习的超分辨方法在这种情况下所面临的挑战。
在RTC领域中,对于视频处理任务来说,由于我们所面对的大多数场景都是像直播和会议这种即时通信场景,对算法的实时性要求是特别高的,所以视频处理算法的实时性是优先考虑的,然后是算法的实用性。这里怎么理解呢?用户在使用直播或会议时,摄像头所采集到的视频质量一般都不是比较高的,可能包含了很多噪点;另外视频在编码传输的过程中会先进行压缩,在压缩的过程中也会导致图像画质的退化,所以RTC领域的实际应用场景比较复杂,而很多视频处理方法,比如超分辨算法在研究的是比较理想的场景。所以我们需要考虑如何提高这些方法在实际场景中的实用性。另外,如何去提升用户尤其是移动端用户的体验,减少算法的计算资源占用,适用更多的终端和设备,也是视频任务所必须考虑的。
针对上面这些需求,目前的超分辨方法尤其是基于深度学习的超分辨方法是存在很多问题的。目前学术界关于超分辨的研究大多还是局限在理论阶段,图像超分,尤其是视频超分如果要大规模落地的话,必须要去面对一些实际问题。
首先是网络模型的问题,因为目前很多深度学习方法为了追求更好的超分辨效果,所采用的网络规模比较大,这些卷积神经网络规模动不动就几十、上百层,并且参数量也越来越多,需要耗费大量的计算资源。这在很多实际场景中没有办法实时处理。
第二点是关于深度学习模型的泛化能力问题,对于各种深度学习模型来说,都会存在训练集适配的问题,在训练的时候所使用的训练集不同,在不同场景上的表现也不同。用公开数据集训练的模型,在实际的应用场景中是否也会具有同样良好的表现,也是我们需要重点关注的问题。
第三点是真实场景下超分效果的问题,目前学术界的一些超分方法,都是针对一些比较理想的问题,比如通常都是针对从下采样图像到高分辨图像的重建。但在真实的场景中,图像的退化不仅仅包括下采样因素,可能会有很多其他的因素,比如之前提到的图像压缩、噪点、模糊等。怎么样在这些真实的场景下提高超分的效果,也是目前超分辨方法需要思考的问题。
总的来说,目前基于深度学习的超分辨方法在视频任务中,所面临的主要挑战可以概括为,如何凭借规模比较小的网络来实现具有良好真实效果的视频质量增强,也就是说怎么样“既叫马儿跑得快,又让马儿少吃草”。
4. 视频超分辨技术的发展方向
目前在RTC视频领域,超分辨基本上可以概括为三个发展方向。
首先,深度学习方法依然会是超分辨算法的主流,因为传统的方法在超分辨任务上的效果还是不太理想,细节会比较差。深度学习方法为超分辨提供了一条新的思路。近年来基于卷积神经网络的超分辨方法,也逐渐成为主流方法,效果也是在不断改善,虽然还存在一些问题,但相信在不久的将来,这些问题也将会得以解决,深度学习方法依然会是超分辨的主流研究方向。
第二点,一些参数比较小的轻量级网络,在推动超分算法落地方面,可能会发挥出更大的作用。因为目前各种的深度卷积网络方法,像EDSR、RDN这些过于庞大的深度残差网络是难以满足视频实时传输需要的,一些比较小的轻量级网络对于实时任务会有更好的效果。
第三点是将来的超分辨方法会更加聚焦在一些真实场景的任务,因为学术领域的SR方法多是针对下采样问题进行超分,在真实场景下的表现并不是很好,在真实场景中,图像退化因素是各种各样的,一些比较有针对性的方法,比如包含压缩损失、编码损失以及各种噪声的超分辨任务,可能会更加实用。
下面我将对这三点做具体的介绍。
4.1 深度学习方法依然是主流
我总结了一下,近年来一些顶级CV会议上所发表的超分辨论文的总结。可以看到近几年来,基于深度学习的超分辨方法相对于传统方法的论文数量呈现出一边倒的局面,并且这种局面在未来几年还会进一步扩大。因为随着一些轻量级网络的出现,深度学习方法将来在落地应用方面可能会有更大的突破。
4.2 轻量级网络推动算法落地
下面介绍轻量级网络在推动超分算法落地时所发挥的作用。在这之前,先向大家介绍卷积神经网络以及卷积神经网络参数计算相关的一些基本概念。
左图是一个经典的3×3的卷积过程, 3×3大小的卷积核会对输入特征图上的3×3范围内的像素值进行加权计算,得到一个新的特征值,最终通过步长为1的逐次扫描得到一张输出特征图。在输入特征图中,边界这一圈空白像素代表的是padding为1的填充,目的是保证特征图的对齐,也就是让输出特征图和输入特征图的尺寸保持一致。因为在超分辨的过程中,特征图的尺寸比较重要,一般不会轻易发生改变,所以我们需要采用合适的填充,来保证特征图的对齐。右边是没有加padding的情况,可以看到一个5×5的特征图经过3×3的卷积后,它的尺寸会缩小为3。
右边是一个比较简单的卷积层的示意图,它的输入是一个三通道的RGB图像,经过5个通道的卷积之后,每个卷积核都会和输入的三个通道进行卷积计算,得到一个新的特征图,经过5个卷积核之后就会输出5通道的6×6特征图。在这个过程中,卷积层的参数主要是跟输入输出的特征维度以及特征图、卷积核的尺寸是相关的。
现在的轻量级网络通常也是从以上方面对网络的模型和参数进行压缩。具体包括特征压缩、特征降维、减少卷积层尺寸、利用分组思想的卷积策略。其中比较好理解的是特征压缩和特征降维的方式,在进行比较大尺寸的卷积计算之前,先用1×1的卷积核降低特征的维度,然后再进行比较大尺寸的卷积核进行计算。另外卷积核尺寸减少对于缩减网络规模也是一种比较有效的方法。
在介绍之前,先向大家介绍一下感受野的概念。感受野是指卷积神经网络输出特征图的特征值在输入图片上映射的区域范围的大小。比较通俗的理解就是,输出特征图的一个特征值所对应输入特征图的区域范围。
比如右边的例子是一个5×5的卷积过程,左边的是输入特征图,在进行卷积时,5×5范围内的像素会和卷积核进行卷积计算得到一个新的特征值。那么新的特征值所对应的输入特征图上的范围就是5×5,所以它的感受也就是5×5。那么我们是不是可以在保持感受野不变的情况下使用更小尺寸的卷积核去减少网络的参数,比如一个5×5的卷积核可以用两个3×3的卷积核代替,并且它的参数量可以减少到原来18/25,感受野保持不变;一个7×7的卷积核可以用3个3×3的卷积核来代替,参数量可以减少为原来的27/49;一个9×9的卷积核也可以用4个3×3的卷积核来代替。这样的好处是使用多个较小尺寸的卷积层可以比一个更大的卷积层进行更多次的非线性变化,这样的话对抽象特征的学习能力会更强。而且VGGNet提出,对于卷积神经网络,卷积核的尺寸并不是越大越好,当卷积核尺寸增加到一定程度后,网络的精确度反而会下降,所以当我们使用比较小的多个卷积层去代替大的卷积层时,不仅可以减少网络的尺寸,而且可以使网络具有更好的非线性能力。
上图是两个利用分组思想的模型压缩策略,一个是分组卷积,在左边的经典卷积计算过程中,它的输入是一个12通道的特征图,经过6通道的卷积后,会得到6个输出特征图,在进行卷积计算时,每个卷积核都会和12个输入特征图进行卷积计算,这种情况下需要进行72次的卷积计算。但是如果我们把不同的卷积核和输入特征进行分组,比如我们将其分为3组,其中每3个输入特征只分别和对应的两个卷积层进行卷积,这样的话,可以把卷积计算的次数缩减到原来的三分之一,只进行24次的卷积计算。所以分组卷积可以大幅度压缩网络的规模。另外一种深度可分离卷积是一种比较特殊的分组卷积,它也是把传统的卷积计算分为了两个过程,同样可以对网络的参数进行多倍的压缩。
目前基于深度学习的超分辨方法,网络规模还是比较大的,如果要想在移动端落地应用,依旧存在不小的难度。所以使用这些轻量级网络所提出的一些思想对模型进行压缩,对于深度学习方法的落地是极为重要的。
4.3 更加聚焦真实场景任务
最后是关于真实场景任务的一些思考,这是目前学术界比较通用的超分辨模型的训练模式,一般是将高分辨图像经过下采样得到低分辨率图像,以此作为配对的数据集输入到网络中进行训练。但是这种情况只考虑到了下采样退化的因素,而在实际场景中图像会有像图像压缩、视频编码以及图像采集噪声等多种退化因素,如果直接用公开训练集训练好的模型套用在实际的场景中,效果是比较差的。
这里举一个我们业务中遇到的例子,在RTC领域中我们需要对视频进行编码,然后再去传输给接收端解码,但是当网络比较差的时候,视频编码所采用的量化参数会比较大,会对图像造成比较严重的压缩,从而导致输出图像会带有一些块效应和其他失真,画质比较模糊。这种情况下,如果直接将解码后的视频进行超分,这些视频的损失也会被进一步放大,超分效果就会不够理想。针对这种问题,我们提出了一些改进思路,一种方法是在数据集中加入编码损失,先对数据集进行预处理,在预处理时把编码损失也加入到训练集中,网络在训练时可以同时学习到下采样损失和编码压缩损失;另外则是结合去模糊和去噪等算法增强超分效果。基于这些思路,我们目前提出了基于编码损失复原的视频超分辨方法。
这是我们所提出的视频超分方法的基本思想,目前还在探究阶段,所以这里提出两条思路,一种直接将原始尺寸的视频使用比较大的QP进行编码、传输。这样解码后视频会产生比较大的失真,这时候可以用去模糊的方法,并且把QP损失考虑进去,得到去模糊的重建视频。对于这种方法,视频的损失是比较单一的,只包含了视频编码的压缩损失,但缺点是在原始尺寸的视频上进行的,所以计算量会比较大。
另外一种思路是在进行编码传输之前先对视频进行下采样,然后将解码后的低分辨率视频进行超分,并且在超分模型中加入特定QP损失,重建得到超分辨图像。这种方法是在下采样后的小尺寸视频上进行计算的,计算量相对第一种方法会小一些,但是解码后视频中既包含了下采样损失,也包含编码压缩损失,所以如何恢复出更好的细节也是对于超分辨算法的严峻挑战。
以上就是我所有的分享,感谢大家。