图像超分辨率重建 VDSR解析

Accurate Image Super-Resolution Using Very Deep Convolutional Networks

论文地址:https://arxiv.org/abs/1511.04587v1

代码:https://github.com/huangzehao/caffe-vdsr

           https://github.com/Jongchan/tensorflow-vdsr

 

 

        作者在该文章中提取了一个更加精确的网络。网络相比于之前的网络,要更加的深,有20层。通过在深度网络结构中多次层叠小型的过滤器,这样可以有效的利用大图像区域的上下文信息。但是随着深度的增加,收敛速度也会变慢。作者说提出了一种比较有效的训练方法。在作者的网络中,仅仅学习残差,并且使用可调整的梯度裁剪来实现很高的学习率。

 

        SRCNN表现了很不错的效果。但是作者发现其有三个缺陷:

  1. 图像的上下文信息太少了(也就是说感受野太小少了,因为只有3层网络分别是9X9,1X1,5X5,感受野是13*13)。
  2. 训练收敛太慢了,学习速率也比较慢。
  3. 该网络仅仅适用于单个比例/尺寸。

        于是,本文中的作者就从这三个方向去下手:

 

一:上下文信息(Context)

        作者说利用到了非常深的图像区域上的上下文信息,(We utilize contextual information spread over very large image regions)。我觉得说的就是提高网络的深度以此来提高感受野,让图像特征提取到更多的细节。

 

二:收敛(Convergence)

        如果学习率使用的比较小,那么对于很深的网络来说,收敛速度就非常慢。作者提出用残差网络和极高的学习率去加快训练速度(We suggest a way to speed-up the training: residual-learning CNN and extremely high learning rates.)。使用高的学习率可以加快收敛速度,但是同时也会导致梯度爆炸。于是作者就想到用残差学习和梯度裁剪来进行优化。另外作者提到,低分辨率图像和高分辨率图像在很大程度上是共享相同的信息的(这里说的就是低频信息,因为高分辨率图像可以分解为低频信息(也就是低分辨率图像)和高频信息(也就是残差图像或者说图像细节)),因此对LR和HR图像之间的差异(即残差)进行显示建模是很有利的。另外,作者将初始的学习率设置的很大(是SRCNN的10000倍),而这是通过残差学习和梯度裁剪来实现的。     作者也分析了SRCNN和VDSR的收敛区别,作者认为,SRCNN直接对高分辨率图像建模,因此有两个用途:将输入传送到端层以及重建残差。而作者认为,将输入传递到端层与自动编码器的工作类似,因此训练时间大都都花在了学习此自动编码器上面去了,而使得学习其他部分(细节图像)的收敛速度大大降低。而VDSR是直接对残差图像进行建模的,因此收敛速度更快,精度更高。

 

三:比例因子(Scale Factor)

        对于图像的尺寸,通常是用户任意指定的。而作者认为,训练和存储许多依赖于比例的模型以应对所有可能的情况是不切实际的(Training and storing many scale-dependent models in preparation for all possible scenarios is impractical.)。同时作者发现,对于单个的卷积网络足够实现多尺度因子的超分辨了。      对于SRCNN来说,只能为单个指定的尺寸进行训练,而当需要新的比例的时候,就需要重新训练新的模型了。除了上述所的以外,作者还提及到:通过在训练期间每层填充零,我们的输出图像具有与输入图像相同的大小,而SRCNN的输出小于输入。最后,我们仅对所有层使用相同的学习率,而SRCNN对不同层使用不同的学习率以实现稳定的收敛。

 

*************************************************************************************************************************************************

接下来看看提出的网络模型:

                                        图像超分辨率重建 VDSR解析_第1张图片

 

作者提到:使用非常深的网络来预测密集输出的一个问题是,每次应用卷积运算时,特征图的大小都会减小。这与其他超分辨率方法一致,因为许多方法都要求周围的像素正确推断中心像素。这种中心-环绕关系很有用,因为周围区域对该不适定问题(SR)提供了更多约束。对于接近图像边界的像素,无法充分利用这种关系,许多SR方法会裁剪结果图像。但是,如果所需的环绕区域很大,则此方法无效。 裁剪后,最终图像太小而无法从视觉上欣赏。要解决此问题,我们在卷积之前填充零以使所有要素图(包括输出图像)的大小保持不变。 事实证明,零填充的效果出奇地好。 因此,我们的方法与大多数其他方法的不同之处在于,还可以正确预测图像边界附近的像素。预测完图像细节后,会将其添加回输入的ILR图像中以提供最终图像(HR)。

 

接着作者从四个方面讲解了提出的模型和方法:

(1)残差学习

在SRCNN中,输入的确切副本必须经过所有层,直到到达输出层。对于许多权重层,这成为需要非常长时记忆的端到端关系。 因此,梯度消失/爆炸问题可能很关键。作者提到,可以用残差学习去解决梯度消失/爆炸问题。

由于输入和输出图像非常相似,作者定义了残差图像r = y - x,其中大多数值可能为零或较小。作者的目标就是去预测该残留图像。

在作者提到的网络中,这反映在损耗层上,其损耗层采用三个输入:残差估计,网络输入(ILR图像)和地面真实HR图像。损失计算为重建图像(网络输入和输出之和)与地面真实情况之间的欧几里得距离。

通过使用基于反向传播的小批量梯度下降优化回归目标来进行训练(LeCun等人[14])。 我们将动量参数设置为0.9。 训练由权重确定(L2罚分乘以0.0001)。

(2)高学习率

训练深度模型可能无法在现实的时间限制内收敛。 SRCNN 在三个以上的重量层上均未显示出优异的性能。尽管可能有多种原因,但一种可能性是他们在网络融合之前就停止了训练过程。 他们的学习率10^-5太小,以至于网络无法在一周内在通用GPU上融合。 从SRCNN的图9来看,很难说它们的更深层网络已经融合并且其性能已达到饱和。 尽管更多的培训最终可以解决问题,但是使用SRCNN将深度增加到20似乎并不实际。

提高学习率以促进训练是基本的经验法则。但是简单地将学习率设置得很高也可能导致梯度消失/爆炸。 因此,我们建议使用可调整的梯度裁剪,以最大程度提高速度,同时抑制梯度爆炸。

(3)可调梯度剪枝

梯度剪枝是一种经常用于训练递归神经网络的技术[17]。 但是,据我们所知,它在训练CNN中的使用受到限制。尽管存在许多限制梯度的方法,但常见的策略之一是将各个梯度限制在预定义范围[-θ,θ]中。

通过裁剪,使得梯度在一定范围内。通过通常用于训练的随机梯度下降,可以将学习率乘以调整步长。如果使用高学习率,则有可能将θ调整为较小以避免在高学习率方案中爆炸梯度。但是,随着学习速率逐渐变小,有效梯度(梯度乘以学习速率)接近零,并且如果学习速率在几何上降低,则训练可能需要按指数级进行多次迭代才能收敛。

为了获得最大的收敛速度,我们将梯度裁剪为[θ/γ,θ/γ],其中γ表示当前学习速率。 我们发现可调梯度裁剪使得我们的收敛过程变得非常快。 我们的20层网络培训在4个小时内完成,而3层SRCNN则需要几天的培训时间。

(4)多尺度

虽然非常深入的模型可以提高性能,但现在需要更多参数来定义网络。通常,为每个比例因子创建一个网络。考虑到经常使用分数比例因子,我们需要一种经济的方式来存储和检索网络。

因此,我们还训练了一个多尺度模型。通过这种方法,可以在所有预定义比例因子之间共享参数。训练多尺度模型非常简单。几个指定比例的训练数据集被合并为一个大数据集。

数据准备类似于SRCNN,但有一些区别。 现在,输入色块大小等于接受区域的大小,并且图像被分成没有重叠的子图像。 微型批处理包含64个子图像,其中不同比例的子图像可以在同一批处理中。

 

接着作者提到了该网络的三个属性:深度,残差学习,多尺度因子

4.1网络的属性

接着作者对网络的属性就行了介绍,总的来说有三个:(1)该网络层数比较深,作者也验证了,网络越深,效果越好。(2)该网络中用到的残差学习,使得网络的收敛速度比标准CNN快很多。(3)证明了使用单个网络的方法与使用针对每个规模训练的多个网络的方法的效果相同。下面是论文中的翻译部分:

(在本节中,我们将研究所提出方法的三个属性。 首先,我们证明了执行SR任务需要深度较大。 一个非常深的网络在图像中利用更多的上下文信息,并对具有许多非线性层的复杂功能进行建模。 我们通过实验验证了较深层的网络比浅层网络具有更好的性能。

其次,我们证明了我们的残差学习网络的收敛速度比标准CNN快得多。 此外,我们的网络极大地提高了性能。

  • 我们证明了使用单个网络的方法的效果与使用针对每个规模训练的多个网络的方法的效果相同。 我们可以有效地减少多网络方法的模型容量(参数数量)。)

 

接下来依次对网络的相关属性进行讲解:

4.1 网络越深,效果越好:

下面是论文相关翻译:

卷积神经网络通过强制相邻层神经元之间的局部连通性模式来利用空间局部相关性[1]。换句话说,第m层中的隐藏单元将第m-1层中的单元的子集作为输入,它们形成空间连续的感受野。

每个隐藏单元对于输入相对于感受野之外的变化均无响应。因此,该体系结构确保学习的滤波器对空间局部输入模式产生最强的响应。

然而,堆叠许多这样的层导致滤波器变得越来越全局化(即,响应于更大的像素空间区域)。换句话说,具有很大支撑的过滤器可以有效地分解为一系列小的过滤器。

在这项工作中,我们对所有图层使用大小相同的3×3滤镜。对于第一层,感受野的大小为3×3;对于第二层,感受野的大小在高度和宽度上都增加2。对于深度D网络,接收场的大小为(2D +1)×(2D +1)。它的大小与深度成正比。

在SR的任务中,这对应于可以用来推断高频分量的上下文信息量。较大的感受野意味着网络可以使用更多上下文来预测图像细节。由于SR是一个不适定的逆问题,因此收集和分析更多相邻像素可提供更多线索。例如,如果在感受野中完全包含一些图像图案,则可以认为该图案被识别并用于超分辨图像。

另外,非常深的网络可以利用高优先级。我们使用19个整流线性单元,并且我们的网络可以使用中等数量的通道(神经元)对非常复杂的函数进行建模。 Simonyan和Zisserman的论文很好地解释了建立薄型深层网络的优势

现在,我们通过实验表明,非常深的网络可以显着提高SR性能。我们训练和测试深度范围为5到20的网络(仅计算除非线性层之外的权重层)。在图3中(如下图),我们显示了结果。在大多数情况下,性能随着深度的增加而提高。随着深度的增加,性能会迅速提高。

                 图像超分辨率重建 VDSR解析_第2张图片

4.2:残差学习

下面是论文的翻译部分:

由于我们已经有一个低分辨率的图像作为输入,因此对于SR而言,预测高频分量就足够了。尽管在先前的方法中已经使用了预测残差的概念,但尚未在基于深度学习的SR框架的背景下对其进行研究。

在这项工作中,我们提出了一种学习残差图像的网络结构。现在,我们详细研究此修改对标准CNN结构的影响。

首先,我们发现该残才网络收敛得更快。通过实验比较了两个网络:残差网络和标准非残差网络。我们使用深度10(权重层)和比例因子2。各种学习率的性能曲线如图4所示(下图)。所有网络都使用相同的学习率调度机制上面已经提到。

                     图像超分辨率重建 VDSR解析_第3张图片

 

其次,在融合时,残差网络显示出优异的性能。在图4中,训练完成后,残差网络会提供较高的PSNR。

另一点是,如果使用较小的学习率,则网络不会在给定的时期内收敛。如果使用初始学习速率0.1,则残差学习网络的PSNR在10个周期内达到36.90。但是,如果改用0.001,则网络将永远无法达到相同的性能水平(80个周期后的性能为36.52)。以类似的方式,残留和非残留网络在10个时间段后显示出巨大的性能差距(速率0.1时分别为36.90和27.42)。

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

 

4.3单个模型适用于多尺度

下面是论文的翻译:

训练过程中的规模扩展是为网络配备多规模超分辨率机器的一项关键技术。我们的多规模机器可以执行许多不同规模的SR过程,而这种多规模机器的容量要比单规模机器的总和小得多。

我们从一个有趣的实验开始,如下所示:我们使用单个比例因子S_train训练网络,并在另一个比例因子S_test下对其进行测试。这里,考虑了在SR比较中广泛使用的因子2,3和4。尝试对数据集“ Set5”进行可能的配对(S_train,S_test)。实验结果总结在表2中。

                         

如果S_train != S_test,说明性能下降了。对于比例因子2,使用因子2训练的模型的PSNR为37.10(以dB为单位),而使用因子3和4训练的模型分别给出30.05和28.13。经过单尺度数据训练的网络无法处理其他尺度。在许多测试中,它甚至比双三次插值(用于生成输入图像的方法)还要糟糕。

现在,我们测试使用比例增强训练的模型是否能够在多个比例因子下执行SR。上面使用的同一网络使用多个比例因子S1 = {2,3,4}进行训练。此外,我们还对S1 = {2,3},{2,4},{3,4}的情况进行了实验,以进行更多比较。

我们观察到该网络可以应付训练期间使用的任何规模。当S1 = {2,3,4}(表2中的×2,3,4)时,其每个标度的PSNR可与从单标度网络的相应结果获得的PSNR相比:37.06 vs. 37.10(× 2),33.27与32.89(×3),30.95与30.86(×4)。

另一个模式是,对于大型(×3、4),我们的多尺度网络优于单尺度网络:我们的模型(×2、3),(×3、4)和(×2、3、4)给出PSNR测试标度3分别为33.22、33.24和33.27,而(×3)给出32.89。同样,(×2,4),(×3、4)和(×2、3、4)分别给出30.86、30.94和30.95(相对于×4模型为30.84),由此我们观察到训练多尺度模型能够提高大尺度的性能。

                   图像超分辨率重建 VDSR解析_第4张图片

 

结论
在这项工作中,我们提出了使用非常深的网络的超分辨率方法。 由于收敛速度慢,很难训练一个非常深的网络。 我们使用残差学习和极高的学习率来快速优化非常深的网络。 收敛速度被最大化,并且我们使用梯度裁剪来确保训练的稳定性。 我们已经证明,在基准图像上,我们的方法大大优于现有方法。 我们相信我们的方法很容易适用于其他图像恢复问题,例如降噪和压缩伪影去除。

总结就是:作者用了非常深的网络(20层,其实相比于ResNet的100多层还是小巫见大巫)去拓展感受野的大小。另外,由于网络越深,会出现梯度爆炸/消失等,同时,对于学习率比较小的情况下,深的网络收敛速度非常慢,因此作者使用了残差学习+极高的学习率+梯度剪枝来进行优化。。另外,作者做了一个额外的工作就是验证了单个模型完全适合于多尺度比例因子。

 

下面几个博客讲的不错,可以借鉴一下:

https://blog.csdn.net/u011692048/article/details/77512310

https://blog.csdn.net/u010327061/article/details/80094724

https://blog.csdn.net/wangkun1340378/article/details/74231352

 

 

你可能感兴趣的:(深度学习)