FSRCNN是SRCNN的加强版,对其网络结构进行了优化,主要目的是降低计算成本,加快其运行速度。在保持良好性能的同时,在通用CPU上实现实时性能。此外,还提出了一种相应的转移策略,用于跨不同放大因子的快速训练和测试。
文章指引:https://arxiv.org/abs/1608.00367

在这里插入图片描述

Abstract

1、作者旨在加速现有的SRCNN,并提出了一种紧凑的沙漏形CNN结构,以更快更好地实现SR。
2、FSRCNN模型的速度比SRCNN提高了40倍以上,并且图像恢复质量更高。
3、作者还提出了一种转移策略,用于应对不同的放大因子的训练和测试。

1 Introduction

  超分辨率卷积神经网络(SRCNN)有着简单的网络结构和良好的恢复质量。但就实际应用而言,其运行速度远不能达到实时性的性能要求(24fps)。例如要将 240 × 240 240×240 240×240图像的放大3倍,SRCNN的速度约为 1.32 f p s 1.32fps 1.32fps。也就是说,至少要对SRCNN加速至少17倍,且在保证性能的前提下。当然不能仅通过减少参数来实现加速,这会严重影响图像恢复的质量。

  作者对网络结构进行深入研究时,发现限制其运行速度的两个固有限制。

  1. SRCNN在预处理时,需要使用双三次插值将原始LR图像上采样到所需大小(HR图像大小),作为网络的输入。计算复杂度与HR图像大小成正比。

  2. SRCNN采用较宽的映射层,映射精度可以显著提高,但代价是运行时间,会极大的拖慢网络速度。

针对第一个问题,作者直接将原始LR图像作为输入,并采用反卷积层来代替双三次插值,并将其放在网络的末端。那么网络的计算复杂度就与原始LR图像大小成正比。对于放大因子n,与插值LR图像进行卷积的计算成本将是对原始LR图像卷积成本的 n 2 n^2 n2倍 。加速度将非常显著,将快大约 n 2 n^2 n2倍。

针对第二个问题,作者在映射层的开头和结尾分别添加了一个收缩层和一个扩展层,以限制低维特征空间中的映射数量。此外,还将单个宽映射层分解为几个层。这个结构的整体形状看起来像沙漏,整体对称,两端厚,中间细。

  快速超分辨率卷积神经网络FSRCNN,其速度比SRCNN-Ex提高了40倍以上,性能甚至优于SRCNN-Ex。同时还提出了一个小型FSRCNN网络(FSRCNN-s),其恢复质量与SRCNN相似,但速度快17.36倍,可以在通用CPU上实时运行(24fps),且仍能获得优异的性能。在这里插入图片描述

  除了速度上的显著提高外,FSRCNN还可以在不同缩放因子的条件下快速训练和测试。具体地说,在FSRCNN中,所有卷积层(除反卷积层外)都可以由具有不同放大因子的网络共享。在训练期间,使用经过良好训练的网络,只需微调反卷积层,就能获得另一个放大因子的网络。在测试过程中,只需要做一次卷积运算,并使用相应的反卷积层将图像上采样到不同的尺度。

2 Methods

本节将详细介绍如何逐层重新构造FSRCNN网络以及各个参数的由来、复杂度对比。
在这里插入图片描述
首先我们回顾一下SRCNN的结构:
  SRCNN一共有三层卷积:特征提取层 - 非线性映射层 - 重建层
  原始图像LR经过预处理(双三次插值)作为网络的输入。
  特征提取层: 从输入中提取图像特征,表示为高维特征向量。采用的是采用卷积核大小为 c × f 1 × f 1 × n 1 c \times f_1 \times f_1 \times n_1 c×f1​×f1​×n1​
  非线性映射层: 将特征向量非线性映射到另一组特征向量,加深网络深度 卷积核: n 1 × 1 × 1 × n 2 n_1\times 1 \times 1 \times n_2 n1​×1×1×n2​
  重建层: 聚集提取的特征,形成最终的输出图像。卷积核: n 2 × f 3 × f 3 × c n_2 \times f_3 \times f_3\times c n2​×f3​×f3​×c
根据作者使用的参数,网络可以表示为 Conv(9,64,1) - ReLU - Conv(1,32,64) - ReLU -Conv(5,1,32)

FSRCNN
SRCNN主要有三个方面不同。
1. FSRCNN采用原始低分辨率图像作为输入,无需进行双三次插值。在网络末端引入反卷积层来完成上采样。
2. 将SRCNN中的非线性映射层替换为FSRCNN中的三个层,即收缩、映射和扩展。
3. FSRCNN采用更小的卷积核尺寸和更深的网络结构。

如图2所示,FSRCNN可分解为五个部分——特征提取、收缩、映射、扩展和反卷积。
特征提取层: 同SRCNN一样,从输入中提取图像特征,表示为特征向量。不同之处在于输入图像是原始LR图像,
收缩层: 为了减少网络参数数量,提高计算效率,采用1×1卷积核
映射层: 将上一层的feature map进一步做非线性映射处理。为了保持良好性能,使用多个3×3层来替换单个宽层。
扩展层: 收缩层的逆作用,为了保持与收缩层的一致性,仍采用1×1卷积核,其数量与特征提取层相同。
反卷积层: 完成图像的上采样。由多种自动学习的上采样核组成,这些核共同产生最终的HR输出。(可以参看2.1节最后的图3)

前四部分是卷积层,最后一部分是反卷积层。
为了更好地理解,将卷积层表示为Conv(fi,ni,ci),将反卷积层表示为DeConv(fi,ni,ci)
其中变量fi,ni,ci分别表示卷积核大小、卷积核数量和通道数量。
根据文章的参数设置网络表示为:(具体的参数设置会在下文说明原因)
Conv(5,d,1) - PReLU - Conv(1,s,d) - PReLU - m × \times ×Conv(3,s,s) - PReLU -Conv(1,d,s) - PReLU -DeConv(9,1,d)

2.1 Parameters

由于整个网络包含非常多的参数,提前为不敏感变量指定一个合理的值,并保持敏感变量未设置。
(当变量的微小变化可能显著影响性能时,称其为敏感变量。)
这些敏感变量总是代表SR中一些重要的影响因素,下面具体描述如何来确定每个参数。

特征提取: C o n v ( f 1 , n 1 , c 1 ) Conv(f_1,n_1,c_1) Conv(f1​,n1​,c1​)
在SRCNN中,第一层的卷积核大小 f 1 f_1 f1​设置为9。这是在上采样图像Y上执行的。(设SRCNN中输入的插值图像为Y,原始图像LR为Ys)。
因此使用5×5卷积核对Ys进行特征提取足以覆盖9×9卷积核提取图像Y的几乎所有信息。所以在FSRCNN中采用较小的卷积核尺寸 f 1 = 5 f_1=5 f1​=5,能保证较小的信息损失,还能减少参数。
对于通道数,按照SRCNN将c1设置为1。
对于特征维度n1,将其表示为d——第一个敏感变量。
最后,第一层可以表示为 C o n v ( 5 , d , 1 ) \bm{Conv(5, d, 1)} Conv(5,d,1)。

收缩: C o n v ( f 2 , n 2 , c 2 ) Conv(f_2,n_2,c_2) Conv(f2​,n2​,c2​)
在SRCNN中,非线性映射层由于LR特征维数d通常非常大,计算复杂度相当高,所以应用了1×1层以节省计算成本。出于同样的考虑,FSRCNN将卷积核大小设定为为 f 2 = 1 f_2=1 f2​=1.
作为收缩层目的是降低特征维度d,所以采用较小的通道数,设置 n 2 = s n_2=s n2​=s,使LR特征维数从d降低到s。s是决定收缩水平的第二个敏感变量。这一步极大减少了参数数量。
第二层可以表示为 C o n v ( 1 , s , d ) \bm{Conv(1, s, d)} Conv(1,s,d)。

非线性映射: C o n v ( f 3 , n 3 , c 3 ) Conv(f_3,n_3,c_3) Conv(f3​,n3​,c3​)
非线性映射层是网络贡献最大的一层,是影响SR性能的最重要部分。最重要的影响因子是映射层的宽度和深度。
首先,为了在性能和网络规模之间进行权衡,采用了中等大小卷积核 f 3 = 3 f_3=3 f3​=3。然后,为了保持与SRCNN相同的良好性能,使用多个3×3层来替换单个宽层。映射层的数量是另一个敏感变量(表示为m),它决定了映射的准确性和复杂性。为了保持一致,所有映射层都使用相同数量的卷积核 n 3 = s n_3=s n3​=s。(这个地方应该是对每组映射层进行了拼接或者相加,论文中作者没写 😐)
非线性映射部分可以表示为 m × C o n v ( 3 , s , s ) \bm{m\times Conv(3,s,s)} m×Conv(3,s,s)。

扩展: C o n v ( f 4 , n 4 , c 4 ) Conv(f_4,n_4,c_4) Conv(f4​,n4​,c4​)
扩展层的作用与收缩层的作用相反,相当于收缩的逆。为了提高计算效率,收缩操作减少了LR特征维数。如果直接从这些低维特征生成HR图像,最终的恢复质量将很差。因此,在映射层之后添加一个扩展层来扩展HR特征维度。
为了保持与收缩层的一致性,还采用了1×1卷积核,其数量与LR特征提取层相同。
与收缩层Conv(1,s,d)相反,扩展层是 C o n v ( 1 , d , s ) \bm{Conv(1,d,s)} Conv(1,d,s)。

反卷积: D e C o n v ( f 5 , n 5 , c 5 ) DeConv(f_5,n_5,c_5) DeConv(f5​,n5​,c5​)
使用一组反卷积核对之前的特征进行上采样和聚合。反卷积可以看作是卷积的逆运算。
卷积核与图像以步长k卷积,输出为输入的1/k倍。相反,如果交换输入和输出的位置,输出将是输入的k倍,这就是反卷积。利用这个属性来设置步幅k=n,n是所需的放大因子。然后直接输出重建的HR图像。(由步长来控制放大倍数)。
在确定放大因子n的情况下。我们把FSRCNN反过来看,反卷积层就相当于对(重建的)SR图像做了一个缩放并从中提取特征,如果不管缩放,反卷积层相当于SRCNN第一层特征提取。所以和SRCNN第一层一致,作者采用了9×9卷积核,即 f 5 = 9 f_5=9 f5​=9。类似地,图3显示了学习的反卷积核,其模式与SRCNN中的第一层卷积核非常相似。
反卷积层表示为 D e C o n v ( 9 , 1 , d ) \bm{DeConv(9,1,d)} DeConv(9,1,d)。
在这里插入图片描述

PReLU:
每个卷积层 之后的激活函数,作者使用PReLU,而不是常用的ReLU。选择PReLU主要是为了避免ReLU中的零梯度导致的“死特征“。实验表明,PReLU激活网络的性能更稳定,可以看作是ReLU激活网络性能的上界。

LOSS:
采用均方误差(MSE)作为cost函数。优化目标表示为
在这里插入图片描述
所有参数均采用标准反向传播的随机梯度下降法进行优化。

 

2.2 Different Upscaling Factors

与以前基于深度学习的方法相比,FSRCNN的另一个优点是,可以实现跨不同放大倍数的快速训练和测试。
作者发现FSRCNN中所有卷积层总体上都像LR图像的复杂特征提取器,只有最后一个反卷积层包含放大因子的信息。
实验也证明了这一点,对于不同的放大因子,卷积核几乎是相同的。利用这个特性,作者使用转移卷积核进行快速训练和测试。
在这里插入图片描述

  在实验中,作者提前训练了一个上采样因子的模型。然后在训练过程中,只需微调反卷积层以获得另一个上采样因子,并保持卷积层不变。微调速度很快,性能与从头开始train的一样好。
  在测试期间,只需执行一次卷积操作,并使用相应的反卷积层将图像上采样到不同大小。

  实验中作者展示了跨放大因子训练的灵活性。作者选择FSRCNN(56,12,4)作为默认网络。
  首先在放大因子3下获得了一个经过良好训练的模型。在此基础上,再对×2的网络进行了训练。×3网络训练好的模型中所有卷积核的参数都被转移到×2的网络中。在训练期间,只对91-image数据集和General-100数据集上的×2反卷积层进行微调。
  为了进行比较,作者也为×2训练了另一个网络,但从零开始。
  这两个网络的收敛曲线如图6所示。显然,通过转移参数,网络收敛速度非常快(只有几个小时),与从头开始的训练具有相同的良好性能。在接下来的实验中,作者都是从零开始训练网络×3,并微调相应的反卷积层×2和×4。
训练时使用3×的放大倍数……,后面实验部分就不再赘述。

2.3 Computational Complexity

本节对比以下SRCNN和FSRCNN的计算复杂度(耗时)
SRCNN网络可以表示为 C o n v ( f 1 , n 1 , 1 ) − R e L U − C o n v ( f 2 , n 2 , n 1 ) − R e L U − C o n v ( f 3 , 1 , n 2 ) \bm{Conv(f_1,n_1,1) - ReLU - Conv(f_2,n_2,n_1) - ReLU -Conv(f_3,1,n_2)} Conv(f1​,n1​,1)−ReLU−Conv(f2​,n2​,n1​)−ReLU−Conv(f3​,1,n2​)
(带入参数为Conv(9,64,1) - ReLU - Conv(1,32,64) - ReLU -Conv(5,1,32),一共有57184个参数)
SRCNN网络的计算复杂度可计算如下:
在这里插入图片描述
其中 { f i } i = 1 3 和 { n i } i = 1 3 {\{f_i}\}^3_{i=1}和{\{n_i}\}^3_{i=1} {fi​}i=13​和{ni​}i=13​分别是三层卷积核尺寸和卷积核数量。 S H R S_{HR} SHR​是HR图像的大小。观察到,复杂度与HR图像的大小成正比,中间层对网络参数的贡献最大。

再看看FSRCNN:有三个敏感变量d,s,m来控制性能和速度。网络可以表示为:
Conv(5,d,1) - PReLU - Conv(1,s,d) - PReLU - m × \times ×Conv(3,s,s) - PReLU -Conv(1,d,s) - PReLU -DeConv(9,1,d)
记为FSRCNN(d,s,m)。计算复杂度为:
在这里插入图片描述

作者排除了PReLU的参数对复杂度的影响,这些参数带来的计算成本可以忽略不计。
在这里插入图片描述
  为了更好地理解如何加速SRCNN,作者分三步将SRCNN-Ex转换为另一个FSRCNN(56,12,4),并显示每步骤获得的加速度和PSNR增益。作者使用了一个代表性的放大因子n=3。SRCNN、FSRCNN和两种过渡状态的网络配置如表1所示。
具体看一下实验步骤:
  首先,将SRCNN-Ex的最后一个卷积层替换为反卷积层,然后整个网络将在原始LR图像上执行。这一步反卷积层将扩大网络规模,但计算复杂度与 S L R 而 不 是 S H R S_{LR}而不是S_{HR} SLR​而不是SHR​成正比。所以实现了8.7倍(即 57184 / 58976 × 3 2 57184/58976×3^2 57184/58976×32)的加速。由于学习到的反卷积核优于单个双三次核,因此性能大约提高了0.12 dB。
  其次,将SRCNN单个非线性映射层替换为FSRCNN的收缩层、4个映射层和扩展层的组合。虽然卷积层层数增加了有5层,但参数从58976减少到17088。这一步的加速度是最显著的30.1倍。人们普遍认为,深度是影响性能的关键因素。在这里,使用四个“窄”层来代替单个“宽”层,从而用更少的参数获得更好的结果(性能提高到33.01 dB)。
  最后,采用更小的卷积核尺寸和更少的卷积核(例如,从Conv(9,64,1)到Conv(5,56,1)),并获得41.3倍的最终加速比。当去除一些冗余参数时,网络的训练效率更高,并实现了另一个0.05 dB的改善。
  值得注意的是,这种加速并不是以性能下降为代价的。相反,FSRCNN(56,12,4)比SRCNN-Ex有很大的优势(例如,在Set5数据集上为0.23dB)。

 

3 Experiments

第二部分中以及讲解了一部分实验下面就不再赘述。

3.1 Implementation Details

  作者使用91-image数据集作为训练集。但研究发现91张图像不足以将深度模型推向最佳性能。因此,作者提供了一个新的General-100数据集,其中包含100个bmp格式的图像(无压缩)。新引入的100幅图像的大小从710×704(大)到131×112(小)。它们都具有良好的质量,边缘清晰,但平滑区域较少(例如天空和海洋),因此非常适合SR训练。

  作者还使用了两种方式增加数据。

  1. 缩放:每个图像的缩放比例分别为0.9、0、8、0.7和0.6。
  2. 旋转:每个图像以90度、180度和270度旋转。

最后作者得到了5×4− 1=19倍的训练图像。

测试和验证数据集。作者使用Set5、Set14和BSD200数据集进行测试。从BSD500数据集的验证集中选择另外20个图像进行验证。

训练样本。为了准备训练数据,首先对原始训练图像按所需的比例因子n进行下采样,以形成LR图像。然后,将LR训练图像裁剪成一组具有步长 k k k的 f s u b × f s u b f_{sub}×f_{sub} fsub​×fsub​像素子图像。相应的HR子图像(具有大小( n f s u b ) 2 nf_{sub})^2 nfsub​)2)也从ground truth图像裁剪而来。这些LR/HR子图像对是主要的训练数据。

培训策略。作者还探索了两步培训策略。
首先,使用91-image数据集从头开始训练网络。然后,当训练饱和时,添加General-100数据集进行微调。使用这种策略,训练比从一开始就使用两个数据集的训练收敛得早得多。 当使用91-image数据集进行训练时,卷积层的学习速率设置为 1 0 − 3 10^{−3} 10−3,反卷积层为 1 0 − 4 10^{−4} 10−4。然后在微调过程中,所有层的学习率降低一半。初始化使用何凯明为PReLU设计的方法初始化卷积核的权重。由于最后没有激活函数,反卷积核的初始化方法与SRCNN相同(即,从均值为零、标准偏差为0.001的高斯分布中随机抽取)。

为了测试FSRCNN结构的特性,作者设计了一组控制实验,使用三个敏感变量的不同值——LR特征维数d、收缩卷积核的数量s和映射深度m。具体来说,选择不同的d=48、56、s=12、16和m=2、3、4进行实验。因此,作者总共进行了2×2×3=12个不同组合的实验。
这些实验的Set5数据集上的平均PSNR值如表2所示。从两个方向分析结果,即在表格中水平和垂直。首先,修正d,s并检查m的影响。显然,m=4比m=2和m=3的结果更好。其次,修正m并检查d和s的影响。一般来说,更好的结果通常需要更多的参数(例如,更大的d或s),但更多的参数并不总是保证更好的结果。从所有结果中,作者找到了性能和参数之间的最佳权衡——FSRCNN(56,12,4),它在中等数量的参数下实现了最高的结果之一。
值得注意的是,最小的网络FSRCNN(48,12,2)实现了32.87 dB的平均峰值信噪比,这已经高于SRCNN-Ex(32.75 dB)。FSRCNN(48,12,2)仅包含8832个参数,与SRCNN Ex相比,加速度为 57184 / 8832 × 3 2 = 58.3 57184/8832×3^2=58.3 57184/8832×32=58.3倍。
在这里插入图片描述

3.2 Towards Real-Time SR

文章的目的是使网络速度达到满足实际应用的需求,在保持良好性能的同时实现实时SR。
首先,计算有多少参数可以满足实时实现的最低要求(24 fps)。如引言中所述,SRCNN将图像上采样到760×760的速度为1.32fps。放大系数为3,SRCNN有8032个参数。然后根据复杂度公式,所需的FSRCNN网络最多应具有 8032 × 1.32 / 24 × 3 2 ≈ 3976 8032×1.32/24×3^2≈ 3976 8032×1.32/24×32≈3976个参数。为了实现这个目标,作者找到了一个合适的配置——包含3937个参数的FSRCNN(32,5,1),记为FSRCNN-s。作者用C++测试代码,FSRCNN(32,5,1)的速度达到24.7 fps,满足实时性要求。此外,FSRCNN(32,5,1)甚至优于SRCNN(9-1-5)。
在这里插入图片描述

4 Conclusion

   文章主要目的就是对SRCNN进行加速(减小网络参数),且不影响网络的重建质量,改进了网络的结构,提出了一种沙漏型CNN,整体上是对称的,末端是厚的,中间是细的。由三个敏感变量来控制沙漏外观。实验表明,这种沙漏设计对图像超分辨率非常有效。
  最主要的贡献:

  1. 网络输入使用原始图像LR,而不使用插值图像,极大的减小了网络参数,加快网络速度。
  2. 网络通过增加收缩层和扩展层,减少特征参数维度,减小了网络的参数,加快网络速度。
  3. 将“宽”的非线性映射层用“窄”的“深”的网络来替代,从而用更少的参数获得更好的效果。
  4. 提出了一种转移策略,能够跨不用放大因子来进行快速训练和测试。

综上,FSRCNN-s能够达到实时性能要求(24pfs),速度比SRCNN快17.36倍,且恢复效果与SRCNN相似(略优)。而FSRCNN网络比当代SR模型快得多,但仍能获得优异的性能。

文章详细描述了每个网络参数的由来,也给我们今后的对网络结构的设计和改进有着重要启发。
 


记录一个markdown编辑器的空行功能:

	       # 空一行

 


最后祝大家科研顺利,身体健康,万事胜意~

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐