(Learning a Deep Convolutional Network for Image Super-Resolution, ECCV2014)
摘要:我们提出了一种单图像超分辨率的深度学习方法(SR)。我们的方法直接学习在低/高分辨率图像之间的端到端映射。这个映射表现为通过一个深度的卷积神经网络CNN,把低分辨率的图像作为输入,输出高分辨率图像。我们进一步证明了基于传统的稀疏编码超分辨的方法也可以看作是一个深卷积网络。但不像传统的方法一样分离的处理每一个组成,我们的方法联合优化了所有层。我们的深度CNN有一个轻量级的结构,然而展示了最先进的修复质量,并实现了快速的实际在线使用。
1.介绍
单图像超分辨率[11]是计算机视觉中的一个经典问题。目前最先进的单图像超分辨率方法大多是基于实例的。这些方法要么利用同一图像的内部相似性,要么从外部低分辨率和高分辨率样本对学习映射函数[2, 4, 9, 13, 20, 24–26, 28]。基于外部实例的方法往往具有丰富的样本,但同时也面临着对数据进行有效、简洁的建模困难。
基于稀疏编码的方法[25,26]是基于外部实例的图像超分辨率的代表性方法之一。该方法在其管道中涉及几个步骤。首先,从图像中密集提取重叠的patch并进行预处理(减去均值)。然后用低分辨率字典对这些patches进行编码。将稀疏系数传递到高分辨率字典中,重建高分辨率patches。将重叠的重构patches聚合(或平均)以生成输出。以前的SR方法特别注重字典的学习和优化或者用其他方法对它们建模。然而,管道中的剩下的步骤很少在统一的优化框架中进行优化或考虑。
在这篇论文中,我们证明了上述管道相当于一个深卷积神经网络(更多细节见第3.2节)。出于这结果,我们直接考虑卷积神经网络,它是在低分辨率和高分辨率图像之间的端到端映射。我们的方法与现有的基于实例的外部方法有根本的不同,因为我们没有显式地学习字典[20,25,26]或复写[2,4]来建模patch空间。这些都是通过隐藏层隐式实现的。此外,patch的提取和聚集也被表示为卷积层,因此涉及到优化。在我们的方法中,整个SR管道都是通过学习得到的,几乎没有预处理/后处理。
我们命名提出的模型为 Super-Resolution Convolutional Neural Network (SRCNN)。我们提出的SRCNN有几个吸引人的特性。第一,它的结构是有意设计得简单,但与最先进的基于实例的方法相比,它提供了更高的精确度。Figure 1给出了一个例子的比较。第二,通过适当的滤波器和层数,我们的方法实现了快速的实际在线使用,甚至是在CPU上的训练。我们的方法比一系列基于实例的方法更快,因为它是完全前馈的,不需要在使用中解决任何优化问题。第三,实验表明,当给网络更多的数据集或者(和)更大的网络时,网络的恢复质量会得到更深的提高。相反,较大的数据集/模型可能对现有的基于实例的方法提出挑战。
总的来说,这项工作的贡献主要体现在三个方面:
1.我们提出了一种用于图像超分辨率的卷积神经网络。该网络直接学习低分辨率和高分辨率图像之间的端到端映射,除了优化之外,几乎没有什么预处理/后处理。
2.我们建立了基于深度学习的SR方法与传统的基于稀疏编码的SR方法之间的关系。这种关系为网络结构的设计提供了指导。
3.我们证明了深度学习在经典的超分辨率计算机视觉问题中是有用的,可以达到良好的质量和速度。
Figure 1 提出的SRCNN仅仅通过几次训练迭代就超过了双三次基线,并通过适当的训练,使其性能优于基于稀疏编码的[26]方法。随着更多的训练迭代,性能可能会进一步提高。
2.相关工作
图像超分辨率 一类最先进的SR方法[学习低/高分辨率patches之间的映射。这些研究如何学习一个紧凑的字典或多方面的空间来关联低/高分辨率的patches,以及如何在这些空间中进行表示方案方面存在差异。在Freeman开创性的工作中,字典被直接表示为低/高分辨率的patch对,在低分辨率空间中找到输入patch的最近邻(NN),用其对应的高分辨率patch进行重建。Chang介绍了一种流形嵌入技术作为神经网络策略的替代方法。在Yang等人的工作中[25,26],上述NN对应关系提出了一种更为复杂的稀疏编码公式。这种基于稀疏编码的方法及其若干改进[24,20]是目前最先进的SR方法之一。在这些方法中,patches是优化的重点;将patch提取和聚集步骤视为预处理/后处理,并分别处理。
卷积神经网络 卷积神经网络(CNN)可以追溯到几十年前的[15],最近由于其在图像分类[14]上的成功而显示出爆炸式的流行。在这一进程中,有几个因素至关重要: ( i )在现代功能强大的gpu上实现高效的训练 ( ii )ReLU的提出,这使得收敛速度更快,同时仍然呈现出良好的质量( iii )易于获取的丰富数据(如ImageNet[5])来训练更大的模型。我们的方法也从这些进展中获益。
深度学习用于图像修复 已经存在一些利用深度学习技术对图像修复的学习。多层感知机(MLP)的所有层都是全连通的(与卷积不同),用于自然图像去噪[3]和去模糊后去噪[19]。与我们的工作更紧密相关的是,卷积神经网络用于自然图像去噪[12]和去除噪声模式(污垢/雨水)。这些恢复问题或多或少是由去噪驱使的。相反,在图像超分辨率问题上,并没有充分利用深度学习技术。
3.利用卷积神经网络进行超分辨
3.1 规划
考虑一个低分辨率的图像。我们首先使用双三次插值将其提升到所需的大小,这是我们唯一的预处理。表示插值后的图像为Y。我们的目标是从Y图像中恢复出F(Y)图像,该图像与真实高分辨率图像X尽可能相似。为了便于表示,我们仍然将Y称为“低分辨率”图像,尽管它的大小与X相同。我们想学习一个映射F,它在概念上由三个操作组成 :
(a)Patch提取与表示 : 该操作从低分辨率图像Y中提取(重叠)patch,并将每个patch表示为高维向量。这些向量由一组特征图组成,特征图的数量等于向量的维数。??
(b) 非线性映射 : 这个操作将每个高维向量非线性地映射到另一个高维向量上。每个映射向量在概念上表示一个高分辨率的patch。这些向量包含另一组特征映射。
(c) 重建 : 该操作聚合上述高分辨率的拼接表示,生成最终的高分辨率图像。这幅图像预计基本与X相似。
我们将展示所有这些操作构成一个卷积神经网络。图2描述了网络的概述。接下来,我们详细介绍每个操作的定义。
Fig2 对于给定低分辨率图像Y, SRCNN的第一卷积层提取一组特征图。第二层将这些特征映射到高分辨率的patch上表示。最后一层结合空间邻域内的预测,生成最终的高分辨率图像F(Y)
Patch提取与表示
一种流行的图像恢复策略(例如,[1])是密集提取patch,然后用一组经过训练的基础来表示它们,如PCA, DCT, Haar等。这相当于用一组滤波器对图像进行卷积,每个滤波器都是一组基。在我们的公式中,我们将这些基的优化纳入到网络的优化中。形式上,我们的第一层表示为操作F1:
F1(Y) = max(0, W1 * Y + B1)
其中,W1和B1分别表示滤波器和偏差。这里W1的大小为c × f1 × f1 × n1,其中c为输入图像中通道的个数,f1为滤波器的空间大小,n1为滤波器的个数。直观地,W1在图像上应用n1卷积,每个卷积都有一个内核大小c×f1×f1。输出由n1特征映射组成。B1是一个n1维向量,它的每个元素都与一个过滤器相关联。我们应用了整流线性单元(ReLU,max(0,x)]在过滤器响应。
非线性映射
第一层为每个patch提取一个n1维度特征。在第二个操作中,我们将这些n1维向量映射成一个n2维向量。这相当于应用n2个在空间上支持1×1的滤波器。第二层的操作是:
F2(Y) = max (0, W2 * F1(Y) + B2 )
这里,W2 的大小是 n1 * 1 * 1 * n2, B2是一个n2维度向量。每个输出的n2维向量在概念上表示一个高分辨率的patch,用于重建。
为了增加非线性可以添加更多的卷积层(空间支持为1×1)。但这会显著增加模型的复杂度,因此需要更多的训练数据和时间。在本文中,我们选择在这个操作中使用一个单独的卷积层,因为它已经提供了令人信服的质量。
重建
在传统的方法中,对预测的重叠高分辨率patch进行平均,得到最终的完整图像。平均可以看作是一组特征图上的预定义过滤器(其中每个位置都是高分辨率patch的“扁平”向量形式)。基于此,我们定义了一个卷积层来生成最终的高分辨率图像:
F(Y) = W3 * F2(Y) + B3
其中, W3大小为 n2 * f3 * f3 * c , B3是一个c维的向量。
如果高分辨率patches的表示在图像域中(即我们可以简单地对每个表示进行重新塑造,以形成patches),我们期望滤波器的作用类似于平均滤波器;如果高分辨率patches的表示在其他域中(系数是基的形式),我们期望 W3的行为类似于先将系数投影到图像域中,然后求平均值。无论哪种方式, W3都是一组线性滤波器。
有趣的是,尽管上述三种操作的动机不同,但它们都与卷积层的形式相同。我们将这三个操作放在一起,形成一个卷积神经网络(图2)。在该模型中,所有的滤波权值和偏差都要进行优化。尽管整体结构简洁,但我们的SRCNN模型是在超分辨率方面取得重大进展的基础上,吸取了丰富的经验而精心开发的[25,26]。我们将在下一节详细介绍这种关系。
3.2 与基于稀疏编码的方法的关系
我们证明基于稀疏编码的SR方法[25,26]可以看作是卷积神经网络。
Figure 3 基于卷积神经网络的稀疏编码方法
在基于稀疏编码的方法中,我们考虑从输入图像中提取一个f1×f1低分辨率的patch。这个patches减去其平均值,然后投射到一个(低分辨率)字典上。如果这个字典大小是n1, 这相当于在输入图像上应用n1维的线性滤波器(f1×f1)(减去平均值的操作也可以看成是线性操作)。
然后将稀疏编码求解器应用于投影的n1维系数。该求解器的输出为n2维系数,在稀疏编码的情况下,通常为n2 = n1。这些n2维系数是高分辨率patches的表示。在这个意义上,稀疏编码求解器表现为一个非线性映射操作。参见图3的中间部分。然而,稀疏编码求解器不是前馈的,即,这是一个迭代算法。相反,我们的非线性算子是完全前馈的,可以有效地计算。我们的非线性算子可以看作是一个像素级的全连通层。
然后将上述n2个系数(稀疏编码后)投影到另一个系数上(高分辨率)字典生成高分辨率patch。然后对重叠的高分辨率斑块进行平均。 如上所述,这等价于n2维特征图上的线性卷积。如果用于重建的高分辨率patches尺寸为f3×f3,则线性滤波器的空间支持等效为f3×f3。请参见图3的右侧部分。
上述讨论表明,基于稀疏编码的SR方法可以看作是一种卷积神经网络(具有不同的非线性映射)。但是在基于稀疏编码的SR方法中,并没有考虑到所有的操作。相反,在我们的卷积神经网络中,需要优化的滤波器都涉及到低分辨率字典、高分辨率字典、非线性映射以及均值减法和均值平均。因此,我们的方法优化了包含所有操作的端到端映射。
上面的类比也可以帮助我们设计超参数。例如,我们可以设置过滤器最后一层的大小小于第一层,因此我们更加依赖*部分的高分辨率patch(极端地,如果f3 = 1,我们使用该中心像素没有平均)。我们也可以设n2 < n1,因为它应该更稀疏。一个典型的设置是f1 = 9, f3 = 5, n1 = 64, n2 = 32(我们在实验部分评估了更多的设置)。
3.3 Loss Function
学习端到端映射函数F需要估计参数Θ= {W1 W2, W3, B1, B2, B3}。这是通过最小化重建图像F(Y;θ)与高分辨X之间的损失来实现的。给定一组高分辨率图像{Xi}及其对应的低分辨率图像{Yi},我们使用均方误差(MSE)作为损失函数 :
其中,n是训练集样本个数。采用随机梯度下降法和标准反向传播法使损失最小化。使用MSE作为损耗函数有利于高的PSNR。PSNR是一种广泛应用的定量评价图像恢复质量的指标,它至少部分地与感知质量有关。值得注意的是,卷积神经网络并不排斥使用其他类型的损失函数,只要损失函数是可导的。如果在训练过程中给出了一个更好的感知动机度量,那么网络就可以灵活地适应该度量。我们以后会研究这个问题。相反,这种灵活性通常很难实现
4.实验
数据集
为了与传统的基于实例的方法进行公平的比较,我们使用了与[20]中相同的训练集、测试集和协议。具体来说,训练集由91幅图像组成。使用Set5[2](5幅图像)评价放大因子2、3、4的性能,使用Set14[28](14幅图像)评价放大因子3。除了91幅图像的训练集,我们还研究了5.2节中更大的训练集。
比较
我们将我们的SRCNN与最先进的SR方法进行了比较:Yang等人的SC(稀疏编码)方法[26],基于k - svd的方法[28],NE+LLE(邻域嵌入+局部线性嵌入)[4],n +NNLS(邻域嵌入+非负最小二乘)[2],锚定邻域回归(ANR)方法[20]。这些实现都来自作者提供的公开可用代码。对于我们的实现,培训是使用cuda-convnet包[14]实现的。
实现细节
根据3.2节,我们在主要计算中设置f1 = 9, f3 = 5, n1 = 64, n2 = 32。我们将在第5节中评估其他设置。对于每个放大因子∈{2,3,4},我们为每一个因子训练一个特定的网络。
在训练阶段,从训练图像中随机抽取32×32像素子图像,得到真值图像{Xi}(对于放大因子3,输入大小为33×33,因此可以除以3)。所谓“子图像”,我们的意思是这些样本被视为小的“图像”,而不是“patches”。在这个意义上,“patches”是重叠的,需要一些平均作为后处理,但“子图像”不需要。为了合成低分辨率样品{Yi},我们使用适当的高斯核对一个子图像进行模糊处理,使用放大因子对其进行子采样,并通过双三次插值对同一因子进行放大。91幅训练图像提供了大约24800幅子图像。从原始图像中提取出步长为14的子图像。我们尝试了更小的步长,但是没有观察到显著的性能改进。从我们的观察来看,训练集足以训练我们提出的深度网络。训练8×108反向传播)在GTX 770 GPU上大约需要3天。
根据[20],我们在实验中只考虑亮度通道(在YCrCb颜色空间中),所以在第一层/最后一层中c = 1。这两个色度通道是双三次上采样的,仅用于显示,不用于培训/测试。注意,我们的方法可以扩展到直接训练彩色图像通过设置c = 3。我们在本文中使用c = 1主要是为了与之前的方法进行公平的比较,因为它们大多只涉及亮度通道。
为了避免训练过程中的边界效应,所有的卷积层都没有填充,网络产生较小的输出(20×20)。MSE损失函数仅仅用来评估Xi中间的 20*20核与网络输出的误差。在处理测试图像时,卷积神经网络可以应用于任意大小的图像。在测试过程中,所有卷积层都有足够的补零,使得输出图像与输入图像大小相同。为了解决边界效应,在每个卷积层中,每个像素处的输出(ReLU之前)由有效输入像素个数进行归一化,有效输入像素个数可以预先计算。
每一层的滤波权值由高斯分布随机抽取,均值为0,标准差为0.001(偏差为0)。前两层的学习速度为10 - 4,后一层的学习速度为10 - 5。我们通过实验发现,最后一层的学习率越小,网络的收敛性越好(类似于去噪情况[12])。
4.1 定量评价
如表1和表2所示,提出的SRCNN产生最高的平均值在所有实验的PSNR。注意,我们的SRCNN结果基于8×108反向传播。具体而言,如表1 (Set5)所示,SRCNN的平均增益分别为0.51 dB、0.47 dB和0.40 dB,在三个向上缩放因子上均高于排名第二的方法ANR[20]。我们注意到,由于测试样本数量有限,Set5可能不是一个结论性的测试集,但是结果表明,所提出的模型能够很好地处理不同的升级因子。在较大的Set14数据集上,我们的SRCNN始终比其他方法有较大的优势(平均≥0.3 dB)。一个当我们使用SSIM[22,21]作为性能指标时,也发现了类似的趋势,其结果可在补充文件中找到。值得指出的是,SRCNN在学习阶段的一开始就超过了双三次基线(见图1),经过适度的训练,SRCNN的表现优于现有的最先进的方法(见图6)。我们推测,如果训练时间较长,可以得到更好的结果(见图6)。在5.2节中,我们将说明,我们的方法也受益于更多的训练数据。图7、图8和图9通过比例因子3显示了不同方法的超分辨率结果。可以观察到,SRCNN产生的边缘比其他方法要尖锐得多,而且图像上没有任何明显的伪影。虽然SRCNN的平均PSNR值是最好的,但是对于Set5中的“baby”和“head”图像,SRCNN并没有达到最高的PSNR。尽管如此,我们的结果在视觉上仍然很吸引人(参见图10)。
4.2 运行时间
图4显示了几种最先进方法的运行时间比较,以及它们的恢复性能。所有基线方法均来自于相应作者的MATLAB实现,而我们的方法则在c++。我们用同一台机器分析了所有算法的运行时间(Intel CPU 3.10 GHz, 16gb内存)。我们的方法在Set14中每幅图像平均花费0.39秒(表2),而其他方法要慢几倍甚至几个数量级。注意速度差距主要不是由MATLAB/ c++实现的不同造成的;相反,其他方法需要在使用上解决复杂的优化问题(如稀疏编码或嵌入),而我们的方法是完全前馈的。我们还注意到,我们的方法的处理时间与测试图像分辨率高度线性,因为所有图像都经过相同数量的卷积。
5 深层分析
5.1 学习过滤器
图5显示了通过缩放因子2对91幅图像(24,800个子图像)进行训练的学习的第一层过滤器的示例。有关放大因子3和4的模式,请参阅我们发布的实现。有趣的是,每个学习过滤器都有其特定的功能。例如,滤波器a和f像拉普拉斯/高斯滤波器,滤波器b、c和d像不同方向的边缘检测器,滤波器e像纹理提取器。我们观察到一些“死”过滤器,它们的权重都接近于零,类似于[27]中观察到的过滤器。然而,如果训练时间足够长,这些死过滤器中的一些可能会出现模式。我们将在以后的工作中研究这一现象。
5.2 从ImageNet学习超分辨率
如文献所示,深度学习一般得益于大数据培训。在上述实验中,我们使用了包含91幅图像的标准训练集,以确保与现有方法的公平比较。在本节中,我们展示了我们的深度模型可以在较大的训练集下获得更好的性能。我们总共使用了来自ILSVRC 2013 ImageNet检测训练分区的395,909张图像进行SRCNN学习。这些图像被分解成500万子图像并使用33的步长。我们使用与上述实验相同的网络设置,即f1 = 9, f3 = 5, n1 = 64, n2 = 32。由于反向传播次数相同,ImageNet上的训练时间与91幅图像上的训练时间基本相同。实验在Set5上进行了测试,使用了向上缩放因子3。在ImageNet上训练的测试收敛曲线和其他方法的结果如图6所示。可以看出,用相同数量的反向传播(即, 8×108), SRCNN+ImageNet达到32.52 dB,高于原始SRCNN对91幅图像(or)训练得到的32.39 dB,24800子图片)。结果表明,使用更大、更多样化的图像训练集可以进一步提高SRCNN的性能
5.3 过滤器数量
与其他CNN结构[14]相比,我们使用相对较小的网络规模来实现超分辨率的最新性能。一般来说,如果我们以运行时间为代价,扩大网络规模,例如增加更多的层和过滤器,性能仍然会提高。在这里,我们评估使用不同数量过滤器的性能。具体来说,根据我们的网络默认设置n1 = 64和n2 = 32,我们又进行了两个实验:
(i)其中一个网络更大,n1 = 128, n2 = 64
(ii)另一个网络较小,n1 = 32, n2 = 16
与第5.2节类似,我们还在ImageNet上对这两个模型进行了培训,并在Set5上进行了缩放因子测试
5.4 过滤器的大小
在本节中,我们将研究网络对不同过滤大小的敏感度。在之前的实验中,我们将第一层的filter size设为f1 = 9,最后一层的filter size设为f3 = 5。这里,我们将过滤器的大小放大到f1 = 11和f3 = 7。所有其他设置与5.2节相同。在Set5上使用缩放因子3的结果为32.57 dB,略高于5.2节中报告的32.52 dB。这表明,一个合理的较大的过滤器大小可以掌握更丰富的结构信息,从而导致更好的结果。然而,随着过滤器大小的增大,部署速度也会降低。因此,网络规模的选择应该始终是性能和速度之间的权衡
6.结论
我们提出了一种新的单图像超分辨率深度学习方法(SR)。结果表明,传统的基于稀疏编码的图像超分辨率方法可以重构为深卷积神经网络。提出的SRCNN方法学习低分辨率和高分辨率图像之间的端到端映射,除了优化之外几乎没有额外的预处理和后处理。 SRCNN结构轻巧,性能优于最先进的方法。我们推测,通过探索网络中更多的隐藏层/过滤器以及不同的训练策略,可以进一步提高性能。此外,该结构具有简单、鲁棒性强等优点,可应用于图像去模糊或同时进行SR+去噪等低阶视觉问题。人们也可以研究一个网络来应对不同的升级因素。