Image Super-resolution Using Dee
前言
打算写些文档记录一下自己看过的一些经典的论文,不然过一段时间都忘记自己看过的文章了。算是对自己文档写作能力的一个锻炼,也是对自己的某种监督吧。
这篇论文是16年发表于TPAMI的关于图像超分辨率的,是较早的将深度学习应用在图像超分辨率的工作,相较于传统的基于稀疏表示的字典学习方法,一定程度上提升了图像重建的质量。
原文链接:[SRCNN]
http://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=7115171
摘要
这篇文章提出了用深度卷积神经网络(CNN)进行图像的超分辨率重建。网络输入为低分辨率图像经过双三次插值后的图像,网络输出为超分辨率重建图像。网络由三个卷积层组成,完成了由低分辨率图像到高分辨率图像的端到端的映射。在文章中,作者Chao Dong et. al还解释了SRCNN网络与基于稀疏表示的图像超分辨率方法的关系。在实验部分也展示了不同网络层数、卷积核大小等对重建结果的影响。
SRCNN的网络结构
![](https://img.haomeiwen.com/i9423818/75bd58bd4bf587b5.png)
SRCNN的网络结构如上图所示,由三个卷积神经网络组成,分别为图像块提取与表示层、非线性映射层及图像重建层。作者将这三层网络分别与基于稀疏表示的SR的三个步骤对应。
1. Patch Extraction and Representation
在图像恢复(restoration) 任务中,常常通过对图像进行密集采样,然后用预训练的原子进行表示。这些原子通常由PCA、DCT、Haar等方法训练得到。这个提取图像块及表示过程等价于用一组卷积核对图像进行卷积,每一个卷积核可以看作一个对应的原子。第一层用 $F_1$ 来表示:
$$F_1\left ( Y \right )=max\left ( 0, W_1*Y+B_1 \right )$$
这里$W_1$和$B_1$分别代表卷积核的权重和偏置。通过第一层的卷积,我们对每个图像块提取出了$n_1$维的特征图。
2. Non-linear Mapping
通过第二层的卷积,将上面得到的$n_1$维特征映射为$n_2$维特征。作者认为这个$n_2$维特征可以看做是对高分辨率图像块的特征表示。这一层卷积核的大小为$1\times1$、或者$3\times3$、$5\times5$。第二层可以表示为:
$$F_2\left ( Y \right )=max\left ( 0, W_2*F_1\left ( Y \right )+B_1 \right )$$
这一层对应于基于稀疏表示的图像超分辨率中,低分辨率稀疏编码向量到高分辨率稀疏编码向量的映射过程。
3. Reconstruction
在传统的SR算法中,通常将重建图像块重叠部分取平均作为最后的输出。这样的取平均操作可以看作是“预训练”的卷积操作。 第三层可以定义为:
$$F_3\left ( Y \right )=max\left ( 0, W_3*F_2\left ( Y \right )+B_1 \right )$$
三个卷积层与基于稀疏表示的SR的对应关系如下图所示:
这里想要说明的一个感受野的问题:如Fig.3图中,我们最终重建结果的一个点(红圈中的黄点)是利用其周围一定范围领域内(蓝色虚线框内)像素点的信息重建的。例如,如果三层卷积的卷积核大小分别为:$9\times9$、$1\times1$和$5\times5$,最终每个像素点重建就会利用到周围$\left ( 9+5-1 \right )^{2}=169$个像素点的信息。这就是感受野的含义。后续的一些改进工作比如VDSR、DRCN等都是着眼于增大感受野的范围来提高超分辨率结果。
训练
要训练一个端到端的映射$F$要求估计得到的网络参数$\Theta =\left { W_1, W_2, W_3, B_1, B_2, B_3 \right }$能使得网络的输出结果$F\left(Y; \Theta \right)$尽可能的接近原来的高分辨率图像$X$。因此,网络的损失函数定义为SR与GT的欧氏距离,其实也就是MSE:
$L\left ( \Theta \right )=\frac{1}{n}\sum_{n}^{t=1}\left | F(Y_i; \Theta )-X_i \right |$
其中,$n$为训练样本的总数。使用MSE作为损失函数可以得到更高的PSNR值。(这里我想吐槽一句,虽然SR用PSNR作为重建的指标,但是高PSNR并不意味着重建结果越好。SR是病态问题,这就意味着可能解有无穷多个。以MSE(PSNR)为loss函数得到的解往往是这些可能解的平均,而不是最优解。这就导致以MSE为loss的SR算法得到的结果有些区域看起来过于模糊,缺乏应有的细节。)
网络训练的优化方法采用的是随机梯度下降法,$W_i$用方差为0.001的标准正态分布初始化,$B_i$初值为0。权重更新的方法如下:
$\Delta _{i+1}=0.9\Delta _{i}+\eta \frac{\partial L}{\partial \Theta _i}, \Theta _{i+1}=\Theta _{i}+\Delta _{i+1}$
结果与分析
SRCNN的结果与传统的state-of-the-art的对比如下表,虽然其性能提升有限,但是作为较早的(开创性的?)将深度学习引入SR的工作还是有很大意义的。
再一个问题就是,作为一个比较初期的基于深度学习的SR模型,其网络结构只有三层,如此这样“浅的”网络模型也导致其收敛速度非常慢,要训练到$10^9$个epoch才会得到比较满意的结果。
其后,很多工作例如VDSR、DRCN都设法引入更多的卷积层以及残差学习来构造更深的网络,获取了更好的重建效果。
第一次写博客,难免有些错误和不足,欢迎大家批评指正!