FCN:Fully Convolutional Networks for Semantic Segmentation

image

github:https://github.com/shelhamer/fcn.berkeleyvision.org

圖像語義分割,就是給定一張圖片,對圖片上的每一個(gè)像素點(diǎn)分類。上圖就是我們需要將實(shí)際的場景圖分割成的分割圖。不同顏色代表不同類別。 當(dāng)下流行的各種模型表現(xiàn)可以通過PASCAL VOC Challenge performance evaluation server查看。大部分的語義分割模型都是前端使用FCN進(jìn)行特征粗提取,后端使用CRF/MRF(條件隨機(jī)場)優(yōu)化前端的輸出,最后得到分割圖。

為什么需要FCN?

圖像語義分割的輸出需要是個(gè)分割圖,所以,我們需要丟棄全連接層,換上全卷積層,而這就是全卷積網(wǎng)絡(luò)了。具體定義請參看論文:Fully Convolutional Networks for Semantic Segmentation

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

此處的FCN特指Fully Convolutional Networks for Semantic Segmentation論文中提出的結(jié)構(gòu),而非廣義的全卷積網(wǎng)絡(luò)。作者的FCN主要使用了三種技術(shù):

  • 不含全連接層(fc)的全卷積(fully conv)網(wǎng)絡(luò)??蛇m應(yīng)任意尺寸輸入。
  • 增大數(shù)據(jù)尺寸的反卷積(deconv)層。能夠輸出精細(xì)的結(jié)果。
  • 結(jié)合不同深度層結(jié)果的跳級(skip)結(jié)構(gòu)。同時(shí)確保魯棒性和精確性。
image

輸入可為任意尺寸圖像彩色圖像;輸出與輸入尺寸相同,深度為:20類目標(biāo)+背景=21。(在PASCAL數(shù)據(jù)集上進(jìn)行的,PASCAL一共20類)。

  1. 虛線上半部分為全卷積網(wǎng)絡(luò)。(藍(lán):卷積,綠:max pooling)。對于不同尺寸的輸入圖像,各層數(shù)據(jù)的尺寸(height,width)相應(yīng)變化,深度(channel)不變。
  2. 虛線下半部分中,分別從卷積網(wǎng)絡(luò)的不同階段,以卷積層(藍(lán)色×3)預(yù)測深度為21的分類結(jié)果。

1. 全卷積層

全連接層和卷積層之間唯一的不同就是卷積層中的神經(jīng)元只與輸入數(shù)據(jù)中的一個(gè)局部區(qū)域連接,并且在卷積列中的神經(jīng)元共享參數(shù)。然而在兩類層中,神經(jīng)元都是計(jì)算點(diǎn)積,所以它們的函數(shù)形式是一樣的。

[圖片上傳失敗...(image-b1e081-1553237577420)]

上圖是一個(gè)全卷積層,CNN中輸入的圖像大小是統(tǒng)一固定成 227x227 大小的圖像,第一層pooling后為55x55,第二層pooling后圖像大小為27x27,第五層pooling后的圖像大小為1313。而FCN輸入的圖像是HW大小,第一層pooling后變?yōu)樵瓐D大小的1/4,第二層變?yōu)樵瓐D大小的1/8,第五層變?yōu)樵瓐D大小的1/16,第八層變?yōu)樵瓐D大小的1/32(勘誤:其實(shí)真正代碼當(dāng)中第一層是1/2,以此類推)。

[圖片上傳失敗...(image-bcfd01-1553237577420)]

經(jīng)過多次卷積和pooling以后,得到的圖像越來越小,分辨率越來越低。其中圖像到 H/32?W/32 的時(shí)候圖片是最小的一層時(shí),所產(chǎn)生圖叫做heatmap熱圖,熱圖就是我們最重要的高維特征圖,得到高維特征的heatmap之后就是最重要的一步也是最后的一步對原圖像進(jìn)行upsampling,把圖像進(jìn)行放大、放大、放大,到原圖像的大小。

2. 反卷積

此處的反卷積即是上采樣(Deconvolution)。Caffe和Kera里叫Deconvolution,而tensorflow里叫conv_transpose。CS231n這門課中說,叫conv_transpose更為合適。普通的池化會縮小圖片的尺寸,比如VGG16 五次池化后圖片被縮小了32倍。為了得到和原圖等大的分割圖,我們需要上采樣/反卷積。

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

image

目前使用得最多的deconvolution有2種,

  • full卷積, 完整的卷積可以使得原來的定義域變大
  • 記錄pooling index,然后擴(kuò)大空間,再用卷積填充
image

輸入:2x2, 卷積核:4x4, 滑動步長:3, 輸出:7x7

  1. 輸入圖片每個(gè)像素進(jìn)行一次full卷積,根據(jù)full卷積大小計(jì)算可以知道每個(gè)像素的卷積后大小為 1+4-1=4, 即4x4大小的特征圖,輸入有4個(gè)像素所以4個(gè)4x4的特征圖
  2. 將4個(gè)特征圖進(jìn)行步長為3的fusion(即相加); 例如紅色的特征圖仍然是在原來輸入位置(左上角),綠色還是在原來的位置(右上角),步長為3是指每隔3個(gè)像素進(jìn)行fusion,重疊部分進(jìn)行相加,即輸出的第1行第4列是由紅色特陣圖的第一行第四列與綠色特征圖的第一行第一列相加得到,其他如此類推。

可以看出反卷積的大小是由卷積核大小與滑動步長決定, in是輸入大小, k是卷積核大小, s是滑動步長, out是輸出大小得到 out = (in - 1) * s + k,上圖過程就是, (2 - 1) * 3 + 4 = 7

這里的步長也可以這樣理解 當(dāng)stride =1 時(shí),如下的左圖,當(dāng)stride=2時(shí),如下的右圖

3.跳級結(jié)構(gòu)

image是原圖像,conv1,conv2..,conv5為卷積操作,pool1,pool2,..pool5為pool操作,注意con6-7是最后的卷積層,最右邊一列是upsample后的end to end結(jié)果。必須說明的是圖中nx是指對應(yīng)的特征圖上采樣n倍(即變大n倍),如32x upsampled 中的32x是圖像只變大32倍,不是有32個(gè)上采樣圖像,又如2x conv7是指conv7的特征圖變大2倍。

第一行對應(yīng)FCN-32s,第二行對應(yīng)FCN-16s,第三行對應(yīng)FCN-8s。

  1. 先從FCN-32s開始說明upsample過程,只需要留意第一行,網(wǎng)絡(luò)里面有5個(gè)pool,所以conv7的特征圖是原始圖像1/32,可以發(fā)現(xiàn)最左邊image的是32 x 32,同時(shí)我們知道在FCN中的卷積是不會改變圖像大?。ɑ蛘咧挥猩倭肯袼氐臏p少,特征圖大小基本不會小很多),得到pool1是16 x 16,pool2是8 x 8,pool3是4 x 4,pool4是2 x 2,pool5是1 x 1,所以conv7對應(yīng)特征圖大小為1 x 1,然后再經(jīng)過32x upsampled prediction 圖片變回32x32。FCN作者在這里增加一個(gè)卷積層,卷積后的大小為輸入圖像的32(2^5)倍,我們簡單假設(shè)這個(gè)卷積核大小也為32,這樣就是需要通過反饋訓(xùn)練32x32個(gè)權(quán)重變量即可讓圖像實(shí)現(xiàn)end to end,完成了一個(gè)32s的upsample,F(xiàn)CN作者稱做反卷積。事實(shí)上在源碼中卷積核的大小為64,同時(shí)沒有偏置bias。還有一點(diǎn)就是FCN論文中最后結(jié)果都是21x…,這里的21是指FCN使用的數(shù)據(jù)集分類,總共有21類。

  2. 現(xiàn)在我們把1,2行一起看,忽略32x upsampled prediction,先說明FCN-16s的upsample過程,F(xiàn)CN作者在conv7先進(jìn)行一個(gè)2x conv7操作,其實(shí)這里也只是增加1個(gè)卷積層,這次卷積后特征圖的大小為conv7的2倍,可以從pool5與2x conv7中看出來,此時(shí)2x conv7與pool4的大小是一樣的,F(xiàn)CN作者提出對pool4與2x conv7進(jìn)行一個(gè)fuse操作(事實(shí)上就是將pool4與2x conv7相加),fuse結(jié)果進(jìn)行16x upsampled prediction,與FCN-32s一樣,也是增加一個(gè)卷積層,卷積后的大小為輸入圖像的16(2^4)倍,我們知道pool4的大小是2x2,放大16倍,就是32x32,這樣最后圖像大小也變?yōu)樵瓉淼拇笮?,至此完成了一個(gè)16s的upsample?,F(xiàn)在我們可以知道,F(xiàn)CN中的upsample實(shí)際是通過增加卷積層,通過bp反饋的訓(xùn)練方法訓(xùn)練卷積層達(dá)到end to end,這時(shí)卷積層的作用可以看作是pool的逆過程。

  3. 這時(shí)我們看第2行與第3行,忽略32x upsampled prediction,conv7經(jīng)過一次4x upsample,即使用一個(gè)卷積層,特征圖輸出大小為conv7的4倍,所以4x conv7的大小為4x4,然后pool4需要一次2x upsample,變成2x pool4,大小也為4x4,最后吧4x conv7,2x pool4與pool3進(jìn)行fuse,得到求和后的特征圖,最后增加一個(gè)卷積層,使得輸出圖片大小為pool3的8倍,也就是8x upsampled prediction的過程,最后也得到一個(gè)end to end的圖像。同時(shí)FCN-8s均優(yōu)于FCN-16s,F(xiàn)CN-32s。

我們可以發(fā)現(xiàn),如果繼續(xù)仿照FCN作者的步驟,我們可以對pool2,pool1實(shí)現(xiàn)同樣的方法,可以有FCN-4s,F(xiàn)CN-2s,最后得到end to end的輸出。這里作者給出了明確的結(jié)論,超過FCN-8s之后,結(jié)果并不能繼續(xù)優(yōu)化。結(jié)合上述的FCN的全卷積與upsample,在upsample最后加上softmax,就可以對不同類別的大小概率進(jìn)行估計(jì),實(shí)現(xiàn)end to end,最后輸出的圖是一個(gè)概率估計(jì),對應(yīng)像素點(diǎn)的值越大,其像素為該類的結(jié)果也越大。

網(wǎng)絡(luò)訓(xùn)練

第一階段

以經(jīng)典的分類網(wǎng)絡(luò)為初始化。最后兩級是全連接(紅色),參數(shù)棄去不用。

第二階段

從特征小圖(16 x 16 x 4096)預(yù)測分割小圖(16 x 16 x 21),之后直接升采樣為大圖。
反卷積(橙色)的步長為32,這個(gè)網(wǎng)絡(luò)稱為FCN-32s。

第三階段

反卷積分為兩次完成(橙色×2)。
在第二次升采樣前,把第4個(gè)pooling層(綠色)的預(yù)測結(jié)果(藍(lán)色)融合進(jìn)來。使用跳級結(jié)構(gòu)提升精確性。
第二次反卷積步長為16,這個(gè)網(wǎng)絡(luò)稱為FCN-16s。

第四階段

升采樣分為三次完成(橙色×3)。
進(jìn)一步融合了第3個(gè)pooling層的預(yù)測結(jié)果。 第三次反卷積步長為8,記為FCN-8s。

較淺層的預(yù)測結(jié)果包含了更多細(xì)節(jié)信息。比較2,3,4階段可以看出,跳級結(jié)構(gòu)利用淺層信息輔助逐步升采樣,有更精細(xì)的結(jié)果。

缺點(diǎn)

  1. 是得到的結(jié)果還是不夠精細(xì)。進(jìn)行8倍上采樣雖然比32倍的效果好了很多,但是上采樣的結(jié)果還是比較模糊和平滑,對圖像中的細(xì)節(jié)不敏感。
  2. 是對各個(gè)像素進(jìn)行分類,沒有充分考慮像素與像素之間的關(guān)系。忽略了在通常的基于像素分類的分割方法中使用的空間規(guī)整(spatial regularization)步驟,缺乏空間一致性。
  3. 使用了較淺層的特征,因?yàn)閒use操作會加上較上層的pool特征值,導(dǎo)致高維特征不能很好得以使用,同時(shí)也因?yàn)槭褂幂^上層的pool特征值,導(dǎo)致FCN對圖像大小變化有所要求,如果測試集的圖像遠(yuǎn)大于或小于訓(xùn)練集的圖像,F(xiàn)CN的效果就會變差。

[參考鏈接]
https://zhuanlan.zhihu.com/p/22308032
http://www.cnblogs.com/gujianhan/p/6030639.html
https://blog.csdn.net/gyh_420/article/details/78570415
https://blog.csdn.net/qq_36269513/article/details/80420363
https://zhuanlan.zhihu.com/p/22976342

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容