接下來進入正文。
FCN是語義分割的鼻祖,在他出來之前像素級別的分割是個解決不了的問題。
FCN 的核心點
我們以Alexnet為例激才,他是把最后的三個全連接層都改成了卷積層,也是讓網(wǎng)絡(luò)從原來的標(biāo)簽信息额嘿,上升到了二維的圖像瘸恼,又通過最后的上采樣也就是轉(zhuǎn)置卷積,把最后的feature map(fcn中叫做heatmap)放到原來的倍數(shù)册养。
在傳統(tǒng)的cnn網(wǎng)絡(luò)模型中
通常cnn網(wǎng)絡(luò)在卷積之后會接上若干個全連接層东帅,將卷積層產(chǎn)生的特征圖(feature map)映射成為一個固定長度的特征向量。一般的CNN結(jié)構(gòu)適用于圖像級別的分類和回歸任務(wù)球拦,因為它們最后都期望得到輸入圖像的分類的概率靠闭,如ALexNet網(wǎng)絡(luò)最后輸出一個1000維的向量表示輸入圖像屬于每一類的概率。
與傳統(tǒng)的cnn網(wǎng)絡(luò)的
FCN對圖像進行像素級的分類坎炼,從而解決了語義級別的圖像分割問題阎毅。與經(jīng)典的CNN在卷積層使用全連接層得到固定長度的特征向量進行分類不同,F(xiàn)CN可以接受任意尺寸的輸入圖像点弯,采用反卷積層對最后一個卷基層的特征圖(feature map)進行上采樣扇调,使它恢復(fù)到輸入圖像相同的尺寸,從而可以對每一個像素都產(chǎn)生一個預(yù)測抢肛,同時保留了原始輸入圖像中的空間信息狼钮,最后奇偶在上采樣的特征圖進行像素的分類。
全卷積網(wǎng)絡(luò)(FCN)是從抽象的特征中恢復(fù)出每個像素所屬的類別捡絮。即從圖像級別的分類進一步延伸到像素級別的分類熬芜。
至于兩者的區(qū)別
- 就是FCN把CNN后邊的全連接換成了卷積層,并輸出一張已經(jīng)label好的圖
在網(wǎng)絡(luò)結(jié)構(gòu)中
全卷積提取特征
虛線上半部分為全卷積網(wǎng)絡(luò)福稳。(藍:卷積涎拉,綠:max pooling)。對于不同尺寸的輸入圖像,各層數(shù)據(jù)的尺寸(height鼓拧,width)相應(yīng)變化半火,深度(channel)不變。
這部分由深度學(xué)習(xí)分類問題中經(jīng)典網(wǎng)絡(luò)AlexNet1修改而來季俩。只不過钮糖,把最后兩個全連接層(fc)改成了卷積層。
在論文中是基于vgg16的模型精度是最高的酌住。
但是圖中截取的是Alexnet的網(wǎng)絡(luò)為主干進行改進的FCN
逐像素的預(yù)測
例如
第一個預(yù)測模塊
輸入店归,卷積模板尺寸,輸出酪我。
相當(dāng)于對每個像素施加一個全連接層消痛,從4096維特征,預(yù)測21類結(jié)果都哭。
怎么具體逐像素點預(yù)測分類的:
采用反卷積層對最后一個卷積層的feature map進行上采樣, 使它恢復(fù)到輸入圖像相同的尺寸秩伞,從而可以對每個像素都產(chǎn)生了一個預(yù)測, 同時保留了原始輸入圖像中的空間信息, 最后在上采樣的特征圖上進行逐像素分類。
具體過程:
經(jīng)過多次卷積和pooling以后质涛,得到的圖像越來越小稠歉,分辨率越來越低掰担。其中圖像到
最后的輸出是21張heatmap經(jīng)過upsampling變?yōu)樵瓐D大小的圖片汇陆,為了對每個像素進行分類預(yù)測label成最后已經(jīng)進行語義分割的圖像
這里有一個小trick,就是最后通過逐個像素地求其在21張圖像該像素位置的最大數(shù)值描述(概率)作為該像素的分類带饱。因此產(chǎn)生了一張已經(jīng)分類好的圖片毡代,如下圖右側(cè)有狗狗和貓貓的圖。
反卷積
這個在其他章節(jié)中講過
跳級鏈接
看到FCN的跳級連接我想到的就是FPN的結(jié)構(gòu)勺疼,當(dāng)然感覺FPN應(yīng)該是借鑒這里的教寂,不過他是最終融合了一張feature map 也就結(jié)合了低級的語義信息和高層抽象結(jié)果。
如下圖所示:對原圖進行卷積conv1执庐、pool1后圖像縮小為1/2酪耕;對圖像進行第二次卷積conv2、pool2后圖像縮小為1/4轨淌;對圖像進行第三次卷積conv3迂烁、pool3后圖像縮小為1/8,此時保留pool3的featuremap递鹉;對圖像進行第四次卷積conv4盟步、pool4后圖像縮小為1/16,此時保留pool4的featuremap躏结;對圖像進行第五次卷積conv5却盘、pool5后圖像縮小為1/32,然后把原來CNN操作過程中的全連接編程卷積操作的conv6、conv7黄橘,圖像的featuremap的大小依然為原圖的1/32,此時圖像不再叫featuremap而是叫heatmap兆览。
其實直接使用前兩種結(jié)構(gòu)就已經(jīng)可以得到結(jié)果了,這個上采樣是通過反卷積(deconvolution)實現(xiàn)的旬陡,對第五層的輸出(32倍放大)反卷積到原圖大小拓颓。但是得到的結(jié)果還上不不夠精確,一些細(xì)節(jié)無法恢復(fù)描孟。于是將第四層的輸出和第三層的輸出也依次反卷積驶睦,分別需要16倍和8倍上采樣,結(jié)果過也更精細(xì)一些了匿醒。這種做法的好處是兼顧了local和global信息场航。
整個訓(xùn)練過程
第一階段
以經(jīng)典的分類網(wǎng)絡(luò)為初始化。最后兩級是全連接(紅色)廉羔,參數(shù)棄去不用溉痢。
第2階段
從特征小圖(16164096)預(yù)測分割小圖(161621),之后直接升采樣為大圖憋他。
反卷積(橙色)的步長為32孩饼,這個網(wǎng)絡(luò)稱為FCN-32s台猴。
這一階段使用單GPU訓(xùn)練約需3天侦锯。
第三階段
升采樣分為兩次完成(橙色×2)。
在第二次升采樣前赞草,把第4個pooling層(綠色)的預(yù)測結(jié)果(藍色)融合進來揪罕。使用跳級結(jié)構(gòu)提升精確性梯码。
第二次反卷積步長為16,這個網(wǎng)絡(luò)稱為FCN-16s好啰。
這一階段使用單GPU訓(xùn)練約需1天轩娶。
第四階段
升采樣分為三次完成(橙色×3)。
進一步融合了第3個pooling層的預(yù)測結(jié)果框往。
第三次反卷積步長為8鳄抒,記為FCN-8s。
這一階段使用單GPU訓(xùn)練約需1天椰弊。
較淺層的預(yù)測結(jié)果包含了更多細(xì)節(jié)信息许溅。比較2,3,4階段可以看出,跳級結(jié)構(gòu)利用淺層信息輔助逐步升采樣男应,有更精細(xì)的結(jié)果闹司。
總體來說,本文的邏輯如下:
- 想要精確預(yù)測每個像素的分割結(jié)果
- 必須經(jīng)歷從大到小沐飘,再從小到大的兩個過程
- 在升采樣過程中游桩,分階段增大比一步到位效果更好
- 在升采樣的每個階段牲迫,使用降采樣對應(yīng)層的特征進行輔助