午夜视频在线网站,日韩视频精品在线,中文字幕精品一区二区三区在线,在线播放精品,1024你懂我懂的旧版人,欧美日韩一级黄色片,一区二区三区在线观看视频

分享

圖像語(yǔ)義分割之FCN和CRF

 cjcsu 2017-02-23

前言

(嘔血制作?。?前幾天剛好做了個(gè)圖像語(yǔ)義分割的匯報(bào),把最近看的論文和一些想法講了一下。所以今天就把它總結(jié)成文章啦,方便大家一起討論討論。本文只是展示了一些比較經(jīng)典和自己覺(jué)得比較不錯(cuò)的結(jié)構(gòu),畢竟這方面還是有挺多的結(jié)構(gòu)方法了。

介紹

圖像語(yǔ)義分割,簡(jiǎn)單而言就是給定一張圖片,對(duì)圖片上的每一個(gè)像素點(diǎn)分類

從圖像上來(lái)看,就是我們需要將實(shí)際的場(chǎng)景圖分割成下面的分割圖:

分割圖
不同顏色代表不同類別。

經(jīng)過(guò)我閱讀“大量”論文(羞澀)和查看Pascal VOC 2012 Learderboard,我發(fā)現(xiàn)圖像語(yǔ)義分割從深度學(xué)習(xí)引入這個(gè)任務(wù)(FCN)到現(xiàn)在而言,一個(gè)通用的框架已經(jīng)大概確定了。即:

Created with Rapha?l 2.1.0原圖FCNCRF/MRF分割圖
  • FCN-全卷積網(wǎng)絡(luò)
  • CRF-條件隨機(jī)場(chǎng)
  • MRF-馬爾科夫隨機(jī)場(chǎng)

前端使用FCN進(jìn)行特征粗提取,后端使用CRF/MRF優(yōu)化前端的輸出,最后得到分割圖。

接下來(lái),我會(huì)從前端和后端兩部分進(jìn)行總結(jié)。

前端

為什么需要FCN

我們分類使用的網(wǎng)絡(luò)通常會(huì)在最后連接幾層全連接層,它會(huì)將原來(lái)二維的矩陣(圖片)壓扁成一維的,從而丟失了空間信息,最后訓(xùn)練輸出一個(gè)標(biāo)量,這就是我們的分類結(jié)果。

而圖像語(yǔ)義分割的輸出需要是個(gè)分割圖,且不論尺寸大小,但是至少是二維的。所以,我們需要丟棄全連接層,換上全卷積層,而這就是全卷積網(wǎng)絡(luò)了。具體定義請(qǐng)參看論文:Fully Convolutional Networks for Semantic Segmentation

前端結(jié)構(gòu)

FCN

此處的FCN特指Fully Convolutional Networks for Semantic Segmentation論文中提出的結(jié)構(gòu),而非廣義的全卷積網(wǎng)絡(luò)。

作者的FCN主要使用了三種技術(shù):

  • 卷積化(Convolutional)
  • 上采樣(Upsample)
  • 跳躍結(jié)構(gòu)(Skip Layer)

卷積化

卷積化即是將普通的分類網(wǎng)絡(luò),比如VGG16,ResNet50/101等網(wǎng)絡(luò)丟棄全連接層,換上對(duì)應(yīng)的卷積層即可。如下圖:
這里寫(xiě)圖片描述

上采樣

此處的上采樣即是反卷積(Deconvolution)。當(dāng)然關(guān)于這個(gè)名字不同框架不同,Caffe和Kera里叫Deconvolution,而tensorflow里叫conv_transpose。CS231n這門(mén)課中說(shuō),叫conv_transpose更為合適。

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

反卷積和卷積類似,都是相乘相加的運(yùn)算。只不過(guò)后者是多對(duì)一,前者是一對(duì)多。而反卷積的前向和后向傳播,只用顛倒卷積的前后向傳播即可。所以無(wú)論優(yōu)化還是后向傳播算法都是沒(méi)有問(wèn)題。圖解如下:

這里寫(xiě)圖片描述

但是,雖然文中說(shuō)是可學(xué)習(xí)的反卷積,但是作者實(shí)際代碼并沒(méi)有讓它學(xué)習(xí),可能正是因?yàn)檫@個(gè)一對(duì)多的邏輯關(guān)系。代碼如下:

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
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

可以看到lr_mult被設(shè)置為了0.

跳躍結(jié)構(gòu)

(這個(gè)奇怪的名字是我翻譯的,好像一般叫忽略連接結(jié)構(gòu))這個(gè)結(jié)構(gòu)的作用就在于優(yōu)化結(jié)果,因?yàn)槿绻麑⑷矸e之后的結(jié)果直接上采樣得到的結(jié)果是很粗糙的,所以作者將不同池化層的結(jié)果進(jìn)行上采樣之后來(lái)優(yōu)化輸出。具體結(jié)構(gòu)如下:

這里寫(xiě)圖片描述

而不同上采樣結(jié)構(gòu)得到的結(jié)果對(duì)比如下:
這里寫(xiě)圖片描述

當(dāng)然,你也可以將pool1, pool2的輸出再上采樣輸出。不過(guò),作者說(shuō)了這樣得到的結(jié)果提升并不大。
這是第一種結(jié)構(gòu),也是深度學(xué)習(xí)應(yīng)用于圖像語(yǔ)義分割的開(kāi)山之作,所以得了CVPR2015的最佳論文。但是,還是有一些處理比較粗糙的地方,具體和后面對(duì)比就知道了。

SegNet/DeconvNet

這樣的結(jié)構(gòu)總結(jié)在這兒,只是我覺(jué)得結(jié)構(gòu)上比較優(yōu)雅,它得到的結(jié)果不一定比上一種好。

SegNet

這里寫(xiě)圖片描述

DeconvNet

這里寫(xiě)圖片描述

這樣的對(duì)稱結(jié)構(gòu)有種自編碼器的感覺(jué)在里面,先編碼再解碼。這樣的結(jié)構(gòu)主要使用了反卷積和上池化。即:
這里寫(xiě)圖片描述
這里寫(xiě)圖片描述

反卷積如上。而上池化的實(shí)現(xiàn)主要在于池化時(shí)記住輸出值的位置,在上池化時(shí)再將這個(gè)值填回原來(lái)的位置,其他位置填0即OK。

DeepLab

接下來(lái)介紹一個(gè)很成熟優(yōu)雅的結(jié)構(gòu),以至于現(xiàn)在的很多改進(jìn)是基于這個(gè)網(wǎng)絡(luò)結(jié)構(gòu)的進(jìn)行的。

首先這里我們將指出一個(gè)第一個(gè)結(jié)構(gòu)FCN的粗糙之處:為了保證之后輸出的尺寸不至于太小,F(xiàn)CN的作者在第一層直接對(duì)原圖加了100的padding,可想而知,這會(huì)引入噪聲。

而怎樣才能保證輸出的尺寸不會(huì)太小而又不會(huì)產(chǎn)生加100padding這樣的做法呢?可能有人會(huì)說(shuō)減少池化層不就行了,這樣理論上是可以的,但是這樣直接就改變了原先可用的結(jié)構(gòu)了,而且最重要的一點(diǎn)是就不能用以前的結(jié)構(gòu)參數(shù)進(jìn)行fine-tune了。所以,Deeplab這里使用了一個(gè)非常優(yōu)雅的做法:將pooling的stride改為1,再加上1padding。這樣池化后的圖片尺寸并未減小,并且依然保留了池化整合特征的特性。

但是,事情還沒(méi)完。因?yàn)槌鼗瘜幼兞耍竺娴木矸e的感受野也對(duì)應(yīng)的改變了,這樣也不能進(jìn)行fine-tune了。所以,Deeplab提出了一種新的卷積,帶孔的卷積:Atrous Convolution.即:
這里寫(xiě)圖片描述

而具體的感受野變化如下:
這里寫(xiě)圖片描述

a為普通的池化的結(jié)果,b為“優(yōu)雅”池化的結(jié)果。我們?cè)O(shè)想在a上進(jìn)行卷積核尺寸為3的普通卷積,則對(duì)應(yīng)的感受野大小為7.而在b上進(jìn)行同樣的操作,對(duì)應(yīng)的感受野變?yōu)榱?.感受野減小了。但是如果使用hole為1的Atrous Convolution則感受野依然為7.所以,Atrous Convolution能夠保證這樣的池化后的感受野不變,從而可以fine tune,同時(shí)也能保證輸出的結(jié)果更加精細(xì)。即:

這里寫(xiě)圖片描述

總結(jié)

這里介紹了三種結(jié)構(gòu):FCN, SegNet/DeconvNet,DeepLab。當(dāng)然還有一些其他的結(jié)構(gòu)方法,比如有用RNN來(lái)做的,還有更有實(shí)際意義的weakly-supervised方法等等。

后端

終于到后端了,后端這里會(huì)講幾個(gè)場(chǎng),涉及到一些數(shù)學(xué)的東西。我的理解也不是特別深刻,所以歡迎吐槽。

全連接條件隨機(jī)場(chǎng)(DenseCRF)

對(duì)于每個(gè)像素i具有類別標(biāo)簽xi還有對(duì)應(yīng)的觀測(cè)值yi,這樣每個(gè)像素點(diǎn)作為節(jié)點(diǎn),像素與像素間的關(guān)系作為邊,即構(gòu)成了一個(gè)條件隨機(jī)場(chǎng)。而且我們通過(guò)觀測(cè)變量yi來(lái)推測(cè)像素i對(duì)應(yīng)的類別標(biāo)簽xi。條件隨機(jī)場(chǎng)如下:
這里寫(xiě)圖片描述

條件隨機(jī)場(chǎng)符合吉布斯分布:(此處的x即上面說(shuō)的觀測(cè)值)

P(X=x|I)=1Z(I)exp(?E(x|I))

其中的E(x|I)是能量函數(shù),為了簡(jiǎn)便,以下省略全局觀測(cè)I
E(x)=iΨu(xi)+i<jΨp(xi,xj)

其中的一元?jiǎng)莺瘮?shù)iΨu(xi)即來(lái)自于前端FCN的輸出。而二元?jiǎng)莺瘮?shù)如下:
Ψp(xi,xj)=u(xi,xj)m=1Mω(m)k(m)G(fi,fj)

二元?jiǎng)莺瘮?shù)就是描述像素點(diǎn)與像素點(diǎn)之間的關(guān)系,鼓勵(lì)相似像素分配相同的標(biāo)簽,而相差較大的像素分配不同標(biāo)簽,而這個(gè)“距離”的定義與顏色值和實(shí)際相對(duì)距離有關(guān)。所以這樣CRF能夠使圖片盡量在邊界處分割。而全連接條件隨機(jī)場(chǎng)的不同就在于,二元?jiǎng)莺瘮?shù)描述的是每一個(gè)像素與其他所有像素的關(guān)系,所以叫“全連接”。

關(guān)于這一堆公式大家隨意理解一下吧… …而直接計(jì)算這些公式是比較麻煩的(我想也麻煩),所以一般會(huì)使用平均場(chǎng)近似方法進(jìn)行計(jì)算。而平均場(chǎng)近似又是一堆公式,這里我就不給出了(我想大家也不太愿意看),原意了解的同學(xué)直接看論文吧。

CRFasRNN

最開(kāi)始使用DenseCRF是直接加在FCN的輸出后面,可想這樣是比較粗糙的。而且在深度學(xué)習(xí)中,我們都追求end-to-end的系統(tǒng),所以CRFasRNN這篇文章將DenseCRF真正結(jié)合進(jìn)了FCN中。這篇文章也使用了平均場(chǎng)近似的方法,因?yàn)榉纸獾拿恳徊蕉际且恍┫喑讼嗉拥挠?jì)算,和普通的加減(具體公式還是看論文吧),所以可以方便的把每一步描述成一層類似卷積的計(jì)算。這樣即可結(jié)合進(jìn)神經(jīng)網(wǎng)絡(luò)中,并且前后向傳播也不存在問(wèn)題。當(dāng)然,這里作者還將它進(jìn)行了迭代,不同次數(shù)的迭代得到的結(jié)果優(yōu)化程度也不同(一般取10以內(nèi)的迭代次數(shù)),所以文章才說(shuō)是as RNN。優(yōu)化結(jié)果如下:
這里寫(xiě)圖片描述

馬爾科夫隨機(jī)場(chǎng)(MRF)

在Deep Parsing Network中使用的是MRF,它的公式具體的定義和CRF類似,只不過(guò)作者對(duì)二元?jiǎng)莺瘮?shù)進(jìn)行了修改:

Ψ(yui,yvi)=k=1Kλkuk(i,u,j,v)?zNjd(j,z)pvz

其中,作者加入的λk為label context,因?yàn)?span role="textbox" aria-readonly="true">uk只是定義了兩個(gè)像素同時(shí)出現(xiàn)的頻率,而λk可以對(duì)一些情況進(jìn)行懲罰,比如,人可能在桌子旁邊,但是在桌子下面的可能性就更小一些。所以這個(gè)量可以學(xué)習(xí)不同情況出現(xiàn)的概率。而原來(lái)的距離d(i,j)只定義了兩個(gè)像素間的關(guān)系,作者在這兒加入了個(gè)triple penalty,即還引入了j附近的z,這樣描述三方關(guān)系便于得到更充足的局部上下文。具體結(jié)構(gòu)如下:
這里寫(xiě)圖片描述

這個(gè)結(jié)構(gòu)的優(yōu)點(diǎn)在于:

  • 將平均場(chǎng)構(gòu)造成了CNN
  • 聯(lián)合訓(xùn)練并且可以one-pass inference,而不用迭代

高斯條件隨機(jī)場(chǎng)(G-CRF)

這個(gè)結(jié)構(gòu)使用CNN分別來(lái)學(xué)習(xí)一元?jiǎng)莺瘮?shù)和二元?jiǎng)莺瘮?shù)。這樣的結(jié)構(gòu)是我們更喜歡的:
這里寫(xiě)圖片描述

而此中的能量函數(shù)又不同于之前:

E(x)=12xT(A+λI)x?Bx

而當(dāng)(A+λI)是對(duì)稱正定時(shí),求E(x)的最小值等于求解:
(A+λI)x=B

而G-CRF的優(yōu)點(diǎn)在于:

  • 二次能量有明確全局
  • 解線性簡(jiǎn)便很多

感悟

  • FCN更像一種技巧。隨著基本網(wǎng)絡(luò)(如VGG, ResNet)性能的提升而不斷進(jìn)步。
  • 深度學(xué)習(xí)+概率圖模型(GPM)是一種趨勢(shì)。其實(shí)DL說(shuō)白了就是進(jìn)行特征提取,而GPM能夠從數(shù)學(xué)理論很好的解釋事物本質(zhì)間的聯(lián)系。
  • 概率圖模型的網(wǎng)絡(luò)化。因?yàn)镚PM通常不太方便加入DL的模型中,將GPM網(wǎng)絡(luò)化后能夠是GPM參數(shù)自學(xué)習(xí),同時(shí)構(gòu)成end-to-end的系統(tǒng)。

完結(jié)撒花

引用

[1]Fully Convolutional Networks for Semantic Segmentation
[2]Learning Deconvolution Network for Semantic Segmentation
[3]SegNet
[4]Efficient Inference in Fully Connected CRFs with Gaussian Edge Potentials
[5]Semantic Image Segmentation with Deep Convolutional Nets and Fully Connected CRFs
[6]Conditional Random Fields as Recurrent Neural Networks
[7]DeepLab: Semantic Image Segmentation with Deep Convolutional Nets, Atrous Convolution,
and Fully Connected CRFs

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

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多