学习资料
- 论文题目:Learning a Deep Convolutional Network for Image Super-Resolution(学习深度卷积网络用于图像超分辨率)
- 论文地址:link.springer.com/content/pdf/10.1007/978-3-319-10593-2_13.pdf
- 代码:作者提出的代码(matlab、caffe)Learning a Deep Convolutional Network for Image Super-Resolution其他人复现的代码(pytorch)fuyongXu/SRCNN_Pytorch_1.0: The implemention of SRCNN by pytorch1.0 (github.com)
Abstract
研究主题:这篇论文提出了一种用于单图像超分辨率(SR)的深度学习方法。
核心方法:
- 直接学习映射(ours):方法是直接学习低分辨率和高分辨率图像之间的端到端映射。这个映射是通过一个深度卷积神经网络(CNN)来表示的,也就是把低分辨率图像作为输入,让网络输出高分辨率图像。
- 与传统方法的关联:研究还表明传统的基于稀疏编码的超分辨率方法也能被看作是一个深度卷积网络。不过传统方法是分开处理各个组件的,而本文提出的方法是联合优化所有层。
模型优势:
- 结构轻巧且效果好:这个深度 CNN 结构很轻巧,但却展示出了最先进的恢复质量。
- 速度快:在实际的在线使用中能够实现快速处理。
关键词:超分辨率、深度卷积神经网络
直接学习映射:想象我们有一个神奇的 “机器”(也就是深度卷积神经网络),它的任务是把模糊的小图片(低分辨率图像)变成清晰的大图片(高分辨率图像)。这个 “机器” 不是通过一些复杂的中间步骤去猜测如何变清晰,而是直接去学习模糊图片和清晰图片之间的一种对应关系,就像小孩子直接学习认识苹果和苹果的图片之间的联系一样,这就是端到端的映射。这个学习过程是让网络自己去发现规律,输入模糊的,输出清晰的,不断调整自己内部的设置来达到最好的效果。
与传统方法的关联:传统的基于稀疏编码的超分辨率方法也有点像一个处理图片的 “工具”,但这个 “工具” 的内部结构和我们提出的新方法不太一样。传统的这个 “工具” 就像一个组装不太好的玩具,它里面各个零件(组件)是分开处理的,比如先处理图片的一部分,再处理另一部分,没有整体地去优化。而我们提出的新方法呢,就像一个设计精良的智能机器人,它会把所有的零件(层)都联合起来考虑,一起优化,让整个 “机器” 运行得更好,更能准确地把模糊图片变成清晰图片。
1. 介绍
1.1. 研究背景
单图像超分辨率(SR)是计算机视觉中的经典问题。
目前最先进的单图像超分辨率方法大多基于样例,包括利用同一图像内部相似性或外部低和高分辨率样本对学习映射函数,但外部基于样例的方法面临有效和紧凑建模数据的困难。
基于稀疏编码的方法是基于外部样本的图像超分辨率代表性方法之一,其流程包括补丁提取和预处理、编码、重建、聚合输出等步骤,以往方法主要关注字典学习和优化,对流水线其他步骤很少统一优化。
基于稀疏编码的 SR 方法流水线相当于一个深度卷积神经网络,并受此启发进行研究。
1.2. 研究内容
提出一个名为SRCNN的卷积神经网络,它是低分辨率图像和高分辨率图像之间的端到端映射。
SRCNN有几个吸引人的特性:
1. 首先,其结构故意设计为简单,但与最先进的基于实例的方法相比,提供了卓越的准确性(根据峰值信噪比(Peak Signal - to - Noise Ratio,PSNR)进行数值评估)
2. 适度的过滤器和层数,我们的方法实现了快速的实际在线使用,即使在CPU上。我们的方法比一系列基于实例的方法更快,因为它是完全前馈的,不需要解决使用上的任何优化问题。
3. 对于这个网络(SRCNN)来说,如果满足以下两个条件中的一个或者两个同时满足,它的恢复质量就能进一步提高。
- 条件一:有更大的数据集可用。就好比学生学习,如果有更多的练习题(数据),那么学生对知识的掌握和运用能力可能会更强。对于网络来说,更多的数据意味着它可以学习到更多不同的低分辨率和高分辨率图像之间的关系模式,从而更好地恢复图像。(更勤奋)
- 条件二:使用更大的模型。可以把模型想象成一个更复杂、功能更强大的工具。更大的模型可能有更多的层、神经元或者参数,就像一个更复杂的机器能够处理更复杂的任务一样,它能够更好地学习和拟合低分辨率和高分辨率图像之间的映射关系,进而提高恢复质量。(更聪明)
3. 当有更大的数据集或者更大的模型时,不仅对提出的 SRCNN 网络有好处,同时也会给现有的基于样例的方法带来挑战。
现有的基于样例的方法往往依赖于特定的样例数据和相对固定的模型结构来学习低分辨率和高分辨率图像之间的映射关系。当出现更大的数据集时,它们可能无法像 SRCNN 那样有效地利用这些数据,因为它们的学习方式可能不够灵活。
而且如果使用更大的模型,基于样例的方法可能需要重新调整它们的算法和策略,因为它们的核心是基于样例的学习,而不是像 SRCNN 那样基于网络结构自身的优化和学习。
2. 相关工作
2.1. Image SR
先进 SR 方法的核心:一些先进的 SR 方法是学习低 / 高分辨率斑块之间的映射。
差异所在:在如何构建关联低 / 高分辨率补丁的紧凑字典或流形空间,以及在该空间中的表示方案上存在差异。
具体方法示例:
- Freeman 等人:字典以低 / 高分辨率补丁对形式呈现,通过找最近邻居重建。
- Chang 等人:引入流形嵌入技术替代最近邻居策略。
- Yang 等人:将对应关系发展为稀疏编码公式,其及改进是先进方法之一,重点优化补丁,提取和聚合分别处理。
2.2. CNN
历史与流行原因:卷积神经网络(CNN)历史悠久,可追溯到几十年前。它最近非常流行,部分是因为在图像分类方面取得了成功。
关键进展因素
- 高效训练:能够在现代强大的 gpu 上高效训练,这使得模型能够更快地学习和调整参数。
- ReLU 单元:修正线性单元(ReLU)的应用加快了收敛速度,同时保证了良好的质量。
- 丰富数据:容易获取如 ImageNet 等丰富的数据来训练更大的模型,从而提高模型的性能和泛化能力。
我们的方法也从这些进展中受益。
2.3. 图像恢复(深度学习)
深度学习用于去噪
多层感知器(MLP),其所有层都是全连接的(与卷积相比),用于自然图像去噪和去模糊后去噪。
卷积神经网络被应用于自然图像去噪和去除噪声模式(污垢/雨水)。
深度学习用于图像超分辨率问题
相反,就我们所知,图像超分辨率问题并没有见证深度学习技术的使用。
3. 用于超分辨率的卷积神经网络
3.1. 预处理操作
原文
对于一张低分辨率图片,首先使用双三次插值将其放大到所需大小,这是唯一的预处理操作。经过插值后的图像记为,虽然它与真实高分辨率图像大小相同,但仍称为 “低分辨率” 图像。
笔记
双三次插值是一种基于周围像素值来估计新像素值的方法。它考虑了目标像素周围一个较大区域(通常是 4×4 的像素邻域)的像素信息,通过复杂的加权计算来确定新的像素值。这样可以使放大后的图像在一定程度上保持平滑和自然的过渡,避免出现明显的锯齿状或块状的不连续现象。
尽管经过双三次插值后图像的尺寸与真实高分辨率图像相同,但它仍然被称为 “低分辨率” 图像。这是因为仅仅通过插值操作并没有真正恢复图像的细节和清晰度,它只是在尺寸上进行了放大,图像的实质内容仍然是低分辨率的质量水平。后续还需要通过一系列的操作(如 SRCNN 中的 Patch 提取和表示、非线性映射和重建等操作)来进一步提高图像的分辨率和质量,使其真正接近或达到高分辨率图像的水平。
就比如说把 4×4 的低分辨率图像通过双三次插值变为 16×16 后,虽然图像的像素数量增多了(尺寸变大),但每个像素所包含的信息并没有实质性的改变,图像仍然缺乏高分辨率图像应有的细节和清晰度,所以分辨率还是低的。这种放大后的图像只是在空间维度上进行了扩展,但并没有在分辨率这个关键属性上得到本质提升。后续需要进一步的处理才能让它真正具有高分辨率图像的质量。
3.2. 目标任务
目标是从中恢复出图像,使其尽可能与真实高分辨率图像相似,也就是要学习映射。
3.3. 映射F的组成概念★
映射在概念上由三个操作组成,所有这些操作形成一个卷积神经网络,如图所示。
3.3.1. 第一层:Patch提取和表示
原文
从低分辨率图像中提取并以特定方式表示出多个(重叠的)Patch,为后续的非线性映射和图像重建做准备。
。
是滤波器,大小为,其中是输入图像通道数,是滤波器空间大小,是滤波器数量。它在图像上应用个卷积,每个卷积核大小为,输出由个特征图组成。
是维向量,每个元素与一个过滤器相关联。
在滤波器响应上应用。
笔记
理解
这个操作就像是把一张低分辨率图像拆分成很多小块(Patch),然后用一种特殊的方式来描述这些小块。
想象我们有一张低分辨率图像,就像一个由很多小方块组成的拼图。我们用一组滤波器(就像不同形状的小筛子)在这个图像上滑动,每个滤波器覆盖的区域就是一个 Patch。这些滤波器会提取出每个 Patch 的特征,然后把这些特征组合成一个高维向量。
比如说,滤波器的大小是,这里是图像的通道数(如果是彩色图像可能是 3,如果是灰度图像就是 1),是滤波器的空间大小(决定了它一次覆盖图像多大的区域),是滤波器的数量(有很多个这样的滤波器来提取不同的特征)。这些滤波器在图像上滑动后,会得到个特征图,每个特征图上的每个点对应的向量就是一个 Patch 的一种表示方式。
滤波器Filter&卷积核kernel
“Filter” 通常更强调其作为一个整体的过滤器的概念,它是一个可以对输入数据进行某种筛选或特征提取的工具。一个 Filter 可能包含多个 Kernel(在多维卷积的情况下)。例如,在一个卷积层中,我们可能会说有多个 Filter 在并行地对输入图像进行处理,每个 Filter 都试图提取一种不同类型的特征。一个 Filter 可能是多维的,尤其是在处理彩色图像或多维数据时。例如,对于一个彩色图像的卷积层,一个 Filter 可能有三个通道(对应 RGB)以及空间维度(如 3x3)。而 Kernel 通常更强调其空间维度的小矩阵结构,对于彩色图像,可能会对每个通道分别有一个 Kernel,然后这些 Kernels 共同构成一个 Filter。
“Kernel” 更侧重于指这个小的矩阵本身的数学结构和参数。它是 Filter 在进行卷积操作时实际使用的核心部分。例如,我们会讨论 Kernel 的大小(如 3x3、5x5 等)、它的元素值(这些值是通过学习得到的)等。
为什么将图像分为 patch(小块)再进行卷积 ?
处理大规模数据,需要降低计算复杂度
图像通常是一个二维的大规模数据矩阵,如果直接对整个图像进行卷积操作,计算量会非常大。例如,对于一个较大尺寸的彩色图像,其像素数量可能达到数百万甚至数千万。直接对这样的图像进行卷积,需要大量的计算资源和时间。
将图像划分为较小的 patch 后,每次卷积操作只针对一个较小的区域进行,大大降低了计算量。这样可以在有限的计算资源下更高效地完成卷积操作,提高计算速度。
更好地捕捉局部特征
图像的很多特征是局部性的,比如边缘、纹理、角点等。这些局部特征对于图像的理解和分析非常重要。例如,在图像识别中,物体的边缘特征可能是区分不同物体的关键。
通过将图像划分为 patch,可以更专注地对每个小块区域内的局部特征进行提取和分析。每个 patch 都可以看作是一个局部的 “观察窗口”,滤波器在这些小窗口上进行卷积操作,能够更准确地捕捉到局部的边缘、纹理等特征信息,而不会被图像其他区域的信息所干扰。
神经网络的层次结构
在卷积神经网络(CNN)中,通常包含多个卷积层和池化层等。将图像划分为 patch 后,在每个卷积层中,滤波器可以对 patch 进行卷积操作,提取出不同层次的特征。这种分层的特征提取方式符合 CNN 的层次结构设计理念,使得网络能够逐步从局部特征中学习到更复杂的图像特征。
例如,在第一层卷积层中,可能提取出一些简单的边缘和纹理特征(通过对 patch 的卷积);在后续的卷积层中,这些特征会进一步组合和抽象,形成更高级的特征表示,最终实现对图像的分类、超分辨率重建等任务。
学习的局部性和并行性
神经网络的学习过程通常是基于局部信息进行更新的。将图像划分为 patch 后,网络可以针对每个 patch 的特征进行学习和调整,这种局部学习方式有助于提高学习效率和准确性。
同时,对多个 patch 的处理可以并行进行,进一步提高了计算效率。例如,在一个 GPU 上,可以同时对多个 patch 进行卷积操作,充分利用 GPU 的并行计算能力。
3.3.2. 第二层:非线性映射
原文
该操作将每个高维向量非线性映射到另一个高维向量上。每个映射的向量在概念上是一个高分辨率patch的表示。这些向量组成了另一组特征图。
第一层为每个 patch 提取了特征,第二层要将这些特征向量中的每一个映射为 向量。
的大小是,相当于应用个具有空间支持的过滤器。是。
笔记
我们把上一步得到的每个特征向量当作输入,然后用另一组滤波器来处理它们。这组滤波器很特别,它们的空间支持很小,是,就像只看每个向量中的一个小元素。这组滤波器的大小是。
通过这些滤波器的作用,每个输入向量会被非线性地映射到一个向量。这个过程就像是把原来的特征向量按照一种新的规则重新组合和变换,得到的新向量在概念上是一个更高分辨率 Patch 的一种表示方式,它包含了更多适合重建高分辨率图像的信息。
3.3.3. 第三层:重建
原文
把第二步得到的所有代表高分辨率小块的向量再组合起来,就像把很多拼图碎片拼成一幅完整的图,最终得到一个高分辨率的图像,这个图像要尽可能和原始的高分辨率图像相似。
笔记
我们有了很多经过非线性映射得到的高分辨率 Patch 的表示(以向量的形式存在),现在要把它们变成一张完整的图像。我们用一组新的滤波器来做这件事,这些滤波器的大小是。
这些滤波器会把每个 Patch 的表示按照它们在图像中的位置进行组合和调整,就像把拼图的各个小块准确地拼在一起。如果高分辨率 Patch 的表示在图像域(比较容易理解的形式),这些滤波器的作用可能类似于平均滤波器,把相邻的 Patch 表示平滑地连接起来;如果是在其他一些域(比如根据某些基的系数),则会先把系数投影到图像域再进行组合。最终,通过这些滤波器的作用,就得到了我们想要的高分辨率图像。
3.2. 与基于稀疏编码的方法的关系
3.2.1. 共同点
基于稀疏编码的SR方法与SRCNN在三个操作上的共同点
3.2.2. 不同点
基于稀疏编码的 SR 方法的优化中,没有考虑到所有的操作。
在卷积神经网络中,低分辨率字典、高分辨率字典、非线性映射,以及均值减法和平均,都涉及到要优化的滤波器中,优化了一个由所有操作组成的端到端映射。
3.3.3. 通过类比帮助设计超参数
可以将最后一层的滤波器尺寸设置为比第一层小,更依赖于高分辨率 patch 的中心部分。
可以设置,因为预计它会更稀疏,一个典型的设置是。
3.3. 损失函数
3.3.1. 定义
公式
使用均方误差(Mean Squared Error, MSE)作为损失函数
参数说明
给定一组高分辨率图像及其对应的低分辨率图像,再重建出图像
学习端到端的映射函数需要估计参数
其中是训练样本的数量。
3.3.2. 优化方法
采用标准反向传播的随机梯度下降来最小化损失函数。
3.3.3. 选择的考量
MSE 的优势
- 使用 MSE 作为损失函数有利于获得高 PSNR(峰值信噪比)。
- PSNR 是广泛用于定量评价图像恢复质量的度量,且至少部分与感知质量相关。
卷积神经网络的灵活性
- 卷积神经网络并不局限于使用 MSE 作为损失函数,只要其他损失函数是可导的,就可以使用。
- 如果在训练过程中给出更好的感知激励指标,网络能够灵活适应,这是传统方法难以做到的。
4. 实验
4.1. 实验准备
4.1.1. 数据集
原文
使用与Anchored Neighborhood Regression for Fast Example-Based Super-Resolution (cv-foundation.org)中相同的训练集、测试集和协议。
训练集由 91 张图像组成
使用 Set5(5 张图片)评估放大因子2、3、4的性能
使用 Set14(14 张图片)评估放大因子3的性能
笔记
在图像超分辨率处理中,需要将低分辨率图像放大到与高分辨率图像相近的尺寸,这个放大的倍数就是放大因子。例如,对于一个低分辨率图像,如果要将其放大到原来的 2 倍、3 倍或 4 倍大小,这里的 2、3、4 就是放大因子。
针对每个放大因子,需要训练一个特定的网络。例如,对于每个上尺度因子∈{2,3,4},为该因子训练一个特定的 SRCNN(超分辨率卷积神经网络)。在训练过程中,根据放大因子合成低分辨率样本,如通过适当的高斯核模糊子图像,通过放大因子对其进行子采样,并通过双三次插值以相同的因子对其进行放大。
在 5.2 节还研究了一个更大的训练集(ILSVRC 2013 ImageNet 检测训练分区中的 395,909 张图像)。
4.1.2. 比较方法
将 SRCNN 与最先进的 SR 方法进行比较:
包括 Yang 等人的 SC(稀疏编码)方法
基于K-SVD的方法
NE + LLE(邻居嵌入 + 局部线性嵌入)
NE + NNLS(邻居嵌入 + 非负最小二乘)
ANR(锚定邻域回归)方法
(看到表格中还加了双三次插值(BiCubic插值)方法,应该是作为baseline,SC、K-SVD、NE + LLE、NE + NNLS、ANR、SRCNN都是在BiCubic处理后的基础上进行处理)
4.1.3. 实现细节
根据 3.2 节,设置,并在第 5 节评估备选设置。
对于每个上尺度因子,训练一个特定的网络。
准备训练数据:将 ground truth images裁剪为的子图像,通过适当处理合成低分辨率样本。91 张训练图像提供约 24800 张子图像。
网络设置:所有卷积层无填充;网络产生更小输出,MSE 损失函数通过中心裁剪与网络输出差异评估;测试时,卷积层给予零填充使输出与输入同大小,并对输出进行归一化处理;仅考虑亮度通道,可扩展到彩色图像;各层滤波器权重初始化,前两层学习率为,最后一层学习率为。
4.2. 实验结果分析
4.2.1. 定量评价(PSNR)
PSNR 指标对比
在所有实验中,本文提出的 SRCNN 平均 PSNR 最高。
在 Set5 数据集上,对于三个放大因子,SRCNN 实现的平均增益分别为 0.51dB、0.47dB 和 0.40dB,高于次优方法 ANR。尽管 Set5 可能不是结论性测试集,但表明模型能处理不同上尺度因子。
在更大的 Set14 数据集上,SRCNN 始终优于其他方法(平均≥0.3dB)。
当使用 SSIM 作为性能指标时,也有类似趋势,结果在补充文件中。
与其他方法对比的起始表现和训练效果
SRCNN 在学习阶段一开始就超过了双立方基线,并且在适度训练下,性能优于现有的最先进的方法。但性能还远远没有收敛,推测给定更长的训练时间,可以获得更好的结果。
超分辨率结果的视觉效果
展示了放大因子 3 下不同方法的超分辨率结果图。可以观察到,SRCNN 比其他方法产生更清晰的边缘,并且在图像上没有任何明显的伪影。
尽管 SRCNN 在 Set5 的 “婴儿” 和 “头部” 图像上并没有达到最高的 PSNR,但结果在视觉上仍然很吸引人。
4.2.2. 运行时间(Time)
运行时间比较
比较了几种最先进方法的运行时间和恢复性能。所有基线方法从相应作者的 MATLAB 实现中获得,而 SRCNN 用c++实现。在同一台机器(Intel CPU 3.10GHz 和 16GB 内存)上分析运行时间。
速度优势原因
SRCNN 在 Set14 中平均每张图像花费 0.39 秒,比其他方法快几倍甚至几个数量级。速度差距主要不是由不同的 MATLAB/c++实现引起,而是因为其他方法需要在使用上解决复杂的优化问题(例如,稀疏编码或嵌入),而 SRCNN 是完全前馈的。
还注意到 SRCNN 的处理时间与测试图像分辨率高度线性,因为所有图像都经过相同数量的卷积。
5. 进一步的分析
5.1. 滤波器功能
对SRCNN的滤波器filter进行分析。
图5展示了放大因子2在91张图像(24800个子图像)上训练的学习到的第一层滤波器的例子。(关于放大因子3和4的模式,请参阅我们发布的实现)
有趣的是,每个学习到的滤波器都有其特定的功能:
滤波器a和f就像拉普拉斯/高斯滤波器
滤波器b、c和d就像不同方向的边缘检测器
滤波器e就像纹理提取器
我们观察到一些“死”的滤波器,它们的权重都接近于零
然而,如果训练时间足够长,一些“死”滤波器中可能会出现模式。我们将在未来的工作中研究这一现象。
5.2. 训练集变大ImageNet
之前用的是91张图像的数据集,现在换一个数据集,看一下用ImageNet训练的SRCNN怎么样。
训练集介绍
ImageNet 是一个大规模的图像数据库,包含了大量的图像数据,涵盖了各种各样的物体类别。
使用 ILSVRC 2013 ImageNet 检测训练分区中的 395,909 张图像进行 SRCNN 学习,这些图像被分解为超过 500 万个小图像,步幅为 33。
实验设置与结果
使用与之前实验相同的网络设置。
在 Set5 上进行放大系数为 3 的测试,结果表明在相同反向传播次数下,在 ImageNet 上训练的 SRCNN 达到的 PSNR 高于在 91 张图像上训练的结果,证明使用更大、更多样化的图像训练集可进一步提高 SRCNN 性能。
5.3. 滤波器数量
实验设置
基于网络默认设置和,进行两个额外实验:一个使用和的较大网络,另一个使用和的较小网络。
两个模型都在 ImageNet 上训练,并在 Set5 上使用升级因子 3 进行测试。
结果分析
结果显示使用更多的过滤器可以实现更优越的性能,但如果想要快速的恢复速度,较小的网络规模是首选,且仍能实现比最先进性能更好的效果。
5.4. 滤波器大小
实验设置
将第一层的滤波器大小从放大为,最后一层的滤波器大小从放大为,其他设置保持与在 ImageNet 上训练的相关设置相同。
结果分析
在 Set5 上放大因子为 3 的结果表明,合理大的滤波器尺寸可以掌握更丰富的结构信息,带来更好的结果,但过滤器尺寸越大,部署速度会降低,因此网络规模的选择应权衡性能和速度。
6. 结论
6.1. 研究成果总结
提出新方法:提出一种新的单幅图像超分辨率(SR)深度学习方法。
建立方法关系:表明传统的基于稀疏编码的图像超分辨率方法可以重新表述为深度卷积神经网络。
介绍提出方法的特点:提出的方法 SRCNN 学习低分辨率和高分辨率图像之间的端到端映射,除优化外几乎没有额外的预处理 / 后处理;由于结构轻巧,SRCNN 的性能优于最先进的方法。
6.2. 未来研究方向探讨
1. 探索网络中更多的隐藏层/过滤器,以及不同的训练策略
2. SRCNN具有简单和鲁棒性的优点,可以将他应用于其他低层次的视觉问题(如图像去模糊,同时SR+去噪)
3. 研究一个网络来应对不同的放大因素。