1. 综述
原文:Learning a Deep Convolutional Network for Image Super-Resolution
- 文章指出Sparse-coding-based方法中的管线可以等同于一个深度学习网络。
- 在真实图像已知的情况下,评价方法有:PSNR(峰值信噪比), SSIM, multi-scale SSIM, information fidelity criterion(IFC), noise quality measure(NQM), weighted peek signal-to-noise ratio(WPSNR), multi-scale structure similarity index(MSSSIM)
- 模型有进一步提升的空间,主要来自两个方面:更大更多样的数据集;更大更深层的网络模型
- 性能上比传统非机器学习的方法更快;
- 可以RGB三个颜色通道同时处理,比只训练Y通道可以得到更好的结果。
- CNN的爆炸式发展得益于几点:
- (i) GPU性能的提高大大提升了训练速度[14];
- (ii) Rectified Linear Unit(ReLU)的提出使得收敛得到比较好的结果的速度更快[18];
- (iii) 大规模数据集更好获取,如ImageNet[5]
- SRCNN首次采用深度学习的方法来解决super-resolution的问题。之前也有用多层感知机(MLP)来解决图像去噪问题的,如natural image denoising[3], post-deblurring denoising[19]。也有用CNN方法来解决图像的恢复问题,如natural image denoising[12], removing noisy patterns (dirt/rain)[6].
2. 步骤
2.1 数据预处理
将训练数据集中的原始源(Ground Truth)分割成 32 ∗ 32 32*32 32∗32大小的子图。如果放大倍数是3,就分割成 33 ∗ 33 33*33 33∗33,因为可以被3整除。将子图进行一系列处理:
- [Blur]选择一个合适的高斯核进行模糊处理
- [Sub-sample]使用Bicubic插值按倍数缩小
- [Upscale]使用Bicubic插值按倍数放大 (这一步其实也是卷积操作,但是为了方便使用convnet所以没有将这一步放在网络中?[14])
用上面的方法将91-Image数据集按步长14分割成24800张子图作为训练的输入。尝试更小的步长没有发现明显的改进。
2.2 Patch提取和表示
使用
n
1
n_1
n1 个
f
1
∗
f
1
f_1 * f_1
f1∗f1大小的filter进行卷积操作生成
n
1
n_1
n1 张特征图。然后进行Relu操作(
m
a
x
(
0
,
x
)
max(0,x)
max(0,x))。
B
1
B_1
B1是偏置向量,
W
1
W_1
W1大小为
c
∗
f
1
∗
f
1
∗
n
1
c * f_1 * f_1 * n_1
c∗f1∗f1∗n1。
c
c
c 是输入图片的通道输入。
F
1
(
Y
)
=
m
a
x
(
0
,
W
1
∗
Y
+
B
1
)
F_1(Y) = max(0, W_1 * Y + B_1)
F1(Y)=max(0,W1∗Y+B1)
2.3 非线性映射
使用
n
2
n_2
n2 个
1
∗
1
1 * 1
1∗1 的filter进行卷积操作。然后进行Relu操作。
F
2
(
Y
)
=
m
a
x
(
0
,
W
2
∗
F
1
(
Y
)
+
B
2
)
F_2(Y) = max(0, W_2 * F_1(Y) + B_2)
F2(Y)=max(0,W2∗F1(Y)+B2)
2.4 重建
使用 c 个
f
3
∗
f
3
f_3 * f_3
f3∗f3的filter进行卷积操作。
F
(
Y
)
=
W
3
∗
F
2
(
Y
)
+
B
3
F(Y) = W_3 * F_2(Y) + B_3
F(Y)=W3∗F2(Y)+B3
3. 数据集
- ImageNet。从ImageNet中选取395909张图片,然后用步长33再分割成500万张子图。SRCNN+ImageNet训练放大三倍,在Set5数据集测试得到32.52dB;SRCNN+91Image训练放大三倍,在Set5数据集测试得到32.39dB。
- 91-Image
- BSD300
- BSD500
- Set5(Test)
- Set14(Test)
- BSD100(Test)
4. 实现
4.1 原始版本
论文作者实现的原始版本是用Matlab + Caffee实现的,地址在这。没有看到C++代码,看来还是有所保留的。
4.2 其他版本
在github上找了几个其他人实现的版本:
- Tensorflow版。https://github.com/tegg89/SRCNN-Tensorflow
- Keras版。https://github.com/qobilidop/srcnn
- Pytorch版。https://github.com/icpm/super-resolution.git
5. Future
- 实验更多的隐藏层
- deblurring
- SR + denoising
6. 参考
参考文章的标号和原文保持一致。
[3] Burger, H.C., Schuler, C.J., Harmeling, S.: Image denoising: Can plain neural networks compete with BM3D? In: CVPR. pp. 2392–2399 (2012)
[5] Deng, J., Dong, W., Socher, R., Li, L.J., Li, K., Fei-Fei, L.: ImageNet: A large-scale hierarchical image database. In: CVPR. pp. 248–255 (2009)
[6] Eigen, D., Krishnan, D., Fergus, R.: Restoring an image taken through a window covered with dirt or rain. In: ICCV. pp. 633–640 (2013)
[12] Jain, V., Seung, S.: Natural image denoising with convolutional networks. In: NIPS. pp. 769–776 (2008)
[14] Krizhevsky, A., Sutskever, I., Hinton, G.: ImageNet classification with deep convolutional neural networks. In: NIPS. pp. 1097–1105 (2012)
[16] LeCun, Y., Bottou, L., Bengio, Y., Haffner, P.: Gradient-based learning applied to document recognition. Proceedings of the IEEE 86(11), 2278–2324 (1998)
[18] Nair, V., Hinton, G.E.: Rectified linear units improve restricted Boltzmann machines. In: ICML. pp. 807–814 (2010)
[19] Schuler, C.J., Burger, H.C., Harmeling, S., Scholkopf, B.: A machine learning approach for non-blind image deconvolution. In: CVPR. pp. 1067–1074 (2013)