PaperWeekly 第28期 | 图像语义分割之特征整合和结构预测
“
余昌黔
華中科技大學(xué)碩士
研究方向為圖像語義分割
知乎專欄
https://zhuanlan.zhihu.com/semantic-segmentation
前言
近來閱讀了 PASCAL VOC 2012 排行榜上前幾的文章,包括 PSPNet 和林國省老師的幾篇論文,覺得現(xiàn)在在 semantic segmentation 領(lǐng)域?qū)τ?Multi-scale Features ensembling 的關(guān)注又多起來了(當(dāng)然其實一直都應(yīng)用的挺多),然后林國省老師對 CRF 有一些新的認(rèn)識和解讀。這些都將總結(jié)于此。
兩個發(fā)展方向
-
特征整合(Feature Ensembling)?
又分為:-
多尺度(multi-scale) 特征整合
-
多級(multi-level)特征整合
-
-
結(jié)構(gòu)預(yù)測(Structure Prediction)?
比如之前經(jīng)常使用的條件隨機(jī)場
特征整合
多尺度整合
PSPNet
這個方法在前一段時間是 PASCAL VOC 2012 排行榜上的第一,現(xiàn)在的第二。
語義分割中常見問題
-
關(guān)系不匹配(Mismatched Relationship)?
場景中存在著可視模式的共現(xiàn)。比如,飛機(jī)更可能在天上或者在跑道上,而不是公路上。 -
易混淆的類別(Confusion Categories)?
許多類別具有高度相似的外表。 -
不顯眼的類別(Inconspicuous Classes)?
場景中包括任意尺寸的物體,小尺寸的物體難以被識別但是有時候?qū)τ趫鼍袄斫夂苤匾?/span>
Note:?這些大多數(shù)錯誤都部分或者完全和上下文關(guān)系以及全局信息有關(guān)系,而 PSPNet 就是為了整合不同區(qū)域的 context 來獲取全局的 context 信息。
網(wǎng)絡(luò)結(jié)構(gòu)
其中的一些?tricks:
-
圖片輸入的 CNN 是 ResNet,使用了 dilated convolution
-
Pyramid Pooling Module 中的 conv 是1×1的卷積層,為了減小維度和維持全局特征的權(quán)重
-
Pyramid Pooling Module 中的 pooling 的數(shù)量以及尺寸都是可以調(diào)節(jié)的
-
上采樣使用的雙線性插值
-
poly learning rate policy
-
數(shù)據(jù)擴(kuò)增用了:random mirror, random resize(0.5-2), random rotation(-10 到 10 度), random Gaussian blur
-
選取合適的 batchsize
結(jié)構(gòu)還是很清晰明確的,沒太多可說的。?
此外,文中還提到了為了訓(xùn)練使用了一個輔助的 loss,并不在我們討論內(nèi)容之內(nèi),僅展示一下示意圖:
PSPNet 在 PASCAL VOC 2012 上測試的結(jié)果如下:
FeatMap-Net
這是林國省老師兩篇論文中提到的網(wǎng)絡(luò)結(jié)構(gòu)的前面一部分,我把它抽取出來在此討論特征整合,這部分網(wǎng)絡(luò)結(jié)構(gòu)利用多尺度 CNN?和?sliding pyramid pooling?來獲取 patch-background 的上下文信息。
網(wǎng)絡(luò)結(jié)構(gòu)
其中:
-
圖片進(jìn)來先進(jìn)行 0.4, 0.8, 1.2 的放縮
-
前 1-5 conv block 是共享參數(shù)的
-
向上采樣還是我們熟悉的雙線性插值
Sliding Pyramid Pooling
其中使用的是滑動的 pooling,即 stride 為 1,所以不降低 feature map 的尺寸。不同尺寸的窗口有利于獲得不同大小的背景信息,而且增加了 field-of-view,這樣 feature vector 能編碼更大范圍的信息(feature vector 會在之后的結(jié)構(gòu)中使用,下文會介紹到)。
多級整合
RefineNet
這個方法在前一段時間是 PASCAL VOC 2012 排行榜上的第三,現(xiàn)在的第四。本方法主要想解決的限制是:多階段的卷積池化會降低最后預(yù)測結(jié)果圖片的尺寸,從而損失很多精細(xì)結(jié)構(gòu)信息。
現(xiàn)有方法的解決辦法:
-
反卷積作為上采樣的操作?
反卷積不能恢復(fù)低層的特征,畢竟已經(jīng)丟失了 -
Atrous Convolution?(Deeplab提出的)?
帶孔卷積的提出就是為了生成高分辨率的 feature map,但是計算代價和存儲代價較高 -
利用中間層的特征?
最早的 FCN-8S 就是這樣做的,但是始終還是缺少強(qiáng)的空間信息
以上所說方法在我之前的文章中都有提到,感興趣的同學(xué)可以猛戳以下鏈接,這里就不贅述了。?
圖像語義分割之FCN和CRF: https://zhuanlan.zhihu.com/p/22308032?group_id=820586814145458176
作者主張所有層的特征都是有用的,高層特征有助于類別識別,低層特征有助于生成精細(xì)的邊界。所以有了接下來的網(wǎng)絡(luò)結(jié)構(gòu),說實話我是覺得有點復(fù)雜。
網(wǎng)絡(luò)結(jié)構(gòu)
可以看見,整個結(jié)構(gòu)其實是類似于 FCN-8S 的結(jié)構(gòu)的,只是抽出特征更早,而且經(jīng)過了 RefineNet 進(jìn)行處理。?
整個流程就是,1/32 的 feature map 輸入 RefineNet 處理后和 1/16 的 feature map 再一起又輸入一個 RefineNet 優(yōu)化,后面的過程類似。
RefineNet
可以看出,每個 RefineNet 的輸入是可以調(diào)整的,所以整個網(wǎng)絡(luò)的連接也是可以修改的,當(dāng)然作者做實驗說明在他提出的其他變體中這種連接的效果最好。
Residual Convolution Unit (RCU)
Multi-resolution Fusion
這里將輸入的不同分辨率的 feature map 上采樣到和最大 feature map 等尺寸然后疊加,此處的 conv 用于輸入的參數(shù)自適應(yīng)。
Chained Residual Pooling
文中提到:
-
conv 作為之后加和的權(quán)重
-
relu 對接下來 pooling 的有效性很重要,而且使得模型對學(xué)習(xí)率的變化沒這么敏感
-
這個鏈?zhǔn)浇Y(jié)構(gòu)能從大范圍區(qū)域上獲取背景 context
此處不得不提到,這個結(jié)構(gòu)中大量使用了?identity mapping?這樣的連接,無論長距離或者短距離的,這樣的結(jié)構(gòu)允許梯度從一個 block 直接向其他任一 block 傳播。
現(xiàn)在回過頭來看看 RefineNet 整個網(wǎng)絡(luò)結(jié)構(gòu)還是有些復(fù)雜的,但是確實還是有一些效果,這種直接將低層特征抽取來優(yōu)化高層特征的措施可以想象能對結(jié)果進(jìn)行一些優(yōu)化。但是始終還是覺得這樣的處理有點太復(fù)雜了。
接下來看一下 RefineNet 在 PASCAL VOC 2012 上測試的結(jié)果:
結(jié)構(gòu)預(yù)測 (CRF)
其實在語義分割這個領(lǐng)域很早就開始使用 CRF 或者 MRF 等對語義信息進(jìn)行建模,在深度學(xué)習(xí)火起來之前就有不少這樣的方法了。所以后來大家很自然地想到了深度學(xué)習(xí)和條件隨機(jī)場的結(jié)合。但是,林國省老師指出現(xiàn)在利用條件隨機(jī)場的方法都不太“地道”。?
現(xiàn)有方法:
-
dense CRF 作為 FCN 輸出的后處理,并沒有真正地結(jié)合進(jìn) CNN
-
CRFasRNN 中將二者真正結(jié)合了,但是只有其中一元勢函數(shù)的輸入來自 CNN,二元勢函數(shù)的輸入來自于一元以及迭代,而且這里的二元勢函數(shù)被強(qiáng)制考慮為局部平滑度
以上所說方法在我之前的文章中都有提到,感興趣的同學(xué)可以猛戳以下鏈接,這里就不贅述了。?
圖像語義分割之FCN和CRF: https://zhuanlan.zhihu.com/p/22308032?group_id=820586814145458176
Contextual CRF
此處提到的結(jié)構(gòu)是和前文所述 FeatMap-Net 為統(tǒng)一網(wǎng)絡(luò)結(jié)構(gòu)
整體結(jié)構(gòu)
此處我們主要討論 FeatMap-Net 之后的 CRF 的處理。林老師提出的這個方法對一元勢函數(shù)和二元勢函數(shù)都用 CNN 來直接進(jìn)行處理,而且二元勢函數(shù)是直接對空間語義建模更精確。
-
feature map 中的每個空間位置(即每個像素點)對應(yīng) CRF 圖中的一個節(jié)點
-
Pairwise connection 就是通過每個節(jié)點與預(yù)定義的 spatial range box 中其他節(jié)點連接來體現(xiàn)的
-
不同的空間關(guān)系通過定義不同類型的 range box 來實現(xiàn)的,每種空間關(guān)系通過特定的 pairwise potential function 來建模?
不同空間關(guān)系:
Surrounding 這樣的關(guān)系就在對應(yīng)節(jié)點的周圍畫框,Above/Below 這樣的關(guān)系就讓節(jié)點在一條邊的中間然后在其上方或者下方畫框,此處的框是原圖最短邊的 0.4.
此處我們回顧一下 CRF 的公式:
其中,Ψω?是不同類型一元勢函數(shù)的集合,Ω?是一元勢函數(shù)對應(yīng)的節(jié)點集合;θ?是不同類型二元勢函數(shù)的集合,Φ?是二元勢函數(shù)對應(yīng)的邊的集合。
Unary Potential Functions
這里,Zp,yp 對應(yīng)與第 P 個節(jié)點和第 Yp?個類別?
一元勢函數(shù)對應(yīng)的處理就是從 Feature map 上的一個節(jié)點提取出 feature vector,然后連接幾層全連接層,輸出K個值,這個K就是需要預(yù)測的類別數(shù)。
Pairwise Potential Functions
我覺得這里對二元勢函數(shù)的處理很巧妙,將兩個節(jié)點對應(yīng)的 feature vector 提取出來然后連接到一起來學(xué)習(xí)兩個節(jié)點之間的邊,很棒!之后自然也是連接幾層全連接層輸出的是k2?個值,為了將所有類別之間的配對關(guān)系都考慮進(jìn)去,但是這里產(chǎn)生的值應(yīng)該有很多冗余。
Asymmetric Pairwise Functions
對于不對稱的關(guān)系比如 Above\Below 就需要這樣的不對稱二元勢函數(shù)進(jìn)行學(xué)習(xí),而這種勢函數(shù)主要依賴于兩個節(jié)點輸入的順序,這個可以通過兩個 feature vector 連接的順序來體現(xiàn),所以我說這樣的處理很巧妙啊。
至此,這種對 CRF 的解讀講完了~但是這篇文章中的有一些內(nèi)容還不得不提一下:
-
這些 CRF 是用于 coarse prediciton stage 的,為了提升低分辨率的預(yù)測;文中提到在最后的輸出的時候還是使用來的 dense crf 進(jìn)行細(xì)化輸出的(這就比較尷尬了,最開始還說人家不好,現(xiàn)在還是要使用……)
-
文中提到?Piecewise Learning?作為新的一種對 CRF 的訓(xùn)練方法,這里就沒有闡述了,感興趣的同學(xué)可以看看原文。
參考文獻(xiàn)
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.
來源:paperweekly
原文鏈接
總結(jié)
以上是生活随笔為你收集整理的PaperWeekly 第28期 | 图像语义分割之特征整合和结构预测的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: UE4+Cesium
- 下一篇: 安装kernel API的man手册