- 论文地址:Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation
- 论文代码: [github-Tensorflow]
(https://github.com/tensorflow/models/tree/master/research/deeplab)
概述
在语义分割任务中,spatial pyramid pooling module(SPP)可以捕获更多尺度信息,encoder-decoder结构可以更好恢复物体的边缘信息。
作者主要工作:
- 原DeepLabv3当作
encoder
,添加decoder
得到新的模型(DeepLabv3+)。
如下图所示,作者把spatial pyramid pooling module
和Encoder-Decoder
融合成一体:
- 把
Xception
和Depthwise separable convolution
应用到Atrous Spatial Pyramid Pooling
和decoder
中。
膨胀卷积
v1、v2中已详细说明,略....
深度可分离卷积(Depthwise separable convolution)
depthwise separable convolution
=depthwise convolution
+pointwise convolution
- depthwise convolution是在每个通道上独自的进行空间卷积
- pointwise convolution是利用1x1卷积核组合前面depthwise convolution得到的特征
- tensorflow支持atrous版的depthwise convolution
如下图所示:
为什么说要用它呢?
因为它能够保持性能
的同时大大减少计算量
,举个例子:
假若输入2通道
的特征,输出3通道
特征,卷积核大小为3x3
正常版卷积:
参数量=2x(3x3)x3=54
深度可分离卷积:
参数量=2x3x3+2x1x1x3=24
注意:
第一部分为depthwise convolution(2x3x3),第二部分为
pointwise convolution(2x1x1x3)
网络整体结构
- Encoder
Encoder就是原来的DeepLabv3,注意点有2点:
- 输入尺寸与输出尺寸比(output stride = 16),最后一个stage的膨胀率rate为2
- Atrous Spatial Pyramid Pooling module(ASPP)有四个不同的rate,额外一个全局平均池化
- Decoder
明显看到先把encoder的结果上采样4倍,然后与resnet中下采样前的Conv2特征concat一起,再进行3x3的卷积,最后上采样4倍得到最终结果
需要注意点:
- 融合低层次信息前,先进行1x1的卷积,目的是降通道(例如有512个通道,而encoder结果只有256个通道)
主干网络
作者在MSRA基础上作了些修改:
- 更深的Xception结构,并不修改entry flow network结构
- 所有的max pooling结构被stride=2的深度可分离卷积代替
-
每个3x3的depthwise convolution都跟BN和Relu
改进后的结构如下:
实验
- decoder结构上的探索
- 训练时
上采样输出结果
比下采样真值
提升1.2% -
低层次信息通道数多少个比较合适(1x1卷积的通道数)
-
哪个底层的细节信息较好&3x3的卷积如何构成
- 作者验证了U-Net和SegNet类似的解码结构在此网络上并没有多少提升
-
Backbone为Resnet101的结果
-
Backbone为Xception的结果
-
在Cityscapes数据集上