【CV-Semantic Segmentation】deeplabv3+:語義分割領域的新高峰

Introduction

臨近春節,google團隊也不休假,趁著chinese每年一度的遷徙大軍中,arxiv放出deeplabv3+,在語義分割領域取得新的state-of-the-art水平。趁著電腦沒關機辦公室沒鎖門腦袋還有些記憶,回顧deeplab v1-v4系列的發展歷程,看看google團隊這些年都在做什麼。

1、deeplabv1【1】

DeepLab是結合了深度卷積神經網路(DCNNs)和概率圖模型(DenseCRFs)的方法。在實驗中發現DCNNs做語義分割時精準度不夠的問題,根本原因是DCNNs的高級特徵的平移不變性(即高層次特徵映射,根源於重複的池化和下採樣)。

針對信號下採樣或池化降低解析度,DeepLab是採用的atrous(帶孔)演算法擴展感受野,獲取更多的上下文信息。分類器獲取以對象中心的決策是需要空間變換的不變性,這天然的限制了DCNN的定位精度,DeepLab採用完全連接的條件隨機場(CRF)提高模型捕獲細節的能力。

除空洞卷積和CRFs之外,論文使用的tricks還有Multi-Scale features。其實就是U-Net和FPN的思想,在輸入圖像和前四個最大池化層的輸出上附加了兩層的MLP(第一層是128個3×3卷積,第二層是128個1×1卷積),最終輸出的特徵與主幹網的最後一層特徵圖融合,特徵圖增加5×128=640個通道,實驗表示多尺度有助於提升預測結果,但是效果不如CRF明顯。

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

2、deeplabv2【2】

deeplabv2是相對於deeplabv1基礎上的優化。deeplabv1在三個方向努力解決,但是問題依然存在:特徵解析度的降低、物體存在多尺度,DCNN的平移不變性。 因DCNN連續池化和下採樣造成解析度降低,DeepLabv2在最後幾個最大池化層中去除下採樣,取而代之的是使用空洞卷積,以更高的採樣密度計算特徵映射。 物體存在多尺度的問題,deeplabv1中是用多個MLP結合多尺度特徵解決,雖然可以提供系統的性能,但是增加特徵計算量和存儲空間。論文受到我們受到spatial pyramid pooling(SPP)的啟發,提出了一個類似的結構,在給定的輸入上以不同採樣率的空洞卷積並行採樣,相當於以多個比例捕捉圖像的上下文,稱為ASPP(atrous spatial pyramid pooling)模塊。

DCNN的分類不變形影響空間精度。DeepLabv2是採樣全連接的CRF在增強模型捕捉細節的能力。

論文的模型基於ResNet,在NVidia Titan X GPU上運行速度達到了8FPS,全連接CRF平均推斷需要0.5s ,在耗時方面和deeplabv1無差異,但在PASCAL VOC-2012 達到79.7 mIOU。

3、deeplabv3【3】

好的論文不止說明怎麼做,還告訴為什麼。deeplab延續到deeplabv3系列,依然是在空洞卷積做文章,但是探討不同結構的方向。deeplabv3論文圖2比較多種捕獲多尺度信息的方式:a. Image Pyramid: 將輸入圖片放縮成不同比例,分別應用在DCNN上,將預測結果融合得到最終輸出。b. Encoder-Decoder: 利用Encoder階段的多尺度特徵,運用到Decoder階段上恢復空間解析度(代表工作有FCN、SegNet、PSPNet等工作)。c. Deeper w. Atrous Convolution: 在原始模型的頂端增加額外的模塊,例如DenseCRF,捕捉像素間長距離信息。d. Spatial Pyramid Pooling: 空間金字塔池化具有不同採樣率和多種視野的卷積核,能夠以多尺度捕捉對象。

Deep V1-V2都是使用帶孔卷積提取密集特徵來進行語義分割。但是為了解決分割對象的多尺度問題,deeplabv3設計採用多比例的帶孔卷積級聯或並行來捕獲多尺度背景。

此外,deeplabv3將修改之前提出的帶孔空間金字塔池化模塊,該模塊用於探索多尺度卷積特徵,將全局背景基於圖像層次進行編碼獲得特徵,取得state-of-art性能,在PASCAL VOC-2012 達到86.9mIOU。

deeplabv3+【4】

1、deeplabv3+架構

deeplabv3+繼續在模型的架構上作文章,為了融合多尺度信息,引入語義分割常用的encoder-decoder。在encoder-decoder架構中,引入可任意控制編碼器提取特徵的解析度,通過空洞卷積平衡精度和耗時。在語義分割任務中採用Xception 模型,在ASPP和解碼模塊使用depthwise separable convolution,提高編碼器-解碼器網路的運行速率和健壯性,在 PASCAL VOC 2012 dataset取得新的state-of-art performance,89.0mIOU。

2、Xception改進

Entry flow保持不變,但是添加更多的Middle flow。所有的max pooling被depthwise separable convolutions 替代。在每個3x3depthwise convolution之外,增加batch normalization and ReLU.

Experiment

論文提出的模型在主幹網路ResNet-101和Xception均進行驗證。兩種方式均在ImageNet預訓練。其中Xception預訓練過程中,使用50個GPU,每個GPU batch size=32,解析度299x299。Xception相比ResNet-101,在Top-1和Top-5分別提高0.75% and 0.29%。

在實驗過程中,分別考慮train OS: The output stride used during training、eval OS: The output stride used during evaluation、Decoder: Employing the proposed decoder structure、MS: Multi-scale inputs during evaluation、 Flip: Adding left-right flipped inputs.等各種情況,另外Using depthwise separable convolution,使用Pretraining on COCO和Pretraining on JFT,在這些tricks輔助下,PASCAL VOC 2012 test set達到驚人的89.0%,取得新的state-of-the-art水平。

Conclusion?

1、從deeplabv1-v4系列看,空洞卷積必不可少。從deeplabv3開始去掉CRFs。

2、github目前還未有公布的deeplabv3,但是有網友的復現版本。deeplabv3+更是沒有源代碼,復現起來估計有些難度。 github有網友復現deeplabv3的源代碼。 github.com/NanqingD/Dee

3、deeplabv1-v4沒有用很多tricks,都是從網路架構中調整,主要是如何結合多尺度信息和空洞卷積。從FCN,ASPP、Encoder-Decoder with Atrous Conv,每一個想法看上去在別的都實現過,但是論文綜合起來就是有效。

4、Deeplabv1,v2耗時在8fps,從Deeplabv3開始,論文已經不說運行時間的問題,是否模型越來越慢了。

4、MobileNetV2已經實現Deeplabv3,努力在MobileNetV2復現deeplabv3+版本。

參考文獻

1.Semantic image segmentation with deep convolutional nets and fully connected CRFs

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

3.Rethinking Atrous Convolution for Semantic Image Segmentation

4.Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation

返回CV-Semantic Segmentation目錄

返回CV總目錄


推薦閱讀:

期望為線性時間的選擇演算法
快速排序
雙向鏈表

TAG:演算法 | 深度學習DeepLearning | 計算機視覺 |