1、简介
图像超分辨率是计算机视觉和图像处理领域一个非常重要的研究问题,在医疗图像分析、生物特征识别、视频监控与安全等实际场景中有着广泛的应用。随着深度学习技术的发展,基于深度学习的图像超分方法在多个测试任务上,取得了目前最优的性能和效果。本文介绍的一篇综述(Deep Learning for Image Super-resolution:A Survey)给出了一个统一的深度学习视角,来回顾最近的超分技术进展,主要包括三个方面:
- 给出了综合性的基于深度学习的图像超分技术综述,包括问题设置、数据集、性能度量、一组基于深度学习的图像超分方法集合,特定领域的图像超分方法应用等等。
- 为最近基于深度学习的图像超分算法提供了系统性、结构化的视角,并总结了高效图像超分解决方案中的优势与劣势。
- 讨论了这个领域的挑战与开放问题,并总结了最近的新趋势与未来的发展方向。
2、最新进展
2.1 超分网络的升采样结构
根据升采样(upsampling)在网络结构中的位置和使用方式,可以把超分网络结构设计分为四大类:前端升采样(pre-upsampling)超分网络、后端(post-upsampling)升采样超分网络、渐进式升采样(progressive upsampling)超分网络、升降采样迭代式(iterativeup-and-down sampling)超分网络。
- 前端升采样网络,一般使用双三次(bicubic)插值直接将低分辨率图像插值到目标分辨率,然后深度卷积网络等模型重建高质量细节信息,这类方法显著降低了学习的难度,但是预先设定的升采样方法会引入模糊(noise)、噪声放大(noise amplification)等问题,同时因为网络在前端即进行插值到高分辨率空间,所需的存储空间和耗时都远高于其他类型超分网络。
- 后端升采样网络,一般在网络结构的最后一层或几层,使用端到端可学习的升采样层,绝大部分映射变换都在低分辨率空间进行,计算复杂度和空间复杂度都明显降低,同时训练和测试速度也都明显提高,被多前主流超分网络框架所使用。
- 渐进式升采样网络,主要是解决多个超分倍增系数(scaling factor)和大的超分倍增系数,升采样不是一步完成的,而是采用拉普拉斯金字塔或者级联CNN等方式,产生一些中间(intermediate)的重建图像作为后续模块的输入图像(“base images”),另外诸如课程学习(curriculum learning)和多级监督(multi-supervision)等学习策略也可以被引入进来,这类方法可以降低学习难度,特别是在大的超分倍增系数时。另外,在多尺度超分问题上也可以减少参数量和耗时。
- 升降采样迭代式超分网络,借鉴了反向投影(back-projection)的思想,通常会交替地使用升采样和降采样层,最终重建的高分辨率结果会用到之前全部中间层得到高分辨率特征图,这类方法的思想刚被引入图像超分问题不久,已经取得了非常好的性能和效果,有很大的潜力,值得关注和探索。
2.2 可学习的升采样方法
- 转置卷积(transposed convolution),也就是所谓的反卷积(deconvolution),相当于正常卷积的反向操作,可以嵌入到端到端的网络结构中,但是容易产生棋盘格效应。
- 亚像素(sub-pixel)卷积,同样可以嵌入到端到端的网络结构中,使用正常的卷积结构,但是输出的通道数(channel)与目标分辨率有关,随后对这些通道进行“洗牌”(shuffle)操作,类似于像素重排,得到与目标分辨率相同的输出。亚像素卷积与转置卷积相比,最大的优势在于神经元的感受野较大,可以为超分辨率重建提供更多上下文信息,但是这些神经元感受野的分布是不均匀的,像素“洗牌”操作中同一个小块状区域(blocky region)的感受野相同,容易在一些边缘区域产生伪影现象。
2.3 全局和局部网络结构设计
- 残差学习(residual learning),在ResNet被提出之前,在超分领域对残差进行学习的思想已经在很多研究工作中出现。其中,全局残差学习(global residual learning)只是学习插值后得到的图像和高分辨率图像之间的残差,通过学习一张残差图来恢复高频细节;而局部残差学习(local residual learning)则类似于ResNet中的短连接(shortcut connection)。
- 递归学习(recursive learning)可以不引入额外参数的同时,大大增加网络的感受野,做法就是递归地多次使用同个模块,例如对同一卷积层递归使用多次,还有将大的超分倍增系数的问题,分解成多个子问题,使用递归的网络子结构来解决等等。但是,递归学习容易出现梯度消失和爆炸的问题,需要将残差学习和多级监督等策略融入进来以减轻这些问题。
- 多支路学习(multi-path learning)主要思路是为网络设计多条支路来提升模型的容量和表达能力,分为全局多支路学习(global multi-path learning)、局部多支路学习(localmulti-path learning)、尺度相关的多支路学习(scale-specificmulti-path learning)等
- 稠密连接(dense connections),是与DenseNet紧密联系的,稠密连接被引入图像超分问题,不仅可以减轻梯度消失的问题,还可以对特征进行重用,提升效果,在使用小的增长率(growth rate)时,可以很好地控制参数量,目前越来越受到关注和使用。
- 通道重缩放(channel attention)是考虑特征表达中不同通道之间的关系,通常是引入一些额外的小结构来按通道(channel-wise)进行重缩放(rescale)。
- 高级卷积结构(advanced convolution),近来受到关注的主要是空洞卷积(dilated convolution)和成组卷积(group convolution)两种。
- 像素递归学习(pixel recursive learning),这类方法是逐像素生成(pixel-by-pixel generation)高分辨率图像的,可以更好地捕获全局上下文信息和像素序列生成时的相关性,但是计算代价很高,同时训练也比较复杂。
- 金字塔池化(pyramid pooling)通常使用多个不同的尺度参数,来聚合全局和局部上下文信息。
- 小波域变换(wavelet transformation)分别对高分辨图像和低分辨率图像进行小波变换,在不同的子频带(sub-bands)进行映射学习。
2.4 损失函数设计
- 像素级(pixel loss),主要比较两幅图像像素级的差别,包括L1损失(i.e., mean absolute error)和L2损失(i.e., mean square error),不过与L1损失相比,L2损失可以惩罚较大的误差,但对较小的误差具有较强的容忍度。近来研究表明L1损失可以取得更好的性能和收敛速度。这类损失没有对图像内容和语义进行评价,通常会产生过于平滑的超分结果。
- 内容损失(content loss),主要是从图像内容理解和感知层面对图像质量进行评价,通常使用预训练好的图像识别(如VGG和ResNet等)网络,比较中间某些层的特征图之间的欧式空间距离。
- 纹理损失(texture loss),想法来源于风格迁移工作中,重建图像应该与原始图像有相同的风格(颜色、纹理、对比度等)。因此,纹理损失又称为风格重建损失(style reconstruction loss),一般使用不同特征通道的相关性来度量。通过使用纹理损失,SR模型可以创建真实的纹理,并产生更令人满意的视觉效果。尽管如此,确定补丁的大小(patch size)以匹配纹理仍然是经验之谈。太小的patch会导致纹理区域中的人工制品,而太大的补丁会导致整个图像中的人工制品(artefacts),因为纹理统计数据是不同纹理区域的平均值。
- 对抗生成损失(adversial loss),随着GAN的兴起,对抗生成网络中生成器和判别器的思路被引入超分问题,超分网络即是生成器(generator),另外定义一个判别器来判断输入的图像是否为生成的。在这种损失函数中,也可以借鉴内容损失的想法,判别器使用图像的高层表达来进行判断。
- 往复一致性保持损失(cycle consistency loss),受CycleGAN的启发,通常是在两阶段生成时,保持再次生成的图像和原始输入相同。
- 全变分损失(total variation loss),主要是为了抑制生成图像中的噪声,一般定义是相邻像素之间差的绝对值,引入全变分损失可以使图像变得平滑。
- 基于先验知识的损失(prior-based loss),通过一些外部已知的先验,作为一些约束放入损失函数,例如人脸超分对关键点的约束等。
2.5 批归一化
批归一化(BatchNormalization,BN)层在很多视觉任务中被验证有效,但是在最近关于超分中使用BN层存在一些争议,部分研究者指出使用BN层会丢失图像的尺度信息和网络参数的自由范围变化,导致超分效果下降。
2.6 课程学习
课程学习(curriculumlearning)从简单的子任务开始逐渐增加难度,因为图像超分问题存在很多困难情形,如大的超分倍增系数,噪声,模糊等,这种从易到难的策略可以起到很大帮助。例如,可以将8x的超分问题分解成三个子问题,1x到2x,2x到4x,4x到8x,为每个子问题单独学习一个网络。
2.7 多级监督
多级监督(multi-supervision)为网络的学习增加多个额外的监督信号,可以有效减轻梯度消失和爆炸问题,例如在递归式结构中就可以使用多级监督策略,对每一级递归产生的结果进行监督,通常多级监督的表现形式是在损失函数里添加了若干相关项。
2.8 其他网络设计和学习策略
- 上下文融合网络(context-wise network fusion,CNF),将多个超分网络模型的结果使用stacking的策略融合起来。
- 数据增强(data augmentation),常见的随机裁剪、翻转、缩放、旋转、颜色微小抖动等,最近也出现了随机打乱RGB三个通道的方法。
- 多任务学习(multi-task learning),通过训练数据中和超分相关联的任务蕴含的专有领域的信息来提升模型的泛化性能。例如可以分别训练一个去噪网络和一个超分网络,或者嵌入预训练好的语义分割网络来提供语义信息等。
- 网络插值(network interpolation),为了平衡视觉质量和图像保真度,可以对两个网络相应参数进行插值,来生成中间模型,不需要重训练就可以得到折中的超分结果。
- 图像自融合(self ensemble),又称预测增强(enhanced prediction),将一张图像多种旋转角度后,得到一组图像,分别得到超分辨图像,然后逆旋转回到原始角度,将所有这组超分辨率图像进行加权平均或者取中值,得到最终的超分结果。
2.9 无监督图像超分辨率
监督学习的图像超分辨率,基本上是学习了人为设计的图像降质过程的逆过程,需要LR-HR的图像对(image pairs),与实际场景中的图像超分问题不太符合。实际中的超分问题,只有不成对(unpaired)的低分辨率和高分辨图像可以用来进行训练。无监督的图像超分辨率也受到越来越多关注。
考虑到图像自身内容就可以为超分提供统计信息,因此,可以不用在大数据集上训练一个普适超分模型,而是在测试阶段训练一个专有图像的超分网络,比如可以使用核估计(kernel estimation)的方法在单张测试图像中估计降质过程,但是这类方法每张图像测试时都需要学习一个网络,非常耗时。
近来弱监督学习的图像超分主要有两类方法,一类是学习HR到LR的降质过程,一类是同时学习LR到HR,HR到LR这种往复的映射(cycle-in-cycle)关系。
深度图像先验(DeepImage Prior)目前主要是使用随机初始化的CNN作为手工设计的先验去进行超分。
2.10 超分在专有领域的应用
目前图像在专有领域的超分,主要有深度图像超分、人脸图像超分、高光谱图像超分、视频图像超分、检测分割中的小物体超分等。
3、发展趋势
下面从超分网络结构设计、学习策略、评价指标、无监督学习、实际场景等几个方面,来阐述一下图像超分领域的发展趋势。
3.1 网络结构设计
- 融合局部和全局信息
- 融合底层和高层信息
- 不同上下文信息区别对待的注意力机制
- 轻量化网络结构
- 升采样层的改进
3.2 学习策略
- 精确表达图像差异的损失函数设计
- 适合图像超分的归一化方法
3.3 评价指标
- 全面评价超分图像质量的主客观统一指标
- 无参考图像的图像质量评价
3.4 无监督的图像超分
- 不成对的低分辨率和高分辨图像之间的降质过程进行学习,而不再使用人工设计好的降质过程去生成低分辨率和高分辨率图像对。
3.5 实际场景中的图像超分
- 适应多种多样的降质过程(CVPR2019中有一篇使用真实的传感器数据进行操作,参考Zoom to Learn, Learn to Zoom)
- 专有领域图像超分的应用
- 任意尺寸缩放的图像超分(CVPR 2019 | 旷视提出超分辨率新方法 Meta-SR:单一模型实现任意缩放因子)
-------------------------------------------------------------------------
注:由于论文的实效性,每时每刻都有新的思路出现,在本篇论文中,相应补充了一些更新的研究成果!
--------------------------------------------------------------------------
另外总结一些对当前顶会SR等图像复原文章的一些看法:
(1)灌水的很多,因为很好灌水。问题很难,有价值的研究少但是一直有。
- 用深度方法或者说是用基于学习的方法做图像复原本身就比较好理解。深度方法天生就是搭积木的工具,你搭建一个 工作的模型并不困难,而且可以非常直观地看到成果。此外,不像大规模的图像理解和视频理解那样费算力,图像复原需要多卡训练的都少。低门槛就导致做的人多,新进来的人要发文章想要发不是灌水的也少。
- 该领域的idea相对廉价。很容易在别的视觉任务中找一个 网络结构或者训练策略用在图像复原里。就算超分辨和去噪这种刷榜的任务得不到好的 performance,去反射,去摩尔纹,图像 defect 这么多,随便找一个别人没做过的都能写出一篇文章来。然后根据讲故事的水平不同,这些文章就被发在各类会议上(从 A 会到 C 会)。
- 最重要的一点是,大多数做图像复原的人都没有什么图像需要复原。大多数的 idea 都在实验室里,用几张图搭一个 实验应用场景,改一下网络结构,讲一个好听的故事,写一篇没什么用的论文。真正做图像复原的内行,他们是清楚用户需要什么的。图像复原是复原给人看的不是为了刷榜,各种 metric 只是为了推动领域更好的发展。但是在实验室里,大多数人没接触过用户,写论文的意义就在于刷榜,刷引用,导致外行看这个领域就是一堆灌水的。
(2)
灌水虽然容易,但是解决问题很难。
- 图像复原领域灌水多,但是这个不意味着这个领域水。另一个侧面就是,图像复原领域遇到的问题也是真的难。大多数人只看到刷榜这一个问题而看不到真正的用户需求。总所周知,超分辨 SRCNN 出来之后,涌出一大批在网络结构上做文章的工作,例如 ESPCN,FSRCNN,VDSR,SRResNet,这些文章都有可取之处,在刷榜的同时带给了领域新的认识。比如说 ESPCN 之后大家都开始用 Pixel Shuffle 上采样,FSRCNN 之后大家都开始在最后再做上采样,VDSR 开始残差被引入,到 SRResNet 引入残差 Block。这些工作虽然是在刷榜,但并觉得他们是在灌水,只是当时的领域的认知停留在刷 PSNR 而已。然后 SRGAN 提出,学术界尤其是工业界开始发现刷 PSNR 其实没什么用,因为 PSNR 高的超分图像看起来非常的不真实,根本没法用在产品上,有一部分人开始宣传做基于感知的超分辨,到去年 ECCV PIRM SR 比赛,一批做感知的论文出来,继续在这个方向持续的做努力。
超分辨再发展,工业界和学术界都发现做基于感知的也不解决产品的问题。现有的模型用在现实生活中的效果都很差。一部分学者先知先觉,开始思考现实场景中的盲超分问题。从 CVPR2018 的 SRMD,到 CVPR2019 的 IKC,还有基于真实图像对的超分辨 (NTIRE 2019 超分辨比赛)。有一批学者开始转移到更现实的问题里,这些文章虽然有瑕疵,比如说 SRMD 的故事有些生硬,PSNR 的测试也有争议;IKC 论文里有笔误,但是笔者同样不认为这些论文是在灌水。相反,这些论文都对整个领域做出了巨大的 contribution。而 CVPR2019 中已经很少见继续做网络结构的超分文章了。
就当前来看,所有的文章都未能解决工业界的问题。在现实场景中应用这些算法,还是没能达到工业界的预期,算法真正落地确实是需要一个或长或短的过程吧。
(PS:手机端的超分应用还算比较多(典型的如华为P30 pro的数码变焦拍月亮),出发点在于省流量,但需要解决这样的问题:1.算力有限,网络大小一裁再裁;2.应用场景的数据分布和开源数据集相差甚远。如何针对现实场景构建有效的训练数据集也是一个问题。)
参考:如何评价近几年顶会的超分,去噪,去模糊等图像复原文章?