1. SRCNN
Home page
http://mmlab.ie.cuhk.edu.hk/projects/SRCNN.htmlECCV 2014,TPAMI 2015,2018年被引超1000次。
1.1. Contribution
end-to-end深度学习应用在超分辨领域的开山之作(非 end-to-end 见 Story.3 )。
指出了超分辨方向上传统方法( sparse-coding-based SR methods )与深度学习方法的关系,insightful 。
SRCNN网络非常简单,PSNR、SSIM 等却有小幅提升(< 1dB)。
应用(测试)时是完全 feed-forward ,因此网络速度比传统方法快。
1.2. Inspiration
SR 的本质 & 可行性
This problem (SR) is inherently ill-posed since a multiplicity of solutions exist for any given low-resolution pixel.
Such a problem is typically mitigated by constraining the solution space by strong prior information.
用样本训练 CNN ,就是在利用先验知识。CNN 为什么比传统方法更简单还更好用
传统方法中,各个组件是分离的,比如图像预处理和字典学习。
传统方法着重于学习和优化 dictionaries ,但对其他部分鲜有优化。
但 SRCNN 是一个 LR 和 HR 之间的端到端网络。
其训练过程中的优化是一体的,比如,其卷积层负责 patch extraction and aggregation ,隐藏层充当 dictionaries ,统一被优化。
因此,我们只需要极少的 pre/post-processing ,同时能实现对整体框架的全面优化。特征表示方法的不同
过去,我们用 a set of pre-trained bases such as PCA, DCT, Haar 来表示 patches 。
现在,我们用不同的卷积核,就实现了多样化的表示。更简单:由于 overlapping ,因此卷积使用的像素信息比简单的字典映射更多。
1.3. Network
1.3.1. Pre-processing
将低分辨率的图片,通过 Bicubic interpolation 得到 \(\mathbf Y\) 。
注意我们仍然称之为 low-resolution image 。
1.3.2. Patch extraction and representation
从 \(\mathbf Y\) 提取出 overlapping patches ,每一个 patch 都代表一个 high-dimensional vector 。
这些向量共同组成 a set of feature maps 。
每一个 vector 的维数,既是总特征数,也是 feature map 的总数。
\[
F_1(\mathbf Y) = max(0, W_1 * \mathbf Y + B_1)
\]
1.3.3. Non-linear mapping
通过一个非线性变换,由原 high-dimensional vector 变换到另一个 high-dimensional vector 。
该 high-dimensional vector 又组成了一个 set of feature maps ,在概念上代表着 high-resolution patch 。
\[
F_2(\mathbf Y) = max(0, W_2 * F_1(\mathbf Y) + B_2)
\]
1.3.4. Reconstruction
生成接近 ground truth: \(\mathbf X\) 的 output 。
过去常用取平均的方法。实际上,平均也是一个特殊的卷积。
因此我们不妨直接用一个卷积。
此时,输出patch不再是简单的平均,还可以是频域上的平均等(取决于 high-dimensional vector 的性质)。
\[
F_3(\mathbf Y) = W_2 * F_2(\mathbf Y) + B_3
\]
注意不要再非线性处理。
1.4. Story
- 深度CNN日益受欢迎的3大诱因:
- 更强大的GPU;
- 更多的数据(如ImageNet);
- ReLU的提出,加快收敛的同时保持良好质量。
- CNN此前被用于 natural image denoising and removing noisy patterns (dirt/rain) ,用于 SR 是头一回。
这就是讲好故事的重要性,无非是映射 pairs 不同。 - auto-encoder 也曾被用于超分辨网络,但仍没有摆脱 separated framework 的弊端。
1.5. Further Learning
Traditional sparse-coding-based SR methods.
从低分辨率图像到 \(\mathbf Y\) 采用的是 Bicubic interpolation ,实际上也是卷积。但为什么不当作卷积层呢?
文中解释,因为输出比输入还大,为了有效利用 well-optimized implementations sucha as cuda-convnet ,就暂且不当作一个“层”。
事实上,当输出大于输入时,CNN的效率会很低。可以继续往下学,后面就会逐渐体会。
2. FSRCNN
Home page
http://mmlab.ie.cuhk.edu.hk/projects/FSRCNN.html2016 ECCV ,2018年被引超250次。
2.1. 亮点
将单个 wide mapping layer 分解成多个 layers with fixed filter size \(3 \times 3\) 。
复杂的非线性映射是最消耗运算资源的。减小尺寸,加大层数,极大提高了运算速度。取消了 SRCNN 前端的双三次插值,将 LR 直接输入网络。
进一步减小了参数数量,进而提高了运算速度。-
在 FSRCNN 末端采用反卷积层,而不是简单的插值升采样。
- 反卷积层从 high-dimensional feature maps 和真实 HR 中学习多个卷积核,实现了超越一般插值的恢复效果。
- 由于放在网络末端,因此网络运算速度与 HR 尺寸无关。
- HR 尺寸可调,并且只需要重新训练利用特征的反卷积层,而不需要重新训练提取特征的CNN网络。
用PReLU替换ReLU,可以避免由 0 梯度带来的 dead features 现象。实验证明它更稳定。
2.2. Improvement
- 与SRCNN相比,速度提升了17到40倍(小型FSRCNN),在一般的CPU上实现了实时性。
原SRCNN在3倍 upsample \(240 \times 240\) 图像时,帧率只有1.32。但实时性要求24fps,差17倍。 - 恢复质量不减反升。
2.3. Analysis
限制原SRCNN运算速度的两大主谋:
升采样。设升采样因子为 \(n\) ,则运算时间增长至 \(n^2\) 倍。
非线性映射。该层越大,恢复质量越高,但时间越长。
对应的解决方法:
取消网络前端的升采样,在网络末端采用反卷积 deconvolution 。
此时,由于输入网络的是 LR ,因此运算时间只和 LR 图像的尺寸成比例。把单个大的非线性映射层,分解为多个小的固定大小的滤波器。
2.4. Network
整体形状像一个前端小,后端大的沙漏:
我们着重理解一下最后的反卷积。
先回顾卷积:
假设输出维数为 \(d\) ,则对于每一维,都有一个特定的卷积核(相当于一个匹配模板)。
同一个卷积核,要对输入的每一个通道的每一个patch进行相同系数的卷积运算。
这样,输出的每一维都是一个 feature map ,组成一个有厚度的 feature maps 。
而反卷积恰好相反。
对于输入的 feature maps ,网络需要找到最佳的卷积核,使得输出经卷积运算后逼近 feature maps 。
前面的CNN,在大小固定,计算量受限的情况下,尽全力让 feature maps 承载足够的信息;
后面的反卷积层,即根据 \(d\) 种不同的特征,尽全力恢复 HR 图像。
由于每一个 map 的含义都不尽相同,因此如果将反卷积替换成一般的插值,PSNR将剧烈下降。
这是实验得到的反卷积图像,显然都学到了不同的特征:
反卷积还有一个好处:
当我们希望输出不同大小的 HR 图片时,我们只需要对该层进行调整,而不需要重新训练前面的CNN网络。
实验结果表明,PSNR基本没有变化。
理论解释是,前面的CNN只起到抽象特征的作用,如何从有限的特征恢复图像,基本上属于反卷积的任务。
2.5. Inspiration
通过减小单个层的体积,可以有效减小运算复杂度。
后面的 expanding 的表面作用是辅助升采样,本质作用是提高恢复质量(提高学习复杂度)。
实验证明,如果取消这一环节,PSNR会有0.3dB左右的下降。
理解:把一个相对 low-dimensional 的 feature maps 直接交给反卷积层学习,是困难的。
2.6. Further Learning
De-convolution.
下一节介绍。CNNs acceleration.
PReLU.
3. ESPCN
2016 CVPR ,2018年引用超380次。
TensorFlow代码:https://github.com/Tetrachrome/subpixel & https://github.com/drakelevy/ESPCN-TensorFlow
3.1. Similarity & Network
作者的观点与FSRCNN有许多相似之处。在论文中提到:
Additionally, as noted by Dong et al. [6], there are no efficient implementations of a convolution layer whose output size is larger than the input size and well-optimized implementations such as convnet [21] do not trivially allow such behaviour.
因此,本文作者同样没有将 upscaling 放到CNN网络之中,并且也是在网络的最末端设置了一个额外的 upscaling 层: sub-pixel convolution layer ,以增强网络的实时性。
总而言之,卷积层不能在 HR space 上运作,否则计算成本就会很高。
3.2. The Drawback of Transposed Convolution ( Deconvolution )
本文也提到了转置卷积操作,同时指出:
However, any reduction (summing) after convolution is expensive.
关于转置卷积及其低效的解释,有以下推荐参考(点击超链接):
图解:
- 在原像素点周围补零;
- 将 kernel 转置(为什么?首先卷积可以看作一个稀疏矩阵乘法,则为了从相同尺寸的输出得到相同尺寸的“输入”,乘法矩阵就要转置);
- 然后进行正常卷积即可。
注意,我们是将kernel转置而不是求逆,因此转置卷积准确来说不应该称为逆卷积。
转置卷积可以用于 feature maps 可视化,但在运算速度上存在致命缺点:
- 首先,卷积是 highly parallelizable 的,原因在于卷积核对于某一维特征而言是固定的,因此可以并行计算各个patch。相比之下,转置卷积却很复杂。
- We should add zero values to the upscale the image, that have to be later filled in with meaningful values.
- Maybe even worse, these zero values have no gradient information that can be backpropagated through.
3.3. Efficient Sub-pixel Convolution Layer
为此,作者提出了新的 upscaling 结构:Efficient subpixel convolution layer 。
虽然名字带“卷积”,但具体实现居然只是一个简简单单的“PS”(重排)!!
重排方式见 Network 。其中要求通道数为 \(r^2\) ,这样才能实现重排。
为什么高效?
- CNN仍然是在 LR space 上进行。
- upscaling 是简单的重排,没有卷积运算。
为什么精度不降反升?
尽管重排是线性的,但前面的CNN是非线性的。
CNN的训练不再注重于简单的特征提取,而是注重于组合规则下的特征提取,并且速度更快的同时层数还能更多。
3.4. 亮点
A key assumption that underlies many SR techniques is that much of the high-frequency data is redundant and thus can be accurately reconstructed from low frequency components.
4. VDSR
Home page (MatConvent)
https://cv.snu.ac.kr/research/VDSR/2016 CVPR ,2018年引用超730次。
TensorFlow代码:https://github.com/Jongchan/tensorflow-vdsr
学习这个网络前,要了解残差学习网络:我的另一篇博客
关于 SR 问题,作者指出3大限制因素:
It relies on the context of small image regions;
Training converges too slowly;
The network only works for a single scale.
为此,本文提出以下措施:
不再只从 LR 的小 patch 中获取信息,而利用 very big image regions ;
不再用重排和转置卷积,而是和 SRCNN 一样用插值法,一开始就得到同输出尺寸的图片。采用残差学习;
作者认为,LR 图片中的低频信息被保留到 HR 图片中,需要重构的只有高频信息。
因此,低频映射没有必要学习,而是直接迁移即可。这是残差学习的一个比较好的解释。采用较高的学习率( SRCNN 的 \(10^4\) 倍)以及 Adjustable gradient clipping ;
让梯度保持在一个较好的范围内。Scale factor 可调,可以包含分数。比如需要缩放图片观看时很有用。
不需要重复训练网络,网络适应性非常好。
方法:训练集中包含多种尺寸的图片,同时训练。
其他特别之处:
由于深度的贡献非常明显,因此采用20层网络结构。
虽然滤波器尺寸固定为 \(3 \times 3\) ,但感受野仍然很大。在图片边缘,由于卷积不能很好地执行,因此传统方法往往会裁掉边缘区域再输出。
而 VDSR 在每一层卷积前都填充 0 ,包括最后的输出也填充0。
这样做的效果非常好,图像边缘也被很好的预测了。
当图像信息被充分挖掘后,0 位置再填上有意义的数。