【机器学习】详解 扩张/膨胀/空洞卷积 (Dilated / Atrous Convolution)

目录

一、膨胀卷积的产生

二、膨胀卷积的定义

2.1 感受野 (Receptive Filed)

2.2 膨胀率/空洞率

2.3 例子

三、膨胀卷积的的特点

3.1 优点

3.2 缺点

3.3 改进


一、膨胀卷积的产生

        扩张 / 膨胀 / 空洞卷积 (Dilated / Atrous Convolution) (以下统一简称膨胀卷积) 最初旨在解决图像分割问题。早期多用卷积层+池化层堆叠来增加感受野 (Receptive Filed),但同时也缩小了特征图尺寸 (Resolution),故还需通过上采样还原图像尺寸。

        然而,这样堆叠的 Deep CNN 存在许多问题,例如:  

  1. 池化层 / 上采样层 (如双线性插值) 的结果是固定的、不可学习的
  2. 内部数据结构丢失,空间层级化信息丢失
  3. 小物体信息难以重建 (设有四个连续池化层,则任何小于 2^4 = 16 pixels 的物体信息理论上将无法重建)

        在这样问题背景下,语义分割问题一直处在瓶颈期,而 可增加感受野的同时保持特征图尺寸不变的 膨胀卷积 正良好地避免了这些问题。

        当然,若不用膨胀卷积,则还有另一种方案来弥补经下采样造成信息损失 —— 跳跃连接 (Skip Connection)。诸如 FCN 和 U-Net 这种典型的拓扑网络 (下采样+上采样+跳跃连接),都通过跳跃连接在上采样时弥补信息。


二、膨胀卷积的定义

2.1 感受野 (Receptive Filed)

感受野:特征图上的一个点可感知到输入图像上的区域/范围

        感受野 (Receptive Field),指神经网络中神经元 “感知到/看到的” 输入区域。在 CNN 中,特征图上某元素的计算 受 输入图像上某区域 的影响,此区域即为该元素的感受野。

        在 CNN 中,越深层的神经元看到的输入区域越大 —— 感受野越大,因此,堆叠卷积层是扩大感受野的常用方式

        例如,下图中从左往右使用了两个常规卷积 (kernel size=3×3, stride=1, padding=0)。绿色区域表示 Layer 2 中每个神经元在 Layer 1 感知到/看到的区域;黄色区域表示 Layer 3 中每个神经元在 Layer 2 和 Layer 1 感知到/看到的区域。

        更具体地,Layer 2 中每个神经元可 感知到/看到 Layer 1 上 3×3 大小的区域;Layer3 中每个神经元可 感知到/看到 Layer 2 上3×3 大小的区域,该区域又可以 感知到/看到 Layer1 上 5×5 大小的区域。

两层 CNN 的感受野变化

        再如,下图分别展示了:两次 3×3 卷积 (s=1, p=0) 所得感受野相当于 一次 5×5 卷积 (s=1, p=0),以及 三次 3×3 卷积 (s=1, p=0) 所得感受野相当于 一次 7×7 卷积 (s=1, p=0)。

两次 3×3 卷积 (s=1, p=0) 所得感受野相当于一次 5×5 卷积 (s=1, p=0)
三次 3×3 卷积 (s=1, p=0) 所得感受野相当于一次 7×7 卷积 (s=1, p=0)

         因此,感受野是个相对概念,某层特征图上的元素看到前面不同层上的区域范围是不同的。通常,感受野默认指的是看到输入图像上的区域。


2.2 膨胀率/空洞率

kernel size=3, stride=1 且 dilation rate 分别为 1, 2, 4 的三个不同的膨胀卷积

         由上节可知,3 \times 3 常规卷积的堆叠,在感受野上可达到 5 \times 5 和 7 \times 7 常规卷积的效果。而膨胀卷积则可在不增加参数量的前提下 (参数量=卷积核权重+偏置) 增大感受野。

        设某膨胀卷积的 卷积核大小 kernel size = k膨胀率/空洞数 dilated rated,则其 等效 kernel size = k',计算公式如下:

k' = k + (k-1) \times (d-1)

        设第 i 层的感受野为 RF_{i},等效 kernel size 为 k'_i,则下一层 (更深层) 感受野的递推关系为:

RF_{i+1} = RF_i + (k'_i - 1) \times S_i

        其中,表示第 i 层及先前所有层的步长之积,即:

S_i = \prod_{j=1}^{i} Stride_j = S_{i-1} \times Stride_i

        可见,第 i+1 层的步长 Stride_{i+1} 并不影响第 i+1 层的感受野,且感受野与 Padding 无关。

Standard Convolution with a 3 x 3 kernel (and padding)
Dilated Convolution with a 3 x 3 kernel and dilation rate 2

2.3 例子

kernel size=3, stride=1 且 dilation rate 分别为 1, 2, 4 的三个不同的膨胀卷积

         仍以上图为例,展示感受野计算过程:

        1. 输入图像

RF_1 = 1

        2. 经 第一层卷积 (kernel size=3, stride=1, padding=0, dilation rate=1) 后:

k'_1 = k_1 + (k_1-1) \times (d_1 - 1) = 3 + (3-1) \times (1-1) = 3

S_1 = \prod_{j=1}^{1}Stride_j = Stride_1 = 1

RF_{2} = RF_1 + (k'_1 - 1) \times S_1 = 1 + (3 - 1) \times 1 = 3

         3. 经 第二层卷积 (kernel size=3, stride=1, padding=0, dilation rate=2) 后:

k'_2 = k_2 + (k_2-1) \times (d_2 - 1) = 3 + (3-1) \times (2-1) = 5

S_2 = \prod_{j=1}^{2}Stride_j = Stride_1 \times Stride_2 = 1 \times 1 = 1

RF_{3} = RF_2 + (k'_2 - 1) \times S_2 = 3 + (5 - 1) \times 1 = 7

        4. 经 第三层卷积 (kernel size=3, stride=1, padding=0, dilation rate=4) 后:

k'_3 = k_3 + (k_3-1) \times (d_3 - 1) = 3 + (3-1) \times (4-1) = 9

S_3 = \prod_{j=1}^{3}Stride_j = Stride_1 \times Stride_2 \times Stride_3 = 1 \times 1 \times 1 = 1

RF_{4} = RF_3 + (k'_3 - 1) \times S_3 = 7 + (9 - 1) \times 1 = 15


三、膨胀卷积的的特点

3.1 优点

        一方面,为不因降采样 (pooling 或 s>2 conv) 丢失分辨率,而且能够扩大感受野,可以使用膨胀卷积。这在检测,分割任务中十分有用。感受野的扩大有助于检测分割大目标,特征图分辨率的保持有利于精确定位目标

        另一方面,膨胀卷积的特定参数 dilation rate 表示在卷积核间填充 dilation rate-1 个 0。因此,当设置不同 dilation rate 时,会获取不同大小的感受野,亦即获取了多尺度信息。多尺度信息在视觉任务中相当重要。 从 DeepLab 中的 ASPP 模块可知,膨胀卷积可任意扩大感受野,且无需引入额外参数。但由于膨胀卷积通常会保持特征图分辨率,算法整体计算量将不会降低。


3.2 缺点

        网格效应 (Gridding Effect)

        当仅多次叠加 dilation rate = 2 的 3 x 3 kernel 时,会出现如下所示的问题:

         由于膨胀卷积的计算方式类似于棋盘格式,当前层的卷积结果,来自于上一层没有相互依赖的独立集合,因此该层的卷积结果之间仍缺乏相关性,导致 局部信息丢失。这对 pixel-level dense prediction 任务而言是致命的。

        长程信息相关性缺失 (Long-ranged information might be not relevant.)

         膨胀卷积稀疏地采样输入信号,使得远距离卷积所得的信息之间缺乏相关性,从而影响分类结果。


3.3 改进

         Hybrid Dilated Convolution (HDC)

         图森未来的研究人员提出了 HDC 结构,具有如下特性:

  1. 叠加卷积的 dilation rate 不能有大于 1 的公约数,如 [2, 4, 6] 组合的最大公约数为 2,仍会出现 gridding effect
  2. 将 dilation rate 设计成 锯齿状结构,如 [1, 2, 5, 1, 2, 5] 组合这类循环结构
  3. 需满足:

M_i = max[M_{i+1} - 2r_i, M_{i+1} - 2 (M_{i+1} - r_i), r_i]

        其中 r_i 是 i 层的 dilation rate,而 M_i 指在 i 层的最大 dilation rate,那么假设总共有 n 层,默认 M_n = r_n。假设使用的 kernel size 为 k \times k,则我们的目标是 M_2 < k,这样至少可以用 dilation rate = 1 即 standard convolution 来覆盖掉所有洞。一个简单的例子: kernel size = 3 × 3 且 dilation rate = [1, 2, 5] (可行的方案)

        而这样的锯齿状 dilation rate 的性质,适合同时满足大、小物体的分割要求 (小 dilation rate 注重相对局部的近距离信息,大 dilation rate 关心相对全局的远距离信息)。

        以下对比实验可见,一个良好设计的 dilated convolution 网络能够有效避免 gridding effect。

        Atrous Spatial Pyramid Pooling (ASPP)

        在处理多尺度物体分割时,通常有以下方式:

        然而仅 (在一个卷积分支网络下) 用膨胀卷积去提取多尺度物体并不正统。例如,用一个 HDC 方法来获取一个大 (近) 车辆的信息,则对小 (远) 车辆信息都不再适合。若再用小膨胀卷积重新获取小车辆的信息,则将非常冗余。  

        ASPP 在网络 decoder 上采用不同大小的 dilation rate 来提取多尺度信息,各尺度均为一个独立的分支,并在网络最后合并一处,通过一个卷积层输出进行预测。如此有效地避免了在 encoder 上冗余信息的获取,直接关注与物体间与物体内的相关性。


参考资料:

吃透空洞卷积(Dilated Convolutions)

图解转置卷积,空洞卷积,C++经典面试题

彻底搞懂感受野的含义与计算 - 极市社区

卷积神经网络中感受野的详细介绍

空洞卷积(dilated convolution)理解 - 简书

如何理解空洞卷积(dilated convolution)? - 知乎

  • 27
    点赞
  • 101
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值