天天看點

語義分割--(DeepLabv3+)Encoder-Decoder with Atrous Separable Convolution for Semantic ..DeepLabv3+AbstractIntroductionRelated WorkMethodsExperimentConclusion

DeepLabv3+

Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation

原文位址:DeepLabv3+

注意本文的一作 L i a n g − C h i e h C h e n Liang-Chieh Chen Liang−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的基礎上拓展了一個簡單有效的子產品用于恢複邊界資訊。如下圖所示:

語義分割--(DeepLabv3+)Encoder-Decoder with Atrous Separable Convolution for Semantic ..DeepLabv3+AbstractIntroductionRelated WorkMethodsExperimentConclusion
  • (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中也使用擴張卷積提取特征,我們将輸入和輸出的分辨率比值稱為 o u t p u t _ s t r i d e output\_stride output_stride,對于語義分割任務,使用擴張卷積替換下采樣,使得輸出的feature的 o u t p u t _ s t r i d e = 16 output\_stride=16 output_stride=16。

DeepLabv3的ASPP子產品使用了多個平行的擴張卷積,配合了圖像級特征(即全局平均池化)。我們将DeepLabv3的logit前的輸出特征作為encoder-decoder模型的encoder輸出。此時輸出的feature通道為256,可依據計算資源限制合理使用擴張卷積。

Proposed decoder:

在原先的DeepLabv3中,取預測的feature 直接雙線性上采樣16倍到期望尺寸,這樣的簡易的decoder子產品不能成功的恢複分割細節(這個問題在Understand Convolution for Semantic Segmentation重點讨論過~)

DeepLabv3+的整體的架構如下圖所示:

語義分割--(DeepLabv3+)Encoder-Decoder with Atrous Separable Convolution for Semantic ..DeepLabv3+AbstractIntroductionRelated WorkMethodsExperimentConclusion

簡單說一下decoder的組成:

  • encoder輸出的feature的 o u t p u t _ s t r i d e = 16 output\_stride=16 output_stride=16,經過雙線性上采樣4倍得到 F A F_A FA​, F A F_A FA​的 o u t p u t _ s t r i d e = 4 output\_stride=4 output_stride=4
  • 再取encoder中對應着相同分辨率(即 o u t p u t _ s t r i d e = 4 output\_stride=4 output_stride=4)的特征層,經過 1 × 1 1×1 1×1卷積降通道,此時輸出的feature記為 F B F_B FB​。這裡為什麼要經過 1 × 1 1×1 1×1卷積降通道,是因為此分辨率的特征通道較多(256或512),而 F A F_A FA​輸出隻有256,故降通道以保持與 F A F_A FA​所占比重,利于模型學習。
  • 将 F A F_A FA​和 F B F_B FB​做concat,再經過一個 3 × 3 3×3 3×3卷積細化feature,最終再雙線性上采樣4倍得到預測結果

在實驗部分展示了 o u t p u t _ s t r i d e = 16 output\_stride=16 output_stride=16是在速度和精度上最佳的平衡點,使用 o u t p u t _ s t r i d e = 8 output\_stride=8 output_stride=8能夠進一步提升精度,伴随着是更大的計算消耗。

使用分離卷積改進Xcetpion

擴張分離卷積

Atrous Convolution:

擴張卷積在DeepLab系列,Understand Convolution for Semantic Segmentation, Dilated Residual Networks 上都介紹過。這裡簡單說一下:

考慮到二維信号上使用空洞卷積,對于位置 i i i,在輸入為 x x x上應用濾波器 w w w,輸出為 y y y:

y [ i ] = ∑ k x [ i + r ⋅ k ] w [ k ] y[i]=\sum_{k}x[i+r·k]w[k] y[i]=k∑​x[i+r⋅k]w[k]

其中速率 r r r在采樣點之間引入 r − 1 r-1 r−1個零,有效的将感受野從 k × k k×k k×k擴充到 k e = 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做了改進,能夠進一步提升模型學習能力,新的結構如下:

語義分割--(DeepLabv3+)Encoder-Decoder with Atrous Separable Convolution for Semantic ..DeepLabv3+AbstractIntroductionRelated WorkMethodsExperimentConclusion

摘自MSRA COCO Detection & Segmentation Challenge 2017 Entry。

論文進一步改進了MSRA的工作以适應語義分割任務,具體如下:

  • 更深的Xception結構,不同的地方在于不修改entry flow network的結構,為了快速計算和有效的使用記憶體
  • 所有的最大池化操作替換成帶下采樣的深度分離卷積,這能夠應用擴張分離卷積擴充feature的分辨率
  • 在每個 3 × 3 3×3 3×3的深度卷積後增加BN層和ReLU

改進後的Xception整體結構如下:

語義分割--(DeepLabv3+)Encoder-Decoder with Atrous Separable Convolution for Semantic ..DeepLabv3+AbstractIntroductionRelated WorkMethodsExperimentConclusion

改進後的Xception為encodet網絡主體,替換原本DeepLabv3的ResNet101.

Experiment

論文使用modified aligned Xception改進後的ResNet-101,在ImageNet-1K上做預訓練,通過擴張卷積做密集的特征提取。采用DeepLabv3的訓練方式(poly學習政策,crop 513 × 513 513×513 513×513).注意在decoder子產品同樣包含BN層。

Decoder Design Choise

用DeepLabv3作為encoder,對于 f f f個 k × k k×k k×k的卷積操作記為 [ k × k , f ] [k×k,f] [k×k,f],先前DeepLabv3是在輸出結果上繼續雙線性上采樣16倍得到預測結果,這在PASCAL VOC2012 驗證集上達到了77.21%。論文在此基礎上,提出了改進的decoder子產品。關于decoder的設計有多個方案:

使用 1 × 1 1×1 1×1卷積減少來自低級feature的通道數

下圖示意部分為 1 × 1 1×1 1×1卷積:

語義分割--(DeepLabv3+)Encoder-Decoder with Atrous Separable Convolution for Semantic ..DeepLabv3+AbstractIntroductionRelated WorkMethodsExperimentConclusion

為了評估 1 × 1 1×1 1×1卷積的重要性,在encoder中取了 C o n v 2 Conv2 Conv2尺寸為 [ 3 × 3 , 256 ] [3×3,256] [3×3,256]為輸出,減少通道數在48到32之間性能最佳。結果如下表:

語義分割--(DeepLabv3+)Encoder-Decoder with Atrous Separable Convolution for Semantic ..DeepLabv3+AbstractIntroductionRelated WorkMethodsExperimentConclusion

最終采用了 [ 1 × 1 , 48 ] [1×1,48] [1×1,48]來做通道降維。

是否需要 3 × 3 3×3 3×3卷積逐漸擷取分割結果,

即下圖示意部分 3 × 3 3×3 3×3卷積恢複資訊:

語義分割--(DeepLabv3+)Encoder-Decoder with Atrous Separable Convolution for Semantic ..DeepLabv3+AbstractIntroductionRelated WorkMethodsExperimentConclusion

實驗部分包括使用 1 × 1 , 256 1×1,256 1×1,256的卷積,一組、二組、三組的 3 × 3 , 256 3×3,256 3×3,256卷積,使用 3 × 3 , 128 3×3,128 3×3,128的卷積,結果如下:

語義分割--(DeepLabv3+)Encoder-Decoder with Atrous Separable Convolution for Semantic ..DeepLabv3+AbstractIntroductionRelated WorkMethodsExperimentConclusion

結果顯示使用兩組 3 × 3 , 256 3×3,256 3×3,256卷積性能最佳。

使用那部分的低級特征幫助提供細節

即下圖示意部分:

語義分割--(DeepLabv3+)Encoder-Decoder with Atrous Separable Convolution for Semantic ..DeepLabv3+AbstractIntroductionRelated WorkMethodsExperimentConclusion

論文實驗了如果使用 C o n v 2 Conv2 Conv2和 C o n v 3 Conv3 Conv3同時預測, C o n v 2 Conv2 Conv2上采樣2倍後與 C o n v 3 Conv3 Conv3結合,再上采樣2倍,結果如下:

語義分割--(DeepLabv3+)Encoder-Decoder with Atrous Separable Convolution for Semantic ..DeepLabv3+AbstractIntroductionRelated WorkMethodsExperimentConclusion

這并沒有顯著的提升性能,考慮到計算資源的限制,論文最終采樣簡單的decoder方案,即取 C o n v 2 Conv2 Conv2上采樣後再與top feature concatenate。

ResNet-101 as Network Backbone

以ResNet為encoder模型,測試了以下幾種變體:

  • Baseline: 在下表的第一組。都沒有使用decoder。測試了不同 o u t p u t _ s t r i d e output\_stride output_stride,多尺度輸入,左右翻轉操作。
  • Adding decoder: 下表的第二組。采用的encoder。平均多增加了20B的計算消耗。
  • Coarser feature maps: 測試了使用 o u t p u t _ s t r i d e = 32 output\_stride=32 output_stride=32,這樣計算速度更快。但是相對于 o u t p u t _ s t r i d e = 16 output\_stride=16 output_stride=16準确率下降了1-2%左右。
語義分割--(DeepLabv3+)Encoder-Decoder with Atrous Separable Convolution for Semantic ..DeepLabv3+AbstractIntroductionRelated WorkMethodsExperimentConclusion

可以看到使用多尺度 M S MS MS計算量計算量增加一個數量級,使用左右翻轉 F l i p Flip Flip計算量翻倍。

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
語義分割--(DeepLabv3+)Encoder-Decoder with Atrous Separable Convolution for Semantic ..DeepLabv3+AbstractIntroductionRelated WorkMethodsExperimentConclusion

可以看到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上預訓練
語義分割--(DeepLabv3+)Encoder-Decoder with Atrous Separable Convolution for Semantic ..DeepLabv3+AbstractIntroductionRelated WorkMethodsExperimentConclusion

可以看到使用深度分離卷積可以顯著降低計算消耗。

與其他先進模型在VOC12的測試集上對比:

語義分割--(DeepLabv3+)Encoder-Decoder with Atrous Separable Convolution for Semantic ..DeepLabv3+AbstractIntroductionRelated WorkMethodsExperimentConclusion

在目标邊界上的提升

使用trimap實驗測量模型在分割邊界的準确度。計算邊界周圍擴充頻帶(稱為trimap)内的mIoU。結果如下:

語義分割--(DeepLabv3+)Encoder-Decoder with Atrous Separable Convolution for Semantic ..DeepLabv3+AbstractIntroductionRelated WorkMethodsExperimentConclusion

與雙線性上采樣相比,加decoder的有明顯的提升。trimap越小效果越明顯。

加了decoder的可視化結果如下:

語義分割--(DeepLabv3+)Encoder-Decoder with Atrous Separable Convolution for Semantic ..DeepLabv3+AbstractIntroductionRelated WorkMethodsExperimentConclusion

Conclusion

論文提出的DeepLabv3+是encoder-decoder架構,其中encoder架構采用DeepLabv3,decoder采用一個簡單卻有效的子產品用于恢複目标邊界細節。并可使用擴張卷積在指定計算資源下控制feature的分辨率。

論文探索了Xception和深度分離卷積在模型上的使用,進一步提高模型的速度和性能。模型在VOC2012上獲得了新的state-of-the-art表現。

繼續閱讀