- 論文地址:DeepLabv3: Rethinking Atrous Convolution for Semantic Image Segmentation
- 論文代碼: github-Tensorflow
概述
- DCNNs中語義分割存在三個挑戰:
- 連續下采用和重復池化,導致最后特征圖分辨率低
- 圖像中存在多尺度的物體
注:當前版本沒有使用CFR
-
作者把解決多尺度物體問題的方法分成四類:
- 把輸入圖片縮放成不同尺度,經過同一個網絡,最終融合多尺度下的物體信息
- 使用編解碼結構,在decoder時融合encoder網絡不同階段的特征
- 在原網絡最后層增加額外的context模塊,比如DenseCRF,或者串聯幾個不同感受野的卷積模塊
- 在原網絡最后層添加并行結構—空間金字塔池化,獲取不同尺度的物體信息
- 作者的處理方案:
- 使用空洞卷積,防止分辨率過低情況
- 串聯不同膨脹率的空洞卷積或者并行不同膨脹率的空洞卷積(v2的ASPP),來獲取更多上下文信息
- 優勢
- 當時在PASCAL VOC 2012 test上效果最好,并且沒有使用DenseCRF
- 本文主要工作
- 探索更深結構下的空洞卷積探索(串行結構)
- 優化atrous spatial pyramid pooling—ASPP(并行結構)
膨脹卷積
v1、v2中已詳細說明,略....
更深結構下的空洞卷積
-
串聯結構
把resnet最后一個block,下圖中的Block4拷貝幾份串聯起來:
每個block的最后一個卷積stride都為2(除了最后一個block),連續的下采樣保證獲取更大范圍的特征,但是這樣不利于語義分割。
使用不同膨脹率的空洞卷積保證了分辨率和大的感受野,如上圖b所示。 - multi-grid
作者考慮了multi-grid
方法,即每個block中的三個卷積有各自unit rate
,例如Multi Grid = (1, 2, 4),block的dilate rate=2,則block中每個卷積的實際膨脹率=2* (1, 2, 4)=(2,4,8)
優化Atrous Spatial Pyramid Pooling
作者通過實驗發現,膨脹率越大,卷積核中的有效權重越少,當膨脹率足夠大時,只有卷積核最中間的權重有效,即退化成了1x1卷積核,并不能獲取到全局的context信息。3x3的卷積核中有效權重與膨脹率的對應如下:
為了解決這個問題,作者在最后一個特征上使用了
全局平均池化(global everage pooling)
(包含1x1卷積核,輸出256個通道,正則化,通過bilinear上采樣還原到對應尺度)修改后的ASPP結構如下:
所有的分支都包含256個通道和正則化,最終concat到一起,1x1卷積將通道數為256。
實驗
- 訓練策略
-
Learning rate policy:
poly,學習率下降方式如下:
- Crop size:
513,保證更大的膨脹率有效 - Batch normalization:
先在增強數據集上output stride = 16(輸入圖像與輸出特征大小的比例),batch size=16,BN參數衰減為0.9997,訓練30k個iter。
之后在官方PASCAL VOC 2012的trainval集上凍結BN參數, output stride = 8,batch size=8,訓練30k個iter。 - Upsampling logits:
v1、v2中都是下采樣的真值來計算loss,這里上采樣最后的輸出結果。 - Data augmentation:
輸入圖片隨機縮放(0.5-2.0),隨機左右翻轉
- 串行結構下的結果
-
block串聯個數不同,在resnet50和resnet101下的mIOU:
-
ResNet-101,output stride = 16下不同multi-grid的mIOU:
-
消融實驗:
- ASPP結構下的結果
-
output stride = 16,不同multi-grid和膨脹率的結果:
-
消融實驗:
經驗track
- 如何在MS COCO上預訓練?
從trainval_minus_minival
挑選包含PASCAL分類
并且目標區域像素個數大于1000
的圖片,大概有60k
的圖片用于訓練,除了PASCAL分類區域,其它都看成背景。從上述實驗結果中發現提升了3
個百分點。 - 對于有些類準確率比較低,怎么辦?
針對包含namely bicycle、chair、table、potted- plant、and sofa
分類的圖片,在訓練集中增加它們比列。通過BN策略和這里的策略,達到85.7%IOU,再次提升3個百分點。 - Cityscapes上的小策略:
cropsize 769 iters 90k
- output stride = 16時:77.23%
- output stride = 8時:77.82%
-
多尺度輸入(0.75,1,1.25)
:79.30% - 事先在
trainval coarse
上預訓練,scales = {0.75, 1, 1.25, 1.5, 1.75, 2} ,output stride = 4,output stride = 8,最終結果:81.3%