Learning a Deep Convolutional Network for Image Super-Resolution
学习用于图像超分辨率的深度卷积网络
摘要:我们提出了一种单幅图像超分辨率(SR)的深度学习方法。我们的方法直接学习低/高分辨率图像之间的端到端映射。该映射表示为以低分辨率图像为输入,高分辨率图像为输出的深层卷积神经网络(CNN)[15]。我们进一步表明,传统的基于稀疏编码的SR方法也可以被视为一个深层卷积网络。但与单独处理每个部分的传统方法不同,我们的方法联合优化了所有层。我们的深层CNN具有轻量级的结构,但展示了最先进的恢复质量,并实现了实际在线使用的快速度。
关键词:超分辨率,深度卷积神经网络
1 简介
单图像超分辨率(SR)是计算机视觉中的一个经典问题。近来,最先进的单图像超分辨率方法大多是基于实例的。这些方法要么利用同一副图像的内部相似性[7,10,23],要么从外部低分辨率和高分辨率样本对中学习映射函数[2,4,9,13,20,24 - 26,28]。外部基于示例的方法通常提供了丰富的样本,但面临有效和紧凑的数据建模困难的挑战。
基于稀疏编码的方法[25,26]是基于外部样例的图像超分辨率的代表性方法之一。该方法在其算法流程中涉及到几个步骤。首先,从图像中密集地提取重叠的块并进行预处理(例如,减去平均值)。然后用低分辨率字典对这些块进行编码。将稀疏系数传递到高分辨率字典中,用于重建高分辨率块。将重叠的重构块进行聚合(或平均)以产生输出。以前的SR方法特别关注学习和优化字典[25,26]或对它们建模的替代方法[4,2]。然而,流程中的其余步骤很少被优化或被考虑在统一的优化框架中。
在本文中,我们展示了前面提到的流程相当于一个深层卷积神经网络[15](更多细节见3.2节)。受此启发,我们直接考虑了一个卷积神经网络,它是低分辨率和高分辨率图像之间的端到端映射。我们的方法从根本上不同于现有的外部基于示例的方法,因为我们的方法没有明确地学习字典[20,25,26]或流形[2,4]来建模块空间。这些都是通过隐藏层隐式实现的。此外,块的提取和聚合也被表述为卷积层,因此涉及到优化。在我们的方法中,整个SR流程完全通过学习获得,前期/后期处理很少。
我们将提出的模型命名为超分辨率卷积神经网络(SRCNN)。所提出的SRCNN有几个吸引人的特性。首先,与最先进的基于示例的方法相比,它的结构设计得简单,但却提供了更高的准确性。图1显示了一个示例的比较。其次,通过适度数量的过滤器和层,我们的方法即使在CPU上也能实现快速的实际在线使用。我们的方法比一些基于实例的方法要快,因为它是完全前馈的,不需要解决任何使用方面的优化问题。第三,实验表明,当(i)有更大的数据集可用,或(ii)使用更大的模型时,网络的恢复质量可以进一步提高。相反,更大的数据集/模型对现有的基于实例的方法可能具有一定的挑战。
总的来说,这项工作的贡献主要体现在三个方面:
1. 我们提出了一种用于图像超分辨率的卷积神经网络。该网络直接学习低分辨率和高分辨率图像之间的端到端映射,除了优化之外,几乎没有预处理/后处理。
2. 我们建立了基于深度学习的SR方法与传统的基于稀疏编码的SR方法之间的关系。这种关系为网络结构的设计提供了指导。
3. 我们证明了深度学习在经典的超分辨率计算机视觉问题中是有用的,并且可以达到很好的质量和速度。
2 相关工作
图像超分辨率:一类最先进的SR方法[9,4,25,26,24,2,28,20]学习低/高分辨率块之间的映射。这些研究的差异在于如何学习一个小型的字典或流形空间来关联低/高分辨率的块,以及如何在这样的空间中进行表示方案。在Freeman等人的先驱工作[8]中,字典直接呈现为低/高分辨率补丁对,并且在低分辨率空间中找到输入补丁的最近邻域(NN),并利用其对应的高分辨率补丁进行重建。Chang等人介绍了一种流形嵌入技术,作为NN策略的替代方案。在Yang等人的工作[25,26]中,上述NN对应关系发展为更复杂的稀疏编码公式。这种基于稀疏编码的方法及其若干改进[24,20]是当今最先进的SR方法之一。在这些方法中,补丁是优化的重点;块提取和聚合步骤被认为是预处理/后处理,分别处理。
卷积神经网络:卷积神经网络(CNN)的历史可以追溯到几十年前[15],最近由于其在图像分类方面的成功[14]而呈现出爆炸性的流行。在这一进展中,有几个因素至关重要:(i)在现代功能强大的GPU[14]上的高效训练实现,(ii)整流线性单元(ReLU)[18]的提议使收敛速度更快,同时仍然呈现出良好的质量[14],以及(iii)易于访问大量数据(如ImageNet[5])用于训练更大的模型。我们的方法也从这些进展中受益。
图像恢复的深度学习:已经有一些使用深度学习技术进行图像恢复的研究。所有层都是完全连接的(与卷积相反)多层感知器(MLP),应用于自然图像去噪[3]和去模糊后去噪[19]。与我们的工作更密切相关的是,卷积神经网络应用于自然图像去噪[12]和去除噪声模式(污垢/雨水)[6]。这些恢复问题或多或少都是由去噪解决的。相反,就我们所知,图像超分辨率问题中还没有深度学习技术的使用。
3 用于超分辨率的卷积神经网络
3.1 公式
考虑一张低分辨率的图像。我们首先使用双三次插值将其扩大到所需的大小,这是我们执行的唯一预处理。将插值后的图像表示为Y。我们的目标是从Y中恢复图像F(Y),图像F(Y)尽可能与真实的高分辨率图像X相似。为了便于表示,我们仍然称Y为“低分辨率”图像,尽管它与X具有相同的大小。我们希望学习映射F,它在概念上由三个操作组成:
1.块的提取和表示:该操作从低分辨率图像Y中提取(重叠)块,并将每个块表示为高维向量。这些向量组成了一组特征映射,其数量等于向量的维数。
2. 非线性映射:此操作将每个高维向量非线性地映射到另一个高维向量上。每个映射的向量在概念上都是一个高分辨率块的表示。这些向量组成了另一组特征图。
3. 重建:此操作将上述高分辨率块进行聚合,生成最终的高分辨率图像。该图像预计与实际的高分辨率图像X相似。
我们将证明这些操作形成一个卷积神经网络。网络的概述如图2所示。接下来我们详细介绍每个操作的定义。
块的提取和表示:一种流行的图像恢复策略(例如[1])是密集地提取块,然后用一组预训练的基(如PCA、DCT、Haar等)来表示它们。这相当于用一组滤波器对图像进行卷积,每个滤波器都是一个基。在我们的公式中,我们将这些基的优化纳入到网络的优化中。形式上,我们的第一层被表示为一个操作F1:
其中W1和B1分别表示滤波器和偏置。这里W1的大小为c×f1×f1×n1,其中c为输入图像中的通道数,f1为滤波器的空间大小,n1为滤波器的数量。直观上,W1在图像上应用了n1个卷积,每个卷积都有一个核大小c×f1×f1。输出由n1个特征映射组成。B1是一个n1维的向量,它的每个元素都与一个过滤器相关联。我们将Rectified Linear Unit (ReLU, max(0, x))应用在过滤器中。
非线性映射(nonlinear mapping):第一层为每个块提取一个n1维的特征。在第二个操作中,我们将这些n1维向量中的每一个映射到n2维。这相当于应用n2个过滤器,它们有一个微不足道的空间支持1×1(意思为过滤器大小为1×1)。第二层的操作是:
这里W2的大小为n1×1×1×n2, B2的大小为n2维。每个输出的n2维向量在概念上都是一个将用于重建高分辨率块的表示。
可以添加更多的卷积层(其空间支持为1x1)来增加非线性。但这可能会显著增加模型的复杂性,因此需要更多的训练数据和时间。在本文中,我们选择在这个操作中使用单个卷积层,因为它已经提供了令人信服的性能。
重建:在传统方法中,通常对预测的重叠高分辨率斑块进行平均,以产生最终的完整图像。这种平均可以看作是一组特征映射(其中每个位置都是高分辨率补丁的“扁平”向量形式)上的预定义滤波器。受此启发,我们定义了一个卷积层来生成最终的高分辨率图像:
这里W3的大小为n2×f3×f3×c, B3是c维向量。
如果高分辨率补丁的表示在图像域中(即,我们可以简单地重塑每个表示来形成补丁),我们期望滤波器的作用类似于平均滤波器;如果高分辨率补丁的表示在其他域中(例如,一些基的系数),我们期望W3的行为类似于首先将系数投影到图像域上,然后平均。无论哪种方式,W3都是一组线性滤波器。
有趣的是,虽然上述三种操作的动机基于不同的直觉,但它们都导致了与卷积层相同的形式。我们把这三种操作放在一起,形成了一个卷积神经网络(图2)。在这个模型中,所有的过滤权重和偏置都要进行优化。
尽管整体结构简洁,但我们的SRCNN模型是通过吸取超分辨率的重大进展所带来的丰富经验而精心开发的[25,26]。我们将在下一节中详细介绍这种关系。
3.2 与基于稀疏编码的方法的关系
我们证明了基于稀疏编码的SR方法[25,26]可以被视为卷积神经网络。图3给出了一个图解。
在基于稀疏编码的方法中,让我们考虑从输入图像中提取一个f1×f1低分辨率补丁。这个块减去它的均值,然后投影到一个(低分辨率)字典上。如果字典大小为n1,这相当于在输入图像上应用n1个线性滤波器(f1×f1))(平均减法也是一个线性操作,因此可以被吸收)。如图3的左侧部分所示。
然后将稀疏编码求解器应用于投影的n1个系数(例如,参见Feature-Sign求解器[17])。这个求解器的输出是n2个系数,并且通常在稀疏编码的情况下n2= n1。这n2个系数就是高分辨率块的表示。从这个意义上说,稀疏编码求解器表现为一个非线性映射算子。见图3中间部分。然而,稀疏编码求解器不是前馈的,也就是说,它是一个迭代算法。相反,我们的非线性算子是完全前馈的,可以高效地进行计算。我们的非线性算子可以被认为是一个逐像素的全连接层。
然后将上述n2个系数(稀疏编码之后)投影到另一个(高分辨率)字典上,以生成高分辨率补丁。然后对重叠的高分辨率块求平均值。如上所述,这相当于对n2个特征映射进行线性卷积。如果用于重建的高分辨率补丁大小为f3×f3,则线性滤波器具有大小为f3×f3的等效空间支持。见图3右侧部分。
以上讨论表明,基于稀疏编码的SR方法可以看作是一种卷积神经网络(具有不同的非线性映射)。但在基于稀疏编码的SR方法的优化中,并没有考虑到所有的操作。相反,在我们的卷积神经网络中,低分辨率字典、高分辨率字典、非线性映射,以及均值减法和平均,都涉及到要优化的滤波器。所以我们的方法优化的是一个端到端的映射,它包含了所有的操作。
上面的类比也可以帮助我们设计超参数。例如,我们可以将最后一层的滤波器大小设置为小于第一层的滤波器大小,这样我们就可以更多地依赖于高分辨率贴片的中心部分(极端情况下,如果f3= 1,我们使用的是中心像素,没有进行平均)。我们也可以设置n2< n1,因为我们期望它更稀疏。典型的设置是f1= 9,f3= 5,n1= 64,n2= 32(我们在实验部分评估了更多的设置)。
3.3 损失函数
学习端到端映射函数F需要估计参数Θ= {W1,W2,W3,B1,B2,B3}。这是通过最小化重构图像F(Y;Θ)与其对应的真实高分辨率图像X之间的损失得到的。给定一组高分辨率图像{Xi}及其对应的低分辨率图像{Yi},我们使用均方误差(Mean Squared Error, MSE)作为损失函数:
其中n为训练样本的个数。使用标准反向传播[16]的随机梯度下降将损失最小化。
使用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],NE+NNLS(邻居嵌入+非负最小二乘)[2],以及ANR(锚定邻域回归)方法[20],进行了比较。实现方法均来自作者提供的公开可用代码。对于我们的实现,训练是使用cuda-convnet包[14]实现的。
实现细节:根据3.2节,我们在主要的评估中设置了f1= 9,f3= 5,n1= 64和n2= 32。我们将在第5节中评估其他设置。对于每个升级因子∈{2,3,4},我们为该因子训练一个特定的网络。
在训练阶段,真实图像{Xi}是从训练图像中随机裁剪的32×32子图像。对于“子图像”,我们的意思是这些样本被视为小的“图像”而不是“补丁”,从某种意义上说,“补丁”是重叠的,需要一些平均作为后处理,但“子图像”不需要。为了合成低分辨率样本{Yi},我们通过适当的高斯核模糊子图像,通过升级因子对其进行子采样,并通过双三次插值对其执行相同升级因子。91张训练图像提供了大约24,800张子图像。这些子图像是从原始图像中提取出来的,步幅为14。我们尝试了更小的步幅,但没有观察到显著的性能改善。从我们的观察来看,训练集足以训练提出的深度网络。在GTX 770 GPU上,训练(8×108反向传播)大约需要三天时间。
依据[20],我们在实验中只考虑亮度通道(在YCrCb色彩空间中),因此第一层/最后一层c = 1。两个色度通道仅用于显示而进行双三次上采样,而不用于训练/测试。注意,我们的方法可以通过设置c = 3扩展到直接在彩色图像上进行训练。我们在本文中使用c = 1主要是为了与之前的方法进行公平的比较,因为大多数方法只关注亮度通道。
为了避免训练过程中的边界效应,所有的卷积层都没有填充,网络产生的输出更小(20 ×20)。MSE损失函数仅通过Xi的中心20 ×20块与网络输出之间的差值来评估。在处理测试图像时,卷积神经网络可以应用于任意大小的图像。在测试过程中,所有的卷积层都被给予足够的零填充,使输出图像与输入图像具有相同的大小。为了解决边界效应,在每个卷积层,每个像素处的输出(在ReLU之前)通过有效输入像素的数量进行归一化,这是可以预先计算出来的。
每一层的滤波器权重初始化是通过从均值为零、标准差为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值,但所提出的SRCNN在Set5的“婴儿”和“头部”图像上并没有达到最高的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张图像(或24,800张子图像)上训练的32.39 dB。结果表明,使用更大、更多样化的图像训练集可以进一步提高SRCNN的性能。
5.3 过滤器的数量
与其他CNN结构[14]相比,我们使用相对较小的网络规模来实现超分辨率的最先进性能。一般来说,如果我们扩大网络规模,例如增加更多的层和过滤器,性能仍然会提高,但代价是运行时间。在这里,我们评估了使用不同数量的过滤器的性能。具体来说,基于我们的网络默认设置n1= 64和n2= 32,我们进行了两个额外的实验:(i)一个是使用n1= 128和n2= 64的较大网络,(ii)另一个是使用n1= 32和n2= 16的较小网络。与第5.2节类似,我们也在ImageNet上训练两个模型,并在Set5上使用升级因子3进行测试。结果如表3所示。很明显,使用更多的滤波器可以实现更优的性能。然而,如果需要快速的恢复速度,则首选较小的网络规模,这仍然可以获得比最先进的性能更好的性能。
5.4 过滤器的大小
在本节中,我们将检查网络对不同过滤器大小的敏感性。在之前的实验中,我们将第一层的过滤器大小设置为f1= 9,将最后一层的过滤器大小设置为f3= 5。在这里,我们将过滤器大小扩大到f1= 11和f3= 7。所有其他设置与第5.2节保持相同。Set5上放大因子为3的结果为32.57 dB,略高于第5.2节展示的32.52 dB。这表明,合理较大的滤波器尺寸可以掌握更丰富的结构信息,从而获得更好的结果。然而,随着过滤器尺寸的增大,速度也会下降。因此,网络规模的选择始终是性能和速度之间的权衡。
6 结论
我们提出了一种新的单幅图像超分辨率(SR)深度学习方法。我们表明,传统的基于稀疏编码的图像超分辨率方法可以重新表述为深度卷积神经网络。所提出的方法SRCNN,学习低分辨率和高分辨率图像之间的端到端映射,除了优化之外几乎没有额外的预处理/后处理。SRCNN具有轻量化的结构,具有比最先进的方法优越的性能。我们推测,通过探索网络中更多的隐藏层/过滤器,以及不同的训练策略,可以进一步获得额外的性能。此外,所提出的结构具有简单和鲁棒性的优点,可以应用于其他低层次的视觉问题,如图像去模糊或同时SR+去噪。人们还可以研究一个网络来应对不同的升级因素。