(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的结构对比如下图所示。
在这里插入图片描述

SRCNN和FSRCNN计算复杂度对比

SRCNN 的处理过程如下:

  1. 对输入图片利用双立方采样做上采样,使得其分辨率为目标分辨率
  2. 然后分别利用 9x9, 1x1, 5x5 的卷积来提高图片质量。其中 1x1 卷积是用来把低分辨率(LR)图像向量非线性映射为高分辨率 (HR) 图像向量.
    计算复杂度为:
    O { ( f 1 2 n 1 + n 1 f 2 2 n 2 + n 2 f 3 2 ) S H R } 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{(f12n1+n1f22n2+n2f32)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 { ( 25 d + s d + 9 m s 2 + d s + 81 d ) S L R } = O { ( 9 m s 2 + 2 s d + 106 d ) S L R } 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 ( x i ) = max ⁡ ( x i , 0 ) + a i min ⁡ ( 0 , x i ) f\left(x_{i}\right)=\max \left(x_{i}, 0\right)+a_{i} \min \left(0, x_{i}\right) f(xi)=max(xi,0)+aimin(0,xi)

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

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

如何利用 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倍的训练数据。

在这里插入图片描述

  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cpp编程小茶馆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值