語義分割--(DeepLabv3+)Encoder-Decoder with Atrous Separable Convolution for Semantic ..
DeepLabv3+
Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation
原文地址:DeepLabv3+
注意本文的一作Liang−ChiehChenLiang-Chieh ChenLiang−ChiehChen參與了DeepLab系列,MaskLab和MobileNet系列的工作。本文是在DeepLabv3的基礎上將多個技術融合到一起,達到新的state-of-the-art。
論文在提出了DeepLabv3+架構。主要以DeepLabv3做encoder架構,decoder采用一個簡單卻有效的模塊。並探索了了改進的Xception和深度分離卷積在模型中的應用,進一步提升模型在語義分割任務上的性能。
Abstract
空間金字塔模塊在輸入feature上應用多采樣率擴張卷積、多接收野卷積或池化,探索多尺度上下文信息。 Encoder-Decoder結構通過逐漸恢復空間信息來捕捉清晰的目標邊界。
DeepLabv3+結合了這兩者的優點,具體來說,以DeepLabv3為encoder架構,在此基礎上添加了簡單卻有效的decoder模塊用於細化分割結果。此外論文進一步探究了以Xception結構為模型主干,並探討了Depthwise separable convolution在ASPP和decoder模塊上的應用,最終得到了更快更強大的encoder-decoder網絡。
論文在PASCAL VOC 2012上驗證了模型的有效性,在沒有添加任何后端處理的情況下達到了89%mIoU.
Introduction
在DeepLabv3+中,使用了兩種類型的神經網絡,使用空間金字塔模塊和encoder-decoder結構做語義分割。
- 空間金字塔:通過在不同分辨率上以池化操作捕獲豐富的上下文信息
- encoder-decoder架構:逐漸的獲得清晰的物體邊界
DeepLabv3+結合這兩者的優點,在DeepLabv3的基礎上拓展了一個簡單有效的模塊用於恢復邊界信息。如下圖所示:
- (a): 即DeepLabv3的結構,使用ASPP模塊獲取多尺度上下文信息,直接上采樣得到預測結果
- (b): encoder-decoder結構,高層特征提供語義,decoder逐步恢復邊界信息
- ©: DeepLabv3+結構,以DeepLabv3為encoder,decoder結構簡單
DeepLabv3的top layer輸出的feature中有豐富的語義信息,可通過擴張卷積依據計算資源限制控制計算密度,配合一個decoder模塊用於逐漸恢復邊界信息。
在上述的encoder-decoder架構上,論文受到Xception等工作啟發,將深度分離卷積應用到ASPP和decoder模塊,用於快速計算並保持模型的強大學習能力。最終得到的模型在沒有添加后端處理的情況下,達到了新的state-of-the-art.
論文的主要貢獻在於:
- 論文提出了一個全新的encoder-decoder架構,使用DeepLabv3作為encoder模塊,並添加了一個簡單卻有效的decoder模塊
- 在我們提出的encoder-decoder架構中,可通過擴張卷積直接控制提取encoder特征的分辨率,用於平衡精度和運行時間
- 論文將Xception結構應用於分割任務中,在ASPP和decoder模塊中加入深度分離卷積,獲得到強大又快速的模型
- 模型達到了新的state-of-the-art,同時我們給出了模型設計分析細節和模型變體
- 以后開源TensorFlow代碼(估計得等到2018CVPR或者ECCV完全結束~)
Related Work
近幾年基於全卷積神經網絡的模型在語義分割任務上表現成功。有幾種變體模型提出利用上下文信息包括多尺度輸入在內的做分割,也有采用概率圖模型細化分割結果。本文主要討論使用空間金字塔池化和encoder-decoder結構、並討論了基於Xception為主體的強大特征提取層,和基於深度分離卷積快速計算。
**空間金字塔池化:**如PSPNet使用多個不同gird的池化,DeepLab的ASPP模塊平行的使用不同擴張率的擴張卷積,執行空間金字塔合並獲取多尺度信息。在多個benchmark獲得不錯的結果。
Encoder-Decoder: encoder-decoder結構在多個計算機視覺任務上獲得成功,例如人類姿態估計、目標檢測和語義分割。通常,encoder-decoder網絡包含:
- encoder模塊逐步減少feature map分辨率,捕獲高級語義信息
- decoder模塊逐漸恢復空間信息
在這領域上基礎上,我們使用DeepLabv3作為encoder模塊,並增加一個簡單又有效的的decoder模塊獲取空間信息。
深度分離卷積: 深度分離卷積和組卷積能夠減少計算消耗和參數量的同時維持相似的表現。深度分離卷積已應用在多個神經網絡中,特別的,我們探索了Xception架構,在語義分割任務上展現了精度和速度上的雙重提升。
Methods
本節簡單回顧DeepLabv3架構,提出改進后的Xception模型,介紹擴張卷積和深度分離卷積。
Encoder-Decoder with Atrous Convolution
DeepLabv3 as encoder:
DeepLabv3中也使用擴張卷積提取特征,我們將輸入和輸出的分辨率比值稱為output_strideoutput\_strideoutput_stride,對於語義分割任務,使用擴張卷積替換下采樣,使得輸出的feature的output_stride=16output\_stride=16output_stride=16。
DeepLabv3的ASPP模塊使用了多個平行的擴張卷積,配合了圖像級特征(即全局平均池化)。我們將DeepLabv3的logit前的輸出特征作為encoder-decoder模型的encoder輸出。此時輸出的feature通道為256,可依據計算資源限制合理使用擴張卷積。
Proposed decoder:
在原先的DeepLabv3中,取預測的feature 直接雙線性上采樣16倍到期望尺寸,這樣的簡易的decoder模塊不能成功的恢復分割細節(這個問題在Understand Convolution for Semantic Segmentation重點討論過~)
DeepLabv3+的整體的架構如下圖所示:
簡單說一下decoder的組成:
- encoder輸出的feature的output_stride=16output\_stride=16output_stride=16,經過雙線性上采樣4倍得到FAF_AFA,FAF_AFA的output_stride=4output\_stride=4output_stride=4
- 再取encoder中對應着相同分辨率(即output_stride=4output\_stride=4output_stride=4)的特征層,經過1×11×11×1卷積降通道,此時輸出的feature記為FBF_BFB。這里為什么要經過1×11×11×1卷積降通道,是因為此分辨率的特征通道較多(256或512),而FAF_AFA輸出只有256,故降通道以保持與FAF_AFA所占比重,利於模型學習。
- 將FAF_AFA和FBF_BFB做concat,再經過一個3×33×33×3卷積細化feature,最終再雙線性上采樣4倍得到預測結果
在實驗部分展示了output_stride=16output\_stride=16output_stride=16是在速度和精度上最佳的平衡點,使用output_stride=8output\_stride=8output_stride=8能夠進一步提升精度,伴隨着是更大的計算消耗。
使用分離卷積改進Xcetpion
擴張分離卷積
Atrous Convolution:
擴張卷積在DeepLab系列,Understand Convolution for Semantic Segmentation, Dilated Residual Networks 上都介紹過。這里簡單說一下:
考慮到二維信號上使用空洞卷積,對於位置iii,在輸入為xxx上應用濾波器www,輸出為yyy:
y[i]=∑kx[i+r⋅k]w[k]y[i]=\sum_{k}x[i+r·k]w[k]y[i]=k∑x[i+r⋅k]w[k]
其中速率rrr在采樣點之間引入r−1r-1r−1個零,有效的將感受野從k×kk×kk×k擴展到ke=k+(k−1)(r−1)k_e=k+(k-1)(r-1)ke=k+(k−1)(r−1),而不增加參數和計算量。
Depthwise separable convolution:
深度分離卷積在MobileNet里面重點講過,這里簡單說一下:
深度可分離卷積干的活是:把標准卷積分解成深度卷積(depthwise convolution)和逐點卷積(pointwise convolution)。深度卷積對每個通道獨立使用空間卷積,逐點卷積用於結合深度卷積的輸出。深度分離卷積可以大幅度降低參數量和計算量。
我們將擴張卷積核深度分離卷積結合到一起,即擴張分離卷積。擴張分離卷積能夠顯著的減少模型的計算復雜度並維持相似的表現。
Modified Aligned Xcetpion
論文受到近期MSRA組在Xception上改進工作可變形卷積(Deformable-ConvNets)啟發,Deformable-ConvNets對Xception做了改進,能夠進一步提升模型學習能力,新的結構如下:
摘自MSRA COCO Detection & Segmentation Challenge 2017 Entry。
論文進一步改進了MSRA的工作以適應語義分割任務,具體如下:
- 更深的Xception結構,不同的地方在於不修改entry flow network的結構,為了快速計算和有效的使用內存
- 所有的最大池化操作替換成帶下采樣的深度分離卷積,這能夠應用擴張分離卷積擴展feature的分辨率
- 在每個3×33×33×3的深度卷積后增加BN層和ReLU
改進后的Xception整體結構如下:
改進后的Xception為encodet網絡主體,替換原本DeepLabv3的ResNet101.
Experiment
論文使用modified aligned Xception改進后的ResNet-101,在ImageNet-1K上做預訓練,通過擴張卷積做密集的特征提取。采用DeepLabv3的訓練方式(poly學習策略,crop513×513513×513513×513).注意在decoder模塊同樣包含BN層。
Decoder Design Choise
用DeepLabv3作為encoder,對於fff個k×kk×kk×k的卷積操作記為[k×k,f][k×k,f][k×k,f],先前DeepLabv3是在輸出結果上繼續雙線性上采樣16倍得到預測結果,這在PASCAL VOC2012 驗證集上達到了77.21%。論文在此基礎上,提出了改進的decoder模塊。關於decoder的設計有多個方案:
使用1×11×11×1卷積減少來自低級feature的通道數
下圖示意部分為1×11×11×1卷積:
為了評估1×11×11×1卷積的重要性,在encoder中取了Conv2Conv2Conv2尺寸為[3×3,256][3×3,256][3×3,256]為輸出,減少通道數在48到32之間性能最佳。結果如下表:
最終采用了[1×1,48][1×1,48][1×1,48]來做通道降維。
是否需要3×33×33×3卷積逐步獲取分割結果,
即下圖示意部分3×33×33×3卷積恢復信息:
實驗部分包括使用1×1,2561×1,2561×1,256的卷積,一組、二組、三組的3×3,2563×3,2563×3,256卷積,使用3×3,1283×3,1283×3,128的卷積,結果如下:
結果顯示使用兩組3×3,2563×3,2563×3,256卷積性能最佳。
使用那部分的低級特征幫助提供細節
即下圖示意部分:
論文實驗了如果使用Conv2Conv2Conv2和Conv3Conv3Conv3同時預測,Conv2Conv2Conv2上采樣2倍后與Conv3Conv3Conv3結合,再上采樣2倍,結果如下:
這並沒有顯著的提升性能,考慮到計算資源的限制,論文最終采樣簡單的decoder方案,即取Conv2Conv2Conv2上采樣后再與top feature concatenate。
ResNet-101 as Network Backbone
以ResNet為encoder模型,測試了以下幾種變體:
-
Baseline: 在下表的第一組。都沒有使用decoder。測試了不同output_strideoutput\_strideoutput_stride,多尺度輸入,左右翻轉操作。
-
Adding decoder: 下表的第二組。采用的encoder。平均多增加了20B的計算消耗。
-
Coarser feature maps: 測試了使用output_stride=32output\_stride=32output_stride=32,這樣計算速度更快。但是相對於output_stride=16output\_stride=16output_stride=16准確率下降了1-2%左右。
可以看到使用多尺度MSMSMS計算量計算量增加一個數量級,使用左右翻轉FlipFlipFlip計算量翻倍。
Xception as Network Backbone
ImageNet pretraining: 改進后的Xception網絡在ImageNet-1K上做了預訓練。訓練設置如下:
選項 | 配置 |
---|---|
優化器 | Nesterov momentum optimizer,momentum = 0.9 |
學習率 | 初始學習率0.05,2個epochs衰減0.94 |
weight_decay | 4e-5 |
硬件 | 同步使用50 GPUs |
batchsize | 每個GPU取32 |
image size | 299x299 |
可以看到Modified Xception性能要好點。
整體的使用Modified Xception做為網絡骨架,使用如下幾種變體:
- Baseline: 不使用decoder.
- Adding decoder: 添加了decoder.
- Using depthwise separable convolution: 在ASPP和decoder中使用深度分離卷積。計算量下降了30-40%.
- Pretraining on COCO: 在MS-COCO數據集上預訓練
- Pretraining on JFT: 在IamgeNet-1K和JFT-300M上預訓練
可以看到使用深度分離卷積可以顯著降低計算消耗。
與其他先進模型在VOC12的測試集上對比:
在目標邊界上的提升
使用trimap實驗測量模型在分割邊界的准確度。計算邊界周圍擴展頻帶(稱為trimap)內的mIoU。結果如下:
與雙線性上采樣相比,加decoder的有明顯的提升。trimap越小效果越明顯。
加了decoder的可視化結果如下:
Conclusion
論文提出的DeepLabv3+是encoder-decoder架構,其中encoder架構采用DeepLabv3,decoder采用一個簡單卻有效的模塊用於恢復目標邊界細節。並可使用擴張卷積在指定計算資源下控制feature的分辨率。
論文探索了Xception和深度分離卷積在模型上的使用,進一步提高模型的速度和性能。模型在VOC2012上獲得了新的state-of-the-art表現。