语义分割丨DeepLab系列总结「v1、v2、v3、v3+」

时间:2024-04-03 17:14:53

花了点时间梳理了一下DeepLab系列的工作,主要关注每篇工作的背景和贡献,理清它们之间的联系,而实验和部分细节并没有过多介绍,请见谅。

DeepLabv1

Semantic image segmentation with deep convolutional nets and fully connected CRFs

link:https://arxiv.org/pdf/1412.7062v3.pdf

引言

DCNN在像素标记存在两个问题:信号下采用空间不变性(invariance)

第一个问题是由于DCNN中重复的最大池化和下采样造成分辨率下降,DeepLabv1通过带孔(atrous)算法解决。
第二个问题是分类器获得以对象为中心的决策需要空间不变性,从而限制了DCNN的空间精度,DeepLabv1通过条件随机场(CRF)提高模型捕获精细细节的能力。

DeepLabv1主要贡献

  • 速度:带孔算法的DCNN速度可达8fps,全连接CRF平均预测只需0.5s。

  • 准确:在PASCAL语义分割挑战中获得第二名。

  • 简洁:DeepLab可看作DCNN和CRF的级联。

相关工作

DeepLab有别于two stage的RCNN模型,RCNN没有完全利用DCNN的feature map。

DeepLab和其他SOTA模型的主要区别在于DCNN和CRF的组合。

方法

空洞卷积

一维空洞卷积

kernel size=3,Input stride=2,stride=1。
语义分割丨DeepLab系列总结「v1、v2、v3、v3+」

理解空洞卷积

feature map变小主要是由于卷积层和池化层引起的,若另所有层的stride=1,输出feature map将会变大。
原始情况下Pooling layer stride=2,receptive field=4
语义分割丨DeepLab系列总结「v1、v2、v3、v3+」
另Pooling layer stride=1,receptive field=3,输出更dense,但感受野变小。
语义分割丨DeepLab系列总结「v1、v2、v3、v3+」
采用空洞卷积后,receptive field=4
跟第一张图相比,在蓝色节点的基础上多了红色节点,在保持感受野使输出更加dense。
语义分割丨DeepLab系列总结「v1、v2、v3、v3+」

条件随机场

语义分割丨DeepLab系列总结「v1、v2、v3、v3+」

全连接CRF模型使用的能量函数E(x)

语义分割丨DeepLab系列总结「v1、v2、v3、v3+」

分为一元势能函‍数‍语义分割丨DeepLab系列总结「v1、v2、v3、v3+」和二元势能函数语义分割丨DeepLab系列总结「v1、v2、v3、v3+」

一元势能函语义分割丨DeepLab系列总结「v1、v2、v3、v3+」画观测序列对标记变量的影响。

语义分割丨DeepLab系列总结「v1、v2、v3、v3+」

当我们观察到像素点i,语义分割丨DeepLab系列总结「v1、v2、v3、v3+」是DCNN计算像素i的输出标签的分配概率。

二元势能函数语义分割丨DeepLab系列总结「v1、v2、v3、v3+」刻画变量之间的相关性以及观测序列对其影响,实质是像素之间的相关性

语义分割丨DeepLab系列总结「v1、v2、v3、v3+」

语义分割丨DeepLab系列总结「v1、v2、v3、v3+」语义分割丨DeepLab系列总结「v1、v2、v3、v3+」,否则为0,因此每个像素对之间都会有值,是全连接的。语义分割丨DeepLab系列总结「v1、v2、v3、v3+」语义分割丨DeepLab系列总结「v1、v2、v3、v3+」之间的高斯核,语义分割丨DeepLab系列总结「v1、v2、v3、v3+」是像素i的特征向量,对应的权重为语义分割丨DeepLab系列总结「v1、v2、v3、v3+」,高斯核为:

语义分割丨DeepLab系列总结「v1、v2、v3、v3+」

语义分割丨DeepLab系列总结「v1、v2、v3、v3+」控制高斯核的“尺度”。

多尺度预测

多尺度预测有性能提升,但是不如CRF明显。

DeepLabv2

DeepLab: Semantic Image Segmentation with Deep Convolutional Nets, Atrous Convolution, and Fully Connected CRFs

link:https://arxiv.org/pdf/1606.00915.pdf

引言

DCNN在语义分割中有三个挑战:
(1)特征分辨率下降
(2)存在物体多尺度
(3)由于DCNN的空间不变性使得空间精度下降

(1)是由于DCNN中的重复池化和下采样降低了空间分辨率,一种方法是采用转置卷积(deconvolutional layer),但是需要额外的空间和计算量。DeepLabv2在最后几个最大池化层用空洞卷积替代下采样,以更高的采样密度计算feature map。
(2)物体存在多尺度,解决该问题的一个标准方法是将图片缩放成不同尺寸,汇总特征得到结果。这种方法可以提高性能,但是增加了计算成本。受SPPNet启发,DeepLabv2提出一个类似结构,对给定输入以不同采样率的空洞卷积进行采样,以多比例捕捉图像上下文,称为ASPP(astrous spatial pyramid pooling)
(3)分类器要求空间不变性,从而限制了DCNN的空间精度。解决该问题的一个方法是使用跳级结构融合不同层的特征从而计算最终的分割结果。DeepLabv2更高效的方法是采用条件随机场增强模型捕捉细节的能力。

DeepLabv2结构

语义分割丨DeepLab系列总结「v1、v2、v3、v3+」

首先经过采用空洞卷积的DCNN如VGG-16或ResNet101得到粗略的分割结果,然后通过双线性插值将feature map恢复成原图分辨率,最后用全连接的CRF来精细化分割结果。

DeepLabv2贡献

采用多尺度处理和ASPP达到了更好的性能。

在DeepLab基础上将VGG-16换成ResNet,在PASCAL VOC 2012和其他数据上上达到SOTA。

相关工作

语义分割的核心是将分割与分类结合。

语义分割中DCNN模型主要有三类:

(1)采样基于DCNN的自下而上的图像分割级联。

(2)依靠DCNN做密集计算得到预测结果,并将多个独立结果做耦合。

(3)使用DCNN直接做密集的像素级分类。

方法

空洞卷积

一维情况

一维信号,空洞卷积输入x[i],输出y[i],长度K的滤波器为ω[k]。

语义分割丨DeepLab系列总结「v1、v2、v3、v3+」

r为输入信号的采样步长,标准卷积中r=1。
语义分割丨DeepLab系列总结「v1、v2、v3、v3+」

二维情况

语义分割丨DeepLab系列总结「v1、v2、v3、v3+」

  • 首先下采样将分辨率降低2倍,做卷积,再上采样得到结果。本质是和原图的1/4位置做响应。

  • 对全分辨率图做r=2的空洞卷积,直接得到结果。可以计算整张图的响应。

使用空洞卷积可以增大感受野,采样率为r的空洞卷积插入r−1个零,将k×k的卷积核变为语义分割丨DeepLab系列总结「v1、v2、v3、v3+」而不增加计算量。

ASPP

并行采用多个采样率的空洞卷积提取特征,再将特征进行融合,该结构称为空洞空间金字塔池化(atrous spatial pyramid pooling)。
语义分割丨DeepLab系列总结「v1、v2、v3、v3+」

条件随机场

同DeepLabv1


DeepLabv3

Rethinking Atrous Convolution for Semantic Image Segmentation
link:https://arxiv.org/pdf/1706.05587.pdf

引言

语义分割中,应用DCNN有两个挑战

1)连续池化或卷积带来的分辨率下降,让DCNN学习更抽象的特征表示。然而,空间不变性会阻碍分割任务,因为其需要详细的空间信息。为了解决该问题,DeepLab引入空洞卷积
2)物体存在多尺度,有许多方法解决该问题,我们主要考虑四类:
语义分割丨DeepLab系列总结「v1、v2、v3、v3+」

①将DCNN应用于图像金字塔来提取不同尺度输入的特征,将预测结果融合得到最终输出。
②encoder-decoder结构,利用encoder的多尺度特征到解码器上恢复分辨率。
③在原网络的顶端增加额外的模块来捕获长程信息,如DenseCRF。
④SPP空间金字塔池化具有不同采样率和感受野的卷积核,能以多尺度捕获对象。

DeepLabv3的贡献

  • 回顾了空洞卷积,在级联模块和金字塔池化框架下也能扩大感受野提取多尺度信息。

  • 改进了ASPP:由不同的采样率的空洞卷积和BN层组成,以级联或并行的方式布局。

  • 大采样率的3×3空洞卷积由于图像边界效应无法捕获长程信息,将退化为1×1的卷积,我们建议将图像特征融入ASPP。

  • 阐述训练细节和方法。

相关工作

现有多个工作表明全局特征或上下文之间的互相作用有助于做语义分割,我们讨论四种不同类型利用上下文信息做语义分割的全卷积网络。

图像金字塔

同一模型使用共享权重,适用于多尺度输入。
小尺度输入的特征相应编码了长程的语义信息,大尺度输入的特征相应保留了小对象的细节。
该方法通过拉普拉斯金字塔将输入变换成多尺度,并送入DCNN。
主要缺点是由于GPU存储的限制,在更大更深的DCNN上不能很好地拓展,通常其用于测试阶段。

编码器-解码器

该模型主要包含两部分:
1)编码器,该阶段feature map的维度逐渐降低并且深层次的特征容易捕获远程信息。
2)解码器,该阶段恢复物体细节和空间维度。
SegNet、U-Net、RefineNet

上下文模块

模型包含额外的模块来编码远程上下文信息。
DenseCRF

空间金字塔池化

采用SPP来捕获多尺度上下文。
ParseNet、DeepLabv2(ASPP)、PSPNet(PSP)

DeepLabv3提出将空洞卷积作为上下文模块空间金字塔池化的工具。

方法

回顾空洞卷积如何提取密集特征、讨论空洞卷积模块以级联(串行)和并行布局。

空洞卷积

见DeepLabv1、v2

级联ResNet

将空洞卷积应用于级联结构,在ResNet最后一个block(block4)后连接许多级联模块。

语义分割丨DeepLab系列总结「v1、v2、v3、v3+」
图(a)中整体信息汇聚到非常小的feature map,实验表明其不利于分割。

Multi-grid Method
定义语义分割丨DeepLab系列总结「v1、v2、v3、v3+」为block4到block7三个卷积层的unit rates。则rates=2⋅(1,2,4)=(2,4,8)

ASPP+

在ASPP中加入BN层。
当采样率变大,卷积核的有效权重变小。
在65×65的feature map上以不同采样率采用3×3的卷积核。当采样率接近于feature map尺寸时,3×3退化为1×1卷积核,只有中心的权重是有效的。

为了解决该问题并在模型中整合全局上下文信息,我们对最后的feature map采用全局池化,并经过256个1×1的卷积核(BN),然后双线性插值到所需空间维度。

最终ASPP包含
(a)一个1×1的卷积和三个3×3、rates=(6,12,18)、output_stride=16的空洞卷积(256+BN)。
(b)图像级特征。将特征做全局平均池化,后卷积,再上采样。
(a)中不同 rates的空洞卷积通过控制不同的 padding输出相同的尺寸,(b)中上采样后与(a)尺寸一致。
所有分支的结果被拼接起来并经过1×1的卷积(256+BN),最后经过1×1卷积生成分割结果。
语义分割丨DeepLab系列总结「v1、v2、v3、v3+」
当output_stride=8,采样率加倍。

DeepLabv3+

Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation
Link:https://arxiv.org/abs/1802.02611.pdf

引言

语义分割中的DCNN主要有两种结构:空间金字塔池化SPP编码器-解码器encoder-decoder

SPP通过多种感受野池化不同分辨率的特征来挖掘上下文信息。
Encoder-decoder逐步重构空间信息来更好的捕捉物体的边缘。

语义分割丨DeepLab系列总结「v1、v2、v3、v3+」

DeepLabv3+对DeepLabv3进行了拓展,在encoder-decoder结构上采用SPP模块。encoder提取丰富的语义信息,decoder恢复精细的物体边缘。encoder允许在任意分辨率下采用空洞卷积。

DeepLabv3+贡献

  • 提出一个encoder-decoder结构,其包含DeepLabv3作为encoder和高效的decoder模块。

  • encoderdecoder结构中可以通过空洞卷积来平衡精度和运行时间,现有的encoder-decoder结构是不可行的。

  • 在语义分割任务中采用Xception模型并采用depthwise separable convolution,从而更快更有效。

相关工作

SPP

收集多尺度信息。
PSPNet、DeepLab

Encoder-decoder

encoder逐渐减小feature map并提取高层语义信息。
decoder逐渐恢复空间信息。

Depthwise separable convolution

深度可分离卷积或group convolution,在保持性能前提下,有效降低了计算量和参数量。

方法

Encoder-Decoder

空洞卷积

该部分见DeepLabv2

语义分割丨DeepLab系列总结「v1、v2、v3、v3+」

深度可分离卷积

深度可分离卷积将标准卷积分解为depthwise conv后跟一个pointwise conv,有效地降低了计算复杂度。
depthwise tstride等于输入图像分辨率和输出分辨率的比值。

图像分类任务,最终的feature map通常比输入图像分辨率小32倍,因此outputstride=32。
语义分割任务,令outputstride=16or8,通过移除最后1or2个blocks并应用空洞卷积(rate=2or4)来密集提取特征。

在我们的encoder-decoder结构中,采用DeepLabv3最后的feature map作为encoder的输出,包含256个通道并富含语义信息。此外,可以通过空洞卷积以任意分辨率提取特征,取决于计算量。

decoder

语义分割丨DeepLab系列总结「v1、v2、v3、v3+」
DeepLabv3以factor=16上采样。
DeepLabv3+首先以factor=4上采样,然后和尺寸相同的低层特征相拼接。低层特征采用1×1卷积降维,因为低层特征维度一般比较高(256or512),将占较大权重(我们的模型只有256),使得训练变困难。拼接之后,我们采用3×3的卷积来细化特征,然后再以factor=4双线性插值。

改进 Aligned Xception

Xception模型用于图像分类任务,Aligned Xception用于物体检测任务,我们对Xception做了一些变化使其可用于语义分割任务。
1)更多的层,为了计算量和内存,不对Entry flow网络结构进行修改。
2)所有池化层替换为depthwise separable conv,以便采用 atrous separable conv提取任意分辨率的特征。
3)类似于MobileNet,在每个3×3后添加额外的BN和ReLU。
语义分割丨DeepLab系列总结「v1、v2、v3、v3+」

总结


DeepLabv1 DeepLabv2 DeepLabv3 DeepLabv3+
Backbone VGG-16 ResNet ResNet+ Xception
Atrous Conv
CRF × ×
ASPP × ASPP ASPP+ ASPP+
Encoder-decoder × × ×

参考

[1]Chen L C, Papandreou G, Kokkinos I, et al. Semantic image segmentation with deep convolutional nets and fully connected crfs[J]. arXiv preprint arXiv:1412.7062, 2014.

[2]Chen L C, Papandreou G, Kokkinos I, et al. Deeplab: Semantic image segmentation with deep convolutional nets, atrous convolution, and fully connected crfs[J]. IEEE transactions on pattern analysis and machine intelligence, 2018, 40(4): 834-848.

[3]Chen L C, Papandreou G, Schroff F, et al. Rethinking atrous convolution for semantic image segmentation[J]. arXiv preprint arXiv:1706.05587, 2017.

[4]Chen L C, Zhu Y, Papandreou G, et al. Encoder-decoder with atrous separable convolution for semantic image segmentation[C]//Proceedings of the European Conference on Computer Vision (ECCV). 2018: 801-818.

[5]https://www.imooc.com/article/35025
[6]http://hellodfan.com/2018/01/22/语义分割论文-DeepLab系列/

[7]https://www.twblogs.net/a/5ca1c085bd9eee59d3326c76/zh-cn

[8]https://zhuanlan.zhihu.com/p/33796585

(本文出自平台合作作者Vincent,cs硕士在读)