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的结构对比如下图所示。
SRCNN和FSRCNN计算复杂度对比
SRCNN 的处理过程如下:
- 对输入图片利用双立方采样做上采样,使得其分辨率为目标分辨率
- 然后分别利用 9x9, 1x1, 5x5 的卷积来提高图片质量。其中 1x1 卷积是用来把低分辨率(LR)图像向量非线性映射为高分辨率 (HR) 图像向量.
计算复杂度为:
O{(f12n1+n1f22n2+n2f32)SHR}
计算复杂度和HR图像大小成线性比例,SHR。HR图像越大,复杂度越高。
FSRCNN 包含如下五个主要处理步骤:
- 特征提取:利用一个 5x5 卷积代替 SRCNN 中的双立方差值
- 压缩:利用 1x1 卷积把特征层从 d 压缩为 s,其中 s 小于 d
- 非线性映射:多个 3x3 网络层代替单个的宽网络层
- 扩大: 1x1 卷积把特征层从 s 扩大为 d
- 反卷积: 利用 9x9 过滤器重建 HR 图像
以上结构就是 FSRCNN(d,s,m). 其计算复杂度如下:
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)
其中xi是第i个通道上激活f的输入信号,并且 ai是负数部分的系数。 对于ReLU,参数ai固定为零,但对于PReLU是可学习的。 我们选择PReLU主要是为了避免ReLU中零梯度引起的“死亡特征”。 然后我们可以充分利用所有参数来测试不同网络设计的最大容量。 实验表明,PReLU激活网络的性能更稳定。
代价函数是均方误差(MSE):
θminn1i=1∑n∥∥F(Ysi;θ)−Xi∥∥22
如何利用 1x1 卷积对网络进行压缩和扩大
假设我们在不使用 1x1 卷积的情况下运行 5x5 卷积,如下所示
计算次数 = (14x14x48)x(5x5x480) = 112.9M
如果使用 1x1 卷积:
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 卷积实现非线性映射
如上图所示通过使用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倍的训练数据。