目录
一、膨胀卷积的产生
二、膨胀卷积的定义
2.1 感受野 (Receptive Filed)
2.2 膨胀率/空洞率
2.3 例子
三、膨胀卷积的的特点
3.1 优点
3.2 缺点
3.3 改进
扩张 / 膨胀 / 空洞卷积 (Dilated / Atrous Convolution) (以下统一简称膨胀卷积) 最初旨在解决图像分割问题。早期多用卷积层+池化层堆叠来增加感受野 (Receptive Filed),但同时也缩小了特征图尺寸 (Resolution),故还需通过上采样还原图像尺寸。
然而,这样堆叠的 Deep CNN 存在许多问题,例如:
- 池化层 / 上采样层 (如双线性插值) 的结果是固定的、不可学习的
- 内部数据结构丢失,空间层级化信息丢失
- 小物体信息难以重建 (设有四个连续池化层,则任何小于 2^4 = 16 pixels 的物体信息理论上将无法重建)
在这样问题背景下,语义分割问题一直处在瓶颈期,而 可增加感受野的同时保持特征图尺寸不变的 膨胀卷积 正良好地避免了这些问题。
当然,若不用膨胀卷积,则还有另一种方案来弥补经下采样造成信息损失 —— 跳跃连接 (Skip Connection)。诸如 FCN 和 U-Net 这种典型的拓扑网络 (下采样+上采样+跳跃连接),都通过跳跃连接在上采样时弥补信息。
感受野 (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 大小的区域。
再如,下图分别展示了:两次 3×3 卷积 (s=1, p=0) 所得感受野相当于 一次 5×5 卷积 (s=1, p=0),以及 三次 3×3 卷积 (s=1, p=0) 所得感受野相当于 一次 7×7 卷积 (s=1, p=0)。
因此,感受野是个相对概念,某层特征图上的元素看到前面不同层上的区域范围是不同的。通常,感受野默认指的是看到输入图像上的区域。
由上节可知, 常规卷积的堆叠,在感受野上可达到 和 常规卷积的效果。而膨胀卷积则可在不增加参数量的前提下 (参数量=卷积核权重+偏置) 增大感受野。
设某膨胀卷积的 卷积核大小 kernel size = ,膨胀率/空洞数 dilated rate = ,则其 等效 kernel size = ,计算公式如下:
设第 层的感受野为 ,等效 kernel size 为 ,则下一层 (更深层) 感受野的递推关系为:
其中,表示第 层及先前所有层的步长之积,即:
可见,第 层的步长 并不影响第 层的感受野,且感受野与 Padding 无关。
仍以上图为例,展示感受野计算过程:
1. 输入图像:
2. 经 第一层卷积 (kernel size=3, stride=1, padding=0, dilation rate=1) 后:
3. 经 第二层卷积 (kernel size=3, stride=1, padding=0, dilation rate=2) 后:
4. 经 第三层卷积 (kernel size=3, stride=1, padding=0, dilation rate=4) 后:
一方面,为不因降采样 (pooling 或 s>2 conv) 丢失分辨率,而且能够扩大感受野,可以使用膨胀卷积。这在检测,分割任务中十分有用。感受野的扩大有助于检测分割大目标,特征图分辨率的保持有利于精确定位目标。
另一方面,膨胀卷积的特定参数 dilation rate 表示在卷积核间填充 dilation rate-1 个 0。因此,当设置不同 dilation rate 时,会获取不同大小的感受野,亦即获取了多尺度信息。多尺度信息在视觉任务中相当重要。 从 DeepLab 中的 ASPP 模块可知,膨胀卷积可任意扩大感受野,且无需引入额外参数。但由于膨胀卷积通常会保持特征图分辨率,算法整体计算量将不会降低。
网格效应 (Gridding Effect)
当仅多次叠加 dilation rate = 2 的 3 x 3 kernel 时,会出现如下所示的问题:
由于膨胀卷积的计算方式类似于棋盘格式,当前层的卷积结果,来自于上一层没有相互依赖的独立集合,因此该层的卷积结果之间仍缺乏相关性,导致 局部信息丢失。这对 pixel-level dense prediction 任务而言是致命的。
长程信息相关性缺失 (Long-ranged information might be not relevant.)
膨胀卷积稀疏地采样输入信号,使得远距离卷积所得的信息之间缺乏相关性,从而影响分类结果。
Hybrid Dilated Convolution (HDC)
图森未来的研究人员提出了 HDC 结构,具有如下特性:
- 叠加卷积的 dilation rate 不能有大于 1 的公约数,如 [2, 4, 6] 组合的最大公约数为 2,仍会出现 gridding effect
- 将 dilation rate 设计成 锯齿状结构,如 [1, 2, 5, 1, 2, 5] 组合这类循环结构
- 需满足:
其中 是 层的 dilation rate,而 指在 层的最大 dilation rate,那么假设总共有 层,默认 。假设使用的 kernel size 为 ,则我们的目标是 ,这样至少可以用 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)? - 知乎