https://www.cnblogs.com/wyboooo/p/13445216.html
在这篇文章之前,陆续有了一些使用深度学习网络进行SR任务的工作,但是这些以提升PSNR为目标的深度神经网络存在几点问题:
- 网络表现对于网络结构很敏感,不同的初始化和训练方法对表现得影响也很大。这就使得模型的设计和优化策略的选择变得非常重要。
- 目前的SR算法都把不同放大因子的问题看作是独立的问题,没有利用他们之间的互相关系。
这篇文章主要针对这两点问题,首先改进了SRResNet网络结构,通过分析去除了不必要的模块简化了模型,提出了更稳定的训练方法。之后探索如何将其他尺度下训练的模型的只是转移,通过使用预训练的低尺度模型训练高尺度模型,从而在训练中利用了scale-interdependent信息。在训练×3,×4×3,×4模型时,将预训练的×2×2作为初始化。并且提出了一个多尺度的超分模型,可以在一个模型中重建不同尺度的高分辨率图像。这篇文章的工作不是非常复杂,但是非常有效果,而且个人感觉paper的写作非常简洁清晰,在写作方面也值得借鉴。 SRResNet是在ResNet提出后提出的,仅仅将ResNet直接应用于SR任务。但由于ResNet提出的初衷是应用于high-level-vision问题,直接应用实际上是suboptimal的。在每一个Residual Block中,都有一个Batch Normalization层,他归一化了特征但也因此去除了网络中的灵活性。本文去除每个Residual Block中的BN层,提升了表现。而且减少了大约40%的内存,这些节省的内存可以用于构建更大的模型。
模型的表现可以通过增加参数量来实现,假设一个网络的深度为B,宽度为F,那么参数量是O(BF^2),内存量是O(BF)。(这只是一个大概的估计,他这里的宽度是把输入和输出的宽度视为一样的来看。一般模型会用参数量或是FLOPS进行衡量,一般一层的FLOPS用Hout∗Wout∗(d∗d∗C∗N)Hout∗Wout∗(d∗d∗C∗N)来估计,d∗d∗C∗Nd∗d∗C∗N表示kernel的尺寸和个数)因此在资源有限的情况下应该尽可能增大F。但特征图数量增大到一定程度时会导致训练过程非常不稳定。文中提出使用Residual Scaling的方法解决该问题,即在每一个residual block中,最后一个卷积层后加一层constant scaling layer,乘以一个常数(文中使用的时0.1)
文中提出的多尺度模型如下,预处理模块是两层的residual block,作用是reduce不同尺度的输入中的variance。主干部分是相同的,使用相同的参数。网络的最后是scale-specific的上采样模块,平行的分布,处理多尺度的重建工作。该多尺度模型的参数量相比单独处理的模型参数总和要小很多。
文章在DIV2K, Set5, Set10, B100, Urban100数据集上进行了实验。使用的是L1loss。通常L2loss可以使PSNR表现更好,但作者发现L1loss可以提供更好的收敛性。相比SRCNN,EDSR差不多能提升1个点的表现,在Set5甚至差不多能有2个点。相比SRResNet差不多可以提升约0.5个点。
Abstract
Recent research on super-resolution has progressed with the development of deep convolutional neural networks (DCNN). In particular, residual learning techniques exhibit improved performance. In this paper, we develop an enhanced deep super-resolution network (EDSR) with performance exceeding those of current state-of-the-art SR methods. The signifificant performance improvement of our model
is due to optimization by removing unnecessary modules in conventional residual networks. The performance is further improved by expanding the model size while we stabilize the training procedure. We also propose a new multi-scale deep super-resolution system (MDSR) and training method,
which can reconstruct high-resolution images of different upscaling factors in a single model.
这里主要讲了三点。 1、作者移除了残差网络中不必要的模块来优化网络 2、作者通过扩大模型大小来进一步提高模型效果 3、作者提出了一种多尺度的深度超分系统,以及训练方法——之前的训练方法都是不同的模型训练不同的超分尺度。
1.Introduction
图像超分辨率问题,尤其是单图超分辨率(SISR),近十年来越来越多的研究关注它。SISR旨在从一张低分辨率图像重建一个高分辨率图像
。一般的,
和原始高分辨率图像
之间的关系可能因情况而变。很多研究假设
是
的一个bicubic下采样版本,但是其他的退化因素如模糊、过滤或噪声,也被认为是部分应用。
近年来,深度神经网络[11, 12, 14]在SR问题中在峰值信噪比PSNR方面展现了显著的提升效果。但是,这样的网络结构在结构优化方面有局限性。首先,神经网络模型的重构性能对微小的结构改变很敏感(这是之前常用的模型存在的问题,至于为啥会这样还没搞明白)。而且,相同的模型用不同的初始化和训练技巧得到不同级别的性能。所以,在训练神经网络时需要仔细设计模型结构和复杂的优化方法。
第二,大多数存在的SR算法将不同尺度因子的SR看作是独立问题,不考虑和利用SR中不同尺度之间的乘法关系。这样,那些算法需要特定尺度的网络,需要单独训练来处理各种尺度。特殊的,VDSR[11]可以在单一的网络中一起处理几个尺度的SR。用多个尺度训练VDSR模型大幅度提升了性能,优于特定尺度训练,说明在不同尺度模型之间存在冗余。尽管如此,VDSR类型结构需要双三次插值图像作为输入,这导致大的计算时间的内存,相比较那些有特定尺度上采样方法的结构[5, 22, 14]。
SRResNet[14]成功解决了这些时间和内存问题且有好的效果,它时简单应用了来自He等人的ResNet结构,没有很多修改。但是,原始ResNet被提出来是为了解决更高level的计算机视觉问题,如图像分类和识别的。因此,直接将ResNet结构用到low-level视觉问题如SR可能是没有达到最优的。
(可能是因为ResNet用了之后,可以让神经网络变得更深,就可以解决更高level的问题?)
为了解决这些问题,基于SRResNet结构,我们首先通过分析和移除不必要的模块来简化网络结构。当模型是复杂的时,训练网络就变得不简单。我们实验显示修改结构获得更好的结果。
第二,我们调研了从其他尺度训练的模型转移信息的模型训练方法。为了在训练过程中利用独立尺度信息,我们从预训练的低尺度模型来训练高尺度模型(作者的解决方法)。进一步,我们提出一个新的多尺度结构,在不同尺度之间共享大部分参数。提出的多尺度模型比多个但尺度模型用的参数少很多,但表现出相当的性能。
我么在标准数据集和一个新提出来的DIV2K数据集上评估我们的模型。在所有的数据集上,提出的单一和多尺度SR网络在PSNR和SSIM方面都优于目前最好的算法。我们的方法在the NTIRE 2017 Super-Resolution Challenge中排第一和第二。
2.Related Works
为了解决SR问题,早期的方法是利用基于采样理论的插值技术[1,15,34]。但是,这些方法在预测细节真实的纹理时都存在局限性。之间的研究[25,23]采用自然图像统计方法来重构更好的HR图像。
进一步的工作旨在学习和
图像对之间的映射函数。这些学习方法依赖从邻近嵌套[3, 2, 7, 21]到稀疏编码[31, 32, 27, 33]技术。Yang等人介绍了另外一种方法,聚类空间块学习相应的函数。一些方法利用了图像自相似性来避免外部数据库[8, 6, 29],通过patches的集合转换来增加有限的内部词典的大小[10]。
(之前的方法很多都是用传统的方法来学习的,直到SRCNN开始用深度学习来做超分)
最近,深度神经网络的强大能力使得SR有了很大的提升。自从Dong等人[4,5]首次提出基于深度学习的SR方法后,研究了针对SR的各种CNN结构。Kim等人[11,12]首次引入了残差网络来训练更深(残差的作用就是让网络更深)的网络结构,并获得了出众的效果。特别的,他们说明了在SR网络中skip-connection和recursive convolution减缓了携带等价信息的负担。类似于[20],Mao等人用编解码网络和对称skip connection来处理通用图像恢复问题。在[16]中,他们讨论了那些内嵌skip connection提供了更快更好的收敛。
在很多基于深度学习的SR算法中,输入图像是在送到网络之前通过bicubic插值法进行上采样的[4, 11, 12]。不用插值图像作为输入,在网络的最后训练上采样模块在[5, 22, 14]中显示也可能的。通过这样做,在不损失模型能力的同时可以减少很多计算量。因为特征的大小减小了。但是,那一类方法有一个缺点:它们不能在单一的框架下处理多尺度问题像在VDSR[11]中。在本文工作中,我们解决了多尺度和计算效率的困难。我们不仅研究了各个尺度学习的特征之间的内部关系,还提出了一种新的多尺度模型,对各种尺度都可以有效的重构HR图像。而且,我们提出一种合适的训练方法,对单一-或多尺度模型用多个尺度。
几项研究已经关注loss函数来训练更好的网络模型。均值平方误差(MSE)或L2 loss对于一般的图像恢复是广泛使用的loss函数,对于那些问题也是主要的性能测试指标。但是,Zhao等人[35]公布了用L2 loss训练和其他loss函数相比,在PSNR和SSIM方面不能保证很好的性能。在他们的实验中,用L1训练的网络比用L2训练的网络获得更好的效果。
3.Proposed Methods
在本小节,我们描述了提出的模型结构。我们首先分析了最近公布的SR网络,提出了一个有更简单结构的残差网路结构的增强版本。我们证明了我们的网络优于原始网络,同时提高了计算效率。在下边的各部分中,我们提出了一个单一尺度的结构(EDSR),它可以处理特定尺度的 SR和在单一模型中重构HR图像的多个尺度的多尺度结构(MDSR)。
3.1 Residual blocks
Recently, residual networks [11, 9, 14] exhibit excellent performance in computer vision problems from the lowlevel to high-level tasks. Although Ledig et al. [14] successfully applied the ResNet architecture to the super-resolution problem with SRResNet(那我不应该先阅读Ledig发的论文吗?), we further improve the performance by employing better ResNet structure.
在图2中,我们对比了原始ResNet、SRResNet和我们提出的网络的组成块。我们从我们的网络中删除BN层,如Nah等人[19]在他们的图像去模糊工作中提出的。因为BN层归一化了特征,他们通过归一化特征消除了网络的灵活范围,移除它们更好。我们实验证明了这个简单的修改大幅提升了性能,如小节4所描述。
(这里需要去了解一下Batch Normalization)
此外,GPU内存使用也得到了有效地减少,因为BN层消耗与前边卷积层相同的内存。和SRResNet相比,我们没有BN层的基线模型在训练过程中节省了大约内存使用的40%。因此,我们可以构建一个更大的模型,可以比受计算资源限制的传统ResNet结构有更好的性能。
3.2 Single-Scale model
增强网络模型的效果最简单的方式就是增加参数量。在传统神经网络中,模型性能可以通过堆叠更多层或增加滤波器个数来增强。普通CNN结构,深度(层数)B和宽度(特征通道数)F大致参数O(BF²)占用内存是O(BF)。因此,当考虑有限的计算资源时,增加F代替B会最大化模型的容纳量。
(模型的参数量和内存还不太理解是什么意思,为什么参数量是BF^2)
但是,我们发现特征maps的数量增长到一定级别时,可能会使训练过程在数值上不稳定。类似的现象在Szegedy等人[24]中也报告过。我们通过用因子0.1的残差收缩[24]来解决这个问题。(residual scaling是说明原理还不太理解)在每个residual block,在最后的卷积层后边放置固定尺度层。当用大量滤波器时,这些模块使得训练过程更稳定。在测试阶段,为了计算效率这个层可以集成到前边的卷积层中。
我们用我们提出的残差块构建了我们的基线(单一尺度)的模型,如图2。这个结构和SRResNet[14]类似,但是我们的模型在残差块外没有ReLUctant激活层。另外,我们的基线模型没有residual scaling层,因为我们对每个卷积层仅仅用64个特征map。在我们最后的单一尺度的模型(EDSR)中,我们用一个尺度因子0.1扩展了B=32、F=256的基线模型。这个模型结构如图3所示。
当用上采样因子x3和x4训练我们的模型时,我们用预训练的x2的网络来初始化模型参数。预训练策略加速训练,提高最后的效果,如图4所示。对于上采样x4,如果我们用预训练尺度x2的模型(蓝线),训练比开始随机初始化的(绿线)收敛快。
3.3 Multi-scale model
从图4观察所得,我们的结论是,多尺度的SR是互相关联的任务。我们进一步通过构建一个多尺度结构来探索这个想法,如VDSR中做的那样,利用了内部尺度相关性的优势。我们设计了我们的基线(多尺度)模型,有B=16的残差块的单一主干网络,所以在不同尺度之间共享大部分参数,如图5所示。
在我们的多尺度结构中,我们介绍了特定尺度的处理模块来处理多尺度SR。首先,在网络开头放一个预处理模块来减少不同尺度的输入图像的变化。每个预处理模块包括2个核为5*5大小的残差块。通过对预处理模块使用咯咯哒的核,我们可以保持特定尺度部分较浅,同时在网络的前边阶段覆盖更大的感受野。在多尺度模型的最后,特定尺度上采样模块核处理多尺度重构并行放置。上采样模块的结构和在前边部分描述的那些单尺度模型类似。
我们构建了B=80,F=64的多尺度模型(MDSR)。我们单尺度基线模型对于3个不同的尺度,每个大约有1.5M参数,共4.5M,我们的多尺度模型仅仅有3.2million参数。不过,多尺度模型表现出和单尺度模型相当的性能。而且,多尺度模型在深度方面是可扩展的。尽管我们最后的MDSR比基线多尺度模型有大约5倍多的深度,但仅仅多哦了2.5倍的参数,因为残差块比单尺度部分更轻量级。注意到MDSR也显示了和特定尺度的EDSRs相当的性能。我们提出的模型的详细效果对比如表2和3所示。