- 论文地址: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数据集上
 







