深度学习超分辨率第一篇论文—— SRCNN 原理和实验细节


SRCNN 

(SRCNN 深度学习用于SR问题第一篇论文)

1 简介

超分辨率(super resolution)的任务目标是将输入的低分辨率的图像转换为高分辨率的图像,与图像去噪、图像去模糊等一脉相承。超分辨率关注的是从小尺寸到大尺寸图像如何填充新的像素;图像去噪则是关注在图像尺寸不变的情况下,将被“噪声污染”的像素替换为正确的像素。

SRCNN是首个使用CNN结构(即基于深度学习)的端到端的超分辨率算法,这个相当于什么呢?就像faster R-CNN在目标检测的地位一样,将整个算法流程用深度学习的方法实现了,并且效果比传统多模块集成的方法好。

SRCNN流程如下:首先,输入预处理。对输入的低分辨率LR图像使用bicubic算法进行放大,放大为目标尺寸。那么接下来算法的目标就是将输入的比较模糊的LR图像,经过卷积网络的处理,得到超分辨率SR的图像,使它尽可能与原图的高分辨率HR图像相似。

2 网络模型

 

 

 

 

SRCNN的结构较简单,整个卷积网络包括三个卷积层,没有池化和全连接层。如图所示

  1. 对低分辨率的图进行卷积操作,生成n1维的feature maps。
  2. 对n1维的feature map进行卷积操作生成n2维 feature maps。
  3. 对n2维的feature maps进行卷积生成超分辨的图像。

3 设计思路

作者这个思路是从稀疏编码得来的,并把上述过程分别表述为:Patch extraction, Non-linear mapping, Reconstruction。

Patch extraction: 提取图像Patch,进行卷积提取特征,类似于稀疏编码中的将图像patch映射到低分辨率字典中。

 

Non-linear mapping: 将低分辨率的特征映射为高分辨率特征,类似于字典学习中的找到图像patch对应的高分辨字典 

Reconstruction:根据高分辨率特征进行图像重建。类似于字典学习中的根据高分辨率字典进行图像重建。

 

 

4  处理流程

1提取图像特征:从低分辨率图像中提取多个patch图像块,每个块被卷积操作表示为多维的向量(维数等于filter的数量),所有的特征向量组成特征矩阵(feature maps)

2非线性映射:将n1维特征矩阵,通过卷积操作实现非线性映射,变成另一n2维特征矩阵。

3重构图像:等于是个反卷积的过程,将n2的特征矩阵还原为超分辨图像模型训练的优化参数是三层卷积层对应的卷积核(w)和bias(b),参数P={W_1,W_2,W_3,b_1,b_2,b_3}。训练的目标损失是最小化超分辨率图像F(Y;P)与原高分辨率图像X基于像素的均方误差MSE,定义如下:

                                      

 

 

其中n是训练样本数量,即每次训练的样本数量。接下来无非就是随机梯度下降法反向传播,网络训练得到最终的参数P使损失L最小化,参数更新公式如下也是根据优化方法来确定的,比如随机梯度下降法SGD和动量下降法优化等等。

SRCNN的3层卷积神经网络将上述传统方法的3个步骤全部和在一起优化参数,而不是分步骤进行,直接是端到端的映射。端到端的映射就是指,输入到输出直接一个管道作用,优化的参数都蕴含在了网络的权重和偏置还有网络结构中,然而稀疏编码是各自优化3个过程,求出最优解在继续。

5  和稀疏编码之间的关系

在基于稀疏编码的方法中,输入图像中提取一个f1×f1低分辨率的块。这个块是减去其patch内的平均值得到的结果,然后投影到(低分辨率)字典。如果低分辨率字典的尺寸是n,这相当于在输入图像上应用n1个线性滤波器(f1×f1),因为SRCNN模型中,有n1个特征图。所以有n1个线性滤波器作为特征提取。

 

 

然后将稀疏编码解码器应用于通过低分辨率字典投影得出的n1系数。这n1个稀疏对应于SRCNN中的n1个LR特征图。通过非线性映射得到HR的块,在稀疏编码中就是解码器的输出是n2个系数,在稀疏编码的情况下通常是n2=n1。这些n2系数是高分辨率块的表示。

稀疏编码解码器(系数表示)表现为非线性映射算子(SRCNN)。稀疏编码解码器不是前馈的,它是一个迭代算法。

很多文献都提到了图像重叠块处理,为什么需要重叠块求平均呢?

答:相邻块的重叠区域中的像素应该是完全相同的。一致性约束在处理单个估计问题时提供了先验信息。重叠块可以最大限度的保留这个局部的图像信息,并且可以抑制噪声

如上所述,这相当于n2个feature map 映射上的线性卷积。如果用于重建的高分辨率块大小为f3×f3,则线性滤波器具有大小为f3×f3的等效空间支持。

上述类比也可以帮助我们设计超参数。例如,我们可以将最后一层的过滤器大小设置为小于第一层的过滤器大小,因此我们更多地依赖于高分辨率块的中心部分。

 

5 评级指标:PSNR

原始图像与其评估版本(噪声强度)之间图像(信号强度)可能的最大像素值与最大均方误差(MSE)的对数比率。PSNR 值越大,重建效果越好:

这在python的numpy库中很容易实现,代码如下:

1 import numpy 2 import math 3 
4 def psnr(img1, img2): 5     mse = numpy.mean( (img1 - img2) ** 2 ) 6     if mse == 0: 7         return 100
8     PIXEL_MAX = 255.0
9     return 20 * math.log10(PIXEL_MAX / math.sqrt(mse))

 

 

6 HR Reconstruction

Fig3 是稀疏编码方法。在此方法中,预测出的重叠高分辨率块往往取平均值得到最终的完整图像。平均值可以看作是一组特征映射上的预定义滤波器(其中每个位置都是高分辨率块的“平坦”向量形式)。基于此,我们定义卷积层以生成最终的高分辨率图像:

 

 

实验细节

7.1 对比卷积核大小(filter size)、卷积核数量(filter numbers)对复原效果的影响的实验

结论:卷积核数量越多,即特征向量维数越高,实验效果越好,但是会影响算法速度,故需要综合考虑;另外三层卷积层的卷积核大小越大,实验效果也会略微更好,同样会影响算法速度。

7.2  对比网络层数(layer numbers)对复原效果的影响的实验

结论:并非网络越深,效果越好,结果恰恰相反。作者也给出了解释:因为SRCNN没有池化层和全连接层,导致网络对初始参数和学习率非常敏感,结果即网络训练的时候非常难以收敛,即使收敛了也可能停在了坏的局部最小值(bad local minimum)处,并且即使训练了足够的时间,学习到的filter参数的分散度也不够好。

7.3 训练集合标签的尺寸关系

在训练阶段,将ground truth图像{Xi}随机裁剪成32×32的子图像。所谓“子图像”,指的是这些样本被视为小的“图像”,而不是“块”,因为“块”是重叠的,需要一些平均值作为后处理,但“sub-image”不需要。

 

【 注意: 32*32的子图像是针对放大尺度为2的网络所设置的输入尺寸。对于放大尺度为3的系统,输入用modcrop()函数处理到33*33。放大因子3的输入大小为33×33,因此可以除以3 】。

sub-image从原始图像中提取,步幅为14。

为了生成低分辨率的样本{Yi},用适当的高斯核对子图像进行模糊处理,用上尺度因子对其进行下采样,并用双三次插值对同一因子进行上采样。得到退化的LR子图像。91幅训练图像提供了大约24800副图像。

为了避免训练过程中的边界效应,所有卷积层都没有填充(valid),网络产生较小的输出(20×20)。

 

那么问题是:输入是32*32的sub-image。由于卷积过程中没有填充,网络输出是20*20,怎么进行MSE的计算呢?

答案MSE损失函数仅由高分辨率训练数据集{Xi}中心像素点20×20的子图像与网络输出(预测的HR图像)(20*20)来计算。

所以SRCNN模型中

训练集是:由HR退化后的LR图像的子图像(32*32),一共是24800副子图像。这些子图像由步长为14,从每一幅完整全局图像中抽取得来的。

标签集是:HR的32*32的sub-image。计算MSE得时候只使用的是其中心像素区域20*20的子图像

7.4 测试集

在处理测试图像时,卷积神经网络可以应用于任意大小的图像。在测试图像处理中,卷积神经网络可以应用于任意大小的图像。在测试过程中,所有卷积层都有足够的零填充,使得输出图像与输入图像大小相同。

7.5 训练彩色图像的Ycbcr通道

实验中,只考虑亮度通道(在YCrCb颜色空间中)也就是Y分量做SR处理,其余的Cb,Cr分量不做处理。那么问题是:最后的彩色图像怎么得来呢?

答案是:对Y分量做SR处理后得到高分辨率的Y分量,低分辨率的Cb和Cr分量是通过双三次插值直接变换到高分辨率空间的。最后通过3个通道的拼接【利用concat()函数】就可以显示出最终的彩色高分辨率图像。

7.6 Scale

SRCNN对于每个上尺度因子为{2,3,4},为每一个因子训练一个特定的网络,而不是整个网络适用于所有的尺度。Scale和大多数现有的SR方法一样,SRCNN是针对一个单一的比例因子进行训练的,并且应该只使用指定的比例。因此,如果需要一个新的比例尺,就必须训练一个新的模型。为了应对多尺度SR(可能包括分数因子),我们需要为每个感兴趣的尺度构造单独的单尺度SR系统。

 

8  SRCNN的局限性

SRCNN但它的局限性主要体现在三个方面:一是依赖于小图像区域的context;二是训练收敛速度太慢;三是网络只适用于单一尺度。

 

后记:针对SRCNN的问题,后续论文提出了一些改进。下次在更新

 

 

 

 

 

 

 

 

 

 

 

 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM