《Deeplab V1》論文閱讀

  • 2019 年 12 月 9 日
  • 筆記

論文原文

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

模型結構

同時,我截取Caffe中的deeplabv1中的prototxt的網絡結構可視化圖:

DeepLab的BackBone依賴於VGG16,具體改造方法就是:

  1. 將最後的全連接層FC6,FC7,FC8改造成卷積層。
  2. pool4的stride由2變成1,則緊接着的conv5_1,conv5_2和conv5_3中hole size為2。
  3. 接着pool5由2變成1,則後面的fc6中的hole size為4。
  4. fc7,fc8為標準的卷積。
  5. 由於空洞卷積算法讓feature map更加精細,因此網絡直接採用插值上採樣就能獲得很好的結果,不用去學習上採樣的參數了(FCN中採用了de-convolution)。

核心問題

以前的DCNN在做語義分割的時候,核心問題有兩個:1,多次池化,下採樣使輸出信號分辨率變小。2,不斷下採樣引起的圖像分辨率變小導致的位置信息丟失。

空洞卷積

針對第一個問題,Deeplab提出了空洞卷積:空洞卷積的作用有兩點,一是控制感受野,二是調整分辨率。這張圖片截取自於有三AI公眾號。

我們可以看到從左到右的hole大小分別是1,6,24,這個hole的意思就是卷積核內兩個權重之間的距離。從圖中可以看出,當比率為1的時候,空洞卷積退化為普通卷積。很明顯,應用了空洞卷積之後,卷積核中心的感受野增大了,但是如果控制步長為1,特徵圖的空間分辨率可以保持不變。 針對第二個問題,我們設置滑動的步長,就可以讓空洞卷積增大感受野的同時也降低分辨率。

引入CRF

首先是因為圖像在CNN裏面通過不斷下採樣,原來的位置信息會隨着深度減少甚至消失。最後會導致分類結果變得十分平滑,但是我們需要細節更加突出的結果,可以看下面的圖:

這裡引入了CRF來解決這個問題,首先CRF在傳統圖像處理上主要做平滑處理。對於CNN來說,short-range CRFs可能會起到反作用,因為我們的目標是恢復局部信息,而不是進一步平滑圖像。本文引入了全連接CRF來考慮全局信息。

引入多尺度預測

和前面FCN的Skip Layer類似,在輸入圖片與前四個max pooling後添加MLP(多層感知機,第一層是128個3×3卷積,第二層是128個1×1卷積),得到預測結果。最終輸出的特徵映射送到模型的最後一層輔助預測,合起來模型最後的softmax層輸入特徵多了5×128=6405×128=640個通道。這個地方對每個特徵圖應該是需要上採樣的。我最下面放的caffe的deeplabv1的網絡結構沒有使用多尺度預測,只使用了CRF。結果證明,多尺度預測的效果不如dense CRF,但也有一定提高。最終模型是結合了Dense CRF與Multi-scale Prediction。加了多尺度預測的網絡結構如下:

訓練細節

DCNN模型採用預訓練的VGG16,DCNN損失函數採用交叉熵損失函數。訓練器採用SGD,batchsize設置為20。學習率初始為0.001,最後的分類層是0.01。每2000次迭代乘0.1。權重衰減為0.9的動量, 0.0005的衰減。 DeepLab由DCNN和CRF組成,訓練策略是分段訓練,即DCNN的輸出是CRF的一元勢函數,在訓練CRF時是固定的。在對DCNN做了fine-tune後,再對CRF做交叉驗證。這裡使用 ω2=3 和 σγ=3 在小的交叉驗證集上尋找最佳的 ω1,σα,σβ。

結論

論文模型基於 VGG16,在 Titan GPU 上運行速度達到了 8FPS,全連接 CRF 平均推斷需要 0.5s ,在 PASCAL VOC-2012 達到 71.6% IOU accuracy。

Caffe實現

https://github.com/yilei0620/RGBD-Slam-Semantic-Seg-DeepLab/blob/master/slam_deepLab/model/test.prototxt