目录
一、介绍
作者提出的模型主要是提高了图像超分辨的效果,并赢得了NTIRE2017超分辨率重建挑战赛。
做出的修改主要是在ResNet上。
作者移除了残差结构中一些不必要的模块如BN层,结果证明这样确实有效果。
另外,作者还提出了一种多尺度模型,不同的尺度下有绝大部分参数都是共享的。
这样的模型在处理每一个单尺度超分辨下都能有很好的效果。
二、与SRResnNet相比
EDSR最有意义的模型性能提升是去除掉了SRResNet的批量标准化(batch normalization, BN)层。
由于批量标准化层对特征进行了规范化,因此通过规范化特征可以摆脱网络的范围可变性,最好将其删除,从而可以扩大模型的尺寸来提升结果质量。
此外,由于BN层消耗的内存量与前面的卷积层相同,因此去掉BN层后,EDSR的GPU内存使用量也会减少。
与SRResNet相比,由于BN层的计算量和一个卷积层几乎持平,baseline模型没有批量标准化层,在训练期间可节省大约40%的内存使用量。 因此,可以在有限的计算资源下构建一个比传统ResNet结构具有更好性能的更大模型。
EDSR与原始ResNet和SRResnet的对比图
三、BN层的意义
BN介绍
Batch Norm可谓深度学习中非常重要的技术,不仅可以使训练更深的网络变容易,加速收敛,还有一定正则化的效果,可以防止模型过拟合。在很多基于CNN的分类任务中,被大量使用。
但在图像超分辨率和图像生成方面,BatchNorm的表现并不是很好。当这些任务中,网络加入了BatchNorm层,反而使得训练速度缓慢且不稳定,甚至最后结果发散。
超分中BN层不好的原因
以图像超分辨率来说,网络输出的图像在色彩、对比度、亮度上要求和输入一致,改变的仅仅是分辨率和一些细节。
而Batch Norm,对图像来说类似于一种对比度的拉伸,任何图像经过Batch Norm后,其色彩的分布都会被归一化。
也就是说,它破坏了图像原本的对比度信息,所以Batch Norm的加入反而影响了网络输出的质量。
ResNet可以用BN,但也仅仅是在残差块当中使用。
还是回到SRResNet,上图的(b)就是一个用于图像超分辨率的残差网络。
SRResNet使用BN层的原因
ResNet中引入了一种叫残差网络结构,其和普通的CNN的区别在于从输入源直接向输出源多连接了一条传递线来恒等映射,用来进行残差计算。
可以把这种连接方式叫做identity shortcut connection,或者我们也可以称其为skip connection。
其效果是为了防止网络层数增加而导致的梯度弥散问题与退化问题。
而在SR任务中,图像的对比度信息可以通过skip connection直接传递,所以也就不必担心BN层的破坏。
分类问题的BN的好处
图像分类不需要保留图像的对比度信息,利用图像的结构信息就可以完成分类。
所以,将图像信息都通过BatchNorm进行归一化,反而降低训练难度。
甚至,一些不明显的结构,在BatchNorm后也会被凸显出来(对比度被拉开)。
风格迁移的BN的好处
风格化后的图像,其色彩、对比度、亮度均和原图像无关,而只与风格图像有关。
原图像只有结构信息被表现到了最后生成的图像中。
简而言之
BN会是网络训练时使数据包含忽略图像像素(或者特征)之间的绝对差异(因为均值归零,方差归一),而只存在相对差异。
所以在不需要绝对差异的任务中(比如分类),BN提升效果。
而对于图像超分辨率这种需要利用绝对差异的任务,BN会适得其反。
EDSR架构图
在最终单尺度模型EDSR中,通过设置B=32个残差块,F=256个通道,并且在训练x3,x4模型时,采用x2的预训练参数。
四、残差缩放(residual scaling)的意义
EDSR的作者认为提高网络模型性能的最简单方法是增加参数数量,堆叠的方式是在卷积神经网络中,堆叠多个层或通过增加滤波器的数量。
当考虑有限的复合资源时,增加宽度(特征Channels的数量)F而不是深度(层数)B来最大化模型容量。
但是特征图的数量增加(太多的残差块)到一定水平以上会使训练过程在数值上不稳定。
残差缩放(residual scaling)即残差块在相加前,经过卷积处理的一路乘以一个小数(作者用了0.1)。
在每个残差块中,在最后的卷积层之后放置恒定的缩放层。
当使用大量滤波器时,这些模块极大地稳定了训练过程。
在测试阶段,该层可以集成到之前的卷积层中,以提高计算效率。
使用上面三种网络对比图中提出的残差块(即结构类似于SRResNet,但模型在残差块之外没有ReLU激活层)构建单尺度模型EDSR。
此外,因为每个卷积层仅使用64个特征图,所以单尺度模型没有残差缩放层。
五、用预训练的×2网络初始化模型参数的意义
实验得出,在训练上采样因子×3和×4的模型时,用预训练的×2网络初始化模型参数,这种预训练策略加速了训练并提高了最终性能,如下图所示。
红线表示绿线的最佳性能。
对于向上升尺度×4,如果使用预先训练的尺度×2模型(蓝线),则训练收敛速度远远快于从随机初始化(绿线)开始的训练。
因此得到的启发是可先用低放大倍数来做预训练,最终再采用高放大倍数来做最终训练。
从上图中的观察,作者得出结论,多尺度的超分辨率是相互关联的任务。
于是通过构建一个多尺度架构来进一步探索这个想法,该架构利用了VDSR的尺度间相关性,也就是接下的MDSR的提出。
六、MDSR
首先,预处理模块位于网络的前面,以减少不同尺度的输入图像的差异。
每个预处理模块由2个具有5×5内核的残差块组成。
在多尺度基线模型的最后,进行特定尺度的上采样模块并行定位,以处理多尺度重建。
其中B=80和F=64。
多尺度baseline模型可以表现出与单尺度baseline模型相当的性能。
MDSR结构图
多尺度模型很简单,一开始每个尺度都有2个独自的残差块,之后经过若干个残差块,最后再用独自的升采样模块来提高分辨率。此模型称之为MDSR。
七、损失函数使用L1而不是L2的原因
训练时,损失函数用L1而不是L2,即根据LapSRN的思想采用了L1范数来计算对应的误差,L2损失会导致模糊的预测。
BN有一定的正则化效果,可以不去理会Dropout,L2正则项参数的选择。
除此之外,更深层的原因是是实际图像可能含有多种特征,对应有关的图像构成的真实分布。
图像特征分布有许多个峰值,比如特征1是一个峰,特征2是一个峰...
对于这种图像分布,我们称之为:多模态(Multimodal)。
假如用MSE(或者L2)作为损失函数,其潜在的假设是我们采集到的样本是都来在同一个高斯分布。
但是生活中的实际图像具有多种特征,而且大部分图像分布都不只有一个峰。
如果强行用一个单峰的高斯分布,去拟合一个多模态的数据分布,例如两个峰值。
因为损失函数需要减小生成分布和数据集经验分布(双峰分布)直接的差距,而生成分布具有两种类型,模型会尽力去“满足”这两个子分布,最后得到的优化结果。
使用高斯分布拟合一个双峰分布
简而言之,当我们在使用L2损失训练出来的分布中采样时,虽然采集到的样本属于数据集真实分布的几率很低,但是由于处于中间位置,会被大量采集出来。
故我们最终得到的生成样本实质上是多种特征的数据样本特征信息的平均效果,故产生模糊图像。
也就是生成的图像中的某些信息很可能不属于特征所要表现的任何一个
八、实验结果
实验数据用的是比赛提供的DIV2K,它有800张训练图像,100张验证图像,100张测试图像。每张都是2k分辨率。