1. 程式人生 > >Recorder︱影象語義分割(FCN、CRF、MRF)、論文延伸(Pixel Objectness、)

Recorder︱影象語義分割(FCN、CRF、MRF)、論文延伸(Pixel Objectness、)

影象語義分割的意思就是機器自動分割並識別出影象中的內容,我的理解是摳圖…
之前在Faster R-CNN中借用了RPN(region proposal network)選擇候選框,但是僅僅是候選框,那麼我想提取候選框裡面的內容,就是影象語義分割了。
簡單的理解就是,影象的“分詞技術”。

.
.

一、FCN全卷積:Fully Convolutional Networks

一些簡單的名詞,下采樣=卷積+池化(畫素縮小),
上取樣=反捲積(畫素放大)Caffe和Kera裡叫Deconvolution,而tensorflow裡叫conv_transpose。CS231n這門課中說,叫conv_transpose更為合適。

  • 卷積與反捲積過程:

這裡寫圖片描述

  • 池化與上池化:

這裡寫圖片描述
池化層作用:池化操作能夠減少計算量,同時也能防止計算結果過擬合
上池化作用:上池化的實現主要在於池化時記住輸出值的位置,在上池化時再將這個值填回原來的位置,其他位置填0即OK。

1、反捲積

那麼反捲積是一種認識”卷積“是什麼的好辦法。反捲積可以在任何卷積層上進行。那麼得到的影象就是一些縮圖形式。
這裡寫圖片描述
每一種反捲積的樣子:
這裡寫圖片描述
可以發現卷積程度越高,32x影象越模糊,8x跟ground truth還是挺接近的。這裡就是感受野(receptive field),8x感受野較小,適合感受細節;32x感受野較大,適合感受巨集觀。
.
.

2、“帶hole”的卷積——Dilated Convolutions

簡單的卷積過程有一些問題:精度問題,對細節不敏感,以及畫素與畫素之間的關係,忽略空間的一致性等問題。那麼新卷積方式hole卷積,用hole卷積核取代池化。
Dilated Convolutions:沒有了池化感受野就不會變大,“疏鬆的卷積核”來處理卷積,可以達到在不增加計算量的情況下增加感受域,彌補不進行池化處理後的精度問題。

操作方式:人為加大了卷積核內部元素之間的距離:
這裡寫圖片描述
這是水平X軸方向上的擴充套件,在Y軸上也會有同樣的擴充套件,感受域在沒有增加計算(相對於池化操作後)的情況下增大了,並且保留了足夠多的細節資訊,對影象還原後的精度有明顯的提升。
這裡寫圖片描述


.
.
.

3、DenseCRF Conditional Random Field:全連線條件隨機場(DenseCRF)

每個畫素點作為節點,畫素與畫素間的關係作為邊,即構成了一個條件隨機場。
這裡寫圖片描述
其中:yi:卷積後的值;i:畫素;xi:類別標籤
條件隨機場符合吉布斯分佈。

在全連結的 CRF 模型中,有一個對應的能量函式:
這裡寫圖片描述
那麼E(x)由兩個部分組成,可以簡單理解為:

E(x)=一元函式+二元函式

一元函式:來自於前端FCN的輸出
二元函式:是描述畫素點與畫素點之間的關係,鼓勵相似畫素分配相同的標籤,而相差較大的畫素分配不同標籤,而這個“距離”的定義與顏色值和實際相對距離有關。所以這樣CRF能夠使圖片儘量在邊界處分割。
全連線條件隨機場的不同就在於,二元勢函式描述的是每一個畫素與其他所有畫素的關係,所以叫“全連線”。

通過對這個能量函式優化求解,把明顯不符合事實識別判斷剔除,替換成合理的解釋,得到對FCN的影象語義預測結果的優化,生成最終的語義分割結果。
這裡寫圖片描述

4、馬爾科夫隨機場(MRF)

在Deep Parsing Network中使用的是MRF,它的公式具體的定義和CRF類似,只不過作者對二元勢函式進行了修改:
這裡寫圖片描述
其中,作者加入λk為label context,因為只是定義了兩個畫素同時出現的頻率,而λk可以對一些情況進行懲罰。
比如,人可能在桌子旁邊,但是在桌子下面的可能性就更小一些。所以這個量可以學習不同情況出現的概率。
而原來的距離d(i,j)只定義了兩個畫素間的關係,作者在這兒加入了個triple penalty,即還引入了j附近的z,這樣描述三方關係便於得到更充足的區域性上下文。

5、高斯條件隨機場(G-CRF)

這個結構使用CNN分別來學習一元勢函式和二元勢函式。

.
.

二、一些成型的分割結構

知乎,困獸,關於影象語義分割的總結和感悟在文中提到通用框架:
這裡寫圖片描述
前端使用FCN進行特徵粗提取,後端使用CRF/MRF優化前端的輸出,最後得到分割圖。

1、“Normalized cut”的圖劃分方法

它的思想主要是通過畫素和畫素之間的關係權重來綜合考慮,根據給出的閾值,將影象一分為二。在實際運用中,每執行一次N-cut,只能切割一次圖片,為了分割出影象上的多個物體,需要多次執行,下圖示例了對原圖a進行7次N-cut後,每次分割出的結果。
這裡寫圖片描述

2、Grab Cut

增加了人機互動,在分割過程中,需要人工干預參與完成。需要人工選擇主體候選框,然後將中部作為主體參考,然後剔除和主體差異較大的部分,留下結果。
這裡寫圖片描述
此技術中,摳出來的部分叫“前景”,剔除的部分叫“背景”。缺點也很明顯,首先,它同N-cut一樣也只能做二類語義分割,說人話就是一次只能分割一類,非黑即白,多個目標影象就要多次運算。其次,它需要人工干預,這個弱點在將來批量化處理和智慧時代簡直就是死穴。

3、segNet

這裡寫圖片描述

4、DeconvNet

這裡寫圖片描述
這樣的對稱結構有種自編碼器的感覺在裡面,先編碼再解碼。這樣的結構主要使用了反捲積和上池化。

5、DeepLab

現在的很多改進是基於這個網路結構的進行的。
為了保證之後輸出的尺寸不至於太小,FCN的作者在第一層直接對原圖加了100的padding,可想而知,這會引入噪聲。
DeepLab非常優雅的做法:將pooling的stride改為1,再加上 1 padding。這樣池化後的圖片尺寸並未減小,並且依然保留了池化整合特徵的特性。
因為池化層變了,後面的卷積的感受野也對應的改變了,這樣也不能進行fine-tune了。所以,Deeplab提出了一種新的卷積,帶孔的卷積:Atrous Convolution.

.

延伸一:Pixel Objectness —— 更好的自動摳圖、影象檢索、影象重定向技術

論文《Pixel Objectness》提出了一個用於前景物件分割的端到端學習框架。給定一個單一的新穎影象,我們的方法為所有“像物件”區域 - 即使對於在訓練期間從未見過的物件類別,產生畫素級掩碼。我們將任務制定為使用深完全卷積網路實現的將前景/背景標籤分配給每個畫素的結構化預測問題。

我們的想法的關鍵是採用訓練與影象級物件類別示例,以及採用相對較少的註釋的邊界級影象合。我們的方法大大改善了ImageNet和MIT資料集上的前景分割的最先進的水平 - 在某些情況下,有19%的絕對改進。此外,在超過100萬的影象,我們顯示它很好地歸納到用於訓練的前景地圖中看不見的物件類別。
最後,我們演示了我們的方法如何有利於影象檢索和影象重定向,這兩種方法在給定的高質量前景圖的領域將會有好的效果。

延伸二:一些前沿方法

1、多尺度整合

這個方法在前一段時間是 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

2、多級整合——RefineNet

這個方法在前一段時間是 PASCAL VOC 2012 排行榜上的第三,現在的第四。本方法主要想解決的限制是:多階段的卷積池化會降低最後預測結果圖片的尺寸,從而損失很多精細結構資訊。

現有方法的解決辦法:

反捲積作為上取樣的操作
反捲積不能恢復低層的特徵,畢竟已經丟失了
Atrous Convolution (Deeplab提出的)
帶孔卷積的提出就是為了生成高解析度的 feature map,但是計算代價和儲存代價較高
利用中間層的特徵
最早的 FCN-8S 就是這樣做的,但是始終還是缺少強的空間資訊

作者主張所有層的特徵都是有用的,高層特徵有助於類別識別,低層特徵有助於生成精細的邊界。所以有了接下來的網路結構,說實話我是覺得有點複雜。

.

現有的主流例項分割方法,幾乎都是在常用的物體檢測方法的基礎上進行簡單直接的擴充套件,對於問題的理解還不夠深入,計算效率和精確度都還有很大的提升空間。

例如,對於興趣區域(Region of Interests, RoI)的分類和分割作為單獨的兩個步驟進行,沒有充分利用這兩個任務的關聯性;對於分割子網路的訓練沒有考慮物體類別的差異;對於每個 RoI 執行一個分割子網路導致計算效率低下;RoI Pooling 應該用更精確的對齊方式……
這裡寫圖片描述