天天看點

FCN/MRF圖像語義分割與馬克爾夫随機場

參考自知乎作者:困獸 連結:https://zhuanlan.zhihu.com/p/22308032

前言

(嘔血制作啊!)前幾天剛好做了個圖像語義分割的彙報,把最近看的論文和一些想法講了一下。是以今天就把它總結成文章啦,友善大家一起讨論讨論。本文隻是展示了一些比較經典和自己覺得比較不錯的結構,畢竟這方面還是有挺多的結構方法了。

介紹

圖像語義分割,簡單而言就是給定一張圖檔,對圖檔上的每一個像素點分類

從圖像上來看,就是我們需要将實際的場景圖分割成下面的分割圖:

FCN/MRF圖像語義分割與馬克爾夫随機場

不同顔色代表不同類别。經過我閱讀“大量”論文(羞澀)和檢視PASCAL VOC Challenge performance evaluation server

我發現圖像語義分割從深度學習引入這個任務(FCN)到現在而言,一個通用的架構已經大概确定了。即:

FCN/MRF圖像語義分割與馬克爾夫随機場
  • FCN-全卷積網絡
  • CRF-條件随機場
  • MRF-馬爾科夫随機場

前端使用FCN進行特征粗提取,後端使用CRF/MRF優化前端的輸出,最後得到分割圖。

接下來,我會從前端和後端兩部分進行總結。

前端

為什麼需要FCN?

我們分類使用的網絡通常會在最後連接配接幾層全連接配接層,它會将原來二維的矩陣(圖檔)壓扁成一維的,進而丢失了空間資訊,最後訓練輸出一個标量,這就是我們的分類标簽。

而圖像語義分割的輸出需要是個分割圖,且不論尺寸大小,但是至少是二維的。是以,我們需要丢棄全連接配接層,換上全卷積層,而這就是全卷積網絡了。

具體定義請參看論文:Fully Convolutional Networks for Semantic Segmentation

前端結構

FCN

此處的FCN特指Fully Convolutional Networks for Semantic Segmentation論文中提出的結構,而非廣義的全卷積網絡。

作者的FCN主要使用了三種技術:

  • 卷積化(Convolutional)
  • 上采樣(Upsample)
  • 跳躍結構(Skip Layer)

卷積化

卷積化即是将普通的分類網絡,比如VGG16,ResNet50/101等網絡丢棄全連接配接層,換上對應的卷積層即可。

FCN/MRF圖像語義分割與馬克爾夫随機場

上采樣

此處的上采樣即是反卷積(Deconvolution)。當然關于這個名字不同架構不同,Caffe和Kera裡叫Deconvolution,而tensorflow裡叫conv_transpose。CS231n這門課中說,叫conv_transpose更為合适。

衆所諸知,普通的池化(為什麼這兒是普通的池化請看後文)會縮小圖檔的尺寸,比如VGG16 五次池化後圖檔被縮小了32倍。為了得到和原圖等大的分割圖,我們需要上采樣/反卷積。

反卷積和卷積類似,都是相乘相加的運算。隻不過後者是多對一,前者是一對多。而反卷積的前向和後向傳播,隻用颠倒卷積的前後向傳播即可。是以無論優化還是後向傳播算法都是沒有問題。圖解如下:

FCN/MRF圖像語義分割與馬克爾夫随機場

但是,雖然文中說是可學習的反卷積,但是作者實際代碼并沒有讓它學習,可能正是因為這個一對多的邏輯關系。代碼如下:

layer {
  name: "upscore"
  type: "Deconvolution"
  bottom: "score_fr"
  top: "upscore"
  param {
    lr_mult: 0
  }
  convolution_param {
    num_output: 21
    bias_term: false
    kernel_size: 64
    stride: 32
  }
}
           

可以看到lr_mult被設定為了0.

跳躍結構

(這個奇怪的名字是我翻譯的,好像一般叫忽略連接配接結構)這個結構的作用就在于優化結果,因為如果将全卷積之後的結果直接上采樣得到的結果是很粗糙的,是以作者将不同池化層的結果進行上采樣之後來優化輸出。具體結構如下:

FCN/MRF圖像語義分割與馬克爾夫随機場

而不同上采樣結構得到的結果對比如下:

FCN/MRF圖像語義分割與馬克爾夫随機場

當然,你也可以将pool1, pool2的輸出再上采樣輸出。不過,作者說了這樣得到的結果提升并不大。

這是第一種結構,也是深度學習應用于圖像語義分割的開山之作,是以得了CVPR2015的最佳論文。但是,還是有一些處理比較粗糙的地方,具體和後面對比就知道了。

SegNet/DeconvNet

這樣的結構總結在這兒,隻是我覺得結構上比較優雅,它得到的結果不一定比上一種好。

SegNet

FCN/MRF圖像語義分割與馬克爾夫随機場

DeconvNet

FCN/MRF圖像語義分割與馬克爾夫随機場

這樣的對稱結構有種自編碼器的感覺在裡面,先編碼再解碼。這樣的結構主要使用了反卷積和上池化。即:

FCN/MRF圖像語義分割與馬克爾夫随機場
FCN/MRF圖像語義分割與馬克爾夫随機場

反卷積如上。而上池化的實作主要在于池化時記住輸出值的位置,在上池化時再将這個值填回原來的位置,其他位置填0即OK。

DeepLab

接下來介紹一個很成熟優雅的結構,以至于現在的很多改進是基于這個網絡結構的進行的。

首先這裡我們将指出一個第一個結構FCN的粗糙之處:為了保證之後輸出的尺寸不至于太小,FCN的作者在第一層直接對原圖加了100的padding,可想而知,這會引入噪聲。

而怎樣才能保證輸出的尺寸不會太小而又不會産生加100 padding這樣的做法呢?可能有人會說減少池化層不就行了,這樣理論上是可以的,但是這樣直接就改變了原先可用的結構了,而且最重要的一點是就不能用以前的結構參數進行fine-tune了。是以,Deeplab這裡使用了一個非常優雅的做法:将pooling的stride改為1,再加上 1 padding。這樣池化後的圖檔尺寸并未減小,并且依然保留了池化整合特征的特性。

但是,事情還沒完。因為池化層變了,後面的卷積的感受野也對應的改變了,這樣也不能進行fine-tune了。是以,Deeplab提出了一種新的卷積,帶孔的卷積:Atrous Convolution.即:

FCN/MRF圖像語義分割與馬克爾夫随機場

而具體的感受野變化如下:

FCN/MRF圖像語義分割與馬克爾夫随機場

a為普通的池化的結果,b為“優雅”池化的結果。我們設想在a上進行卷積核尺寸為3的普通卷積,則對應的感受野大小為7.而在b上進行同樣的操作,對應的感受野變為了5.感受野減小了。但是如果使用hole為1的Atrous Convolution則感受野依然為7.

是以,Atrous Convolution能夠保證這樣的池化後的感受野不變,進而可以fine tune,同時也能保證輸出的結果更加精細。即:

FCN/MRF圖像語義分割與馬克爾夫随機場

總結

這裡介紹了三種結構:FCN, SegNet/DeconvNet,DeepLab。當然還有一些其他的結構方法,比如有用RNN來做的,還有更有實際意義的weakly-supervised方法等等。

後端

終于到後端了,後端這裡會講幾個場,涉及到一些數學的東西。我的了解也不是特别深刻,是以歡迎吐槽。

全連接配接條件随機場(DenseCRF)

對于每個像素

FCN/MRF圖像語義分割與馬克爾夫随機場

具有類别标簽

FCN/MRF圖像語義分割與馬克爾夫随機場

還有對應的觀測值

FCN/MRF圖像語義分割與馬克爾夫随機場

,這樣每個像素點作為節點,像素與像素間的關系作為邊,即構成了一個條件随機場。而且我們通過觀測變量

FCN/MRF圖像語義分割與馬克爾夫随機場

來推測像素

FCN/MRF圖像語義分割與馬克爾夫随機場

對應的類别标簽

FCN/MRF圖像語義分割與馬克爾夫随機場

。條件随機場如下:

FCN/MRF圖像語義分割與馬克爾夫随機場

條件随機場符合吉布斯分布:(此處的

FCN/MRF圖像語義分割與馬克爾夫随機場

即上面說的觀測值)

FCN/MRF圖像語義分割與馬克爾夫随機場

其中的

FCN/MRF圖像語義分割與馬克爾夫随機場

是能量函數,為了簡便,以下省略全局觀測

FCN/MRF圖像語義分割與馬克爾夫随機場

FCN/MRF圖像語義分割與馬克爾夫随機場

其中的一進制勢函數

FCN/MRF圖像語義分割與馬克爾夫随機場

即來自于前端FCN的輸出。而二進制勢函數如下:

FCN/MRF圖像語義分割與馬克爾夫随機場

二進制勢函數就是描述像素點與像素點之間的關系,鼓勵相似像素配置設定相同的标簽,而相差較大的像素配置設定不同标簽,而這個“距離”的定義與顔色值和實際相對距離有關。是以這樣CRF能夠使圖檔盡量在邊界處分割。

而全連接配接條件随機場的不同就在于,二進制勢函數描述的是每一個像素與其他所有像素的關系,是以叫“全連接配接”。

關于這一堆公式大家随意了解一下吧... ...而直接計算這些公式是比較麻煩的(我想也麻煩),是以一般會使用平均場近似方法進行計算。而平均場近似又是一堆公式,這裡我就不給出了(我想大家也不太願意看),願意了解的同學直接看論文吧。

CRFasRNN

最開始使用DenseCRF是直接加在FCN的輸出後面,可想這樣是比較粗糙的。而且在深度學習中,我們都追求end-to-end的系統,是以CRFasRNN這篇文章将DenseCRF真正結合進了FCN中。

這篇文章也使用了平均場近似的方法,因為分解的每一步都是一些相乘相加的計算,和普通的加減(具體公式還是看論文吧),是以可以友善的把每一步描述成一層類似卷積的計算。這樣即可結合進神經網絡中,并且前後向傳播也不存在問題。

當然,這裡作者還将它進行了疊代,不同次數的疊代得到的結果優化程度也不同(一般取10以内的疊代次數),是以文章才說是as RNN。優化結果如下:

FCN/MRF圖像語義分割與馬克爾夫随機場

馬爾科夫随機場(MRF)

在Deep Parsing Network中使用的是MRF,它的公式具體的定義和CRF類似,隻不過作者對二進制勢函數進行了修改:

FCN/MRF圖像語義分割與馬克爾夫随機場

其中,作者加入的

FCN/MRF圖像語義分割與馬克爾夫随機場

為label context,因為

FCN/MRF圖像語義分割與馬克爾夫随機場

隻是定義了兩個像素同時出現的頻率,而

FCN/MRF圖像語義分割與馬克爾夫随機場

可以對一些情況進行懲罰。

比如,人可能在桌子旁邊,但是在桌子下面的可能性就更小一些。是以這個量可以學習不同情況出現的機率。而原來的距離

FCN/MRF圖像語義分割與馬克爾夫随機場

隻定義了兩個像素間的關系,作者在這兒加入了個triple penalty,即還引入了

FCN/MRF圖像語義分割與馬克爾夫随機場

附近的

FCN/MRF圖像語義分割與馬克爾夫随機場

,這樣描述三方關系便于得到更充足的局部上下文。具體結構如下:

FCN/MRF圖像語義分割與馬克爾夫随機場

這個結構的優點在于:

  • 将平均場構造成了CNN
  • 聯合訓練并且可以one-pass inference,而不用疊代

高斯條件随機場(G-CRF)

這個結構使用CNN分别來學習一進制勢函數和二進制勢函數。這樣的結構是我們更喜歡的:

FCN/MRF圖像語義分割與馬克爾夫随機場

而此中的能量函數又不同于之前:

FCN/MRF圖像語義分割與馬克爾夫随機場

而當

FCN/MRF圖像語義分割與馬克爾夫随機場

是對稱正定時,求

FCN/MRF圖像語義分割與馬克爾夫随機場

的最小值等于求解:

FCN/MRF圖像語義分割與馬克爾夫随機場

而G-CRF的優點在于:

  • 二次能量有明确全局
  • 解線性簡便很多

感悟

  • FCN更像一種技巧。随着基本網絡(如VGG, ResNet)性能的提升而不斷進步。
  • 深度學習+機率圖模型(PGM)是一種趨勢。其實DL說白了就是進行特征提取,而PGM能夠從數學理論很好的解釋事物本質間的聯系。
  • 機率圖模型的網絡化。因為PGM通常不太友善加入DL的模型中,将PGM網絡化後能夠是PGM參數自學習,同時構成end-to-end的系統。

完結撒花

引用

[1]Fully Convolutional Networks for Semantic Segmentation

[2]Learning Deconvolution Network for Semantic Segmentation

[3]Efficient Inference in Fully Connected CRFs with Gaussian Edge Potentials

[4]Semantic Image Segmentation with Deep Convolutional Nets and Fully Connected CRFs

[5]Conditional Random Fields as Recurrent Neural Networks

[6]DeepLab: Semantic Image Segmentation with Deep Convolutional Nets, Atrous Convolution, and Fully Connected CRFs

[7]Semantic Image Segmentation via Deep Parsing Network

[8]Fast, Exact and Multi-Scale Inference for Semantic Image Segmentation with Deep Gaussian CRFs

[9]SegNet

繼續閱讀