SRResNet与EDSR

放肆的年华 提交于 2020-01-10 01:03:54

SRResNet

 SRResNet 网络来源于SRGAN,原论文(https://arxiv.org/abs/1609.04802)提到一种扩展方式,允许修复更高频的细节。

SRResNet 的残差块架构基于这篇文章(http://torch.ch/blog/2016/02/04/resnets.html)。存在两个小的更改:一个是 SRResNet 使用 Parametric ReLU 而不是 ReLU,ReLU 引入一个可学习参数帮助它适应性地学习部分负系数;另一个区别是 SRResNet 使用了图像上采样方法,SRResNet 使用了子像素卷积层。详见:https://arxiv.org/abs/1609.07009

SRGAN网络结构如图1所示。

图1

在生成网络部分(SRResNet)部分包含多个残差块,每个残差块中包含两个3×3的卷积层,卷积层后接批规范化层(batch normalization, BN)和PReLU作为激活函数,两个2×亚像素卷积层(sub-pixel convolution layers)被用来增大特征尺寸。在判别网络部分包含8个卷积层,随着网络层数加深,特征个数不断增加,特征尺寸不断减小,选取激活函数为LeakyReLU,最终通过两个全连接层和最终的sigmoid激活函数得到预测为自然图像的概率。

这篇论文(https://arxiv.org/abs/1609.04802)使用 SRResNet 作为 SRGAN 架构的一部分,从而扩展了 SRResNet。该网络生成的图像包含高频细节,比如动物的皮毛。尽管这些图像看起来更加逼真,但是 PSNR 的评估数据并不是很好。


BN

Batch Norm可谓深度学习中非常重要的技术,不仅可以使训练更深的网络变容易,加速收敛,还有一定正则化的效果,可以防止模型过拟合。在很多基于CNN的分类任务中,被大量使用。 
但在图像超分辨率和图像生成方面,Batch Norm的表现并不好,加入了Batch Norm,反而使得训练速度缓慢,不稳定,甚至最后发散。 

以图像超分辨率来说,网络输出的图像在色彩、对比度、亮度上要求和输入一致,改变的仅仅是分辨率和一些细节,而Batch Norm,对图像来说类似于一种对比度的拉伸,任何图像经过Batch Norm后,其色彩的分布都会被归一化,也就是说,它破坏了图像原本的对比度信息,所以Batch Norm的加入反而影响了网络输出的质量。虽然Batch Norm中的scale和shift参数可以抵消归一化的效果,但这样就增加了训练的难度和时间,还不如直接不用。不过有一类网络结构可以用,那就是残差网络(Residual Net),但也仅仅是在residual block当中使用,比如SRResNet,就是一个用于图像超分辨率的残差网络。为什么这类网络可以使用Batch Norm呢?有人认为是因为图像的对比度信息可以通过skip connection直接传递,所以也就不必担心Batch Norm的破坏了。 

基于这种想法,也可以从另外一种角度解释Batch Norm为何在图像分类任务上如此有效。图像分类不需要保留图像的对比度信息,利用图像的结构信息就可以完成分类,所以,将图像都通过Batch Norm进行归一化,反而降低了训练难度,甚至一些不明显的结构,在Batch Norm后也会被凸显出来(对比度被拉开了)。

而对于照片风格转移,为何可以用Batch Norm呢?原因在于,风格化后的图像,其色彩、对比度、亮度均和原图像无关,而只与风格图像有关,原图像只有结构信息被表现到了最后生成的图像中。因此,在照片风格转移的网络中使用Batch Norm或者Instance Norm也就不奇怪了,而且,Instance Norm是比Batch Norm更直接的对单幅图像进行的归一化操作,连scale和shift都没有。

说得更广泛一些,Batch Norm会忽略图像像素(或者特征)之间的绝对差异(因为均值归零,方差归一),而只考虑相对差异,所以在不需要绝对差异的任务中(比如分类),有锦上添花的效果。而对于图像超分辨率这种需要利用绝对差异的任务,Batch Norm只会添乱。


EDSR

论文(https://arxiv.org/abs/1707.02921)提到使用修改后的 SRResNet 架构获得了非常好的 PSNR 结果。作者移除残差网络中的批归一化,把残差层的数量从 16 增加到 32。然后把网络在 NVIDIA Titan Xs 上训练七天。EDSR最有意义的模型性能提升是去除掉了SRResNet多余的模块,从而可以扩大模型的尺寸来提升结果质量。




图 2 :原始 ResNet、SRResNet、和我们的残差模块的对比。


原文对比了每个网络模型(原始 ResNet、SRResNet、和原文提出的网络)的基础模块。在EDSR网络中去除了批归一化(batch normalization)层 (Nah et al. 在他们的图像去模糊相关工作中提出的方法)。由于批归一化层使特征标准化,同时它们也去除了网络中的范围柔性(range flexibility),所以最好去除这些批归一化层。这一简单的修改可以大幅增加性能表现。

原文用图 2 (c)中的残差模块构造了基准(单尺度 —— single-scale)模型。其结构类似于 SRResNet ,但是该模型在残差模块之外并没有设置 ReLU 激活层。而且,该基准模型也没有残差缩放层(residual scaling layers),因为其仅仅为每一个卷积层使用了64维的特征映射。在最终的单尺度模型(single-scale model —— EDSR)中,通过设置 B = 32 ,F= 256,比例因数(scaling factor )为 0.1 对基准模型进行了扩展。EDSR模型结构如图 3 所示。


图3 单尺度网络(single-scale SR network —— EDSR)结构

可以看到,EDSR在结构上与SRResNet相比,就是把批规范化处理(batch normalization, BN)操作给去掉了。文章中说,原始的ResNet最一开始是被提出来解决高层的计算机视觉问题,比如分类和检测,直接把ResNet的结构应用到像超分辨率这样的低层计算机视觉问题,显然不是最优的。由于批规范化层消耗了与它前面的卷积层相同大小的内存,在去掉这一步操作后,相同的计算资源下,EDSR就可以堆叠更多的网络层或者使每层提取更多的特征,从而得到更好的性能表现。EDSR用L1范数样式的损失函数来优化网络模型。在训练时先训练低倍数的上采样模型,接着用训练低倍数上采样模型得到的参数来初始化高倍数的上采样模型,这样能减少高倍数上采样模型的训练时间,同时训练结果也更好。

此外,设计了带有一个单一主分支的基准(多尺度 —— multi-scale)模块 ,含有 B = 16 的残差模块,所以大部分参数都可以在不同尺度间进行共享,如图 4 所示。

在多尺度结构中,引入了尺度特定(scale-specific)的处理模块,以在多尺度下控制超分辨率。首先,预处理模块被置于网络的前端,以减少不同尺度的输入图像的变化幅度,每一个预处理模块包括两个 5×5 内核(kernels)的残值区块(residual blocks )。通过在预处理模块中采用较大的内核,我们可以使尺度特定的部分保持浅层(shallow)状态,在网络的早期阶段可以覆盖较大的接受域(receptive field)。

在模型的末端,尺度特定的升采样模块被并行放置,以进行多尺度重构。其升采样(upsampling)模块与单尺度模型中的情况相类似。

图 4:多尺度 SR 网络(multi-scale SR network —— MDSR)结构


通过在传统 ResNet 结构中去除不必要模块,在保持模型紧凑的情况下提升了性能表现。通过采用残差缩放(residual scaling )方法来对大型模型进行稳定的训练。


参考资料:

1.https://blog.csdn.net/Uwr44UOuQcNsUQb60zk2/article/details/78474303

2.https://blog.csdn.net/abluemouse/article/details/78710553

3.https://blog.csdn.net/abluemouse/article/details/78710553

4.https://mp.weixin.qq.com/s/xpvGz1HVo9eLNDMv9v7vqg

SRResNet

 SRResNet 网络来源于SRGAN,原论文(https://arxiv.org/abs/1609.04802)提到一种扩展方式,允许修复更高频的细节。

SRResNet 的残差块架构基于这篇文章(http://torch.ch/blog/2016/02/04/resnets.html)。存在两个小的更改:一个是 SRResNet 使用 Parametric ReLU 而不是 ReLU,ReLU 引入一个可学习参数帮助它适应性地学习部分负系数;另一个区别是 SRResNet 使用了图像上采样方法,SRResNet 使用了子像素卷积层。详见:https://arxiv.org/abs/1609.07009

SRGAN网络结构如图1所示。

图1

在生成网络部分(SRResNet)部分包含多个残差块,每个残差块中包含两个3×3的卷积层,卷积层后接批规范化层(batch normalization, BN)和PReLU作为激活函数,两个2×亚像素卷积层(sub-pixel convolution layers)被用来增大特征尺寸。在判别网络部分包含8个卷积层,随着网络层数加深,特征个数不断增加,特征尺寸不断减小,选取激活函数为LeakyReLU,最终通过两个全连接层和最终的sigmoid激活函数得到预测为自然图像的概率。

这篇论文(https://arxiv.org/abs/1609.04802)使用 SRResNet 作为 SRGAN 架构的一部分,从而扩展了 SRResNet。该网络生成的图像包含高频细节,比如动物的皮毛。尽管这些图像看起来更加逼真,但是 PSNR 的评估数据并不是很好。


BN

Batch Norm可谓深度学习中非常重要的技术,不仅可以使训练更深的网络变容易,加速收敛,还有一定正则化的效果,可以防止模型过拟合。在很多基于CNN的分类任务中,被大量使用。 
但在图像超分辨率和图像生成方面,Batch Norm的表现并不好,加入了Batch Norm,反而使得训练速度缓慢,不稳定,甚至最后发散。 

以图像超分辨率来说,网络输出的图像在色彩、对比度、亮度上要求和输入一致,改变的仅仅是分辨率和一些细节,而Batch Norm,对图像来说类似于一种对比度的拉伸,任何图像经过Batch Norm后,其色彩的分布都会被归一化,也就是说,它破坏了图像原本的对比度信息,所以Batch Norm的加入反而影响了网络输出的质量。虽然Batch Norm中的scale和shift参数可以抵消归一化的效果,但这样就增加了训练的难度和时间,还不如直接不用。不过有一类网络结构可以用,那就是残差网络(Residual Net),但也仅仅是在residual block当中使用,比如SRResNet,就是一个用于图像超分辨率的残差网络。为什么这类网络可以使用Batch Norm呢?有人认为是因为图像的对比度信息可以通过skip connection直接传递,所以也就不必担心Batch Norm的破坏了。 

基于这种想法,也可以从另外一种角度解释Batch Norm为何在图像分类任务上如此有效。图像分类不需要保留图像的对比度信息,利用图像的结构信息就可以完成分类,所以,将图像都通过Batch Norm进行归一化,反而降低了训练难度,甚至一些不明显的结构,在Batch Norm后也会被凸显出来(对比度被拉开了)。

而对于照片风格转移,为何可以用Batch Norm呢?原因在于,风格化后的图像,其色彩、对比度、亮度均和原图像无关,而只与风格图像有关,原图像只有结构信息被表现到了最后生成的图像中。因此,在照片风格转移的网络中使用Batch Norm或者Instance Norm也就不奇怪了,而且,Instance Norm是比Batch Norm更直接的对单幅图像进行的归一化操作,连scale和shift都没有。

说得更广泛一些,Batch Norm会忽略图像像素(或者特征)之间的绝对差异(因为均值归零,方差归一),而只考虑相对差异,所以在不需要绝对差异的任务中(比如分类),有锦上添花的效果。而对于图像超分辨率这种需要利用绝对差异的任务,Batch Norm只会添乱。


EDSR

论文(https://arxiv.org/abs/1707.02921)提到使用修改后的 SRResNet 架构获得了非常好的 PSNR 结果。作者移除残差网络中的批归一化,把残差层的数量从 16 增加到 32。然后把网络在 NVIDIA Titan Xs 上训练七天。EDSR最有意义的模型性能提升是去除掉了SRResNet多余的模块,从而可以扩大模型的尺寸来提升结果质量。




图 2 :原始 ResNet、SRResNet、和我们的残差模块的对比。


原文对比了每个网络模型(原始 ResNet、SRResNet、和原文提出的网络)的基础模块。在EDSR网络中去除了批归一化(batch normalization)层 (Nah et al. 在他们的图像去模糊相关工作中提出的方法)。由于批归一化层使特征标准化,同时它们也去除了网络中的范围柔性(range flexibility),所以最好去除这些批归一化层。这一简单的修改可以大幅增加性能表现。

原文用图 2 (c)中的残差模块构造了基准(单尺度 —— single-scale)模型。其结构类似于 SRResNet ,但是该模型在残差模块之外并没有设置 ReLU 激活层。而且,该基准模型也没有残差缩放层(residual scaling layers),因为其仅仅为每一个卷积层使用了64维的特征映射。在最终的单尺度模型(single-scale model —— EDSR)中,通过设置 B = 32 ,F= 256,比例因数(scaling factor )为 0.1 对基准模型进行了扩展。EDSR模型结构如图 3 所示。


图3 单尺度网络(single-scale SR network —— EDSR)结构

可以看到,EDSR在结构上与SRResNet相比,就是把批规范化处理(batch normalization, BN)操作给去掉了。文章中说,原始的ResNet最一开始是被提出来解决高层的计算机视觉问题,比如分类和检测,直接把ResNet的结构应用到像超分辨率这样的低层计算机视觉问题,显然不是最优的。由于批规范化层消耗了与它前面的卷积层相同大小的内存,在去掉这一步操作后,相同的计算资源下,EDSR就可以堆叠更多的网络层或者使每层提取更多的特征,从而得到更好的性能表现。EDSR用L1范数样式的损失函数来优化网络模型。在训练时先训练低倍数的上采样模型,接着用训练低倍数上采样模型得到的参数来初始化高倍数的上采样模型,这样能减少高倍数上采样模型的训练时间,同时训练结果也更好。

此外,设计了带有一个单一主分支的基准(多尺度 —— multi-scale)模块 ,含有 B = 16 的残差模块,所以大部分参数都可以在不同尺度间进行共享,如图 4 所示。

在多尺度结构中,引入了尺度特定(scale-specific)的处理模块,以在多尺度下控制超分辨率。首先,预处理模块被置于网络的前端,以减少不同尺度的输入图像的变化幅度,每一个预处理模块包括两个 5×5 内核(kernels)的残值区块(residual blocks )。通过在预处理模块中采用较大的内核,我们可以使尺度特定的部分保持浅层(shallow)状态,在网络的早期阶段可以覆盖较大的接受域(receptive field)。

在模型的末端,尺度特定的升采样模块被并行放置,以进行多尺度重构。其升采样(upsampling)模块与单尺度模型中的情况相类似。

图 4:多尺度 SR 网络(multi-scale SR network —— MDSR)结构


通过在传统 ResNet 结构中去除不必要模块,在保持模型紧凑的情况下提升了性能表现。通过采用残差缩放(residual scaling )方法来对大型模型进行稳定的训练。


参考资料:

1.https://blog.csdn.net/Uwr44UOuQcNsUQb60zk2/article/details/78474303

2.https://blog.csdn.net/abluemouse/article/details/78710553

3.https://blog.csdn.net/abluemouse/article/details/78710553

4.https://mp.weixin.qq.com/s/xpvGz1HVo9eLNDMv9v7vqg

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!