[论文阅读]Deep Learning for Image Super-Resolution: A Survey

一篇介绍超分辨率(Super-Resolution)的文章。对论文内容做了主要的翻译与总结。希望可以让自己对这个新领域有更多的了解

Posted by Xuehui Wang on 2019-04-26

Deep Learning for Image Super-resolution: A Survey

监督式SR

SR框架

Frameworks

图二 监督式SR的常用框架结构

先上采样SR

后上采样SR

  • 目的:解决先上采样SR存在的计算效率问题,以及更多的利用DL的能力。
  • 做法:在取代先上采样操作,在低维空间进行mapping操作,然后在最后放置一个端到端可学习的上采样层。
  • 好处:具有巨大计算量的利用非线性卷积进行特征提取的过程只在低维空间发生,分辨率只在最后才扩增,所以对时间的消耗以及对空间的占用都会减小,也会加快训练与推理过程。
  • 同类间区别:主要是区别在可学习的上采样层,CNN结构,学习策略。
  • 缺点:上采样操作只进行一次,在大的缩放因子情况下,学习难度增加;每一种缩放因子就需要对应一种订制的SR,无法适配到多缩放因子(多比例,multi-scale)。

渐进式上采样SR

  • 做法:基于一种叠加CNN的思想,渐进的重建HR图像。在每一阶段,图像上采样到高分辨率,并且使用CNN进行优化。
  • 好处:是将一个任务分解成了多个小task,这不仅降低了学习难度,同时在大缩放因子下表现的更好,也可以适用于多缩放因子,还不带来过多的cost。同时由于这种多阶段的设计,可以整合不同的专用学习策略,用以降低学习难度以及提高最终的结果。
  • 缺点:多阶段模型设计的复杂性,训练难度增加

迭代式上-下采样SR

  • 目的:更好的捕获LR图像和HR图像之间的相互依赖关系
  • 做法:一种称为back-projection的迭代过程被纳入到SR中用来缩小LR-HR之间的关系。迭代的使用这种过程来进行微调,也就是先计算重建的错误,然后用它来调节HR图像的亮度。这种思想被用来构建了DBPN(deep back-projection networks),结合着上-下采样层,可以交替的在上采样层和下采样层之间互相连通,最终使用中间的HR图像的特征图的串联得到最后的结果。
  • 好处:可以获得LR-HR图像之间深层次的关系,并以此获得更好的重建结果
  • 缺点:对back-projection的设计标准并不明确,结构很复杂,需要手动设计。有很大的探索与改进空间。

上采样方法

除了在哪里放置上采样之外,如何进行上采样也很重要。

基于插值的上采样

fig-3-interpolation-based

图三 基于插值的上采样方法。灰色方格是像素点的坐标系,蓝色是初始的像素点,黄色是插值的像素点,绿色是最终的像素点。

图像插值其实就是图像缩放,常见的插值方法有最近邻插值,双线性插值,双三次插值,Sinc and Lanczos重采样等。
1. 最近邻插值
选择距离需要被插值的位置的最近的像素点的值
2. 双线性插值
首先在一个方向轴进行线性插值,然后再另一个轴执行同样操作。虽然每一步都是线性的,但综合来看是一个涉及 区域大小的二次插值。速度快,效果比最近邻还好。
3. 双三次插值
和双线性插值很像,在两个维度上进行三次插值,涉及了 的区域,效果更加平滑,但是速度慢点,这种方法也广泛用于构建SR数据集(也就是从HR到LR的生产)以及应用于先上采样SR框架。

总的来说,基于插值的方法都是在原内容上进行的,没有带来更多的信息。同时也有一些隐藏的影响,比如说计算复杂度,噪声的倍增,模糊的结果等。

基于学习的上采样

为了能实现一种可学习的端到端的上采样操作,加入了反卷积层与亚像素层(subpixel layer)
1. 反卷积层

图四 反卷积层

反卷积就是常规卷积的对立。也就是根据卷积操作输出的feature map来预测输入。它通过对图像插入0值以及卷积来提高分辨率。为了简洁说明,图4展示了如何使用 $3 \times 3$ 的卷积核来获得两倍的上采样。首先对原图扩大两倍,新增的像素点设置为0,然后利用一个 $3\times3$ 的卷积核(padding=1,stride=1)来执行卷积操作,这样新生成的值较原图来说最多只涉及 $2 \times 2$ 个。
因为反卷积可以以一种端到端的方式扩大图像分辨率同时还保持着与vanilla convolution相兼容的连通模式,所以它在SR中广泛使用。但他很容易在每个轴上造成不平整的叠加(uneven overlapping),两轴相乘的结果就会造成一种在数量级上有差异的独特的像西洋跳棋盘一样的模式。
2. 亚像素层

图五 亚像素层(sub-pixel layer)

也是一种端到端可学习的层。通过卷积生成大量的通道,然后reshape他们,以此来达到上采样。像Fig5一样。过程为:先利用常规卷积对输入通道生成 个通道, 是缩放倍数。如果输入大小为 那输出就是 。然后通过reshape(也叫做shuffle)操作把 个通道组合成 个, 变成了。这种操作最多只涉及原来的 个元素。
亚像素层相对于反卷积层最大的优势就是感受野变大了。这样可以提供更多的上下文信息。但是也存在着反卷积层的不平整的问题,在边界处也会出现问题。(感觉是因为边界处的卷积都只涉及到了同一个像素点,所以卷积出来的效果也是一样)

这两种层在后上采样SR中应用非常广泛。通常用在最后对低维图像进行处理得到HR图像。

网络设计

图6 各类网络设计策略

目前对于学习网络的设计已经是深度学习中很重要的一件事了。在SR领域中,研究人员也尝试了非常多的网络设计策略(比如残差学习,密集连接等)。

残差学习

在何凯明大佬提出学习残差而不是整个彻底的映射之前,SR已经开始广泛的利用残差了。如Fig6.可以看出残差学习可以分为两类:全局式,局部式。
1. 全局式
因为SR任务是一种从一张图到另一张相似图的转变任务,所以没必要全学,只需要学习残差特征即可,这就是全局式的残差学习。这样就避免了复杂的转换,取而代之的是用残差特征去恢复一些细节。因为残差在很多地方是接近于0的,所以这种方式可以降低学习难度。这种方式广泛应用于先上采样SR。
2. 全局式
很像Resnet,可以减轻网络深度过深带来的退化问题。进而提高学习能力,也是广泛应用于SR领域。

以上两种方式都是通过捷径连接和元素级操作实现的。他们之间的不同在于:前一个(全局式)直接把输入图像连接到了输出图像,而后一个(局部式)是将多个不同深度的连接在层与层之间。

循环学习

为了增加感受野以获取更高级的特征,同时又不会过多的增加参数,就使用了循环学习。就是把想用的模块以循环的方式使用多次。比如像图6中的b一样。

DRCN只用了单层的卷积层作为循环单元,就达到了 $41 \times 41$ 的感受野。DRRN使用残差模块作为循环单元使用了25次,效果比进行了17层残差学习的非循环基准网络更好。MemNet基于记忆体(memory block,由6个循环的残差模块组成,每个循环的输出串联起来,然后加一个$1 \times 1$ 的卷积)。
也有研究者把超大缩放因子的SR分解成了多个小缩放因子的子任务,然后用循环结构来同时的解决这些子问题。DSRN用来实现HR与LR图像之间信号的交换,在每一个时刻(也就是每一个递归),基于当前的LR状态和HR状态更新LR状态,然后把它传递到HR用来更新状态。多次迭代后,LR和SR之间的关系可以得到更深层次的挖掘。还有研究者不仅仅使用卷积层作为循环层,同时也使用特征嵌入模块,特征上采样模块,图像上采样模块作为循环模块,这些参数由子问题共享。这样在减少了大幅参数(8倍)下,仅有一点点性能损失。
实际上,循环学习可能带来梯度弥散或者梯度爆炸问题,因此通常要结合着残差学习等来缓和这种问题。

多路径学习

多路径学习是指将特征通过模型的多个路径进行传播,这样可以执行多种操作,从而提高模型的能力。可以大概分为三个类型。
1. 全局多路径学习
也就是使用多条路径来提取图像多个方面的特征。这些路径可以在传播过程中交叉以大大提高特征提取能力。LapSRN包括一个特征提取路径(以从粗到细的方式来预测下一个残差)以及一个图像重建路径(用来基于所有路径的信息流来重建可视的HR图像)。DSRN就是用一个LR路径和一个HR路径来分别获得低层次和高层次特征,然后不断的进行交换来进一步提高学习能力。
2. 局部多路径学习
灵感来源于inception模块。MSRN使用了一个新block来应对多尺度特征提取。像图6的e所示。在这个block中 $3 \times 3$ 和 $5 \times 5$ 的两个卷积核被用来同时提取特征,两个结果进行拼合进行同种操作,最后跟一个 $1 \times 1$ 的kernel。然后用捷径将一个个block连接起来。
3. 特定尺度多路径学习
考虑到对于多尺度的SR模型需要通过相似的特征提取过程,Lim等人提出了一个特定尺度多路径学习策略来应对多尺度的SR问题。具体来说,他们保留了模型的最主要部分(也就是特征提取部分)然后在网络的开始和结尾附加上特定尺度的预处理路径和上采样路径,如图6中f所示。在训练的时候,只有对应于设置的尺度的路径是可用的并且更新的。这样在不同的尺度里,参数几乎是共享的。

密集连接

在密集连接中,对于密集block中的每一层,他的输入是先前所有层输出的feature map,他自己输出的feature map是之后所有后续层的输入。因此在具有 $l$ 层的密集block中,将有$\frac{l \times (l-1) }{2}$ 条连接。密集连接不仅仅帮助缓解了梯度弥散问题,提高了信号传递以及特征复用,同时还通过使用小增长率(也就是密集模块中的channel数量)和在串联后压缩channel来降低了参数数量。
SR也适用密集连接,可以通过高低特征的融合得到更高质量的细节。如图6的d所示,Tong等人不仅仅使用密集模块来构建69层的SRDenseNet,同时还在不同的密集模块中插入了密集连接。也就是模块间的输入输出类比为层与层之间。这种层级密集和block级密集同样在MemNet等网络中出现。

通道注意力

考虑到不同channel之间特征表达的互相依赖与交流,Hu等人提出了一个”压缩与激励(squeeze-and-excitation)”块,通过明确的对通道间相互关系进行建模来提升表达能力,如图6的c所示,在这个块中,每一个输入通道被通过使用全局的平均池化操作来压缩为一个通道描述子(也就是一个常数),然后这些描述子被送进两个全连接层中来产生通道级的缩放因子。最终的输出通过利用这些缩放因子来重新缩放输入通道而得到。通过使用这种通道注意力机制,Zhang等人提出了RCAN,改进了SR模型的性能。

高级卷积

1. 扩张卷积
众所周知在SR中,上下文信息可以有效的促进生成更现实的细节。Zhang等人使用扩张卷积取代了常规卷积,增加了两倍的感受野,最终实现了更好的性能。
2. 组卷积
启发于轻量级CNN的先进性,Ahn等人提出了CARN-M,他使用组卷积来取代常规卷积。根据之前证明的,组卷积可减少大量的参数以及操作,虽然有一点性能损失。CARN-M实现了5倍参数压缩和4倍的操作减少,仅仅有一点点性能损失。

像素循环学习

大多数的SR模型都将SR看做一个像素相互独立的任务,所以因此无法正确的追溯生成的像素之间的依赖关系。受益于PixelCNN,Dahl等人首先提出了一个像素循环学习,通过使用两个网络(一个用来捕获全局上下文信息,另一个捕获序列生成依赖)来实现像素到像素的生成。通过这种方式,他们的方法在低分辨率的人脸图像上合成了切实可行的头发与皮肤细节。
受启发于人类注意力变换机制,Attention-FH也使用了这种策略,它借助一个周期性的策略网络来不断的发现伴随的小补丁然后做局部提高(*这里读的不太懂)。通过这种方式,它有能力根据每一副图像的特点自适应的个性化得到一个最优的搜索路径,这样可以有效的探索图像全局依赖关系。

* Motivated by the human attention shifting mechanism, the Attention-FH also adopts this strategy by resorting to a recurrent policy network for sequentially discovering attended patches and performing local enhancement.

虽然在一定程度上这种方法是有效的,但是循环过程需要一段很长的传播过程,这将增加计算cost以及训练的难度,特别是在SR问题中。

金字塔池化

受益于空间金字塔池化层的启示,Zhao等人提出了金字塔池化模块来更好的利用全局和局部的上下文信息。对于一个 $h \times w \times c$ 大小的feature map,可以把每一个feature map划分为 $M \times M$ 个bins,然后使用全局平均池化进行处理,得到了 $M \times M \times c$ 大小的feature map,然后使用 $1 \times 1$ 大小的卷积核将其压缩为单通道。在这之后,低维的feature map经过双线性插值被上采样到与原图feature map大小一致。通过使用不同的M值,模块可以有效的结合起全局和局部的上下文信息。

小波变换

小波变换是一种高度有效的图像表达方式。它可以把图像分解为定义纹理细节的高频波和包含全局拓扑信息的低频波。Bae等人首次将小波变换与基于SR模型的深度学习结合起来,将插值的LR波的波段作为输入,然后预测对应的HR波段的残差,小波变换被用于拆分LR输入,反小波变换被用于重建HR图像。DWSR和Wavelet-SRNet同样在波域中来进行SR但是有了更加复杂的结构。与以上工作对每个波段单独处理不同的是,MWCNN采用了多层次的小波变换,然后把他们组合起来作为单CNN的输入,这样可以获得他们之间的依赖关系。