論文筆記之Fully Convolutional Networks for Semantic Segmentation

最近了解到了Image Semantic Segmentation方面的知識,在此做一個記錄。
這篇論文是2015cvpr的best paper,可以說是在cnn上做圖像語義分割的開山之作。

1.語義分割定義:

語義就是指物體的類別,即屬於同一類別的物體都算作一類

比如圖像中的3個人算作一類,5輛汽車算作一類等,它們都屬於同一類別,即“人類”、“汽車”

一般規定要進行分割的n個類別的物體(即我們重點關注的一些物體),剩餘物體屬於背景類別。所以一共有n+1個類別

語義分割就是對“每個像素點進行分類”,即每個像素點屬於n+1個類別中的某一類。比如:Image中所有的人的像素點都屬於“人”這個類別,所有的汽車的像素點都屬於“汽車”這個類別。

在這裏需要區別的兩種分割任務:
semantic segmentation - 只標記語義。下圖中。
instance segmentation - 標記實例和語義。下圖右。
本文研究第一種:語義分割
這裏寫圖片描述

2.基本思路

將vgg,alexnet或者GoogLeNet等訓練好的網絡的最後幾層全連接層改成全卷積層,再做反捲積,得到一個與輸入大小一樣的map,在這張map上做pixelwise classification。拿segmentation 的 ground truth作爲監督信息,進行訓練。
如圖所示:
這裏寫圖片描述

3主要就是以下幾個內容:

1.拿vgg或者其他現有的訓練好的模型進行fine-tune
2.將最後2層的全連接層全部改成卷積核爲1*1 全卷積層,channel數爲對應總共的類別數+1(背景)
3.對最後一層1*1的全卷積層的輸出進行deconvolution,輸出與原圖大小一樣的map,便於對每個peixl 進行classification。deconvolution時使用雙線性插值來初始化“轉置卷積核”,學習率爲0
4.增加了skip Architecture,增加前面pool層的信息進去,論文實驗分別對1個pool,2個pool,3個pool進行實驗,分別對應fcn-32s,fcn-16s,fcn-8s,實驗證明加入3個pool效果最好。稱爲fcn-8s 8指的是568/70=8


4網絡結構

這裏寫圖片描述

如圖所示
1)原始圖像是500*500,爲了使最後的輸出爲能夠得到一個更大的feature圖,便於deconvolution,因此人爲的在原圖上加了padding=100,(這樣的做法略顯粗糙,以後 改變stride+hole算法可以解決)

2.)pool5之前就是純粹的vgg網絡

3)pool5之後將原來的兩個4096的全連接層,改成1*1的卷積核生成的16*16*4096的map,channel數量爲4096

4)對於最後一個16*16*4096的在用一個1*1的卷積核去卷積,channel=21 得到16*16*21的map,稱爲coarse score map1

5)coarse score map1進行反捲積(bilinear插值上採樣)得到34*34*21的map

6)同時pool4層也通過1*1的卷積變成x4*x4*21的map再通過crop變成34*34*21的map,稱爲coarse score map2

7)將第5步和第六步的map對應疊加,再進行反捲積(bilinear插值上採樣)得到70*70*21的map
8)同理對pool3進行操作得到70*70*21的map與第七步的疊加,再進行反捲積(bilinear插值上採樣)得到568*568*21的map

9)最後對568*568*21的map進行crop,變成500*500的圖片,然後進行peixl classification ,總共500*500個像素,每個像素有21個值分別表示爲對應類別的概率,取至最大的概率對應的類別作爲這個像素的類別即可。

5反捲積

一般有兩種實現方法:
1)思路就是:一個函數y=wx,那麼求x=y/w,然後將這個想法應用到卷積和反捲積上即可,示意圖如下:
卷積:
這裏寫圖片描述
反捲積:
這裏寫圖片描述這裏寫圖片描述
**

=[x1,x2,x3,x4]

**

2)對於輸入加padding,使得其變成一個較大的map,進行卷積,不過反捲積的權值設置還需得和卷積時的權值對應上示意圖如下:
這裏寫圖片描述
總結一下:
論文主要是採用了1*1的卷積核進行學習,改變channel,分然反捲積進行上採樣,並在此過程中加入之前pool的信息,以期學得更多內容。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章