(VDSR)Accurate Image Super-Resolution Using Very Deep Convolutional Networks——超分辨率(八)

Accurate Image Super-Resolution Using Very Deep Convolutional Networks

在VDSR论文中作者提到,输入的低分辨率图像和输出的高分辨率图像在很大程度上是相似的,也就是指低分辨率图像携带的低频信息与高分辨率图像的低频信息相近,训练时带上这部分会多花费大量的时间,实际上我们只需要学习高分辨率图像和低分辨率图像之间的高频部分残差即可。残差网络结构的思想特别适合用来解决超分辨率问题,可以说影响了之后的深度学习超分辨率方法。VDSR是最直接明显的学习残差的结构,其网络结构如下图所示。
在这里插入图片描述
论文链接: (Accurate Image Super-Resolution Using Very Deep Convolutional Networks, CVPR2016)

摘要

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

本文方法解决以上问题:

  1. 上下文信息(Context):通过stack small filters来进行获得一个比较大的感受野,最大达到41x41,深网络可以使用较大的感受野,这可以充分考虑上下文信息;
  2. 收敛(Convergence):加速训练:通过残差学习和极高学习率;
  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将不同倍数的图像混合在一起训练,这样训练出来的一个模型就可以解决不同倍数的超分辨率问题。

方法

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

训练

设x为插值后的低分辨率图像,y为高分辨率图像。给定训练数据集 { x ( i ) , y ( i ) } i = 1 N \left\{\mathbf{x}^{(i)}, \mathbf{y}^{(i)}\right\}_{i=1}^{N} {x(i),y(i)}i=1N,我们的目标是学习一个模型 f f f来预测值 y ^ = f ( x ) \hat{\mathbf{y}}=f(\mathbf{x}) y^=f(x),其中 y ^ \hat{\mathbf{y}} y^是目标HR图像的估计值。我们最小化了训练集上的均方误差 1 2 ∥ y − f ( x ) ∥ 2 \frac{1}{2}\|\mathbf{y}-f(\mathbf{x})\|^{2} 21yf(x)2

残差学习(Residual-Learing)

为了解决梯度弥散/梯度爆炸问题(vanishing/expoding gradients problem);
定义残差图像:r=y-x;
损失函数定义为:
1 2 ∥ r − f ( x ) ∥ 2 \frac{1}{2}\|\mathbf{r}-f(\mathbf{x})\|^{2} 21rf(x)2
f(x)是网络预测;
损失层有三个输入:残差估计;网络输入(interpolated low-resolution)图像和基准HR图像。

高学习率(High Learning Rates for Very Deep Networks)

简单的设置高学习率会导致梯度弥散,因此使用梯度裁剪(gradient clipping)来最大化加速网络收敛并抑制梯度弥散。

可调梯度裁剪(Adjustable Gradient Clipping)

梯度裁剪是一种常用的训练递归神经网络[17]的方法。但是,据我们所知,它在训练cnn时的使用是有限的。然而还是存在许多限制梯度的方法吗,一个常见的策略是裁剪独立在预定义的范围 [ − θ , θ ] [-\theta, \theta] [θ,θ]内。
利用训练中常用的随机梯度下降法,将学习率乘以调整步长。如果使用学习速率高,很可能θ是被调小以避免爆炸在高梯度学习速率的regime。但随着学习速率的减小,有效梯度(梯度乘以学习速率)趋近于零,如果学习速率呈几何级数下降,训练可能需要指数次迭代才能收敛。
为了最大化收敛速度,我们裁剪梯度在 [ − θ γ , θ γ ] \left[-\frac{\theta}{\gamma}, \frac{\theta}{\gamma}\right] [γθ,γθ],γ表示当前的学习速率。我们发现可调梯度裁剪使我们的收敛过程非常快。我们的20层网络训练在4小时内完成,而3层SRCNN需要几天的时间来训练。

多尺度(MutiScale)

我们还训练了一个多尺度模型。使用这种方法,所有预定义的缩放因子都可以共享参数。训练一个多尺度模型很简单。针对几个指定规模的训练数据集被组合成一个大数据集。
Data preparation is similar to SRCNN with some differences. Input patch size is now equal to the size of the receptive field and images are divided into sub-images with no overlap. A mini-batch consists of 64 sub-images, where sub-images from different scales can be in the same batch.

实验结果
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 5
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cpp编程小茶馆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值