FSRCNNN:Accelerating the Super-Resolution Convolutional Neural Network
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倍,且在保证性能的前提下。当然不能仅通过减少参数来实现加速,这会严重影响图像恢复的质量。
作者对网络结构进行深入研究时,发现限制其运行速度的两个固有限制。
-
SRCNN在预处理时,需要使用双三次插值将原始LR图像上采样到所需大小(HR图像大小),作为网络的输入。计算复杂度与HR图像大小成正比。
-
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