1. 程式人生 > >DeepLabv3+:語義分割領域的新高峰

DeepLabv3+:語義分割領域的新高峰

DeepLabv1

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。

DeepLabv2

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。

DeepLabv3

好的論文不止說明怎麼做,還告訴為什麼。DeepLab 延續到 DeepLabv3 系列,依然是在空洞卷積做文章,但是探討不同結構的方向。

DeepLabv3 論文比較了多種捕獲多尺度資訊的方式:

1. Image Pyramid:將輸入圖片放縮成不同比例,分別應用在 DCNN 上,將預測結果融合得到最終輸出。

2. Encoder-Decoder:利用 Encoder 階段的多尺度特徵,運用到 Decoder 階段上恢復空間解析度,代表工作有 FCN、SegNet、PSPNet 等工。

3. Deeper w. Atrous Convolution:在原始模型的頂端增加額外的模組,例如 DenseCRF,捕捉畫素間長距離資訊。

4. Spatial Pyramid Pooling:空間金字塔池化具有不同取樣率和多種視野的卷積核,能夠以多尺度捕捉物件。

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

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

DeepLabv3+

DeepLabv3+ 架構

DeepLabv3+ 繼續在模型的架構上作文章,為了融合多尺度資訊,引入語義分割常用的 encoder-decoder。在 encoder-decoder 架構中,引入可任意控制編碼器提取特徵的解析度,通過空洞卷積平衡精度和耗時。

在語義分割任務中採用 Xception 模型,在 ASPP 和解碼模組使用 depthwise separable convolution,提高編碼器-解碼器網路的執行速率和健壯性,在 PASCAL VOC 2012 資料集上取得新的 state-of-art 表現,89.0 mIOU。

Xception 改進

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

實驗

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

另外使用 depthwise separable convolution,使用 Pretraining on COCO 和 Pretraining on JFT,在這些 tricks 輔助下,PASCAL VOC 2012 test set 達到驚人的 89.0%,取得新的 state-of-the-art 水平。

結論

從 DeepLabv1-v4 系列看,空洞卷積必不可少。從 DeepLabv3 開始去掉 CRFs。

Github 目前還未有公佈的 DeepLabv3,但是有網友的復現版本。DeepLabv3+ 更是沒有原始碼,復現起來估計有些難度。

DeepLabv3 復現:

https://github.com/NanqingD/DeepLabV3-Tensorflow

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

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

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

 

 

 PaperDaily 

關於作者:陳泰紅,小米高階演算法工程師,研究方向為人臉檢測識別,手勢識別與跟蹤。

■ 論文 | Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation

■ 連結 | https://www.paperweekly.site/papers/1676