SRCNN成功地将深度学习技术引入到超分辨率问题中,但在三个方面存在局限性:
上下文 context:利用分布在非常大的图像区域上的上下文信息,使用大感受野的非常深的网络考虑了大的图像上下文。
收敛 Convergence:提出了一种加速训练的方法:残差学习CNN和极高的学习率。由于LR图像和HR图像在很大程度上共享相同的信息,对HR图像和LR图像之间的差异(残差)图像进行显式建模是有利的。提出了一种在输入和输出高度相关的情况下进行有效学习的网络结构。此外,VDSR的初始学习率比SRCNN高 1 0 4 10^4 104倍,是通过残差学习(residual-learning)和梯度裁剪(gradient clipping)实现的。
比例因子Scale Factor:提出了一种单模型SR方法。比例通常是用户指定的,可以是任意的,包括分数。例如,可能需要在图像查看器中平滑放大或调整到特定尺寸。训练和存储许多依赖比例的模型,为所有可能的场景做准备是不切实际的。我们发现一个单一的卷积网络就足以实现多尺度因子的超分辨。
Depth
SRCNN:认为更深的网络不会带来更好的性能(图9)。由块提取/表示层(patch extraction/representation)、非线性映射层(non-linear mapping)和重构层(reconstruction)三个层组成,分别使用空间尺寸为9×9、1×1和5×5的滤波器。
**VDSR:认为增加深度会显著提高性能。**成功地使用了20个权重层(每层3×3)。网络非常深(20 vs.3),用于重建的信息(感受野)要大得多(41×41 vs. 13×13)。
Training
Scale
Size
Learning rate
VDSR网络结构如图2所示。使用d层,除第一层和最后一层外,其他层为:大小为3×3×64的64个滤波器,其中滤波器在64个通道(特征图)的3×3空间区域上操作。第一层对输入图像进行操作。最后一层用于图像重建,由大小为3×3×64的单个滤波器组成。
该网络将内插的低分辨率图像(到所需大小)作为输入,并预测图像细节。我们重复级联一对层(卷积的和非线性的)。插值的低分辨率(ILR)图像通过层转换为高分辨率(HR)图像。网络预测残差图像,ILR和残差的相加给出期望的输出。应用校正后的线性单位(REU)后的大多数要素为零。
使用非常深的网络预测密集输出的一个问题是,每次应用卷积运算时,特征映射的大小都会减小。例如,当将大小为(n+1)×(n+1)的输入施加到具有大小为n×n的感受野的网络时,输出图像为1×1。与其他超分辨率方法一致,许多方法需要周围像素来正确推断中心像素。这种中心-周围关系很有用,因为周围的区域对这个不适定问题(SR)提供了更多的约束。对于图像边界附近的像素,这种关系不能被充分利用,许多SR方法都会对结果图像进行裁剪。然而,如果所需的环绕区域非常大,则此方法无效。裁剪后,最终图像太小,视觉效果不佳。因此,为了解决这个问题,VDSR在卷积之前填充零,以保持所有特征地图(包括输出图像)的大小相同。事实证明,零填充效果相当好。
设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,我们的目标是学习预测 y ^ = f ( x ) \hat{\mathbf{y}}=f(\mathbf{x}) y^=f(x)的模型 f f f,其中 y ^ \hat{y} y^是目标HR图像的估计。我们最小化训练集上平均的均方误差 1 2 ∥ y − f ( x ) ∥ 2 \frac{1}{2}\|\mathbf{y}-f(\mathbf{x})\|^{2} 21∥y−f(x)∥2。
Residual-Learning
在SRCNN中,网络必须保留所有输入细节,因此,消失/爆炸梯度问题[2]可能出现。可以通过残差学习简单地解决这个问题。
由于输入和输出图像非常相似,因此定义了残差图像 r = y − x r=y-x r=y−x,其中大多数值可能为零或较小。我们想要预测该残差图像。损失函数现在变为 1 2 ∥ r − f ( x ) ∥ 2 \frac{1}{2}\|\mathbf{r}-f(\mathbf{x})\|^{2} 21∥r−f(x)∥2。,其中 f ( x ) f(x) f(x)是网络预测。
在网络中,这在损失层中反映如下。我们的损失层采用三项输入:残差估计,网络输入(ILR图像)和真实值(Ground Truth)HR图像。损失计算为重建图像(网络输入和输出之和)与真实值情况之间的欧几里得距离。
High Learning Rates for Very Deep Networks
训练深度模型可能无法在现实的时间限制内收敛。SRCNN[6]在三层以上的权重层中未显示出优异的性能。尽管可能有多种原因,但一种可能性是他们在网络收敛之前就停止了训练过程。 他们的学习率 1 0 − 5 10^{-5} 10−5太小,以至于网络无法在一星期之内在通用GPU上收敛。从[6]的图9来看,很难说它们的更深层网络已经收敛并且其性能已达到饱和。虽然更多的训练最终可以解决问题,但是使用SRCNN将深度增加到20似乎并不实际。
提高学习率以促进训练是基本的经验法则。但是,简单地将学习率设置得很高也可能导致梯度消失/爆炸[2]。因此,VDSR提出使用可调整的梯度裁剪,以最大程度地提高速度,同时抑制梯度爆炸。
Adjustable Gradient Clipping
尽管存在许多限制梯度的方法,但常见的策略之一是将各个梯度限制在预定范围 [ − θ , θ ] [-\theta, \theta] [−θ,θ]。
使用剪裁时,梯度在一定范围内。利用随机梯度下降法进行训练,通过乘以学习率来调整步长。如果使用高学习率,则很可能会将 θ \theta θ调整为较小,以避免在高学习率体系中出现爆炸性梯度。但是,随着学习速率的降低,有效梯度(梯度乘以学习率)趋于零,如果学习速率呈几何级数下降,则训练可能需要指数级的多次迭代才能收敛。
为了获得最大的收敛速度,我们将梯度修剪为 [ − θ γ , θ γ ] \left[-\frac{\theta}{\gamma}, \frac{\theta}{\gamma}\right] [−γθ,γθ],其中 γ \gamma γ表示当前的学习率。发现可调梯度裁剪使得收敛过程非常快。VDSR的20层网络训练是在4小时内完成的,而3层的SRCNN需要几天的时间来训练。
Multi-Scale
虽然非常深入的模型可以提高性能,但现在需要更多参数来定义网络。通常,为每个比例因子创建一个网络。
为此,训练了一个多尺度模型。使用此方法,可以在所有预定义的比例因子之间共享参数。几个指定尺度的训练数据集被组合成一个大数据集。
数据准备类似于SRCNN [5],但有一些不同。输入patch大小现在等于感受野的大小,并且图像被分割成没有重叠的子图像。一个小批次由64个子图组成,不同比例的子图可以在同一批次。作者使用MatConvNet包实现其模型[23]。
表1:残差和非残差网络的性能表(PSNR)(‘Set5’数据集,×2)。残差网络在10个epochs内迅速接近收敛。
Training dataset
SRCNN [6]使用非常大的ImageNet数据集。VDSR使用S. Schulter[18]中的291幅图像作为本节中其他方法的基准。此外,还使用了数据增强(旋转或翻转)。对于前面部分的结果,我们使用了91个图像来快速训练网络,因此性能可能略有不同。
Test dataset
使用四个数据集。数据集“Set5”[15],“Set14”[26],“Urban100”[11]和“B100”[22]。
Training Parameters
使用深度为20的网络。训练使用的batches为64。动量(Momentum)和权重衰减(weight decay)参数分别设置为0.9和0.0001。我们训练所有实验超过80个epochs(batch size为64的9960次迭代)。最初将学习率设置为0.1,然后每20个epochs降低10倍。总体而言,学习率降低了3次,并且在80个epochs之后停止了学习。 在GPU Titan Z上的训练大约需要4个小时。
Comparisons with State-of-the-Art Methods
提供定量和定性比较。比较的方法是A + [22],RFL [18],SelfEx [11]和SRCNN [5]。 从表3中可以看出,VDSR方法优于这些数据集中的所有先前方法,而且相对较快。红色表示最佳性能,蓝色表示次佳性能。