深度学习100问-19:什么是空洞卷积?

深度学习100问

Author:louwill

Machine Learning Lab

     

     在系列第16问中我们就提到U-shape和空洞卷积在语义分割网络结构中两大经典设计。所以本节我们有必要单独把空洞卷积拎出来剖析清楚。其实早在系列第6问的时候我们就对常用卷积方法逐一进行了盘点,参见深度学习100问-6:有哪些经典的卷积类型?

     空洞卷积(Dilated/Atrous Convolution)也叫扩张卷积或者膨胀卷积,字面意思上来说就是在卷积核中插入空洞,起到扩大感受野的作用。

     我们先来看一下空洞卷积的简单原理。下图是常规卷积和空洞卷积的动图对比:

深度学习100问-19:什么是空洞卷积?

常规卷积

深度学习100问-19:什么是空洞卷积?

空洞卷积

     可以看到,空洞卷积是在常规卷积核中填充0,用来扩大感受野,且进行计算时,空洞卷积中实际只有非零的元素起了作用。假设以一个变量a来衡量空洞卷积的扩张系数,则加入空洞之后的实际卷积核尺寸与原始卷积核尺寸之间的关系:

深度学习100问-19:什么是空洞卷积?

     其中k为原始卷积核大小,a为卷积扩张率(dilation rate),K为经过扩展后实际卷积核大小。除此之外,空洞卷积的卷积方式跟常规卷积一样。当a=1时,空洞卷积就退化为常规卷积。a=1、2和4时,空洞卷积示意图如下:

深度学习100问-19:什么是空洞卷积?

空洞卷积不同的扩张率

     当a=1,原始卷积核size为3*3,就是常规卷积。a=2时,加入空洞之后的卷积核size=3+(3-1)*(2-1)=5,对应的感受野可计算为(2^(a+2))-1=7。a=3时,卷积核size可以变化到3+(3-1)(4-1)=9,感受野则增长到(2^(a+2))-1=15。对比不加空洞卷积的情况,在stride为1的情况下3层3*3卷积的叠加,第三层输出特征图对应的感受野也只有1+(3-1)*3=7。所以,空洞卷积的一个重要作用就是增大感受野。

     这里你可能会问了,为什么要增大感受野。这里涉及到语义分割的一些发展历程,之前FCN率先提出以全卷积方式来处理像素级别的分割任务时,包括后来奠定语义分割baseline地位的U-Net,网络结构中存在大量的池化层来进行下采样,大量使用池化层的结果就是损失掉了一些信息,在解码上采样重建分辨率的时候肯定会有影响。特别是对于多目标、小物体的语义分割问题,以U-Net为代表的分割模型一直存在着精度瓶颈的问题。而基于增大感受野的动机背景下就提出了以空洞卷积为重大创新的deeplab系列分割网络,当然这是后话,这里暂且不表。

深度学习100问-19:什么是空洞卷积?

deeplab v3中使用的空洞卷积

     对于语义分割而言,空洞卷积主要有三个作用:

     第一是扩大感受野,具体前面已经说的比较多了,这里不做重复。但需要明确一点,池化也可以扩大感受野,但空间分辨率降低了,相比之下,空洞卷积可以在扩大感受野的同时不丢失分辨率,且保持像素的相对空间位置不变。简单而言就是空洞卷积可以同时控制感受野和分辨率。

     第二就是获取多尺度上下文信息。当多个带有不同dilation rate的空洞卷积核叠加时,不同的感受野会带来多尺度信息,这对于分割任务是非常重要的。

     第三就是可以降低计算量,不需要引入额外的参数,如上图空洞卷积示意图所示,实际卷积时只有带有红点的元素真正进行计算。

     下一篇我们将对deeplab系列的分割模型进行梳理。

参考资料:

Yu F, Koltun V. Multi-scale context aggregation by dilated convolutions[J]. arXiv preprint arXiv:1511.07122, 2015.

https://github.com/vdumoulin/conv_arithmetic

往期精彩:

深度学习100问-18:如何计算CNN的感受野?

深度学习100问-17:语义分割有哪些常用的评价指标?

深度学习100问-16:为什么U-Net在医学图像上表现优越?

深度学习100问-15:什么是深监督(Deep Supervision)?

深度学习100问-14:图像语义分割有哪些经典的上采样方法?

深度学习100问-13:深度学习如何制作个人数据集?

深度学习100问-12:深度学习有哪些经典数据集?

深度学习100问-11:什么是学习率衰减?

深度学习100问-10:如何部署一个轻量级的深度学习项目?

深度学习100问-9:为什么EfficientNet号称是最好的分类网络?

深度学习100问-8:什么是Batch Normalization?

深度学习100问-7:dropout有哪些细节问题?

深度学习100问-6:有哪些经典的卷积类型?

深度学习100问-5:如何阅读一份深度学习项目代码?

深度学习100问-4:深度学习应遵循怎样的论文研读路线?

深度学习100问-3:深度学习应掌握哪些Linux开发技术?

深度学习100问-2:深度学习应掌握哪些Git开发技术?

深度学习100问-1:深度学习环境配置有哪些坑?


一个算法工程师的成长之路

深度学习100问-19:什么是空洞卷积?

深度学习100问-19:什么是空洞卷积?

长按二维码.关注机器学习实验室

深度学习100问-19:什么是空洞卷积?