- 学习资料
- 论文题目: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. 构想
3.1.1. 预处理操作
对于一张低分辨率图片,首先使用双三次插值将其放大到所需大小,这是唯一的预处理操作。经过插值后的图像记为,虽然它与真实高分辨率图像大小相同,但仍称为 “低分辨率” 图像。
目的
对于低分辨率图片,我们希望将其恢复为高分辨率图像。
双三次插值是这个过程中的第一步预处理操作,它的目的是将低分辨率图像的尺寸放大到我们期望的高分辨率图像的大致尺寸。
原理
双三次插值是一种基于周围像素值来估计新像素值的方法。它考虑了目标像素周围一个较大区域(通常是 4×4 的像素邻域)的像素信息,通过复杂的加权计算来确定新的像素值。这样可以使放大后的图像在一定程度上保持平滑和自然的过渡,避免出现明显的锯齿状或块状的不连续现象。
“低分辨率” 称呼的原因
尽管经过双三次插值后图像的尺寸与真实高分辨率图像相同,但它仍然被称为 “低分辨率” 图像。这是因为仅仅通过插值操作并没有真正恢复图像的细节和清晰度,它只是在尺寸上进行了放大,图像的实质内容仍然是低分辨率的质量水平。后续还需要通过一系列的操作(如 SRCNN 中的 Patch 提取和表示、非线性映射和重建等操作)来进一步提高图像的分辨率和质量,使其真正接近或达到高分辨率图像的水平。
就比如说把 4×4 的低分辨率图像通过双三次插值变为 16×16 后,虽然图像的像素数量增多了(尺寸变大),但每个像素所包含的信息并没有实质性的改变,图像仍然缺乏高分辨率图像应有的细节和清晰度,所以分辨率还是低的。这种放大后的图像只是在空间维度上进行了扩展,但并没有在分辨率这个关键属性上得到本质提升。后续需要进一步的处理才能让它真正具有高分辨率图像的质量。
3.1.2. 目标任务
目标是从中恢复出图像,使其尽可能与真实高分辨率图像相似,也就是要学习映射。
3.1.3. 映射F的组成概念
映射在概念上由三个操作组成,所有这些操作形成一个卷积神经网络,如图所示。
第一层:Patch提取和表示
就像是把低分辨率图像分成很多小块(patch)。传统方法是用一些预先准备好的工具(基)来表示这些小块,但 SRCNN 把这些工具的优化放到网络里一起做。
。
是滤波器,大小为,其中是输入图像通道数,是滤波器空间大小,是滤波器数量。它在图像上应用个卷积,每个卷积核大小为,输出由个特征图组成。
是维向量,每个元素与一个过滤器相关联。
在滤波器响应上应用。
第二层:非线性映射
该操作将每个高维向量非线性映射到另一个高维向量上。每个映射的向量在概念上是一个高分辨率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的性能
在 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. 学习超分辨率滤波器
滤波器功能展示
展示了在 91 张放大因子为 2 的图像(24800 个子图像)上训练得到的第一层滤波器示例。
每个滤波器具有特定功能,如有的像拉普拉斯 / 高斯滤波器,有的像边缘检测器,有的像纹理提取器,同时存在一些权重接近于零的 “死” 滤波器。
“死” 滤波器现象探讨
- 观察到一些 “死” 滤波器,类似已有研究中的现象。
- 推测如果训练时间足够长,部分 “死” 滤波器可能会出现模式,此现象将在未来工作中进一步研究。
5.2. 从 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. 未来研究方向探讨
我们推测,可以通过探索网络中更多的隐藏层/过滤器,以及不同的训练策略来进一步获得额外的性能。
此外,所提出的结构具有简单和鲁棒性的优点,可以应用于其他低层次的视觉问题,如图像去模糊或同时SR+去噪。
人们还可以研究一个网络来应对不同的放大因素。