SRCNN
01 闲聊——图像的超分辨率
在一切开始之前,先整体的介绍一下超分辨率(Super Resolution,SR)。超分辨率是一项底层的图像处理任务,将低分辨率映射到高分辨率,图像的超分辨率希望可以达到增强图像细节的作用。图像的模糊(Image blurring)有很多的原因,比如说噪声、压缩损失、采集失误等等。图像的超分辨率是计算机视觉的一个经典应用,通过各种手段,从低分辨率的图像重构为高分辨率的图像,在监控设备、卫星图像、自然场景识别和检测等方面都有很重要的应用价值。
图像的超分辨率从图像角度可以分为单张图像的超分辨率(Single Image Super Resolution,SISR)和多帧图像的超分辨率(Multi-frame Super Resolution,VSR)。我们从单张图像的超分辩开始学习。单张图像超分问题实际上是一个逆问题,一张低分辨率的图像有很多张的高分辨率的图像与其对应,所以我们要有一个准确的高分辨率图像作为先验知识进行规范化约束。我们的后续关于超分的博客也会不断的分享,我们也是刚刚涉猎到超分领域,不足之处还希望大家多多指教!
02 SRCNN——超分和DL的结合
我们开始关注将卷积神经网络用于超分辨率的第一个算法——SRCNN。SRCNN是首个使用CNN结构(即基于深度学习)的端到端的超分辨率算法, SRCNN流程如下:
- 输入预处理:对输入的低分辨率lr图像使用bicubic算法进行放大,放大为目标尺寸。
- 将输入的比较模糊的lr图像,经过卷积网络的处理,得到超分辨率sr的图像,使它尽可能与原图的高分辨率hr图像相似。
02-1 双三次插值
双三次插值(Bicubic interpolation) 是二维空间中最常用的插值方法。在这种方法中,函数f在点 (x,y) 的值可以通过矩形网格中最近的十六个采样点的加权平均得到,在这里需要使用两个多项式插值三次函数,每个方向使用一个。
W
(
x
)
=
{
(
a
+
2
)
∣
x
∣
3
−
(
a
+
3
)
∣
x
∣
2
+
1
for |x|<=1
a
∣
x
∣
3
−
5
a
∣
x
∣
2
+
8
a
∣
x
∣
−
4
a
for 1<|x|<2
0
otherwise
W(x)= \begin{cases} (a+2)|x|^3-(a+3)|x|^2+1 & \text {for |x|<=1} \\ a|x|^3-5a|x|^2+8a|x|-4a & \text{for 1<|x|<2} \\0& \text{otherwise} \end{cases}
W(x)=⎩⎪⎨⎪⎧(a+2)∣x∣3−(a+3)∣x∣2+1a∣x∣3−5a∣x∣2+8a∣x∣−4a0for |x|<=1for 1<|x|<2otherwise
其中a=0.5;
∑
i
=
0
3
∑
j
=
0
3
a
i
j
x
i
y
j
\sum^3_{i=0}\sum^3_{j=0} a_{ij}x^iy^j
i=0∑3j=0∑3aijxiyj
其中 x i x_i xi和 y j y_j yj就是分别指的(i,j)点在水平方向和垂直方向上的两个多项式插值三次函数的值即 W ( i ) W(i) W(i)和 W ( j ) W(j) W(j)。
02-2 SRCNN的网络结构
下面是SRCNN的结构图:
SRCNN的结构较简单,整个卷积网络包括三个卷积层,甚至没有池化和全连接层,但都通过Relu函数三个卷积层使用的卷积核的大小分为为9x9,,1x1和5x5,前两个的输出特征个数分别为64和32。:
- 对低分辨率的图进行卷积操作,生成
n
1
n_1
n1维的feature maps
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) - 对
n
1
n_1
n1维的feature map进行卷积操作生成
n
2
n_2
n2维 feature maps
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) - 对
n
2
n_2
n2维的feature maps进行卷积生成超分辨的图像(反卷积)
F ( Y ) = W 3 ∗ F 2 ( Y ) + B 3 F(Y)=W_3∗F_2(Y)+B_3 F(Y)=W3∗F2(Y)+B3
分别对应三个处理流程:
- 提取图像特征: 从低分辨率图像中提取多个patch图像块,每个块被卷积操作表示为多维的向量(维数等于filter的数量),所有的特征向量组成特征矩阵(feature maps)
- 非线性映射: 将 n 1 n_1 n1维特征矩阵,通过卷积操作实现非线性映射,变成另一n2维特征矩阵。
- 重构图像: 等于是个反卷积的过程,将n2的特征矩阵还原为超分辨图像
想特别提出的一点:所谓非线性映射指的是地位的LR图像的特征向高维图像HR的特征的映射,而所应用的函数是Relu非线性函数,所以为非线性映射。
个人对这个网络理解为对于一个传统超分方法(双三次插值)的应用CNN的优化方案。而其精髓则在于将SC的超分方法用卷积神经的方法表达出来。并最终实现对LR图像的特征提取,非线性映射和重构过程。
02-3 Training 训练阶段
从GroundTruth里选择图片并对其进行剪裁从而生成子图片。并对这些字图片应用升尺度因子进行子采样,最后再用双三次插值将其放大到相同大小。损失函数为MSE,通过从具有零均值和标准偏差0.001(和偏差为0)的高斯分布中随机绘制来初始化每个层的滤波器权重。前两层的学习率为 1 0 − 4 10^{−4} 10−4,最后一层的学习率为 1 0 − 5 10^{−5} 10−5。
03 EXPERIMENTS 实验阶段
1.对比卷积核大小(filter size)、卷积核数量(filter numbers)对复原效果的影响的实验
经过实验后的结论:卷积核数量越多,即特征向量维数越高,实验效果越好,但是会影响算法速度,故需要综合考虑;另外三层卷积层的卷积核大小越大,实验效果也会略微更好,同样会影响算法速度。
2.对比网络层数(layer numbers)对复原效果的影响的实验
经过实验后的结论:并非网络越深,效果越好,结果恰恰相反。作者也给出了解释:因为SRCNN没有池化层和全连接层,导致网络对初始参数和学习率非常敏感,结果即网络训练的时候非常难以收敛,即使收敛了也可能停在了坏的局部最小值(bad local minimum)处,并且即使训练了足够的时间,学习到的filter参数的分散度也不够好。
3.与最前沿的其他超分算法对比速度与性能的实验
数据集选择的是ImageNet上的Set14、Set5(指14幅图像和5幅图像),对比对象是Bicubic、SC、NE+LLE、KK、ANR与SRCNN。
4.算法速度
通过实验可以看出提出的SRCNN实现了最先进的超分辨率质量,同时与现有的基于实例的方法相比保持了高的和竞争的速度。
5.在更大训练数据下的表现
结果表明,使用更大、更多样化的图像训练集可以进一步提高SRCNN的性能。
04 对于一些名词的理解
- PSNR是"Peak Signal to Noise Ratio"的缩写,即峰值信噪比,是一种评价图像的客观标准,它具有局限性,一般是用于最大值信号和背景噪音之间的一个工程项目。具体的可以参见我们的博客【Super Resolution】超分辨率的总结——评价指标
- NE+:一组邻域嵌入方法,利用最近邻搜索(nearest neighbor search)在字典中选择若干LR候选patch,并利用它们的HR版本重构HR输出patch,重构方法可能是最小二乘(NE+LS)、局部线性嵌入(NE+LLE)、非负最小二乘(NE+NNLS)。
- SC或SrSC:找到稀疏表示来稀疏近似输入的LR patch,然后利用得到的系数稀疏生成相应的HR输出patch。
- KK:采用核匹配跟踪和梯度下降相结合的稀疏方法,基于核脊回归(kernel ridge regression,KRR),直接从输入LR图像学习到目标HR图像的映射。
- A+,ANR和GR:锚定邻域回归(Anchored Neighborhood Regression,ANR)是一种改进K-SVD和SC的方法,它引入脊回归(可离线求解,每个字典原子/锚都可存储)。一个不太精确但更有效的变异是采用了全局回归,因此,GR. A+ (advanced ANR)这个名称是后来改进的方法,与ANR不同,它不仅从字典原子中学习,还学习了局部邻域锚(anchor)的所有训练patch。虽然具有类似的时间复杂性,但已经证明A+的性能优于ANR和GR。
感谢其他博客大大们的分享,我们引用了下述博客,再次表示感谢!!!
https://blog.csdn.net/PPLLO_o/article/details/90040801
https://blog.csdn.net/qq_34885184/article/details/79163991
https://blog.csdn.net/clover_my/article/details/90481015