2017 CVPR
Pyramid Scene Parsing Network
Semantic Segmentation on PyTorch (include FCN, PSPNet, Deeplabv3, DANet, DenseASPP, BiSeNet, EncNet, DUNet, ICNet, ENet, OCNet, CCNet, PSANet, CGNet, ESPNet, LEDNet)
PyTorch Implementations for DeeplabV3 and PSPNet
Pytorch implementation of pspnet
Introduce
本文提出的金字塔池化子產品( pyramid pooling module)能夠聚合不同區域的上下文資訊,進而提高擷取全局資訊的能力。
場景解析(Scene Parsing)
難度與場景的标簽密切相關。大多數先進的場景解析架構大多數基于FCN
FCN存在的問題
- Mismatched Relationship
上下文關系比對對了解複雜場景很重要,例如在,在水面上的大很可能是“boat”,而不是“car”。雖然“boat和“car”很像。FCN缺乏依據上下文推斷的能力。
- Confusion Categories
許多标簽之間存在關聯,可以通過标簽之間的關系彌補。上圖第二行,把摩天大廈的一部分識别為建築物,這應該隻是其中一個,而不是二者。這可以通過類别之間的關系彌補。
- Inconspicuous Classes
模型可能會忽略小的東西,而大的東西可能會超過FCN接收範圍,進而導緻不連續的預測。如上圖第三行,枕頭與被子材質一緻,被識别成到一起了。為了提高不顯眼東西的分割效果,應該注重小面積物體。
總結這些情況,許多問題出在FCN不能有效的處理場景之間的關系和全局資訊。本論文提出了能夠擷取全局場景的深度網絡PSPNet,能夠融合合适的全局特征,将局部和全局資訊融合到一起。并提出了一個适度監督損失的優化政策,在多個資料集上表現優異。
本文的主要貢獻
- 提出了一個金字塔場景解析網絡,能夠将難解析的場景資訊特征嵌入基于FCN預測架構中
- 在基于deeply supervised loss 的 deep ResNet上制定有效的優化政策
- 建構了一個實用的系統,用于場景解析和語義分割,并包含了實施細節
比賽
- champion of ImageNet scene parsing challenge 2016
- 1st place on PASCAL VOC 2012 semantic segmentation benchmark
- 1st place on urban scene Cityscapes data
主要工作
-
multi-scale feature ensembling 多尺度特征融合。多個尺度的特征融合有助于提高模型的效果。
高層特征具有強的語義資訊較少的位置資訊,底層特征包含更多的細節。
-
基于結構預測
比如 conditional random field(CRF) 結構預測。使用CRF作為後處理。
與全局金字塔池化不同的是,本文提出了通過PSPNet對不同區域資訊的融合來實作全局上下文資訊的融合。
這兩個方向都改善了場景解析中預測語義邊界與對象比對的定位能力。
擷取全局資訊
一般CNN中感受野可以粗略的認為是使用上下文資訊的大小,論文指出在許多網絡中沒有充分的擷取全局資訊,是以效果不好。常用的方法是:
-
用全局平均池化處理。
但這在某些資料集上,可能會失去空間關系并導緻模糊。
-
Spatial pyramid pooling
由金字塔池化産生不同層次的特征最後被平滑的連接配接成一個FC層做分類。這樣可以去除CNN固定大小的圖像分類限制,減少不同區域之間的資訊損失。
Architecture
baseline network : FCN + dilated network
Pyramid Pooling Module
Network Architecture
-
圖(b) CNN
基礎層經過預訓練的模型(ResNet101)和 dilated 政策提取feature map
使用了殘差網絡、空洞卷積和降維卷積的方法(先使用11降低次元,然後使用33卷積,再用1*1恢複次元)。網絡中一共出現三次特征圖縮小,一次使用maxpool,兩次使用conv,每次減少二分之一
最終的feature map大小為輸入圖像的1/8
- 圖© Spatial pyramid pooling
feature map經過Pyramid Pooling Module得到融合的帶有整體資訊的feature,在上采樣與池化前的feature map相concat
- 金字塔池子產品融合了四種不同金字塔尺度下的特征。
金字塔池子產品中不同層次的輸出包含不同大小的feature map
bin size 分别為 1×1 , 2×2 , 3×3 ,6×6
- 第一行紅色是最粗糙的特征–全局池化生成單個bin輸出,後面三行是不同尺度的池化特征。
- 為了保證全局特征的權重,如果金字塔共有N個級别,則在每個級别後使用1×1 的卷積将對于級别通道降為原本的1/N。
- 再通過雙線性插值獲得未池化前的大小,最終concat到一起。
- PSPNet提供了一個全局上下文的先驗(即指代Pyramid Pooling Module這個結構)
論文提出了一個具有層次全局優先級,包含不同子區域之間的不同尺度的資訊,稱之為pyramid pooling module。
Deep Supervision for ResNet-Based FCN
用額外損失的監督産生初始結果,然後用最終損失來學習剩餘的結果。
- 在ResNet101的基礎上做了改進
- 除了使用後面的softmax分類做loss,額外的在第四階段添加了一個輔助的loss
- 兩個loss一起傳播,使用不同的權重,共同優化參數。
- 後續的實驗證明這樣做有利于快速收斂。
Experiments
論文在ImageNet scene parsing challenge 2016, PASCAL VOC 2012,Cityscapes 三個資料集上做了實驗。
項目 | 設定 |
---|---|
學習率 | 采用“poly”政策 設定 l r b a s e lr_{base} lrbase=0.01,power=0.9,衰減動量設定為0.9 and 0.0001 |
疊代次數 | ImageNet上設定150K,PASCAL VOC設定30K,Cityscapes設定90K |
資料增強 | 随機翻轉、尺寸在0.5到2之間縮放、角度在-10到10之間旋轉、随機的高斯濾波 |
batchsize | batch很重要,設定batch=16(這很吃顯存啊~) |
訓練分支網絡 | 設定輔助loss的權重為0.4 |
平台 | Caffe |
ImageNet scene parsing challenge 2016
- 測試不同配置下的ResNet的性能,找到比較好的預訓練模型:
- 對比了 max pooling vs average pooling 最大池化 vs 平均池化
- one global feature vs four-level features 一個全局特征和四級特征
- 全局池化子產品之後是否降維
-
測試輔助loss的影響
設定輔助loss的權重在0-1之間
baseline 使用基于ResNet50的擴充網絡FCN , a = 0.4 時最好
-
測試 pre-trained model 深度
測試的{50,101,152,269}這四個層次的網絡中,網絡越深,效果越好。
Reference
https://blog.csdn.net/u011974639/article/details/78985130
https://blog.csdn.net/qq_18293213/article/details/79882890
https://blog.csdn.net/py184473894/article/details/84205779