(FSRCNN)_Accelerating the Super-Resolution Convolutional Neural Network——超分辨率(三)

Accelerating the Super-Resolution Convolutional Neural Network

论文链接: Accelerating the Super-Resolution Convolutional Neural Network, ECCV2016

FSRCNN与SRCNN都是香港中文大学Dong Chao, Xiaoou Tang等人的工作。FSRCNN是对之前SRCNN的改进,主要在三个方面:一是在最后使用了一个反卷积层放大尺寸,因此可以直接将原始的低分辨率图像输入到网络中,而不是像之前SRCNN那样需要先通过bicubic方法放大尺寸。二是改变特征维数,使用更小的卷积核和使用更多的映射层。三是可以共享其中的映射层,如果需要训练不同上采样倍率的模型,只需要fine-tuning最后的反卷积层。

由于FSRCNN不需要在网络外部进行放大图片尺寸的操作,同时通过添加收缩层和扩张层,将一个大层用一些小层来代替,因此FSRCNN与SRCNN相比有较大的速度提升。FSRCNN在训练时也可以只fine-tuning最后的反卷积层,因此训练速度也更快。FSRCNN与SCRNN的结构对比如下图所示。
(FSRCNN)_Accelerating the Super-Resolution Convolutional Neural Network——超分辨率(三)

SRCNN和FSRCNN计算复杂度对比

SRCNN 的处理过程如下:

  1. 对输入图片利用双立方采样做上采样,使得其分辨率为目标分辨率
  2. 然后分别利用 9x9, 1x1, 5x5 的卷积来提高图片质量。其中 1x1 卷积是用来把低分辨率(LR)图像向量非线性映射为高分辨率 (HR) 图像向量.
    计算复杂度为:
    O{(f12n1+n1f22n2+n2f32)SHR} O\left\{\left(f_{1}^{2} n_{1}+n_{1} f_{2}^{2} n_{2}+n_{2} f_{3}^{2}\right) S_{H R}\right\} O{(f12​n1​+n1​f22​n2​+n2​f32​)SHR​}
    计算复杂度和HR图像大小成线性比例,SHR。HR图像越大,复杂度越高。

FSRCNN 包含如下五个主要处理步骤:

  1. 特征提取:利用一个 5x5 卷积代替 SRCNN 中的双立方差值
  2. 压缩:利用 1x1 卷积把特征层从 d 压缩为 s,其中 s 小于 d
  3. 非线性映射:多个 3x3 网络层代替单个的宽网络层
  4. 扩大: 1x1 卷积把特征层从 s 扩大为 d
  5. 反卷积: 利用 9x9 过滤器重建 HR 图像

以上结构就是 FSRCNN(d,s,m). 其计算复杂度如下:
O{(25d+sd+9ms2+ds+81d)SLR}=O{(9ms2+2sd+106d)SLR} O\left\{\left(25 d+s d+9 m s^{2}+d s+81 d\right) S_{L R}\right\}=O\left\{\left(9 m s^{2}+2 s d+106 d\right) S_{L R}\right\} O{(25d+sd+9ms2+ds+81d)SLR​}=O{(9ms2+2sd+106d)SLR​}

可见复杂度和 LR 图像大小成线性比例,SLR,所以它的复杂度小于 SRCNN

网络中激活函数是 PReLU. PReLU意为带参数的ReLu,目的是比 ReLU 更好。
PReLU:对于每个卷积层之后的激活函数,我们建议使用参数整流线性单元(PReLU)代替常用的整流线性单元(ReLU)。它们在负数部分的系数上是不同的。对于ReLU和PReLU,我们可以将一般激活函数定义为
f(xi)=max(xi,0)+aimin(0,xi)f\left(x_{i}\right)=\max \left(x_{i}, 0\right)+a_{i} \min \left(0, x_{i}\right)f(xi​)=max(xi​,0)+ai​min(0,xi​)

其中xi是第i个通道上激活f的输入信号,并且 ai是负数部分的系数。 对于ReLU,参数ai固定为零,但对于PReLU是可学习的。 我们选择PReLU主要是为了避免ReLU中零梯度引起的“死亡特征”。 然后我们可以充分利用所有参数来测试不同网络设计的最大容量。 实验表明,PReLU激活网络的性能更稳定。

代价函数是均方误差(MSE):
minθ1ni=1nF(Ysi;θ)Xi22 \min _{\theta} \frac{1}{n} \sum_{i=1}^{n}\left\|F\left(Y_{s}^{i} ; \theta\right)-X^{i}\right\|_{2}^{2} θmin​n1​i=1∑n​∥∥​F(Ysi​;θ)−Xi∥∥​22​

如何利用 1x1 卷积对网络进行压缩和扩大

假设我们在不使用 1x1 卷积的情况下运行 5x5 卷积,如下所示
(FSRCNN)_Accelerating the Super-Resolution Convolutional Neural Network——超分辨率(三)

计算次数 = (14x14x48)x(5x5x480) = 112.9M

如果使用 1x1 卷积:
(FSRCNN)_Accelerating the Super-Resolution Convolutional Neural Network——超分辨率(三)
1x1 卷积计算次数 = (14x14x16)x(1x1x480) = 1.5M
5x5 卷积计算此时 = (14x14x48)x(5x5x16) = 3.8M
两者总共计算次数 = 1.5M + 3.8M = 5.3M,比只使用 5x5 足足少了 112.9M 次计算。
因此在两个卷积层之前使用 1x1 卷积来减少连接(参数)。通过减少参数,我们只需要更少的乘法和加法运算,最终加速网络。这就是 FSRCNN 比 SRCNN 快的原因。

如何利用多个 3x3 卷积实现非线性映射

(FSRCNN)_Accelerating the Super-Resolution Convolutional Neural Network——超分辨率(三)
如上图所示通过使用2层 3x3 滤波器来覆盖 5x5 滤波器的区域,让参数数量变少。

1层 5x5 滤波器的参数数量 = 5x5 = 25
2层 3x3 滤波器的参数数量 = 3x3+3x3 = 18
参数量减少了28%。而更少的参数意味着网络在训练的时候可以更快的收敛,并减少过拟合问题。

实验训练数据

训练集:之前传统SR method基本都在Set91上训练,但是对CNN来说,Set91并不够去训练大的网络结构。由于BSD500是jpeg格式,存在压缩所以也不适合做训练dataset。本文提出general-100 + Set91进行充当训练集。并且进行数据增强,1)downscale 0.9, 0.8, 0.7 and 0.6。 2) Rotation 90,180,270。因此我们将会得到20倍的训练数据。

(FSRCNN)_Accelerating the Super-Resolution Convolutional Neural Network——超分辨率(三)

上一篇:【论文阅读】Joint Distance Maps Based Action Recognition With Convolutional Neural Networks


下一篇:人群密度估计之CSRNet---Dilated Convolutional Neural Networks for Understanding the Highly Congested Scenes