VDSR论文(结合其他资料博客)

论文:Accurate Image Super-Resolution Using Very Deep Convolutional Networks

参考:https://blog.csdn.net/xu_fu_yong/article/details/97131687

https://zhuanlan.zhihu.com/p/76714762(知乎)

摘要:

        提出一个高准确度的SISR方法。该方法使用一个深度网络(启发于用于ImageNet 分类的VGG-net)。使用深网络可以有效提高结果,但是训练收敛速度会变缓慢,因此提出一个简单但有效的训练策略:仅学习残差;使用比SRCNN高10^{4} 倍的高学习率。使用极高学习率会导致梯度爆炸,解决方法:残差学习和梯度裁剪(gradient clipping)

1.Introduction:

SRCNN简单介绍:

       SRCNN是首次成功地尝试只用卷积层来实现超分辨率。它被认为是 SR 在深度学习基础上的开拓性工作,启发了之后的研究者们在深度学习方面的不断尝试。 
       SRCNN 结构简单明了,仅有三个卷积和两个整流线性单元(Rectified Linnear Unit。,ReLU)层线性叠加组成,除最后一层卷积层后没有 ReLU 层,其余都跟有ReLU 层。虽然卷积层是相同的,但卷积层的功能各不相同。第一卷积层称为图像片(patch)提取层或特征提取层,其从输入图像获取特征图像(feature maps)。第二层是非线性映射层,它将映射为高维特征向量。最后一层聚合以输出最终的高分辨率图像。SRCNN 的结构如下图所示。

       以结构直观的 SRCNN 为例对基于 CNN 的超分辨率重构算法进行说明。通过构建一个三层网络,SRCNN 学习了低分辨率输入图像和高分辨率输出图像之间的映射关系。将通过双三次上采样的 LR 图像作为输入,网络前向传播可表示成三步:第一步,块的提取与表示,从输入图像中提取并表示成一个特征向量,多通道的特征向量构成特征图谱向后传递;第二步,特征的非线性映射,这一阶段将提取到的特征图谱非线性地映射到变换的高维空间中,其中,每个高维向量都表示一个高分辨率图像块;第三步,图像重构,对非线性映射后的高分辨率图块的进行合成,输出重构的高分辨率图像。

       训练数据集是通过从 HR 图像中提取大小为 32×32 的不重叠的稠密图像块来合成。低分辨率的输入图像片首先先下采样,然后用双三次插值进行上采样,使其具有与高分辨率输出图像相同的大小。SRCNN 是一种端到端可训练的网络,最大限度地减少了输出的重构高分辨率图像与真实高分辨率图像的差值,损失函数使用的是均方误差(Mean Squared Error,MSE)。

SRCNN基本算法流程

1)大致流程

2)SRCNN算法细节

       论文说的只训练YCbCr模式的Y通道,具体流程就是:训练的时候输入BRG模式的图片,再转化为YCbCr模式,但是只将Y通道通过CNN网络,最后输出的结果再和另外两个合成生成心得YCbCr模式图片,最后再转回BGR模式,将最终生成的BGR模式图片与输入的BRG模式图片计算MSE loss,进行梯度下降训练网络。具体流程如下图:

SRCNN存在3点局限性:
1.依赖较小的图像区域的上下文信息
2.网络训练收敛速度慢
3.网络只能解决单一尺度的图像超分辨率

VDSR提出新的方法来解决这些局限性:
1.更深的网络使用更大的感受野来获取图像上下文信息
2.网络进行残差学习(residual-learning CNN),并且使用极高的学习率提高收敛(Convergence)速度。采用大学习率,容易遇到梯度消失和梯度爆炸(vanishing/exploding gradients)的问题,这里使用残差学习和可调梯度裁剪技术(adjustable gradient clipping)来抑制梯度问题的产生。
3.一个单一神经网络可以针对不同尺度(Scale Factor)进行图像超分辨率重构

VDSR主要有4点贡献:

1.加深了网络结构(20层),使得越深的网络层拥有更大的感受野。文章选取3×3的卷积核,深度为D的网络拥有(2D+1)×(2D+1)的感受野。
2.采用残差学习,残差图像比较稀疏,大部分值都为0或者比较小,因此收敛速度快。VDSR还应用了自适应梯度裁剪(Adjustable Gradient Clipping),将梯度限制在某一范围,也能够加快收敛过程。
3.VDSR在每次卷积前都对图像进行补0操作,这样保证了所有的特征图和最终的输出图像在尺寸上都保持一致,解决了图像通过逐步卷积会越来越小的问题。文中说实验证明补0操作对边界像素的预测结果也能够得到提升。
4.VDSR将不同倍数的图像混合在一起训练,这样训练出来的一个模型就可以解决不同倍数的超分辨率问题。

       为了避免深层网络(尤其是含有 20 层权重层)的收敛缓慢问题,提出了两种有效的策略。首先,不直接生成 HR 图像,而是学习残差映射,通过映射来产生 HR和 LR 图像差。因此,它提供了一个更容易实现的目标,而且网络只关注高频信息。其次,梯度剪裁至一定范围,这样可以用很高的学习率来加快训练过程。结果证明更深层次的网络可以提供更好的上下文信息和更好的泛化表示能力,可以用来解决多尺度的超分辨率问题。 
 

2. Related Work

2.1 Convolutional Network for Image Super-Resolution

从三个方面详细分析性论文中提出的VDSR模型与SRCNN的不同之处: model, train, scale。

model

SRCNN:  filter 9*9  、1*1 、5*5 。

                   3层:patch提取/表示(patch extraction/representation),非线性映射 (non-linear  mapping),重构                                             (reconstruction)

                   13*13(感受野)

VDSR:   20 个权值层(weight layers)(每层3*3的卷积核)        

                  41 * 41 (感受野)    感受野变大了

training:

        分析SRCNN训练速度慢的原因,并提出VDSR的改进之处:

        论文中分析认为:SR在HR空间建模,HR 图像可以分解为低频信息(对应于低分辨率图像)和高频信息(残余图像或图像细节)。输入和输出的图片享有相同的低频信息(输入的低分辨率图像和输出的高分辨率图像在很大程度上是相似的),也就是指低分辨率图像携带的低频信息与高分辨率图像的低频信息相近,训练时带上这部分会多花费大量的时间,实际上我们只需要学习高分辨率图像和低分辨率图像之间的高频部分残差即可。残差网络结构的思想特别适合用来解决超分辨率问题,可以说影响了之后的深度学习超分辨率方法。

       VDSR将插值后得到的变成目标尺寸的低分辨率图像作为网络的输入,再将这个图像与网络学到的残差相加得到最终的网络的输出。

        SRCNN有两个目的:把输入传递到末端、构建残差。这与自动编码的概念类似,在自动编码上会消耗训练时间,论文中提出直接对残差进行建模,加快收敛速度。(对SRCNN收敛速度的分析有点牵强) 主要是提出了论文的基于残差建模。

scale: 

           需要结合代码分析坐着是如何实现 一个网络一次训练完成多个scale
其他:

        我们提出的VDSR的输出图像与输入图像大小相同,通过在训练过程中每一层填充0;而SRCNN的输出小于输入。

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

3. Proposed Method

3.1、 提出网络结构

          1) 20层的卷积核大小都为3*3*64,

           2)使用插值将LR图片放大到期望的尺寸,再作为网络的输入

           3)每经过一层,feature map将会变小,论文只用补0 的方法来保持其尺寸不变。事实证明,补零效果出奇的好。

方法:
1.输入为插值后的低分辨率图像。
2.除第一层和最后一层之外,中间d层有相似结构:64个滤波器,尺寸为3 × 3 × 64,每一个滤波器跨64个通道,在3 × 3空间区域内操作。
3.第一层,对输入图像操作。
4.最后一层用于图像重建,包含一个滤波器,尺寸为3 × 3 × 64。
5.在每个卷积层之前补0保证特征图和输入图像尺寸一样。

       最终取得的超分效果也还是很好的,在2倍超分时相比于其他的方法有着比较明显的优势,速度和效果都相对更好。SRCNN虽然只有两层,但是卷积核尺寸较大(9x9和5x5),这里虽然模型的层数有20层,相对多了很多,但是卷积核大小比较小(3x3),最后速度也还是比较快。

3.2、训练

           1)残差学习:给出残差学习的损失函数,如何利用残差重构图片

            2)更高的学习率,结合其他人的实验说明(SRCNN没有更好的收敛,学习率太小是一个重要的原因,)

            3) 可调节的梯度裁剪        For maximal speed of convergence, we clip the gradients to [-θ ,θ], where γ denotes the current learning rate. We find the adjustable gradient clipping makes our convergence procedure extremely fast. Our 20-layer network training is done within 4 hours whereas 3-layer SRCNN takes several days to train

            4) Mutil-scale     【论文中只提到将训练数据集融合】 Training a multi-scale model is straightforward. Training datasets for several specified scales are combined into one big dataset。 

            【数据集准备,在对原始数据进行划分时候 no overlap】
 

同时,文中还进行了较多的参数细节对比:

       1.模型层数对比

        这里分别对2、3、4的超分倍数进行不同模型层数的对比,从5层一直增加到20层。可以看到,随着模型层数的增大,整体的PSNR基本数处于上升的趋势,最后20层的效果最好。整体的随着模型的深度增加,应该是最后会有着一个平稳的、不再上涨的曲线,然而这里20层看起来最后还是有可能会继续提升模型效果,不知道为什么没有继续提升模型的层数来进行对比实验。

      2. 学习率对比

        SRCNN中使用的学习率为10^-5,是一个非常小的学习率。这里分别进行了不同的学习率对比实验,在不使用残差学习的情况下,越小的学习率的收敛效果越高;但是在使用残差学习的情况下,使用较高的学习率最后取得的效果最好。

        残差学习对于模型的收敛有着巨大的提升,该表为Set5数据集中的2倍超分条件下的对比结果。相比于不采用残差学习的模型,带有残差学习的模型在不同的学习率下都会有着不同幅度的提升,学习率越大,提升越明显。这个表格比较有意思的是随着模型的继续训练,PSNR效果并没有提升。

       虽然文中说是结合残差学习和自适应梯度裁剪来加速极深的深度学习模型训练,但是这里只给出了模型深度和是否使用残差学习两种情况下的对比实验,缺乏是否使用自适应梯度裁剪的对比实验,所以也不好说这梯度裁剪的贡献度怎么样。

   3. 多倍数超分对比

       特定超分倍数下训练的模型的效果一般是只能适用于该超分倍数的数据,如果将其用于不同的超分倍数数据,泛化效果可能会特别差,可能都比不上双三次插值的结果。

     与SRCNN一样,这篇文章也是先将低分辨率输入插值到高分辨率,再来进行模型预测,所以对于不同的超分倍数有着天然的可扩展性,只需要将输入插值到不同的超分倍数即可。这里模型在训练数据中同时使用多个超分倍数的数据,最后取得的效果是要好于单个倍数的数据。

     这里也还是与SRCNN来进行视觉效果上的对比,可以看到在不同的超分倍数下还是有着比较大的提升。

     在常见数据集上,这篇文章的结果都还是很好的,相比于其他的几篇baseline,都取得了最好的效果。

 

  • 8
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值