DeepLabv3:《Rethinking Atrous Convolution for Semantic Image Segmentataion》

論文地址:https://arxiv.org/abs/1706.05587

Abstract

  在這篇文章中,我們重溫了atrous convolution(帶孔卷積),它可以很好的調整過濾器的感受野以及控制輸出feature map的分辨率。爲了解決分割中物體的多尺度,我們設計了帶孔卷積的串行和並行模塊來獲取多尺度信息通過多個atrous rate(採樣率)。另外,我們建議增加之前提出的ASPP,它可以獲取不同的尺度信息,並且可以編碼全局上下文的圖像特徵來提升性能。我們闡述了實現細節並分享了訓練經驗。本文提出的DeepLabv3在沒有CRF後處理的情況下,明顯的提高了我們之前DeepLab版本,在PASCAL VOC 2012語義圖像分割基準測試中獲得與其他最先進的模型相媲美的性能。

1. Introduction

  語義分割中由兩個挑戰,第一是由於卷積中連續的下采樣或者卷積的stride造成的分辨率下降,使得DCNN學習到了更抽象的特徵表示。這種局部圖像變換的不變性可能會影像密集預測任務,這種任務中需要更詳細的空間信息。爲了解決這種問題,我們提出了帶孔卷積,這在語義分割中已經起到了非常大的作用。帶孔卷積也叫dilatedd convolution,允許我們去除在ImageNet上預訓練的模型的最後幾層的下采樣操作,並將對應的卷積核擴大(等價與在權重之間插入空洞)來提取密集信息。利用帶孔卷積我們可以在不增加額外參數的情況下,控制DCNN輸出的feature map的分辨率。

  另一個問題就是物體的多尺度。很多模型提出瞭解決方法,本文我們只考慮圖2中的4種情況。

這裏寫圖片描述

  第一個是模型採用了圖像金字塔來提取不同尺寸圖像輸入。第二個是編碼-解碼結構,挖掘不同尺度的特徵從編碼部分,然後在解碼部分恢復圖像的分辨率。第三個是額外的模塊級聯在原始模型的頂部來獲取大範圍信息。特別是DenseCRF來編碼像素級別的相似性,因此開發了很多額外的層來獲長程信息。第四個空間金字塔採樣,利用不同尺度的過濾器或者採樣操作來應用於輸入feature map上,因此可以獲得多尺度的物體信息。

  在本文中的中框架中,所有的級聯模塊以及空間金字塔採樣中,我們重新採用帶孔卷積,它使得我們有效的擴大濾波器的感受野併合並多尺度信息。特別的,我們的模塊中具有多個尺度的帶孔卷積以及BN層,這對訓練來說很重要。我們實驗中採用並行或者串行的ASPP模式。我們討論了一個很重要的實操問題,當採用採樣率很大的帶孔卷積時,很難獲取長程信息,由於圖像的邊緣影像,退化爲1x1的卷積,

3. Methods

3.1. Atrous Convolution for Dense Feature Extraction

  DCNN在全卷積情況下已經表現出很好的語義分割性能。但是由於重複的進行pooling和卷積的步長>1導致原圖的分辨率下降。反捲積或者轉置卷積已經已經用於恢復分辨率。實際上我們推薦使用帶孔卷積。

y[i]=kx[i+rk]w[k]w[k]
爲卷積核,x爲feature map,y爲輸出的feature map,r爲我們採樣步長,也就是說在兩個權重之間插入r-1的零。標準的卷積是採樣率r=1的情況,帶孔卷積允許我們通過改變採樣率,改變卷積核的感受野。

  帶孔卷積允許我們控制模型的響應密集度。我們用輸出步長來表示輸入圖像與輸出圖像的分辨率比值。常見的模型中,output_stride爲32,如果我們想讓輸出feature map的密集程度加倍,也就是output_stride=16,我們就要設置最後一個下采樣或者卷積層的stride爲1。然後接下來的所有卷積層都使用採樣率爲2的帶孔卷積,這使我們能夠在不增加額外參數的同時提取更加密集的特徵響應。

3.2. Going Deeper with Atrous Convolution

  我們首先探索設計級聯佈局的具有超大卷積的模塊。我們複製ResNet的Block4,並且讓它們級聯起來,如圖3所示。
這裏寫圖片描述
每一個卷積block都有3層卷積層,kernel都是3x3,除了最後一個block之外,其它的block中最後一個卷積層的stride都爲2,和原始的Resnet是一致的。這樣做的目的就是就是因爲在更深的block中採樣率可以提取長程信息。舉個例子,如圖3a所示,整個的圖像可以被總結成最後一個小的feature map,但是這對語義分割是非常不利的,因爲這會損失細節信息。因此我們採用帶孔卷積,採樣率可以決定最後的輸出步長,如圖3b所示。

  在這個提出的模型中,我們試驗了直到塊7的級聯ResNet塊(即,額外塊5,塊6,塊7作爲塊4的複製品),如果不應用無量卷積,其具有輸出步長= 256。

3.2.1 Multi-grid Method

  受不同規模的網格層次的啓發。我們採在block4-7中採用不同的採樣率。即,定義 Multi_Grid=(r1,r2,r3)爲block4~block7的三個convolutional layers的 unit rates.

convolutional layer 最終的 atrous rate 等於 unit rate 與對應的 rate 的乘積. 例如,當 output_stride=16, Multi_Grid=(1,2,4)時, block4 中三個 three convolutions 的 rate 分別爲:rates=2∗∗(1,2,4) = (2,4,8).

3.3 Atrous Spatial Pyramid Pooling

  我們重新利用論文11中的帶孔空間金字塔採樣(ASPP),在feature map的頂部有4個不同採樣率的帶孔卷積核。ASPP的靈感來自與空間金字塔的成功應用,這表明對不同尺度的特徵進行重採樣是有效的,可以對任意尺度的區域進行準確有效的分類。但是與論文11中不同的是我們的ASPP包括BN層。

  ASPP具有不同的採樣率,可以非常有效的提取多個尺度的信息。然而我們發現當採樣率增大時,卷積核中有效的卷積權重(作用於feature map內部區域,而不是pad區域)越來越小。如圖4所示,我們採用採樣率不同的3x3的卷積核應用於65x65的feature map。採用最極端的情況當採樣率接近feature map的大小時,3x3的卷積核並不是提取整個圖像的上下文信息,而是退化爲1x1的卷積核,因爲只有卷積核中間的權重是有效的。

這裏寫圖片描述

從上圖可以看出,橫座標爲採樣率,縱座標爲權重應用比例。當採樣率很小的時候,卷積核的9個權重全部應用與feature map的有效區域,隨着採樣率的逐漸增大,3x3的卷積核退化爲1x1的卷積核。

  爲了克服這個問題並融合全局上下文信息,我們採用圖像級(image-level)的特徵,和論文58,95相同的方法。特別的,我們對模型的最後一個feature map採用全局均值池化,然後把池化的結果送入256個11的卷積核以及BN,最後進行雙線性插值恢復到想要的分辨率。最後,我們的ASPP部分包含兩部分,a)、1x1的卷積核和3個3x3的卷積核採樣率分別爲(6,12,18)(都是256個卷積核然後BN)。b)、以及如圖5所示的圖像級特徵。
這裏寫圖片描述
我們可以看出當out_stride=8時,所有的採樣率都加倍了。所有分支的結果都會concatenate然後在最後一層1x1卷積和分類之前通過另一個1x1的卷積。

4. Experimental Evaluation

  採用ImageNet的預訓練模型Resnet,定義outputstride爲輸入圖像分辨率/輸出圖像分辨率。PASCAL VOL2012語義分割數據集,20個前景1個背景,原始數據集包括1464訓練集,1449驗證集,1456測試集。然後倍數據增強至10852個訓練集。利用IOU來測試分割效果。

4.1. Traning Protocol

Learning rate policy,學習率初始化要乘以(1-ietr/max_ietr)^{power},power=0.9。

Crop Size ,訓練過程中,提取圖像塊,對於帶孔卷積需要大的採樣了,所以也要裁剪大的patch,否則,具有較大誤差率的濾波器權重主要應用於填充的零區域。我們提取的圖像塊大小爲513。

Batch Normalization,模型的頂部添加了bn層,我們認爲這是很重要的。因爲的大的batchsize需要使用batch normalization的參數。當output_stride=16時,我們計算出batchnormalization的batchsize爲16。bn參數的decay=0.9997。在訓練集訓練了30K次之後,lr=0.0007,然後使bn的參數保持不變,我們使outputstride=8,lr=0.001在官方提供的原始數據集上訓練30K次。值得注意的是,我們在不同的階段訓練不同的outputstride值不需要額外的參數。另外,outputstride=16時訓練速度會比outputstride=8快很多,因爲中間的featuremap小,計算量也小,但是output=16會犧牲精度,產生比較粗糙的分割結果。

Upsampling logits:在之前的工作中,當outputstride=8時,我們會把GT下采樣8倍,我們發現保持GT的完好無損是非常重要的而不是對最後的分割結果上採樣,因爲下采樣會去除GT中的精細標註信息導致無法反向傳播細節信息。

Data augmentation:我們對輸入圖像進行0.5-2.0之間的隨機縮放,以及隨機的左右翻轉。

4.2. Going Deeper with Atrous Convolution

  我們第一次實驗多個帶孔卷積block級聯的形式。

ResNet-50:表1所示,添加block至第7個,當outputstride=256的時候(沒有帶孔卷積),性能非常差,因爲嚴重的信息丟失。當outputstride=8並加上帶孔卷積時,性能提升至75.18%,可以看出帶孔卷積對於級聯多個分割block非常有用。
這裏寫圖片描述

Resnet-50 vs. ResNet-101:表2可以看出,不管是ReNet-50還是ResNet-101隨之卷據block的增加,性能都會提升,但是ResNet-50和ResNet-101的差距會越來越小。另外,ResNet-50增加至第7個block時性能略有下降,但是ResNet-101的性能一直在提升。
這裏寫圖片描述
      

Multi-grid:我們將多網格方法應用於ResNet101,並在模型中添加了幾個級聯的塊如圖3所示。 單位速率Multi Grid =(r 1,r 2,r 3)適用於block4和所有其他添加的塊。 如表中所示,我們觀察到(a)應用多網格方法通常優於(r 1,r 2,r 3)=(1,1,1),(b)簡單加倍單位速率(即(r 1,r 2,r 3)=(2,2, 2))沒有效果,並且(c)隨着多重網格更深入地改善了性能。 我們最好的模型是採用block7和(r 1,r 2,r 3)=(1,2,1)的情況。

這裏寫圖片描述

Inference strategy on val set:我們提出的模型在訓練的時候outputstride=16,然後在推理(測試)的過程中採用outputstride=8來獲得細節信息。如表4所示,我們最好的級聯模型採用outputstride=8比outputstride=16要好1.39%。當把輸入的尺寸按一定的比例縮放並且左右翻轉時,性能會更一步提升。具體而言,我們計算每個比例和翻轉圖像的平均概率作爲最終結果![

這裏寫圖片描述

4.3. Atrous Spatial Pyramid Pooling

ASPP:在表5中,我們在block4中使用多網格以及圖像級特徵應用於ASPP模塊中。我們首先固定ASPP=(6,12,18)(6,12,18分別對應三個卷積分支),然後改變multi_grid的值。我們發現multi_grid=(1,2,1)比(1,1,1)要好,然後通過改變multi_grid=(1,2,4)更進一步提高了模型的性能。如果我們再天界一個額外的卷積分支,採樣率爲24時,性能會略微下降0.12%。另一方面,增加具有圖像級特徵的ASPP模塊是有效的,達到77.21%的最終性能。

Inference strategy on val set:在測試過程中我們採用outputstride=8。如表6所示,outputstride=8比等於16高1.3%。採用多尺度輸入以及左右翻轉輸入圖像又分別提高0.94%和0.32%。帶有ASPP最好的模型性能爲79.77%,比最好的級聯帶孔卷積模型(表4中的結果79.35%)高。

Comparison with DeeplLabv2:我們最好的級聯模型(表4)以及ASPP模型(表6)都比DeepLabv2要好。而且我們這兩個模型沒有CRF後處理以及在COCO數據集上預訓練。而DeepLabv2集進行了後處理也進行了預訓練。這兩個模型的提高主要來自BN的作用。

5. Conclusion

  DeepLab v3提出的帶孔卷積擴大了卷積核的視野可以提取更加密集的信息以及長程的上下文信息。特別的,爲了適應多尺度信息,我們提出的級聯模型逐漸加倍採樣速率,而且我們提出的帶孔空間金字塔採樣模塊增加了圖像級特徵,使用多個採樣比例擴大了感受野。

最終的結果:

這裏寫圖片描述

DeepLab v3的特點:

1、繼續沿用帶孔卷積,擴大感受野。

2、之前一個block內部使用相同的rate,但是這次同一個block內的三個卷積層使用不同的rate。

3、增加block

4、ASPP,這一塊我的理解就是進行了一次圖像金字塔,適應多尺度信息。並且加入BN

然後其它方面,數據增強(翻轉、縮放)、使用其它數據預訓練。先使用增強的數據訓練,再使用最原始的數據進行訓練(老套路了)。

  總結還有不足的地方,請各位朋友指出來,謝謝。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章