DeepLabV3論文解讀(空洞卷積/膨脹卷積 理解)

DeepLabV3論文解讀(空洞卷積/膨脹卷積 理解)

最近在做基礎網絡研究,設計的網絡結構除了在分類數據集上測試,還需要在分割和檢測網絡上測試效果,故選擇了DeepLabV3作爲對比平臺。本想直接替換backbone查看結果,但不如藉此機會把DeepLabV3好好研究清楚,順帶把分割領域的經典論文研究一遍,於是有了這篇博客~

(FCN、SegNet、U-Net、CRF)

DeepLabV3結構解讀

相關的四種獲取上下文信息的分割方法:

  1. Image pyramid
    圖像金字塔的用法是將一個共享權重的相同模型應用於多尺度的輸入,其中大尺度的輸入提供了小目標的細節,小尺度的輸入圖像被編碼成整體的上下文信息。這種方法的主要缺點是因爲GPU的內存限制(相當於針對每個尺度的輸入都有同一個模型在並行訓練),無法在較大/較深的網絡上應用,因此通常在推理(Inference)階段使用。
  2. Encoder-decoder
    編碼器-解碼器結構包含兩個部分:編碼器部分講特徵圖的空間尺寸逐漸減小,從而在更深的特徵圖中捕獲更長範圍的信息,而解碼器部分則負責恢復特徵圖的空間尺寸和對象的細節。比如SegNet和U-Net結構。
  3. Context module
    包含級聯佈局的其他模塊來對大範圍的上下文進行編碼,比如將DenseCRF合併到CNN中。也有文獻建議同時訓練CNN和CRF,或者在CNN的belief map上使用額外卷積來獲取上下文信息。
  4. Spatial pyramid pooling
    空間金字塔池化(SPP)最開始由何凱明提出,是一種在池化層融合多尺度信息的方法,DeepLabV2提出了空洞空間金字塔池化ASPP。最近PSP Net在幾個網格尺度上執行空間池化,還有其他基於LSTM的方法。

在DeepLabV3的主要工作是探索空洞卷積在Context module和Spatial pyramid pooling的應用,複製了ResNet的最後一個block並且以級聯的方式排布。

空洞卷積獲取密集特徵

完全卷積的方式被證明用在語義分割上有效,但是頻繁的max-pooling和striding導致得到特徵圖的空間分辨率嚴重降低,反捲積(FCNS)已被用來恢復空間分辨率,但是空洞卷積更應該被提倡,原因是空洞卷積的感受野更大。當參數量一定的時候,普通卷積只能提取小塊的特徵,而空洞卷積可以通過提高空洞率,讓每次採樣時在輸入特徵圖上的重合採樣區域更多,從而獲得更密集的特徵響應。舉個例子:比如一個普通的卷積神經網絡輸入與輸出尺寸之間差了32倍(down sampling 5次),當我們希望功能響應的空間密度加倍時,可以把最後一層的卷積或者池化層步幅stride設置爲1,然後後續卷積替換爲空洞率爲2的空洞卷積,這樣就能獲得更密集的空間響應而不需要學習更多的參數。這裏的密集,指的是特徵圖的分辨率,普通卷積的下采樣操作會讓特徵圖尺寸越來越小,最後得到的結果對應回原圖的位置上,把每個特徵圖的像素點看作提取到的特徵的話,整張圖的特徵響應就會變得稀疏。因此如果將最後一個縮小分辨率的卷積層替換成空洞卷積,可以 在保持運算量的同時不減小特徵圖分辨率,使輸入與輸出尺寸之間差16倍,這樣就獲得了更密集的特徵響應。

關於稀疏與密集特徵響應

關於空洞卷積獲取密集特徵在DeepLab-Semantic Image Segmentation with Deep Convolutional Nets, Atrous Convolution, and Fully Connected CRFs即DeepLabV2中就已經提到,空洞卷積最早來源於小波變換中提高計算效率的方法,在這裏借用這篇論文中的圖來解釋:
在這裏插入圖片描述
這個圖是一維的示意圖,a是普通標準卷積的稀疏特徵提取,b是空洞率爲2的空洞卷積的密集特徵提取,乍一看似乎沒看明白這個稀疏和密集的關係,沒關係,重點放在它們作用的特徵圖上,看看它們作用的特徵圖的差別:
在這裏插入圖片描述

咱們重點看看這個圖,給定一個輸入圖片,假設我們需要對它做下采樣操作(比如卷積stride爲2),將分辨率降低了兩倍,然後與這個kernel size爲7的卷積核做卷積運算,將得到的特徵圖再重新上採樣兩倍,植入到原始圖像中,會發現我們只獲得了圖像1/4的響應(右上角的圖),這就是標準卷積所謂的稀疏特徵響應。相反,如果最開始不下采樣,而是對原圖使用kernel size=7,空洞率爲2的空洞卷積運算,實際運算量以及參數量都沒有變化(因爲空洞卷積中間是空的0值,不需要運算)。這樣就可以在不需要下采樣的情況下對全分辨率的圖像做卷積,並且能獲得更大的感受野。

所以之前提到的密集與稀疏特徵響應,指的是提取到的特徵圖的分辨率。普通卷積的下采樣操作會讓特徵圖尺寸越來越小,最後得到的結果對應回原圖的位置上,把每個特徵圖的像素點看作提取到的特徵的話,整張圖的特徵響應就會變得稀疏。而空洞卷積可以在運算量不變的情況下不降低特徵圖的分辨率,這樣得到的特徵圖對應回原圖上就更加密集。

在DCNN中,可以在一系列層中使用空洞卷積從而可以以任意的高分辨率計算網絡的特徵響應。將這種方法貫穿整個網絡可以一直以原始分辨率計算特徵圖,但是計算成本過高,因此可以在效率和準確率之間做一個折中,將圖像分類網絡轉化爲一個密集特徵提取器。

讓我們重回DeepLabV3的討論

DeepLabV3首先探索了將空洞卷積級聯佈局的結構,具體將ResNet的後幾個塊更改成空洞卷積,從而根據設定的值維持分辨率,如圖所示在這裏插入圖片描述
上面是原本的ResNet模塊,通過不斷的下采樣操作使得特徵圖尺寸越來越小,同時深度越來越深,在分類任務時這樣是有好處的,在較深的模塊更容易獲得全局信息,但是對於分割網絡這樣就損失了太多細節,特徵響應變得稀疏。但是通過將後幾個block改成空洞卷積之後,運算量沒有增大,但是卻能夠維持分辨率不降低,這樣獲取了更密集的特徵響應,使得還原到原圖時細節更好。

空洞空間金字塔池化(Atrous Spatial Pyramid Pooling,ASPP)

擁有不同空洞率的ASPP有效的獲取了多尺度信息,但是發現隨着採樣率增大,尤其是濾波器的等效尺寸接近特徵圖尺寸時,整個3×3濾波器就會退化爲1×1濾波器,只用中間的一個權重值有用,爲了克服這個問題,文章使用全劇平均池化在最後一個特徵圖上,並且通過1×1卷積得到256個特徵上採樣到所需空間尺寸,所以最終的ASPP包含四個並行操作,一個1×1卷積和三個3×3卷積,都有256個卷積核,如圖所示:
在這裏插入圖片描述
所有分支得到的特徵圖將會拼接在一起通過另外一個1×1卷積。

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