全卷積網絡(FCN)理解

概要

作爲計算機視覺領域的三大任務之一(圖像分類,目標檢測,圖像分割),圖像分割這些年也獲得了長足的發展,它被廣泛用於在醫學圖像和自然圖像的分割上,除此之外,圖像分割也被用於在道路分割上,這對於自動駕駛的發展具有極其重要的意義。
圖像分割到目前爲止,大致分爲三類:

1.語義分割(Semantic Segmentation)

圖像語義分割的意思就是機器自動分割並識別出圖像中的內容,如下圖(b),能夠區分物體和背景。

2.實例分割(Instance Segmentation)

圖像實例分割,不僅要分割出圖像中的不同類別,而且還要對同一類別的不同個體作出區分。如下圖(c),對於人和汽車的不同個體都作出區分。

3.全景分割(Panoptic Segmentation)

Panoptic Segmentation 中文名爲全景分割,是由 Facebook 的大神聯手推出的結合 instance segmentation 和 semantic segmentation 的新任務。作者發現,instance segmentation 只能夠分別物體,但是沒有辦法對 stuff 進行預測。而傳統的 semantic segmentation 不能夠區分物體。作者提出了同時對物體進行分割,並且對 stuff 進行分類的新任務,如下圖(d)。
在這裏插入圖片描述
言歸正傳…回到全卷積網絡:
全卷積神經網絡(Fully Convolutional Network,FCN)是在2015年由美國加州大學伯克利分校的Jonathan Long等人提出的用於圖像語義分割的一種框架。
論文地址:Fully Convolutional Networks for Semantic Segmentation
代碼地址:FCN on Github

核心思想

三個keys:
1.卷積化:去掉全連接層,以卷積層代替,可以適應任意尺寸的輸入。

簡而言之,FCN將CNN中的FC層去掉換以卷積層替代。傳統的CNN在預測圖像分類時,最後經過以SoftMax輸出的是一維的概率值向量,這些概率值分別對應每個預測種類的預測概率,取最大的那個爲預測類別。
而,語義分割不同,語義分割所要得到的是像素級別的分割。而FCN可以接受任意尺寸的輸入圖像,採用反捲積層對最後一個卷基層的特徵圖(feature map)進行上採樣,使它恢復到輸入圖像相同的尺寸,從而可以對每一個像素都產生一個預測,同時保留了原始輸入圖像中的空間信息,最後在上採樣的特徵圖進行像素的分類。全卷積網絡(FCN)是從抽象的特徵中恢復出每個像素所屬的類別。即從圖像級別的分類進一步延伸到像素級別的分類。
FCN將傳統CNN中的全連接層轉化成一個個的卷積層。如下圖所示,在傳統的CNN結構中,前5層是卷積層,第6層和第7層分別是一個長度爲4096的一維向量,第8層是長度爲1000的一維向量,分別對應1000個類別的概率。FCN將這3層表示爲卷積層,卷積核的大小(通道數,寬,高)分別爲(4096,1,1)、(4096,1,1)、(1000,1,1)。所有的層都是卷積層,故稱爲全卷積網絡。
那這樣做有什麼優勢呢?首先,卷積層表示的是局部的信息,而全連接層則是描繪的是全局信息。用和全連接層相同維度大小的卷積層替換掉全連接層,能夠使得卷積網絡在一張更大的輸入圖像上滑動,使得輸出圖像具有位置信息。

在這裏插入圖片描述

2.上採樣:在網絡深處以上採樣(反捲積)增大圖像尺寸,提高輸出精確度。

在論文中FCN使用了上採樣。這裏用的是反捲積操作,相比下采樣是使得圖像越來越小,而上採樣則是使得圖像變大。
例如經過5次卷積(和pooling)以後,圖像的分辨率依次縮小了2,4,8,16,32倍。對於最後一層的輸出圖像,需要進行32倍的上採樣,以得到原圖一樣的大小。這個上採樣是通過反捲積(deconvolution)實現的。
在這裏插入圖片描述

3.dense prediction:採用skip方法結合網絡不同層之間的信息,增加模型精確度和魯棒性。

這種方式在文章中也提到,使用skip方法結合多層信息,如深層次的粗糙信息和低層次的精確信息。因爲作者發現對第5層的輸出(32倍放大)反捲積到原圖大小,得到的結果還是不夠精確,一些細節無法恢復。於是Jonathan將第4層的輸出和第3層的輸出也依次反捲積,分別需要16倍和8倍上採樣,結果就精細一些了。
這種做法的好處是兼顧了local和global信息。
在這裏插入圖片描述

整體網絡結構

在這裏插入圖片描述
這篇博文:FCN的學習及理解(Fully Convolutional Networks for Semantic Segmentation)
解釋的我覺得很好,所以作爲理解,拿來借鑑一下~
整體網絡架構分爲兩部分:虛線上部分和虛線下部分:
虛線上部分表示的是全卷積網絡,用來提取圖像特徵。
全連接層轉換爲卷積層:在兩種變換中,將全連接層轉化爲卷積層在實際運用中更加有用。假設一個卷積神經網絡的輸入是 224x224x3 的圖像,一系列的卷積層和下采樣層將圖像數據變爲尺寸爲 7x7x512 的激活數據體。AlexNet使用了兩個尺寸爲4096的全連接層,最後一個有1000個神經元的全連接層用於計算分類評分。我們可以將這3個全連接層中的任意一個轉化爲卷積層:

針對第一個連接區域是[7x7x512]的全連接層,令其濾波器尺寸爲F=7,這樣輸出數據體就爲[1x1x4096]了。

針對第二個全連接層,令其濾波器尺寸爲F=1,這樣輸出數據體爲[1x1x4096]。

針對最後一個全連接層也做類似的,令其F=1,最終輸出爲[1x1x1000]。

虛線下部分代表的是圖像經過卷積層的不同階段所產生的的深度爲21的預測圖像的分類結果。

例如:第一個模塊輸入16*16*4096,卷積模板尺寸1*1,輸出16*16*21。
     相當於對每個像素施加一個全連接層,從4096維特徵,預測21類結果。

實驗效果

在這裏插入圖片描述

參考鏈接:

爲什麼使用卷積層替代CNN末尾的全連接層

FCN 全卷積網絡 Fully Convolutional Networks for Semantic Segmentation

全卷積網絡FCN

FCN於反捲積(Deconvolution)、上採樣(UpSampling)

FCN的學習及理解(Fully Convolutional Networks for Semantic Segmentation)

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