花了點時間梳理了一下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)\)
分為一元勢能函數\(\theta_i(x_i)\)和二元勢能函數\(\theta_{ij}(x_i,y_j)\)。
一元勢能函數\(\theta_i(x_i)\)刻畫觀測序列對標記變量的影響。
當我們觀察到像素點\(i\),\(P(x_i)\)是DCNN計算像素\(i\)的輸出標簽的分配概率。
二元勢能函數\(\theta_{ij}(x_i,y_j)\)刻畫變量之間的相關性以及觀測序列對其影響,實質是像素之間的相關性。
當\(x_i\neq x_j\)則\(u(x_i,x_j)=1\),否則為\(0\),因此每個像素對之間都會有值,是全連接的。
\(k^m(f_i,f_j)\)是\((f_i,f_j)\)之間的高斯核,\(f_i\)是像素\(i\)的特征向量,對應的權重為\(\omega_m\),高斯核為:
\({\alpha}、\sigma_{\beta}、\sigma_{\gamma}\)控制高斯核的“尺度”。
多尺度預測
多尺度預測有性能提升,但是不如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\)的濾波器為\(\omega[k]\)。
\(r\)為輸入信號的采樣步長,標准卷積中\(r=1\)。
二維情況
- 首先下采樣將分辨率降低2倍,做卷積,再上采樣得到結果。本質是和原圖的1/4位置做響應。
- 對全分辨率圖做\(r=2\)的空洞卷積,直接得到結果。可以計算整張圖的響應。
使用空洞卷積可以增大感受野,采樣率為\(r\)的空洞卷積插入\(r-1\)個零,將\(k\times k\)的卷積核變為\(k_e=k+(k-1)(r-1)\)而不增加計算量。
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\times3\)空洞卷積由於圖像邊界效應無法捕獲長程信息,將退化為\(1\times1\)的卷積,我們建議將圖像特征融入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
定義\(Multi\_Gird=(r_1,r_2,r_3)\)為block4到block7三個卷積層的unit rates。則\(rates=2\cdot(1,2,4)=(2,4,8)\)
ASPP+
在ASPP中加入BN層。
當采樣率變大,卷積核的有效權重變小。
在\(65\times65\)的feature map上以不同采樣率采用\(3\times3\)的卷積核。當采樣率接近於feature map尺寸時,\(3\times 3\)退化為\(1\times 1\)卷積核,只有中心的權重是有效的。
為了解決該問題並在模型中整合全局上下文信息,我們對最后的feature map采用全局池化,並經過256個\(1\times1\)的卷積核(BN),然后雙線性插值到所需空間維度。
最終ASPP包含
(a)一個\(1\times1\)的卷積和三個\(3\times3、rates=(6,12,18)、output\_stride=16\)的空洞卷積(256+BN)。
(b)圖像級特征。將特征做全局平均池化,后卷積,再上采樣。
(a)中不同\(rates\)的空洞卷積通過控制不同的\(padding\)輸出相同的尺寸,(b)中上采樣后與(a)尺寸一致。
所有分支的結果被拼接起來並經過\(1\times1\)的卷積(256+BN),最后經過\(1\times1\)卷積生成分割結果。
當\(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
深度可分離卷積
深度可分離卷積將標准卷積分解為\(depthwise\ conv\)后跟一個\(pointwise\ conv\),有效地降低了計算復雜度。
\(depthwise\ conv\)對每個輸入通道分別進行spatial conv。
\(pointwise\ conv\)合並\(depthwise\ conv\)的輸出。
我們提出\(atrous\ separable\ conv\),其在保持性能前提下,有效降低了計算量和參數量。
DeepLabv3作為encoder
令\(output stride\)等於輸入圖像分辨率和輸出分辨率的比值。
圖像分類任務,最終的feature map通常比輸入圖像分辨率小32倍,因此\(output stride=32\)。
語義分割任務,令\(output stride=16 or8\),通過移除最后\(1or2\)個blocks並應用空洞卷積(\(rate=2or4\))來密集提取特征。
在我們的encoder-decoder結構中,采用DeepLabv3最后的feature map作為encoder的輸出,包含\(256\)個通道並富含語義信息。此外,可以通過空洞卷積以任意分辨率提取特征,取決於計算量。
decoder
DeepLabv3以\(factor=16\)上采樣。
DeepLabv3+首先以\(factor=4\)上采樣,然后和尺寸相同的低層特征相拼接。低層特征采用\(1\times 1\)卷積降維,因為低層特征維度一般比較高(\(256or512\)),將占較大權重(我們的模型只有\(256\)),使得訓練變困難。拼接之后,我們采用\(3\times 3\)的卷積來細化特征,然后再以\(factor=4\)雙線性插值。
改進 Aligned Xception
Xception模型用於圖像分類任務,Aligned Xception用於物體檢測任務,我們對Xception做了一些變化使其可用於語義分割任務。
1)更多的層,為了計算量和內存,不對Entry flow網絡結構進行修改。
2)所有池化層替換為\(depthwise\ separable\ conv\),以便采用 \(atrous\ separable\ conv\)提取任意分辨率的特征。
3)類似於MobileNet,在每個\(3\times 3\)后添加額外的BN和ReLU。
總結
DeepLabv1 | DeepLabv2 | DeepLabv3 | DeepLabv3+ | |
---|---|---|---|---|
Backbone | VGG-16 | ResNet | ResNet+ | Xception |
Atrous Conv | √ | √ | √ | √ |
CRF | √ | √ | × | × |
ASPP | × | ASPP | ASPP+ | 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系列/