- 論文地址: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數據集上