PSPNet: Pyramid Scene Parsing Network

PSPNet在分割中取得了非常不錯的效果。
文章地址:PSPNet

  在神經網絡的驅動下,像場景解析和語義分割這種像素級的預測都取得了很好的效果。像素級的預測主要分爲兩個主線:

1、multi-scale feature ensembling 多尺度特徵融合。因爲在深度神經網絡中,higher-layer包含更多的語義信息,較少的位置信息。多個尺度的特徵融合有助於提高模型的效果。

2、conditional random field(CRF) 結構預測。使用CRF作爲後處理

與全局金字塔池化不同的是,本文提出了通過PSPNet對不同區域信息的融合來實現全局上下文信息的融合。

Pyramid Scene Parsing Network

  通過對把FCN應用與場景解析產生的具有代表性的錯誤例子的觀察和分析,來開始的本次研究
這裏寫圖片描述

Import Observations

  ADE20K數據集包含150個類別,和1038個圖像級的場景描述。通過觀察FCN模型應用於這個數據集產生的結果,總結了三個常見的問題。

Mismatched Relationship(關係不匹配)。場景中存在共同發生的視覺模式,比如飛機可能在跑道上或者在天空中,但是不會在公路上。圖2中FCN把一個船預測爲汽車,僅僅是因爲他的外型像汽車。但是一個常識問題是汽車很少出現在河中,缺少結合上下文信息的能力會提高誤分類的可能。

**Confusion Categories(類別混淆)。**ADE20K中有許多類別的label是易混淆的。例如,field and earth; mountain and hill; wall, house, building and skyscraper。這些類別都具有非常相似的外表。

InconspicupousClasses(不顯眼的類別)。物體具有任意的外形大小,許多較小的物體很難發現但是卻很重要。相反,一些大的物體可能會超過FCN的感受野大小,導致不連續的預測。圖2中枕頭與牀單具有相似的外觀,過度重視全局信息會忽略掉枕頭。爲了提高明顯較小或較大的物體的性能,應該注意包含不明顯類別的不同子區域。
這裏寫圖片描述

Pyramid Pooling Module

  全局平均池化(GAP)是一個很好的baseline,<\Looking wider to see better>把它很好的應用在語義分割中。但是ADE20K這個數據集中,GAP很難覆蓋有效的信息。在這些場景解析圖像中,像素被標定爲許多label。直接把feature map混合成一個向量會丟失空間信息並且會造成歧義。具有子區域信息的全局上下文信息對於分辨多個類別具有幫助。更強大的表示可以將來自帶有多個感受野的不同子區域的信息融合。 在經典的場景/圖像分類工作[18,12]中得出了類似的結論。

  在<\Spatial pyramid pooling in deep convolutional networks for visual recognition>中,通過金字塔池化得到的多個層次的feature map最終經過falten和concatenated送入全連接網絡用於分類。這個全局先驗旨在消除圖像分類中CNN的固定大小約束。爲了進一步降低來自不同子區域的上下文信息損失,我們提出了多級全局先驗,包含不同尺度和不同子區域的信息。我們將其稱爲金字塔池模塊,用於在深層神經網絡的最終層特徵圖上構建全局場景,如圖(c)所示。

  金字塔池化模塊混合4種不同尺度的特徵。以紅色突出顯示的最粗糙級別是用於生成單個bin輸出的全局池化。接下來的金字塔層把特徵分成不同的子區域,並對不同的位置進行池化表達。不同層級的金字塔池化層產生的feature map大小不同。爲了控制全局特徵的比例,我們在每一個金字塔層後面採用1x1conv層來降低維度,如果有N個金字塔層,則每個層級後面的feature map個數爲原始特徵個數的1/N。然後我們直接把每一個層級的feature map通過雙線性插值upsample到原始feature map的大小(送入金字塔池化層之前的)。最後所有的金字塔層特徵以及原始特徵concatenate在一起作爲最終的金字塔池化特徵。

  金字塔層的個數和每一層的特徵大小都是可以調整的,這取決於送入金字塔池化模塊特徵的大小。這個結構不同大小的pooling kernel來提取不同子區域的的特徵。因此,多個層級的pooling kernel 應該保持合理的差距。我們的金字塔池化模塊具有4個層級,每一個層級的pooling kernel大小爲1x1,2x2,3x3和6x6。對於採用最大池化還是平均池化,在5.2節進行了實驗。

Network Architecture

  我們採用預訓練好的帶孔卷積Resnet來提取特徵,如圖3b,這個特徵圖是原始輸入大小的1/8。我們採用金字塔池化模塊來提取上下文信息。我們採用4層金字塔池化,我們的pooling keernel分別覆蓋全部,一半,以及更小的圖像區域。然後這些特徵和輸入的feature map混合在一起作爲全局先驗。然後再用卷積層來獲得最終的預測圖。

  我們的金字塔池化模塊和全局池化相比可以提取更加具有代表性的信息。PSPNet和帶孔的FCN相比,並沒有增加多少計算量。在端到端的學習中,全局金字塔池模塊和局部FCN功能可以同時優化。

Deep Supervision for ResNet-Based FCN

  我們相反地建議通過監督產生初始結果並增加損失,並在最終損失之後學習殘差。 因此,深度網絡的優化被分解爲兩個,每個都更容易解決。

  深度監督ResNet101模型如圖4所示。除了主幹路上採用softmax loss來訓練最終的分類器,另一個分類器用於第四個stage之後。這兩個損失函數可以傳遞到前面的所有層。輔助損失用於學習過程中的優化,主幹上的損失有更大的責任。我們給輔助損失添加權重。

在測試過程中,去掉輔助損失,只保留最終分類器的損失。

Experiments

Data Augmentation

random mirror, random resize(0.5-2), random rotation(-10 ~ 10)。

文中還提到了大的cropsize和batchsize,這個地方我沒看懂。請了解的朋友指教。

Ablation Study for PSPNet

這裏寫圖片描述
分別對比了
max pooling vs average pooling 最大池化 vs 平均池化

one global feature vs four-level features 一個全局特徵和四級特徵

全局池化模塊之後是否降維

對比結果如上圖所示。

Ablation Study for Auxiliary Loss

這裏寫圖片描述
對比採用輔助loss的結果。設置輔助loss的權重在0-1之間,baseline模型是基於FCN的帶有空洞卷積的Resbet50,只有一個主幹損失。實驗證明,輔助損失的權重爲0.4的時候,效果最好。

Ablation Study for Pre-trained Model

這裏寫圖片描述
最終的測試結果爲44.94\%, 81.69\%。

Concluding Remarks

  我們針對複雜場景解析問題提出了一個有效的金字塔場景解析模型。全局金字塔池化模塊提供了額外的上下文信息。我們還提出了一個深度監督優化策略(多了一個輔助loss).

個人總結

正如結論所說,PSPNet主要有兩大貢獻:

1、提出金字塔池化模塊。

2、輔助損失。

這兩大貢獻個人感覺並不是什麼開創性的東西,金字塔在何凱明老師的一些文章甚至更早的文章中已經用過了,輔助損失更是很多地方都有使用。但是本文的效果太好。

其它的一些細節信息,

Resnet中使用了dilated convolution。

金字塔池化模塊的層級個數和每一層的pooling kernel大小都是可調節的。

在金字塔池化之後使用1x1 conv來降低維度,減少計算量。

上採樣部分還是使用雙線性插值。

理解的還有不當的地方,請各位朋友批評指正,謝謝。

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