1. 前言
扩张卷积(
D
i
l
a
t
e
d
C
o
n
v
o
l
u
t
i
o
n
)也被称为空洞卷积或者膨胀卷积,是在标准的卷积核中注入空洞,以此来增加模型的感受野(
r
e
c
e
p
t
i
o
n
f
i
e
l
d
)
\color{blue}{扩张卷积(Dilated Convolution)也被称为空洞卷积或者膨胀卷积,是在标准的卷积核中注入空洞,以此来增加模型的感受野(reception field)}
扩张卷积(DilatedConvolution)也被称为空洞卷积或者膨胀卷积,是在标准的卷积核中注入空洞,以此来增加模型的感受野(receptionfield)。相比原来的正常卷积操作,扩张卷积多了一个参数: dilation rate,指的是卷积核的点的间隔数量,比如常规的卷积操作dilatation rate为1。
CNN结构中,大部分的layer是靠Conv和Pooling完成的,这两个层是CNN中非常重要的两个组件。一般情况下对于一个图像分类任务,一个靠Conv和Pooling堆叠起来的backbone都是具有不错的特征提取能力的,这种堆叠最经典的就是结构就是VGG。在图像输出网络后,Conv做特征的抽取,而Pooling做特征的聚合,并且让模型具有一定程度上的平移不变性,还可以降低后面卷积层的算力。最后到全连接层输出分类结果就好了。
但是这种结构对目标检测和图像分割来说,就会存在一些问题:
- 目标检测和图像分割中感受野很重要,比如目标检测一般情况下要在最后一层特征图上做预测,那么特征图上的一个点能过映射到原图的多少像素,决定了网络能检测到的尺寸上限,而保证感受野就要靠下采样,下采样的结果就是小目标不容易被检测到;
- 针对上面的问题,多层特征图拉取分支能改善这个问题,因为小目标在越靠前的特征图上越容易体现,但是前面的特征图语义信息不够,比如在SSD中就存在这个问题;
- 不做下采样,只增加卷积层的数量,首先会增大网络的计算量,其次不做Pooling的聚合最后的特征提取效果也会受到影响,而且感受野不会变化。
所以有没有一种可以不牺牲特征图尺寸的情况下增加感受野的方式呢?
扩张卷积就能做到这点。
2. 原理
扩张卷积操作还是很好理解的,上图中(a)是基础的卷积核,扩张卷积就是在这个基础卷积核加入间隔,上图(b)对应3 × 3的dilation rate=2的卷积,但是间隔为1,也就是相当于对应7 × 7的图像块,可以理解为kernel size还是变成了7 × 7,但是却只有9个点有参数,其余的位置参数都是0,和输入特征图对应位置的像素进行卷积计算,其余的位置都略过。图©和图(b)是类似的,只是dilation rate=4,相当于变成了15 × 15的卷积核。
而卷积核尺寸变大了,感受野也就自然变大。