Pyramid Scene Parsing Network
論文地址:https://arxiv.org/pdf/1612.01105.pdf
源碼地址:https://github.com/hszhao/PSPNet
來自:Semantic Segmentation–Pyramid Scene Parsing Network(PSPNet)論文解讀
《Pyramid Scene Parsing Network》論文筆記
What: PsPNet主要是通過金字塔池化提取多尺度信息。按論文的描述:更好的提取全局上下文信息,同時利用局部和全局信息,使得場景識別更加可靠。(從技術的角度來說,我覺得就是從不同的視野去尋找特征,類似放大鏡放大,放大倍數大,視野小,物體清楚,但是看不清物體之間的關系;放大倍數小,視野大,物體模糊,但是可以看清楚物體之間的關系。)除此之外,文章還通過Ablation study (類似控制變量法,移除一個結構,研究這個結構的影響)研究金字塔多尺度池化,池化的方式,輔助損失函數,預訓練模型的作用。
Why: PsPNet提出的原因,可以總結為一句話:獲取全局環境信息,利用全局信息和局部信息獲得更加可靠地結果。怎么做到的?提取多尺度信息。為什么提取多尺度信息可以獲取全局環境信息?經驗總結。
Abstract
本文提出的金字塔池化模塊( pyramid pooling module)能夠聚合不同區域的上下文信息,從而提高獲取全局信息的能力。實驗表明這樣的先驗表示(即指代PSP這個結構)是有效的,在多個數據集上展現了優良的效果。
Introduction
場景解析(Scene Parsing)的難度與場景的標簽密切相關。先大多數先進的場景解析框架大多數基于FCN,但FCN存在的幾個問題:
Mismatched Relationship: 上下文關系匹配對理解復雜場景很重要,例如在上圖第一行,在水面上的大很可能是“boat”,而不是“car”。雖然“boat和“car”很像。FCN缺乏依據上下文推斷的能力。
Confusion Categories: 許多標簽之間存在關聯,可以通過標簽之間的關系彌補。上圖第二行,把摩天大廈的一部分識別為建筑物,這應該只是其中一個,而不是二者。這可以通過類別之間的關系彌補。
Inconspicuous Classes: 模型可能會忽略小的東西,而大的東西可能會超過FCN接收范圍,從而導致不連續的預測。如上圖第三行,枕頭與被子材質一致,被識別成到一起了。為了提高不顯眼東西的分割效果,應該注重小面積物體。
總結這些情況,許多問題出在FCN不能有效的處理場景之間的關系和全局信息。本論文提出了能夠獲取全局場景的深度網絡PSPNet,能夠融合合適的全局特征,將局部和全局信息融合到一起。并提出了一個適度監督損失的優化策略,在多個數據集上表現優異。
本文的主要貢獻如下:
提出了一個金字塔場景解析網絡,能夠將難解析的場景信息特征嵌入基于FCN預測框架中
在基于深度監督損失ResNet上制定有效的優化策略
構建了一個實用的系統,用于場景解析和語義分割,并包含了實施細節
Related Work
受到深度神經網絡的驅動,場景解析和語義分割獲得了極大的進展。例如FCN、ENet等工作。許多深度卷積神經網絡為了擴大高層feature的感受野,常用dilated convolution(空洞卷積)、coarse-to-fine structure等方法。本文基于先前的工作,選擇的baseline是帶dilated network的FCN。
大多數語義分割模型的工作基于兩個方面:
一方面:具有多尺度的特征融合,高層特征具有強的語義信息,底層特征包含更多的細節。
另一方面:基于結構預測。例如使用CRF(條件隨機場)做后端細化分割結果。
為了充分的利用全局特征層次先驗知識來進行不同場景理解,本文提出的PSP模塊能夠聚合不同區域的上下文從而達到獲取全局上下文的目的。
Architecture
Pyramid Pooling Module
前面也說到了,本文的一大貢獻就是PSP模塊。
在一般CNN中感受野可以粗略的認為是使用上下文信息的大小,論文指出在許多網絡中沒有充分的獲取全局信息,所以效果不好。要解決這一問題,常用的方法是:
用全局平均池化處理。但這在某些數據集上,可能會失去空間關系并導致模糊。
由金字塔池化產生不同層次的特征最后被平滑的連接成一個FC層做分類。這樣可以去除CNN固定大小的圖像分類約束,減少不同區域之間的信息損失。
論文提出了一個具有層次全局優先級,包含不同子區域之間的不同尺度的信息,稱之為pyramid pooling module。
該模塊融合了4種不同金字塔尺度的特征,第一行紅色是最粗糙的特征–全局池化生成單個bin輸出,后面三行是不同尺度的池化特征。為了保證全局特征的權重,如果金字塔共有N個級別,則在每個級別后使用1×1的卷積將對于級別通道降為原本的1/N。再通過雙線性插值獲得未池化前的大小,最終concat到一起。
金字塔等級的池化核大小是可以設定的,這與送到金字塔的輸入有關。論文中使用的4個等級,核大小分別為1×1,2×2,3×3,6×6。
整體架構
在PSP模塊的基礎上,PSPNet的整體架構如下:
基礎層經過預訓練的模型(ResNet101)和空洞卷積策略提取feature map,提取后的feature map是輸入的1/8大小
feature map經過Pyramid Pooling Module得到融合的帶有整體信息的feature,在上采樣與池化前的feature map相concat
最后過一個卷積層得到最終輸出
PSPNet本身提供了一個全局上下文的先驗(即指代Pyramid Pooling Module這個結構),后面的實驗會驗證這一結構的有效性。
基于ResNet的深度監督網絡
論文用了一個很“玄學”的方法搞了一個基礎網絡層,如下圖:
Experiment
論文在ImageNet scene parsing challenge 2016, PASCAL VOC 2012,Cityscapes 三個數據集上做了實驗。
訓練細節:
Conclusion
論文在結構上提供了一個pyramid pooling module,在不同層次上融合feature,達到語義和細節的融合。 模型的性能表現很大,但感覺主要歸功于一個良好的特征提取層。在實驗部分講了很多訓練細節,但還是很難復現,這里值得好好推敲一下。
總結
以上是生活随笔為你收集整理的Pyramid Scene Parsing Network的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: RefineNet
- 下一篇: Large Kernel Matters