1. 程式人生 > 實用技巧 >語義分割丨DeepLab系列總結「v1、v2、v3、v3+」

語義分割丨DeepLab系列總結「v1、v2、v3、v3+」

花了點時間梳理了一下DeepLab系列的工作,主要關注每篇工作的背景和貢獻,理清它們之間的聯絡,而實驗和部分細節並沒有過多介紹,請見諒。

DeepLabv1

Semantic image segmentation with deep convolutional nets and fully connected CRFs

link:https://arxiv.org/pdf/1412.7062v3.pdf

引言

DCNN在畫素標記存在兩個問題:訊號下采用空間不變性(invariance)

第一個問題是由於DCNN中重複的最大池化和下采樣造成解析度下降,DeepLabv1通過帶孔(atrous)演算法解決。

第二個問題是分類器獲得以物件為中心的決策需要空間不變性,從而限制了DCNN的空間精度,DeepLabv1通過條件隨機場(CRF)提高模型捕獲精細細節的能力。

DeepLabv1主要貢獻

  • 速度:帶孔演算法的DCNN速度可達8fps,全連線CRF平均預測只需0.5s。

  • 準確:在PASCAL語義分割挑戰中獲得第二名。

  • 簡潔:DeepLab可看作DCNN和CRF的級聯。

相關工作

DeepLab有別於two stage的RCNN模型,RCNN沒有完全利用DCNN的feature map。

DeepLab和其他SOTA模型的主要區別在於DCNN和CRF的組合。

方法

空洞卷積

一維空洞卷積

kernel size=3,Input stride=2,stride=1。

理解空洞卷積

feature map變小主要是由於卷積層和池化層引起的,若另所有層的stride=1,輸出feature map將會變大。
原始情況下Pooling layer stride=2,receptive field=4

另Pooling layer stride=1,receptive field=3,輸出更dense,但感受野變小。

採用空洞卷積後,receptive field=4
跟第一張圖相比,在藍色節點的基礎上多了紅色節點,在保持感受野使輸出更加dense。

條件隨機場

全連線CRF模型使用的能量函式E(x)

分為一元勢能函‍數‍和二元勢能函式

一元勢能函

畫觀測序列對標記變數的影響。

當我們觀察到畫素點i,是DCNN計算畫素i的輸出標籤的分配概率。

二元勢能函式刻畫變數之間的相關性以及觀測序列對其影響,實質是畫素之間的相關性

,否則為0,因此每個畫素對之間都會有值,是全連線的。之間的高斯核,是畫素i的特徵向量,對應的權重為,高斯核為:

控制高斯核的“尺度”。

多尺度預測

多尺度預測有效能提升,但是不如CRF明顯。

DeepLabv2

DeepLab: Semantic Image Segmentation with Deep Convolutional Nets, Atrous Convolution, and Fully Connected CRFs

link:https://arxiv.org/pdf/1606.00915.pdf

引言

DCNN在語義分割中有三個挑戰:
(1)特徵解析度下降
(2)存在物體多尺度
(3)由於DCNN的空間不變性使得空間精度下降

(1)是由於DCNN中的重複池化和下采樣降低了空間解析度,一種方法是採用轉置卷積(deconvolutional layer),但是需要額外的空間和計算量。DeepLabv2在最後幾個最大池化層用空洞卷積替代下采樣,以更高的取樣密度計算feature map。
(2)物體存在多尺度,解決該問題的一個標準方法是將圖片縮放成不同尺寸,彙總特徵得到結果。這種方法可以提高效能,但是增加了計算成本。受SPPNet啟發,DeepLabv2提出一個類似結構,對給定輸入以不同取樣率的空洞卷積進行取樣,以多比例捕捉影象上下文,稱為ASPP(astrous spatial pyramid pooling)
(3)分類器要求空間不變性,從而限制了DCNN的空間精度。解決該問題的一個方法是使用跳級結構融合不同層的特徵從而計算最終的分割結果。DeepLabv2更高效的方法是採用條件隨機場增強模型捕捉細節的能力。

DeepLabv2結構

首先經過採用空洞卷積的DCNN如VGG-16或ResNet101得到粗略的分割結果,然後通過雙線性插值將feature map恢復成原圖解析度,最後用全連線的CRF來精細化分割結果。

DeepLabv2貢獻

採用多尺度處理和ASPP達到了更好的效能。

在DeepLab基礎上將VGG-16換成ResNet,在PASCAL VOC 2012和其他資料上上達到SOTA。

相關工作

語義分割的核心是將分割與分類結合。

語義分割中DCNN模型主要有三類:

(1)取樣基於DCNN的自下而上的影象分割級聯。

(2)依靠DCNN做密集計算得到預測結果,並將多個獨立結果做耦合。

(3)使用DCNN直接做密集的畫素級分類。

方法

空洞卷積

一維情況

一維訊號,空洞卷積輸入x[i],輸出y[i],長度K的濾波器為ω[k]。

r為輸入訊號的取樣步長,標準卷積中r=1。

二維情況

  • 首先下采樣將解析度降低2倍,做卷積,再上取樣得到結果。本質是和原圖的1/4位置做響應。

  • 對全解析度圖做r=2的空洞卷積,直接得到結果。可以計算整張圖的響應。

使用空洞卷積可以增大感受野,取樣率為r的空洞卷積插入r−1個零,將k×k的卷積核變為而不增加計算量。

ASPP

並行採用多個取樣率的空洞卷積提取特徵,再將特徵進行融合,該結構稱為空洞空間金字塔池化(atrous spatial pyramid pooling)。

條件隨機場

同DeepLabv1


DeepLabv3

Rethinking Atrous Convolution for Semantic Image Segmentation
link:https://arxiv.org/pdf/1706.05587.pdf

引言

語義分割中,應用DCNN有兩個挑戰

1)連續池化或卷積帶來的解析度下降,讓DCNN學習更抽象的特徵表示。然而,空間不變性會阻礙分割任務,因為其需要詳細的空間資訊。為了解決該問題,DeepLab引入空洞卷積
2)物體存在多尺度,有許多方法解決該問題,我們主要考慮四類:

①將DCNN應用於影象金字塔來提取不同尺度輸入的特徵,將預測結果融合得到最終輸出。
②encoder-decoder結構,利用encoder的多尺度特徵到解碼器上恢復解析度。
③在原網路的頂端增加額外的模組來捕獲長程資訊,如DenseCRF。
④SPP空間金字塔池化具有不同取樣率和感受野的卷積核,能以多尺度捕獲物件。

DeepLabv3的貢獻

  • 回顧了空洞卷積,在級聯模組和金字塔池化框架下也能擴大感受野提取多尺度資訊。

  • 改進了ASPP:由不同的取樣率的空洞卷積和BN層組成,以級聯或並行的方式佈局。

  • 大采樣率的3×3空洞卷積由於影象邊界效應無法捕獲長程資訊,將退化為1×1的卷積,我們建議將影象特徵融入ASPP。

  • 闡述訓練細節和方法。

相關工作

現有多個工作表明全域性特徵或上下文之間的互相作用有助於做語義分割,我們討論四種不同型別利用上下文資訊做語義分割的全卷積網路。

影象金字塔

同一模型使用共享權重,適用於多尺度輸入。
小尺度輸入的特徵相應編碼了長程的語義資訊,大尺度輸入的特徵相應保留了小物件的細節。
該方法通過拉普拉斯金字塔將輸入變換成多尺度,並送入DCNN。
主要缺點是由於GPU儲存的限制,在更大更深的DCNN上不能很好地拓展,通常其用於測試階段。

編碼器-解碼器

該模型主要包含兩部分:
1)編碼器,該階段feature map的維度逐漸降低並且深層次的特徵容易捕獲遠端資訊。
2)解碼器,該階段恢復物體細節和空間維度。
SegNet、U-Net、RefineNet

上下文模組

模型包含額外的模組來編碼遠端上下文資訊。
DenseCRF

空間金字塔池化

採用SPP來捕獲多尺度上下文。
ParseNet、DeepLabv2(ASPP)、PSPNet(PSP)

DeepLabv3提出將空洞卷積作為上下文模組空間金字塔池化的工具。

方法

回顧空洞卷積如何提取密集特徵、討論空洞卷積模組以級聯(序列)和並行佈局。

空洞卷積

見DeepLabv1、v2

級聯ResNet

將空洞卷積應用於級聯結構,在ResNet最後一個block(block4)後連線許多級聯模組。


圖(a)中整體資訊匯聚到非常小的feature map,實驗表明其不利於分割。

Multi-grid Method
定義為block4到block7三個卷積層的unit rates。則rates=2⋅(1,2,4)=(2,4,8)

ASPP+

在ASPP中加入BN層。
當取樣率變大,卷積核的有效權重變小。
在65×65的feature map上以不同取樣率採用3×3的卷積核。當取樣率接近於feature map尺寸時,3×3退化為1×1卷積核,只有中心的權重是有效的。

為了解決該問題並在模型中整合全域性上下文資訊,我們對最後的feature map採用全域性池化,並經過256個1×1的卷積核(BN),然後雙線性插值到所需空間維度。

最終ASPP包含
(a)一個1×1的卷積和三個3×3、rates=(6,12,18)、output_stride=16的空洞卷積(256+BN)。
(b)影象級特徵。將特徵做全域性平均池化,後卷積,再上取樣。
(a)中不同rates的空洞卷積通過控制不同的padding輸出相同的尺寸,(b)中上取樣後與(a)尺寸一致。
所有分支的結果被拼接起來並經過1×1的卷積(256+BN),最後經過1×1卷積生成分割結果。

當output_stride=8,取樣率加倍。

DeepLabv3+

Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation
Link:https://arxiv.org/abs/1802.02611.pdf

引言

語義分割中的DCNN主要有兩種結構:空間金字塔池化SPP編碼器-解碼器encoder-decoder

SPP通過多種感受野池化不同解析度的特徵來挖掘上下文資訊。
Encoder-decoder逐步重構空間資訊來更好的捕捉物體的邊緣。

DeepLabv3+對DeepLabv3進行了拓展,在encoder-decoder結構上採用SPP模組。encoder提取豐富的語義資訊,decoder恢復精細的物體邊緣。encoder允許在任意解析度下采用空洞卷積。

DeepLabv3+貢獻

  • 提出一個encoder-decoder結構,其包含DeepLabv3作為encoder和高效的decoder模組。

  • encoderdecoder結構中可以通過空洞卷積來平衡精度和執行時間,現有的encoder-decoder結構是不可行的。

  • 在語義分割任務中採用Xception模型並採用depthwise separable convolution,從而更快更有效。

相關工作

SPP

收集多尺度資訊。
PSPNet、DeepLab

Encoder-decoder

encoder逐漸減小feature map並提取高層語義資訊。
decoder逐漸恢復空間資訊。

Depthwise separable convolution

深度可分離卷積或group convolution,在保持效能前提下,有效降低了計算量和引數量。

方法

Encoder-Decoder

空洞卷積

該部分見DeepLabv2

深度可分離卷積

深度可分離卷積將標準卷積分解為depthwiseconv後跟一個pointwiseconv,有效地降低了計算複雜度。
depthwisetstride等於輸入影象解析度和輸出解析度的比值。

影象分類任務,最終的feature map通常比輸入影象解析度小32倍,因此outputstride=32。
語義分割任務,令outputstride=16or8,通過移除最後1or2個blocks並應用空洞卷積(rate=2or4)來密集提取特徵。

在我們的encoder-decoder結構中,採用DeepLabv3最後的feature map作為encoder的輸出,包含256個通道並富含語義資訊。此外,可以通過空洞卷積以任意解析度提取特徵,取決於計算量。

decoder


DeepLabv3以factor=16上取樣。
DeepLabv3+首先以factor=4上取樣,然後和尺寸相同的低層特徵相拼接。低層特徵採用1×1卷積降維,因為低層特徵維度一般比較高(256or512),將佔較大權重(我們的模型只有256),使得訓練變困難。拼接之後,我們採用3×3的卷積來細化特徵,然後再以factor=4雙線性插值。

改進 Aligned Xception

Xception模型用於影象分類任務,Aligned Xception用於物體檢測任務,我們對Xception做了一些變化使其可用於語義分割任務。
1)更多的層,為了計算量和記憶體,不對Entry flow網路結構進行修改。
2)所有池化層替換為depthwiseseparableconv,以便採用atrousseparableconv提取任意解析度的特徵。
3)類似於MobileNet,在每個3×3後新增額外的BN和ReLU。

總結


DeepLabv1DeepLabv2DeepLabv3DeepLabv3+
BackboneVGG-16ResNetResNet+Xception
Atrous Conv
CRF××
ASPP×ASPPASPP+ASPP+
Encoder-decoder×××

參考

[1]Chen L C, Papandreou G, Kokkinos I, et al. Semantic image segmentation with deep convolutional nets and fully connected crfs[J]. arXiv preprint arXiv:1412.7062, 2014.

[2]Chen L C, Papandreou G, Kokkinos I, et al. Deeplab: Semantic image segmentation with deep convolutional nets, atrous convolution, and fully connected crfs[J]. IEEE transactions on pattern analysis and machine intelligence, 2018, 40(4): 834-848.

[3]Chen L C, Papandreou G, Schroff F, et al. Rethinking atrous convolution for semantic image segmentation[J]. arXiv preprint arXiv:1706.05587, 2017.

[4]Chen L C, Zhu Y, Papandreou G, et al. Encoder-decoder with atrous separable convolution for semantic image segmentation[C]//Proceedings of the European Conference on Computer Vision (ECCV). 2018: 801-818.

[5]https://www.imooc.com/article/35025
[6]http://hellodfan.com/2018/01/22/語義分割論文-DeepLab系列/

[7]https://www.twblogs.net/a/5ca1c085bd9eee59d3326c76/zh-cn

[8]https://zhuanlan.zhihu.com/p/33796585

(本文出自平臺合作作者Vincent,cs碩士在讀)