前言
近來閱讀了 PASCAL VOC 2012 排行榜上前幾的文章,包括 PSPNet 和林國省老師的幾篇論文,覺得現在在 semantic segmentation 領域對於 Multi-scale Features ensembling 的關注又多起來了(當然其實一直都應用的挺多),然後林國省老師對 CRF 有一些新的認識和解讀。這些都將總結於此。
兩個發展方向
特徵整合(Feature Ensembling)
又分為:
- 多尺度(multi-scale) 特徵整合
- 多級(multi-level)特徵整合
結構預測(Structure Prediction)
比如之前經常使用的條件隨機場
特徵整合
多尺度整合
PSPNet
這個方法在前一段時間是 PASCAL VOC 2012 排行榜上的第一,現在的第二。
語義分割中常見問題
關係不匹配(Mismatched Relationship)
場景中存在著可視模式的共現。比如,飛機更可能在天上或者在跑道上,而不是公路上。易混淆的類別(Confusion Categories)
許多類別具有高度相似的外表。不顯眼的類別(Inconspicuous Classes)
場景中包括任意尺寸的物體,小尺寸的物體難以被識別但是有時候對於場景理解很重要。
Note: 這些大多數錯誤都部分或者完全和上下文關係以及全域性資訊有關係,而 PSPNet 就是為了整合不同區域的 context 來獲取全域性的 context 資訊。
網路結構
- 其中的一些 tricks:
圖片輸入的 CNN 是 ResNet,使用了 dilated convolution
Pyramid Pooling Module 中的 conv 是1×1的卷積層,為了減小維度和維持全域性特徵的權重
Pyramid Pooling Module 中的 pooling 的數量以及尺寸都是可以調節的
上取樣使用的雙線性插值
poly learning rate policy
資料擴增用了:random mirror, random resize(0.5-2), random rotation(-10 到 10 度), random Gaussian blur
選取合適的 batchsize
結構還是很清晰明確的,沒太多可說的。
此外,文中還提到了為了訓練使用了一個輔助的 loss,並不在我們討論內容之內,僅展示一下示意圖:
PSPNet 在 PASCAL VOC 2012 上測試的結果如下:
FeatMap-Net
這是林國省老師兩篇論文中提到的網路結構的前面一部分,我把它抽取出來在此討論特徵整合,這部分網路結構利用多尺度 CNN 和 sliding pyramid pooling 來獲取 patch-background 的上下文資訊。
網路結構
其中:
圖片進來先進行 0.4, 0.8, 1.2 的放縮
前 1-5 conv block 是共享引數的
向上取樣還是我們熟悉的雙線性插值
Sliding Pyramid Pooling
其中使用的是滑動的 pooling,即 stride 為 1,所以不降低 feature map 的尺寸。不同尺寸的視窗有利於獲得不同大小的背景資訊,而且增加了 field-of-view,這樣 feature vector 能編碼更大範圍的資訊(feature vector 會在之後的結構中使用,下文會介紹到)。
多級整合
RefineNet
這個方法在前一段時間是 PASCAL VOC 2012 排行榜上的第三,現在的第四。本方法主要想解決的限制是:多階段的卷積池化會降低最後預測結果圖片的尺寸,從而損失很多精細結構資訊。
現有方法的解決辦法:
反摺積作為上取樣的操作
反摺積不能恢復低層的特徵,畢竟已經丟失了Atrous Convolution (Deeplab提出的)
帶孔卷積的提出就是為了生成高解析度的 feature map,但是計算代價和儲存代價較高利用中間層的特徵
最早的 FCN-8S 就是這樣做的,但是始終還是缺少強的空間資訊
以上所說方法在我之前的文章中都有提到,感興趣的同學可以猛戳以下連結,這裡就不贅述了。
影象語義分割之FCN和CRF: https://zhuanlan.zhihu.com/p/22308032?group_id=820586814145458176
作者主張所有層的特徵都是有用的,高層特徵有助於類別識別,低層特徵有助於生成精細的邊界。所以有了接下來的網路結構,說實話我是覺得有點複雜。
網路結構
可以看見,整個結構其實是類似於 FCN-8S 的結構的,只是抽出特徵更早,而且經過了 RefineNet 進行處理。
整個流程就是,1/32 的 feature map 輸入 RefineNet 處理後和 1/16 的 feature map 再一起又輸入一個 RefineNet 優化,後面的過程類似。
RefineNet
可以看出,每個 RefineNet 的輸入是可以調整的,所以整個網路的連線也是可以修改的,當然作者做實驗說明在他提出的其他變體中這種連線的效果最好。
Residual Convolution Unit (RCU)
Multi-resolution Fusion
這裡將輸入的不同解析度的 feature map 上取樣到和最大 feature map 等尺寸然後疊加,此處的 conv 用於輸入的引數自適應。
Chained Residual Pooling
文中提到:
conv 作為之後加和的權重
relu 對接下來 pooling 的有效性很重要,而且使得模型對學習率的變化沒這麼敏感
這個鏈式結構能從大範圍區域上獲取背景 context
此處不得不提到,這個結構中大量使用了 identity mapping 這樣的連線,無論長距離或者短距離的,這樣的結構允許梯度從一個 block 直接向其他任一 block 傳播。
現在回過頭來看看 RefineNet 整個網路結構還是有些複雜的,但是確實還是有一些效果,這種直接將低層特徵抽取來優化高層特徵的措施可以想象能對結果進行一些優化。但是始終還是覺得這樣的處理有點太複雜了。
接下來看一下 RefineNet 在 PASCAL VOC 2012 上測試的結果:
結構預測 (CRF)
其實在語義分割這個領域很早就開始使用 CRF 或者 MRF 等對語義資訊進行建模,在深度學習火起來之前就有不少這樣的方法了。所以後來大家很自然地想到了深度學習和條件隨機場的結合。但是,林國省老師指出現在利用條件隨機場的方法都不太“地道”。
現有方法:
dense CRF 作為 FCN 輸出的後處理,並沒有真正地結合進 CNN
- CRFasRNN 中將二者真正結合了,但是隻有其中一元勢函式的輸入來自 CNN,二元勢函式的輸入來自於一元以及迭代,而且這裡的二元勢函式被強制考慮為區域性平滑度
以上所說方法在我之前的文章中都有提到,感興趣的同學可以猛戳以下連結,這裡就不贅述了。
影象語義分割之FCN和CRF: https://zhuanlan.zhihu.com/p/22308032?group_id=820586814145458176
Contextual CRF
此處提到的結構是和前文所述 FeatMap-Net 為統一網路結構
整體結構
此處我們主要討論 FeatMap-Net 之後的 CRF 的處理。林老師提出的這個方法對一元勢函式和二元勢函式都用 CNN 來直接進行處理,而且二元勢函式是直接對空間語義建模更精確。
feature map 中的每個空間位置(即每個畫素點)對應 CRF 圖中的一個節點
Pairwise connection 就是通過每個節點與預定義的 spatial range box 中其他節點連線來體現的
不同的空間關係通過定義不同型別的 range box 來實現的,每種空間關係通過特定的 pairwise potential function 來建模
不同空間關係:
Surrounding 這樣的關係就在對應節點的周圍畫框,Above/Below 這樣的關係就讓節點在一條邊的中間然後在其上方或者下方畫框,此處的框是原圖最短邊的 0.4.
此處我們回顧一下 CRF 的公式:
其中,Ψω 是不同型別一元勢函式的集合,Ω 是一元勢函式對應的節點集合;θ 是不同型別二元勢函式的集合,Φ 是二元勢函式對應的邊的集合。
Unary Potential Functions
這裡,Zp,yp 對應與第 P 個節點和第 Yp 個類別
一元勢函式對應的處理就是從 Feature map 上的一個節點提取出 feature vector,然後連線幾層全連線層,輸出K個值,這個K就是需要預測的類別數。
Pairwise Potential Functions
我覺得這裡對二元勢函式的處理很巧妙,將兩個節點對應的 feature vector 提取出來然後連線到一起來學習兩個節點之間的邊,很棒!之後自然也是連線幾層全連線層輸出的是k² 個值,為了將所有類別之間的配對關係都考慮進去,但是這裡產生的值應該有很多冗餘。
Asymmetric Pairwise Functions
對於不對稱的關係比如 Above\Below 就需要這樣的不對稱二元勢函式進行學習,而這種勢函式主要依賴於兩個節點輸入的順序,這個可以通過兩個 feature vector 連線的順序來體現,所以我說這樣的處理很巧妙啊。
至此,這種對 CRF 的解讀講完了~但是這篇文章中的有一些內容還不得不提一下:
這些 CRF 是用於 coarse prediciton stage 的,為了提升低解析度的預測;文中提到在最後的輸出的時候還是使用來的 dense crf 進行細化輸出的(這就比較尷尬了,最開始還說人家不好,現在還是要使用……)
文中提到 Piecewise Learning 作為新的一種對 CRF 的訓練方法,這裡就沒有闡述了,感興趣的同學可以看看原文。
參考文獻
1. Zhao H, Shi J, Qi X, et al. Pyramid Scene Parsing Network[J]. 2016.
2. Lin G, Shen C, Hengel A V D, et al. Efficient Piecewise Training of Deep Structured Models for Semantic Segmentation[C]// IEEE Conference on Computer Vision and Pattern Recognition. IEEE Computer Society, 2016:3194-3203.
3. Lin G, Shen C, Hengel A V D, et al. Exploring Context with Deep Structured models for Semantic Segmentation[J]. 2016.
4. Lin G, Milan A, Shen C, et al. RefineNet: Multi-Path Refinement Networks for High-Resolution Semantic Segmentation[J]. 2016.
餘昌黔
華中科技大學碩士
研究方向為影象語義分割
知乎專欄
https://zhuanlan.zhihu.com/semantic-segmentation