这篇文章是SRCNN作者在SR网络结构、超参数配置等大大小小多个方面的优化,从而实现了加速版SRCNN——FSRCNN超分网络结构,其具有real-time的优势,且在表现力上也胜过SRCNN。FSRCNN发表于2016年,其结构中的一些思想在如今超分网络的设计中仍具有很多可以启发的点。
Note:
- 文章转载于博主暖风的超分算法FSRCNNN:Accelerating the Super-Resolution Convolutional Neural Network 图像超分辨率重建。
- 此外,本文标注了一些FSRCNN中需要注意的点,供读者参考。
Accelerating the Super-Resolution Convolutional Neural Network
1 Abstract
-
SRCNN由于存在直接对输入
L
R
LR
LR做了Bicubic插值到了
H
R
HR
HR层级,然后因为在
H
R
HR
HR层级做特征提取一来是需要消耗更多的计算资源,二来是当缩放倍率
r
r
r(FSRCNN中采用
n
n
n)较大的时候,对这种插值获取的图像提取的特征和直接在原图提取的特征是类似的,所以SRCNN这种做法既低效又没必要,以及无法满足实时性要求(24fps)。 -
因此,SRCNN的作者们就基于加速SRCNN的目的,提出了一种沙漏型SR超分模型——Fast-SRCNN,这是一种两边短而宽,中间长而短,左右对称网络结构,如下图所示: -
相比SRCNN,FSRCNN主要在以下3个方面进行了网络结构改进:①介绍了一种亚像素卷积来代替SRCNN中的反卷积层;此外,直接对原始输入图像进行特征提取(不使用任何插值操作),也就是说我们直接在
L
R
LR
LR层级进行特征提取,最后进行上采样到
H
R
HR
HR层级。②为了减小SRCNN中映射层的计算复杂度,FSRCNN中在映射层之前添加收缩层来减小参数;此外,为了能够重建出表现较高的图像,FSRCNN在映射之后添加了与收缩层对称的扩张层来增加模型的复杂度。③在映射层中,FSRCNN采用更少的滤波器个数,但是增加了映射层的层数,即使用更窄但更长的网络结构(一般来说,网络的宽度指的是滤波器的个数,网络的长度指的是层的个数),通过“窄而长”替换“宽而短”的方式来减少模型的复杂度,从而加速SR网络的重建速度。 -
文章对FSRCNN的网络结构和敏感变量(即超参数
s
,
d
,
m
s,d,m
s,d,m)进行了详细的分析与相关实验,得出了最优的网络模型。 -
作者提出了一种可以快速训练多种缩放倍率
r
r
r的方法,类似于预训练的方法。
2 Focal point
2.1 网络结构
上图就是FSRCNN的网络结构图,总体结构分为输入层、特征提取层、收缩层、映射层、扩张层、反卷积层、输出层: ①输入层:FSRCNN不使用bicubic插值来对输入图像做上采样,它直接进入特征提取层,因为根据模型复杂度公式:
O
{
(
f
1
2
n
1
+
n
1
f
2
2
n
2
+
n
2
f
3
2
n
3
+
?
?
)
S
i
n
p
u
t
}
.
O\{(f_1^2n_1 + n_1f_2^2n_2 + n_2f_3^2n_3+ \cdots)S_{input}\}.
O{(f12?n1?+n1?f22?n2?+n2?f32?n3?+?)Sinput?}.其中
S
i
n
p
u
t
S_{input}
Sinput?是输入图像的分辨率,故输入分辨率越大,那么就会造成整个模型的复杂度成线性上升。论文在训练期间使用数据集中裁剪的patch。 ②特征提取层:采用
1
×
d
×
(
5
×
5
)
1\times d\times (5\times 5)
1×d×(5×5)的卷积层提取。 ③收缩层:采用
d
×
s
×
(
1
×
1
)
d\times s\times (1\times 1)
d×s×(1×1)卷积层去减少通道数,来减少模型复杂度,其中
s
?
d
s\ll d
s?d。 ④映射层:采用
s
×
s
×
(
3
×
3
)
s\times s\times (3\times 3)
s×s×(3×3)卷积层去增加模型非线性度来实现
L
R
→
S
R
LR\to SR
LR→SR的映射,相比SRCNN,这里的映射层显然变窄了,即滤波器个数变少了,为了适当补偿下其非线性表达能力,作者采用了
m
m
m层来增加深度,每一层都是
s
×
s
×
(
3
×
3
)
s\times s\times (3\times 3)
s×s×(3×3)的卷积层来减少模型的总体复杂度。这里个人认为也可以去做,一个
s
×
s
×
(
3
×
3
)
s\times s\times (3\times 3)
s×s×(3×3)的滤波器产生了一个输出feature map,那么
m
m
m个不同参数的滤波器产生
m
m
m张feature map,我们进行相加或者concat来得到同样的输出。 ⑤扩张层:该层和收缩层是对称的,采用
s
×
d
×
(
1
×
1
)
s\times d\times (1\times 1)
s×d×(1×1)卷积层去增加重建的表现力,如果没有这一层的话,SR模型的重建表现会不太好,因此该层的添加是有必要的。 ⑥反卷积层:
s
×
1
×
(
9
×
9
)
s\times 1\times (9\times 9)
s×1×(9×9),反卷积层本质也是卷积层,作者启发于普通卷积使得分辨率下降的现象,逆向思维使用小于1的步长来产生分辨率提升的效果。不同于通过padding来做反卷积,FSRCNN中应该是使用亚像素卷积,即使用
s
t
r
i
d
e
=
1
/
r
stride=1/r
stride=1/r来做上采样。此外作者在文中提出,该层和SRCNN中从插值后再特征提取是近似相反的过程,因此这里采用
9
×
9
9\times 9
9×9的卷积核。SRCNN中可视化了特征提取层的滤波器参数,本文中作者也同样可视化了反卷积层参数,具体如下: 反卷积
⑦输出层:输出
H
R
HR
HR图像。
2.2 多缩放倍率
作者发现使用不同的SR缩放倍率,只对最后的反卷积层有直接影响,但是对其余层的影响几乎不大,因此我们就可以利用这个特性,在训练完一个倍率的模型之后,对另一个
r
r
r的模型训练的反卷积层进行微调(类似于迁移学习的预训练方法)来实现快速训练多缩放倍率的SR模型,具体如下所示: 此外,作者发现,将一种缩放倍率
r
0
r_0
r0?的模型训练完之后,将他的模型参数作为另一种缩放倍率
r
1
r_1
r1?模型的初始化参数,会使得比从
0
0
0开始训练缩放倍率
r
1
r_1
r1?模型更加快速且提高表现力,具体实验结果如下所示: Note:
- EDSR中也有类似实验,其作者基于此设计出了多尺度缩放因子的MDSR模型。
3 Conclusion
- FSRCNN最大的特点就是快,其可以实现real-time,作者通过不断优化模型结构和模型超参数,从而不断加快了重建速度,其结果如下所示:
2. FSRCNN网络是个沙漏型模型,其包括输入层、特征提取层、收缩层、映射层、扩张层、反卷积层和输出层。其中映射层相当于SRCNN中的非线性层,为的是增加模型非线性度,寻找实现
L
R
→
H
R
LR\to HR
LR→HR的非线性函数;FSRCNN使用窄而宽的模型构造来替换SRCNN中宽而短的构造,从而减小模型复杂度,增加重建速度;此外收缩层也是通过减小通道数来降低复杂度;为了在速度和表现力上trade-off,作者添加了扩张层来提升模型的宽度,增加一定的表现力;此外,上采样层采步长小于1的
1
/
r
1/r
1/r来输出高分辨率图像。 3. 总的来说,FSRCNN是SRCNN的升级版,无论在速度还是重建表现力(PSNR)上都得到了提升。 4. 文章还有一大贡献,就是提出了多尺度缩放倍率不影响上采样层之前所有层的参数的思想以及SR的预训练方法,这为后续MDSR的提出做出了启发!
|