【语义分割系列:五】DeepLab v1 / v2 论文阅读翻译笔记
DeepLab v3
2017 CVPR
Rethinking Atrous Convolution for Semantic Image Segmentation
❤ fregu856/deeplabv3 :PyTorch implementation of DeepLabV3, trained on the Cityscapes dataset.
Introduce
v3主要贡献
-
提出了更通用的框架,适用于任何网络
-
改进了ASPP:由不同采样率的空洞卷积和BN层组成,我们尝试以级联或并行的方式布局模块。
-
讨论了一个重要问题:使用大采样率的3×3 的空洞卷积,因为图像边界响应无法捕捉远距离信息,会退化为1×1的卷积, 我们建议将图像级特征融合到ASPP模块中。
-
阐述了训练细节并分享了训练经验
challenge
-
连续池化和下采样,使特征分辨率下降,不利于定位。
-
全局特征或上下文之间的互相作用有助于做语义分割
4种解决目标多尺度问题的结构
- a. Image Pyramid: 将输入图片放缩成不同比例,分别应用在DCNN上,将预测结果融合得到最终输出
- b. Encoder-Decoder: 利用Encoder阶段的多尺度特征,运用到Decoder阶段上恢复空间分辨率(代表工作有FCN、SegNet、PSPNet、UNet等)
- c. Deeper w. Atrous Convolution: 在原始模型的顶端增加额外的模块,例如DenseCRF,捕捉像素间长距离信息
- d. Spatial Pyramid Pooling: 空间金字塔池化具有不同采样率和多种视野的卷积核,能够以多尺度捕捉对象
Related Work
全局特征或上下文之间的互相作用有助于做语义分割,下面是四种不同类型利用上下文信息做语义分割的全卷积网络。
-
图像金字塔(Image pyramid):
通常使用共享权重的模型,适用于多尺度的输入。小尺度的输入响应控制语义,大尺寸的输入响应控制细节。通过拉布拉斯金字塔对输入变换成多尺度,传入DCNN,融合输出。
这类的缺点是:因为GPU存储器的限制,对于更大/更深的模型不方便扩展。通常应用于推断阶段。 -
编码器-解码器(Encoder-decoder):
编码器的高层次的特征容易捕获更长的距离信息,在解码器阶段使用编码器阶段的信息帮助恢复目标的细节和空间维度。
例如SegNet利用下采样的池化索引作为上采样的指导;U-Net增加了编码器部分的特征跳跃连接到解码器;RefineNet等证明了Encoder-Decoder结构的有效性。 -
上下文模块(Context module):
包含了额外的模块用于级联编码长距离的上下文。
一种有效的方法是DenseCRF并入DCNN中,共同训练DCNN和CRF。 -
空间金字塔池化(Spatial pyramid pooling):
采用空间金字塔池化可以捕捉多个层次的上下文。
在ParseNet中从不同图像等级的特征中获取上下文信息;DeepLabv2提出ASPP,以不同采样率的并行空洞卷积捕捉多尺度信息。PSPNet在不同网格尺度上执行空间池化,并在多个数据集上获得优异的表现。
Architecture
- 基于编码器—解码器结构的神经网络实现。FCNs、SegNet、 UNet …
编码器:将信息「编码」为压缩向量来代表输入
解码器:是将这个信号重建为期望的输出。
- 与大多数编码器—解码器架构设计不同的是,Deeplab 提供了一种与众不同的语义分割方法。Deeplab 提出了一种用于控制信号抽取和学习多尺度语境特征的架构
DeepLab v3 架构如图
-
Deeplab 把在 ImagNet 上预训练得到的 ResNet 作为它的主要特征提取网络。
-
最后一个 ResNet Block
- 使用了空洞卷积(atrous convolution),而不是常规的卷积。
这个残差块内的每个卷积都使用了不同的扩张率来捕捉多尺度的语境信息。 - 顶部使用了空洞空间金字塔池化 (ASPP,Atrous Spatial Pyramid Pooling)
ASPP 使用了不同扩张率的卷积来对任意尺度的区域进行分类。
- 使用了空洞卷积(atrous convolution),而不是常规的卷积。
Atrous Convolution
理论上,它是这样工作的:首先,根据扩张率对卷积滤波器进行扩张。然后,它用零填充空白空间,创建稀疏的类似滤波器。最后,使用扩张的滤波器进行常规卷积。
不同扩张率的空洞卷积,空洞卷积的效率依赖于对扩张率的选择。
Deeplab 还讨论了不同输出步长对分割模型的影响。
- Deeplab 认为过强的信号抽象不利于密集预测任务。总之,具有较小输出步长 (较弱信号抽象) 的模型倾向于输出更精细的分割结果。
- 然而,使用较小的输出步长训练模型需要更多的训练时间。
由于空洞卷积块没有实现降采样,所以 ASPP 也运行在相同的特征响应大小上。因此,它允许使用相对较大的扩张率从多尺度的语境中学习特征。
Model 1 :Going Deeper with Atrous Convolution
串行的空洞卷积模型(modules with atrous convolution laid out in cascade)变得更深了
采用串行的ResNet,级联block为block5、block6、block7(均为block4的复制)
输出步长为16.在没有使用带孔卷积的情况下它的输出步长是256。
Multi-grid Method
对block4~block7 采用不同atrous rates
-
定义Multi_Grid=(r1,r2,r3)为block4~block7的三个convolutional layers的 unit rates。
-
convolutional layer最终的atrous rate等于unit rate与对应的rate的乘积。
Example:
当output_stride=16, Multi_Grid=(1,2,4)时, block4中three convolutions的rate分别为:rates=2∗(1,2,4) = (2,4,8)
Module 2 :Parallel modules with atrous convolution (ASPP)
better than modules with atrous convolution laid out in cascade
并行的空洞卷积模型
空洞空间金字塔池化(ASPP)的思想是提供具有多尺度信息的模型。为了做到这一点,ASPP 添加了一系列具有不同扩张率的空洞卷积。这些扩张率是被设计用来捕捉大范围语境的。
将batch normalization加入到ASPP模块。
- 为了增加全局的语境信息,ASPP 还通过全局平均池化(GAP global average pooling)
获得图像级特征。即将特征做全局平均池化,经过卷积,再融合。如下图(b)部分Image Pooling.
- 将image pooling得到的图像级特征输入到一个1×1 convolution with 256 filters(加入 batch normalization)中
- 然后将特征进行双线性上采样(bilinearly upsample)到特定的空间维度
-
改进的ASPP由一个 1×1 卷积,和三个 3×3卷积组成,步长为(6,12,18),输出步长为16
如下图(a)部分Atrous Spatial Pyramid Pooling -
ASPP所有分支处理好的特征以及image pooling 卷积 上采样之后的特征将会 concat 在一起通过另一个 1×1 卷积(也有着256个filter,加入批次归一化)
-
最后还有一个 1×1 卷积产生最终的分类。
-
条件随机场(CRF)被去除了,模型比较简洁易懂。
这个版本的 ASPP 包含 4 个并行的操作:
- 一个 1×1 的卷积
- 三个 3×3 的卷积(扩张率分别是(6,12,18)) 特征图的标称步长(nominal stride)是 16.
实现细节
用 ResNet-50 作为特征提取器,Deeplab_v3 采取了以下网络配置:
-
输出步长=16
两种输出步长(8 和 16)将输出步长设置为 16 有利于可持续地快速训练。 16 比 8 时处理的特征图小四倍。 -
为新的空洞残差块(block 4)使用固定的多重网格空洞卷积率(1,2,4)
-
在最后一个空洞卷积残差块之后使用扩张率为(6,12,18)的 ASPP。
-
连接所有分支的最终特征,输入到另一个 1×1 convolution (256 filters,有bn)
-
learning rate的更新方式是上次提到的新方式“poly”
Experimental Evalution
Training protocal
部分 | 设置 |
---|---|
数据集 | PASCAL VOC 2012 |
工具 | TensorFlow |
裁剪尺寸 | 采样513大小的裁剪尺寸 |
学习率策略 | 采用poly策略,在初始学习率基础上,乘以 |