空洞卷积(dilated
conv),也称扩张卷积。空洞卷积可以在kernel有效增大感受野的同时不增加模型参数或者计算量。在图像需要全局信息或者语音文本需要较长的sequence信息依赖的问题中,都能较好的应用空洞卷积。在图像分割,语音合成WaveNet,机器翻译ByteNet中都有空洞卷积的身影。


一般情况下,图片输入到网络中,网络将会对图像做卷积再池化(pooling)的操作,pooling的操作即降低了图像尺寸的同时增大感受野。但由于图像分割预测是pixel-wise的输出,所以将pooling后较小的图像上采样(upsampling)到原始的图像尺寸进行预测一般需要采用反卷积(deconv)操作。之前pooling一般为max
pooling,所以该pooling操作使得每个pixel能预测都能看大较大感受野信息。

所以在图像分割网络中有两个关键点:
1、pooling减少图片的尺寸增大感受野
2、通过upsampling扩大图片尺寸。

由于在先减少再增大的过程中肯定会有一些信息损失,为了减少由pooling带来信息损失,所以就提出空洞卷积,他能不通过pooling来增大感受野。


在空洞卷积中有个重要的参数叫raterate,这个参数代表了空洞的大小。
要理解空洞概念和如何操作可以从两个角度去看

1)从原图角度,所谓空洞就是在原图上做采样。采样的频率是根据rate参数来设置的,当rate为1时候,就是原图不丢失任何信息采样,此时卷积操作就是标准的卷积操作,当rate>1,比如2的时候,就是在原图上每隔一(rate-1)个像素采样,如图b,可以把红色的点想象成在原图上的采样点,然后将采样后的图像与kernel做卷积,这样做其实变相增大了感受野
2)从kernel角度去看空洞的话就是扩大kernel的尺寸,在kernel中,相邻点之间插入rate-1个零,然后将扩大的kernel和原图做卷积
,这样还是增大了感受野。


在VGG网络中就证明了使用小卷积核叠加来取代大卷积核可以起到减少参数同时达到大卷积核同样大小感受野的功效。但是通过叠加小卷积核来扩大感受野只能线性增长,而空洞卷积可以以指数级增长感受野。

反卷积(deconv):
主要用于增大图像尺寸,是upsampling的一种,而空洞卷积并没有做upsampling,空洞卷积是为了增大感受野,可以不改变图像的大小。
对于反卷积简单理解就是在输入特征矩阵中插入空白点,再进行卷积,这样卷积后输出的特征矩阵就变大了。

对于标准k*k卷积核,stride为s,分三种情况:

1) s>1s>1s>1,在卷积同时伴随着downsampling操作,卷积后图像变小了(这种操作也可以增大感受野,但是输出的图像大小变小了)
2) s=1s=1s=1,在padding设置为stride大小时,卷积后图片大小不变
3)s<1s<1s<1,相当于对原图作upsampling操作进行扩大原图,然后再卷积,这样得到的结果图就变大了。例如s=0.5s=0.5s=0
.5意味着在原特征图的每相邻数据间插入一个空白数据,这样再进行卷积,它的输出特征图就变大了。

上面3)所描述的就是反卷积,它的核心是在原来图像上插入空白数据。而空洞卷积就是在卷积核插入空白数据,或是说在卷积是跳过特征图的部分数据。