Deeplab 系列 — Deeplab v1、Deeplab v2、Deeplab v3、Deeplab v3+

李謦伊
謦伊的閱讀筆記
6 min readMay 16, 2021

Deeplab 目前有四篇論文 Deeplab v1、Deeplab v2、Deeplab v3、Deeplab v3+,由 Google 提出,在語義分割任務中具有很大的影響力。本文將會簡單介紹這些模型間的差異。

🔖 Github: https://github.com/tensorflow/models/tree/master/research/deeplab

DeepLab v1 (2014)

📝 Paper: https://arxiv.org/abs/1412.7062

之前的語義分割結果往往較粗糙,是因為 DCNN (深度卷積網路) 在進行池化時會大幅地壓縮特徵圖,位置訊息難以恢復。因此基於 VGG-16 做了兩項改進:

  • Dilated/Atrous convolution: 能夠在增加感受野的同時,不增加計算量,用來避免池化層所帶來的訊息損失。
  • Fully Connected CRFs: 用於處理邊緣細節,進一步優化分割結果。其作法是找出 pixel 之間的關聯,將相似的 pixel 分配為同一個類別。

DeepLab v2 (2016)

📝 Paper: https://arxiv.org/abs/1606.00915

基於 DeepLab v1 改進了以下三項

  • backbone 從 VGG-16 改為 ResNet
  • 使用不同的學習率
  • 提出 ASPP (Atrous Spatial Pyramid Pooling): 採用併行結構,由多個不同 dilated 值的 Atrous convolution 提取特徵再進行融合,目的是為了更好的分割不同大小的物體。

DeepLab v3 (2017)

📝 Paper: https://arxiv.org/abs/1706.05587

由於 Atrous convolution 在語義分割任務上取得了不錯的結果,Deeplab v3 採用該方法針對多尺度的目標物分割問題做了些許改進:

  • 利用 Atrous convolution 設計 cascade 和 parallel 結構,以及採用多種不同的 atrous rates
  • 在 ASPP 中加入 batch normalization
  • 去除 Fully Connected CRFs

Cascade modules

為了更好地捕捉多尺度訊息,首先採用 cascade 結構。在 ResNet block4 後再增加 block5、block6、block7,其中 block4、block5、block6 都有三個 3x3 卷積層,而 block7 只有一個卷積層且 stride=2。

這樣的網路架構能夠更容易的捕捉深層 block 的大範圍訊息,但連續的 stride 設計會丟失細節資訊,而導致分割效果變差,因此將其改為 Atrous convolution。

此外,在 block4~block7 採用不同 atrous rates,其中 unit rates 是指各個 block 的 Multi_Grid。

Parallel modules

隨著 atrous rates 越大,有效 filter 權重的數量變得越小,可由 Figure4 看到。為了解決這個問題,將全局內容訊息整合到模型中,採用了併行的結構。由兩部分組成:(a) 部分是在 ASPP 採用一個 1x1 卷積層及三個 3x3 卷積層 (rate=6, 12, 18);(b) 部分則採用 global average pooling 後再接一個 1x1x256 卷積層和 batch normalization,最後使用雙線性上採樣至原圖的維度大小。然後再將 (a), (b) 的結果進行 concat,通過 1x1 卷積層得到最終的結果。

DeepLab v3+ (ECCV 2018)

📝 Paper: https://arxiv.org/abs/1802.02611

即使 Deeplab v3 已經獲得不錯的結果,但因為其網路架構在經過 ASPP module 後會使用雙線性上採樣到原始的圖片大小,並不利於物體邊緣及較精細的分割,因而有了 Deeplab v3+。

  • 借鑑 Encoder-Decoder 結構,引入 Decoder module
  • backbone 採用改進後的 Xception

Encoder-Decoder with Atrous Conv.

基於 Deeplab v3 引入了 Decoder module,由下圖可以看到 encoder 是原本的模型架構,decoder 從直接使用雙線性上採樣改為以下操作:

→ 先將 encoder 輸出的 feature map 進行 4x upsampling,而 decoder 把 low-level feature map 採用 1x1 卷積降維 (目的是為了防止 encoder 的 high-level 訊息被淡化)。

→ 將兩者對應大小的 feature map 進行 concat,再使用 3x3 卷積層融合特徵,最後使用雙線性上採樣得到原圖大小。

Modified Aligned Xception

backbone 採用 Xception 並做了以下修改:

→ 參考了 MSRA 的修改增加了更多的 layer,但不更改 Entry flow (為了快速的計算與有效的使用記憶體)

→ 所有的 max pooling 都替換為 depthwise separable convolution, stride=2,如此一來可以將其改為 Atrous convolution 以提高感受野

→ 在 3x3 depthwise convolution 增加了 batch normalization, ReLU

--

--