VDSR-Accurate Image Super-Resolution Using Very Deep Convolutional Networks阅读笔记

发布时间 2023-09-13 15:52:22作者: 键盘侠牧师

Accurate Image Super-Resolution Using Very Deep Convolutional Networks(VDSR)阅读笔记(22.10.07)使用深度卷积网络的精确图像超分辨率

摘要:使用一个非常深的卷积神经网络,灵感来源于VGG-Net。本文发现,网络深度增加可以显著提高准确性。本文模型最终使用了20个权重层。通过在深度网络结构中多次级联小滤波器,可以有效利用大图像区域上的上下文信息。然而,在非常深的网络中,收敛速度在训练中成为一个关键问题。本文提出一个简单且有效的训练程序,只学习残差并使用极高的学习率(SRCNN的10**4倍)通过可调节的梯度裁剪实现。

  1. 介绍

利用分布在非常大的图像区域的上下文信息。对于大尺度因子,通常情况下,小补丁中包含的信息不足以进行细节恢复(不适定)。使用大接受域的深度网络考虑了大的图像背景。

提出了一种加速训练的方法:残余学习CNN(并且只有一个残差网络单元)和极高的学习率(这一块的复现比较难)。

发现一个卷积网络足以满足多尺度因子的超分辨。

总之,在这项工作中,本文提出了一种基于深度卷积网络的高精度SR方法。如果使用很小的学习率,非常深的网络收敛得太慢。用高学习率来提高收敛速度会导致梯度爆炸,本文用残差学习和梯度裁剪来解决这个问题。此外,本文扩展了我们的工作,以处理单一网络中的多尺度SR问题。

  1. 相关工作

2.1SR的卷积网络

模型:本文网络有20个权重层,非常深,用于重建(接受野)的信息要大得多(41*41比SRCNN的13*13)

训练:高分辨率图像可以分解为低频信息(对应低分辨率图像)和高频信息(残差图像或图像细节)。SRCNN直接对高分辨图像建模。这表明SRCNN有两个目的:将输入传输到端层和重构残差。将训练时间花在学习这个将输入传送到最后的类似自动编码器,学习图像细节的收敛速度就明显降低。相比之下,本文网络直接对残差图像建模,可以有更快的收敛速度和更高的精度。

尺度:本文设计和训练一个单一的网络,以有效的处理多尺度的SR问题。对于三个比例因子我们可以将参数的数量减少3倍。

通过在训练过程中每层填充零,本文的输出图像与输入图像具有相同的大小,而SRCNN的输出图像比输入图像小。

最后,VDSR简单地对所有层使用相同的学习率,而SRCNN对不同层使用不同的学习率,以实现稳定的收敛。

  1. 提出的方法

3.1提出的网络

网络结构:重复级联卷积层和非线性激活层。ILR(一个插值低分辨率),网络预测残差图像和插值低分辨率(ILR)和残差相加得到的期望输出。每个卷积层使用64个卷积核。应用ReLU激活的大部分特征为0。

网络使用d层,除了第一层和最后一层其他层都是用64个3*3*64的卷积核,一个过滤器是64通道的3*3空间域。第一层输入图像。最后一层用于图像重建,由一个尺寸为3*3*64的单一滤波器组成。

网络使用插值低分辨率图像(到所需的大小)作为输入,并预测图像细节。本文证明显性建模图像细节(残差)有一些优势。在4.2进一步讨论。

使用很深的网络来预测密集输出的一个问题是每次应用卷积特征映射的大小都会减小。例如,当将大小为(n+1)×(n+1)的输入应用到接收场大小为n × n的网络时,输出图像为1 × 1。

许多方法都需要周围像素才能正确的推断中心像素。使用零填充。一旦预测了图像细节,它们就被添加回输入ILR图像,以给出最终的图像(HR)。本文在所有的实验中都使用这种结构。

3.2训练

本文描述的目标是最小化,来找到本文模型的最优参数。X表示插值低分辨率图像,y表示HR图像。给定N个成对的<x,y>做训练集,目标是学习一个模型f,使得f(x)作为目标HR图像的估计。最小化方案是平方误差:1/2||y − f(x)||^2在整个训练集上的平均。

残差学习:由于SRCNN中所有副本必须经过所有层,有了许多权值层,梯度爆炸问题非常关键,本文用简单的残差学习来解决这一问题。

因为输入图像和输出图像非常相似,本文定义残差图像r = y -x,r中大部分都是0或接近0的值。本文预测残差图像。损失函数变成1/2||r-f(x)||^2,其中f(x)是网络的预测值。

损失层有三个输入:残差估计、网络输入和真实HR图像。损失计算为重建图像(网络输入和输出之和)与真实HR图像的欧氏距离。训练通过使用基于反向传播的小批梯度下降优化回归目标来进行。将动量参数设置为0.9。训练通过权值衰减(L2惩罚乘以0.0001)进行正则化。

非常深度网络的高学习率:简单设置较高的学习率会导致梯度爆炸,建议一个可调节的梯度剪辑,以最大的提高速度,同时抑制爆炸的梯度。

调整梯度裁剪:梯度裁剪是循环神经网络中的一种常用技术。就本文所知,梯度裁剪仅限于使用于训练CNN。常见的限制梯度的策略是将各个梯度裁剪到预定义的范围(-θ,θ)。

通过学习率调整步长,如果使用高学习率,则为了避免在高学习率的情况下的爆炸梯度,θ很可能要调小。

为了获得最大的收敛速度,将梯度剪辑到[-θ/γ, θ/γ]其中γ表示当前学习率。本文发现可调节的梯度裁剪使得训练收敛的非常快。

多尺度:深网络提高性能,但需要更多参数定义网络。一般一个比例因子创建一个网络。

考虑到部分尺度因子经常使用,本文提出一种经济的方式存储和检索网络。本文训练了一个多尺度模型。参数在所有预定的比例因子之间共享。针对多个尺度的训练数据集组成一个大的数据集。来自不同尺度的子图可以在同一个batch中。

残差网络和残差网络的性能表(PSNR)(set5数据集,尺度x2)。残差网络在10个周期内迅速接近收敛。

  1. 理解属性

深网络利用更多的上下文信息并建模具有许多非线性层的复杂函数。

本文的残差网络比标准的CNN收敛的更快,并且本文网路大大提高了性能。

本文方法的单一网络和针对每个尺度的多重网络性能一样好,可以有效减少模型的参数数量。

4.1深度的好处:

卷积是利用空间局部相关性,m层取m-1层单元的子集作为输入,形成空间上的感受野。每个隐藏单元对于接受野外的输入变化无反应,确保学到的过滤器对空间局部输入模式产生最强的响应。

大的过滤器可以分解成一系列小的滤波器。

比例因子为2的set5数据集下的测试了两个网络。

残差网络可以在几次迭代后就迅速达到最大性能。非残差需要很多的迭代才能收敛达到最大性能。

残差网络的最终精度更高。

本文对所有网络都是用3*3的卷积,第一层的感受野,每增加一层感受野的高宽增加2,因此对深度D网络的感受野大小是(2*D+1)*(2*D+1),大小和深度成正比。对于SR任务,感受野的大小对应于推断HR图像信息的上下文信息的数量。因为SR是一个病态问题,因此使用更多的上下文信息可以得到更多的线索(约束)。非常深网络可以利用高度非线性。本文使用19个ReLU(线性修正单元),网络可以模拟非常复杂的函数。薄的深网络的优点:(K. Simonyan and A. Zisserman. V ery deep convolutional networks for large-scale image recognition. In ICLR, 2015.1, 2, 5)。

本文训练和测试深度(5-20)表明深度网络显著提高SR性能。如图三分析:

4.2残差学习:

已经有了低分辨率图像输入信息,预测高频成分对于SR就足够了。

残差收敛非常快。收敛时,残差网络表现出优越的性能。

简而言之,这种对标准非残差网络结构的简单修改是非常强大的,人们可以在其他输入和输出图像高度相关的图像恢复问题中探索这种思想的有效性。

4.3多尺度单一模型:

训练中的尺度增强是实现多尺度超分辨机器网络的关键技术。本文多规模机器可执行不同规模的SR过程,其容量远远小于单规模的组合。用单个因子训练然后用另一个尺度进行测试。

红色表示训练的因子包含了测试因子。

使用多因子训练的模型在训练的因子上表现良好。

单一尺度数据训练的网络无法处理其他的尺度的数据。在许多的测试中,他甚至比用双三插值的方法更糟糕。经过尺度增强训练的模型能够应对训练中使用的任何尺度。训练多尺度可以提高大尺度的表现。

  1. 实验

5.1数据集

数据扩充(旋转和翻转)训练集:291图,测试集:set5,set14,urban100,b100

5.2训练参数:深度20,batch-szie:64,动量:0.9,权重衰减:0.0001.

权重初始化采用何凯明15年提出的初始化方法。 深度的CNN大多使用高斯分布中提取随机权值进行初始化,固定的标准差,非常深(卷积层>8)很难收敛。因此何凯明提出一种鲁棒初始化方法,消除了训练极深流网络的障碍。

输入和输出的图像大小相同。

迭代80周期,学习率初始0.1,每20epochs学习率下降10倍。总的来说学习率下降3次。

红色表示性能最佳,蓝色次之。

只有VDSR重构出来了中间的线

轮廓只有VDSR是干净生动的,其他方法都是严重模糊或扭曲的。

  1. 结论

在这项工作中,本文提出了一种使用非常深的网络的超分辨率方法。训练一个非常深的网络是困难的,因为收敛速度慢。使用残差学习和极高的学习率来快速优化非常深入的网络。在保证收敛速度的同时,采用梯度裁剪的方法保证训练的稳定性。本文已经证明,本文的方法比现有的方法在基准图像上有很大的优势。本文作者相信本文的方法很容易适用于其他图像恢复问题,如去噪和压缩伪影去除。

复现:在我自己去跑的时候,学习率为0.1时,模型得到的结果是非常大的数(应该是出现了梯度爆炸),当梯度为0.01时部分数据出现异常(即梯度爆炸),当学习率是0.001时平方误差损失趋于正常化,PSNR能够达到31.76左右(该模型首次引入残差学习),论文使用带动量的SGD来正则化。

梯度爆炸产生的原因:训练中常用的随机梯度下降通过乘以学习率来调整步长,而当学习率较大时?学习率大只能说明每次的梯度改变幅度较大,为什么就得到导致梯度爆炸呢。

出现梯度爆炸的原因:与梯度消失的原因一样,求出损耗函数参数的偏导数,梯度连续乘法总是遇到较大的绝对值,一些参数的梯度因乘以许多较大的数而变得非常大,模型无法收敛。

加入残差和为加chancha3可以做一个对比试验;学习率为0.1时可以快速收敛;