1. 程式人生 > >影象語義分割(10)-DeepLabV3+: 用於影象語義分割的帶有空洞可分離卷積的編解碼結構

影象語義分割(10)-DeepLabV3+: 用於影象語義分割的帶有空洞可分離卷積的編解碼結構

論文地址 :Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation
論文程式碼:Github連結

1. 摘要

  文章主要的工作是將空間金字塔池化和編解碼模組結合,在DeepLabV3的基礎上提出DeepLabV3+:使用DeepLabV3作為編碼結構,再次基礎上增加一個簡單有效的解碼模組來精細化分割的結果,特別是邊界部分。文章還進一步探索Xception的結構,在ASPP和Decoder中都應用了深度可分離卷積,得到一個快速而且健壯的編解碼網路。

2. 介紹

  語義分割模型中,金字塔池化模組能夠在不同解析度下獲取豐富的語義資訊而編解碼結構則能夠捕獲比較細節的物體邊框。在DeepLabV3中應用了不同空洞率的空洞卷積層並行組成的ASPP模組來捕獲多個尺度的特徵圖,儘管能夠將豐富的語義資訊編碼在最後的特徵圖中,但是由於池化和帶步長卷積的存在,會使得一些關於物體邊界的細節資訊丟失
  這個問題可以通過空洞卷積來減緩,空洞卷積計算代價過大。以ResNet101為例,若output_stride=16,有三個殘差塊即九個層需要空洞化;若output_stride=8,則有26個殘差快即78個層需要空洞化。
  但是在編解碼結構中不會有如此強度的計算,在此類模型的編碼結構中沒有特徵需要空洞卷積處理,解碼結構逐步還原,所以計算更快。而且編解碼結構還能獲得更加詳細的物體邊框回覆效果,所以論文中將ASPP和編解碼結構結合來獲取物體多尺度的語義資訊並精細化邊框,如下圖所示:
在這裡插入圖片描述


  除了ASPP與編解碼結構的結合,模型還應用了深度可分離卷積來簡化模型並提速,具體來講是對Xception進行了一些改進,並將可分離卷積的思想結合空洞卷積形成空洞可分離卷積應用於ASPP和解碼模組中。
  總的來說,論文的主要貢獻在於:

  • 新穎的使用DeepLabV3作為編碼模組的編解碼結構
  • 空洞卷積來控制編碼結構中特徵圖尺寸實現精度和速度的均衡
  • 應用Xception作為主幹網路並在ASPP和解碼結構中應用可分離卷積的思想提出空洞可分離卷積
  • 在PASCAL VOC 2012資料集上實現了state-of-art 的效能。

3. 方法

  涉及的方法有空洞卷積,深度可分離卷積,DeepLabV3作為編碼器模組,對應的解碼結構,Xception的修改版。

3.1 帶有空洞卷積的編解碼結構
  • 空洞卷積
       空洞卷積的引入能夠使特徵圖的解析度得到控制並且調整濾波器的感受野來捕獲多尺度的資訊。二維訊號中,對於每一個位置 i i ,有一個輸出 y y
    和一個濾波器 w w ,空洞卷積在特徵圖x上的應用如下所示:
    y [ i ] = k x [ i + r k ] w [ k ] y[i]=\sum_{k}x[i+r \cdot k]w[k]
  • 深度可分離卷積
      深度可分離卷積把標準卷積分解為一個Depthwise Conv和一個Pointwise Conv,其中DW獨立地對每個輸入通道做空間卷積,PW用於結合DW的輸出。將空洞卷積於深度可分離卷積結合可以減少運算量的同時保持不錯的效果,結構如下圖所示:
    在這裡插入圖片描述
  • DeepLabV3作為編碼模組
      對於影象分類任務來說,輸出特徵圖通常是輸入影象的三二分之一,即output_stride=32,對於分割任務來說,通常是16或者8,這是通過一處最後的一個block或者兩個blocks並應用空洞卷積來實現的。[atrous rate=2,4;output_stride=8]。
      對於DeepLabV3來說,它通過應用不同的空洞率的空洞卷積和image-level feature改進了ASPP,我們使用這個結構作為編碼結構。這個編碼結構的輸出使包含256個通道的富語義資訊,並且可以通過調整具體的引數得到不同尺寸的輸出特徵圖
  • 解碼結構
      通常來說,DeepLabV3的output_stride=16,然後通過一個16倍的雙線性插值來進行上取樣,這可以被看作一個簡單的解碼模組,單並不能很好的恢復分割的細節。文中提出一個解碼結構如下圖所示:
    在這裡插入圖片描述
      首先將編碼結構的輸出雙線性插值上取樣4倍然後和對應的經過1x1卷積來減少通道數的底層特徵圖concat,之後應用一個3x3的卷積,之後應用一個4倍的雙線性插值上取樣來得到最後的輸出。實驗證明,output_stride=16具有最好的精度和速度的折中。等於8的話精度的提升帶來了額外多的計算。
3.2 修改並校準Xception

  主要對Xception做了如下修改:

  • MSRA類似的改進過的Deeper Xception,即more layers
  • 將所有的最大池化操作修改為帶步長的深度可分離卷積,以便應用空洞可分離卷積
  • 額外的BN層和RELU啟用層附加在每一個3x3DW Conv後,這與MobileNet的設計很相似。
      最後細節如下圖所示:
    在這裡插入圖片描述

4.實驗

  與V3相同的訓練引數,具體實驗包括:

4.1 Decoder設計的選擇

  在decoder模組中:

  • 1x1 卷積用於減少底層特徵圖的通道數
  • 3x3 卷積用於獲取精細的特徵圖分割結果
  • 底層特徵圖必須要用在編碼結構中
      不同通道數對結果的影響如下表:
    在這裡插入圖片描述
      3x3 卷積個數和其濾波器個數對實驗結果的影響如下表:
    在這裡插入圖片描述
      最終採取了這樣的解碼結構,將經過Conv2的通道減少的特徵圖與DeepLabV3的特徵圖做concat後的結果再經過兩個[3x3,256]的卷積操作。
4.2 其他實驗細節

  包括ResNet和Xception的對比,Xception作為主幹網路後,其他細節的對比,下表是再Pascal VOC 2012的結果:
在這裡插入圖片描述
  下表是再Citycapes資料集上的實驗結果:
在這裡插入圖片描述