什么是全卷積網絡?
- FCN是深度學習應用在圖像分割的代表作, 是一種端到端(end to end)的圖像分割方法, 讓網絡做像素級別的預測直接得出label map。因為FCN網絡中所有的層都是卷積層,故稱為全卷積網絡。
全卷積網絡的提出背景
- 圖像語義分割(Semantic Segmentation)是圖像處理和是機器視覺技術中關于圖像理解的重要一環,也是 AI 領域中一個重要的分支。語義分割即是對圖像中每一個像素點進行分類,確定每個點的類別(如屬于背景、人或車等),從而進行區域劃分。目前,語義分割已經被廣泛應用于自動駕駛、無人機落點判定等場景中。
- 而截止目前,CNN已經在圖像分類分方面取得了巨大的成就,涌現出如VGG和Resnet等網絡結構,并在ImageNet中取得了好成績。CNN的強大之處在于它的多層結構能自動學習特征,并且可以學習到多個層次的特征:
-> 1.較淺的卷積層感知域較小,學習到一些局部區域的特征;
-> 2. 較深的卷積層具有較大的感知域,能夠學習到更加抽象一些的特征。
這些抽象特征對物體的大小、位置和方向等敏感性更低,從而有助于分類性能的提高。這些抽象的特征對分類很有幫助,可以很好地判斷出一幅圖像中包含什么類別的物體。圖像分類是圖像級別的!
與分類不同的是,語義分割需要判斷圖像每個像素點的類別,進行精確分割。圖像語義分割是像素級別的!但是由于CNN在進行convolution和pooling過程中丟失了圖像細節,即feature map size逐漸變小,所以不能很好地指出物體的具體輪廓、指出每個像素具體屬于哪個物體,無法做到精確的分割。
針對這個問題,Jonathan Long等人提出了Fully Convolutional Networks(FCN)用于圖像語義分割。自從提出后,FCN已經成為語義分割的基本框架,后續算法其實都是在這個框架中改進而來。
全卷積網絡改進點
- 通常cnn網絡在卷積之后會接上若干個全連接層,將卷積層產生的特征圖(feature map)映射成為一個固定長度的特征向量。一般的CNN結構適用于圖像級別的分類和回歸任務,因為它們最后都期望得到輸入圖像的分類的概率,如ALexNet網絡最后輸出一個1000維的向量表示輸入圖像屬于每一類的概率。
- FCN對圖像進行像素級的分類,從而解決了語義級別的圖像分割問題。與經典的CNN在卷積層使用全連接層得到固定長度的特征向量進行分類不同,FCN可以接受任意尺寸的輸入圖像,采用反卷積層對最后一個卷基層的特征圖(feature map)進行上采樣,使它恢復到輸入圖像相同的尺寸,從而可以對每一個像素都產生一個預測,同時保留了原始輸入圖像中的空間信息,最后奇偶在上采樣的特征圖進行像素的分類。
-
全卷積網絡(FCN)是從抽象的特征中恢復出每個像素所屬的類別。即從圖像級別的分類進一步延伸到像素級別的分類。
FCN將傳統CNN中的全連接層轉化成一個個的卷積層。如下圖所示,在傳統的CNN結構中,前5層是卷積層,第6層和第7層分別是一個長度為4096的一維向量,第8層是長度為1000的一維向量,分別對應1000個類別的概率。FCN將這3層表示為卷積層,卷積核的大小(通道數,寬,高)分別為(4096,7,7)、(4096,1,1)、(1000,1,1)。所有的層都是卷積層,故稱為全卷積網絡。
image.png
可以理解為,FCN與CNN的區別在于FCN把CNN最后的全連接層換成卷積層,輸出一張已經label好的圖。
網絡結構
-
FCN對圖像進行像素級的分類,從而解決了語義級別的圖像分割(semantic segmentation)問題。與經典的CNN在卷積層之后使用全連接層得到固定長度的特征向量進行分類(全聯接層+softmax輸出)不同,FCN可以接受任意尺寸的輸入圖像,采用反卷積層對最后一個卷積層的feature map進行上采樣, 使它恢復到輸入圖像相同的尺寸,從而可以對每個像素都產生了一個預測, 同時保留了原始輸入圖像中的空間信息, 最后在上采樣的特征圖上進行逐像素分類。
image.png
全連接層和卷積層之間唯一的不同就是卷積層中的神經元只與輸入數據中的一個局部區域連接,并且在卷積列中的神經元共享參數。然而在兩類層中,神經元都是計算點積,所以它們的函數形式是一樣的。因此,將此兩者相互轉化是可能的:
對于任一個卷積層,都存在一個能實現和它一樣的前向傳播函數的全連接層。權重矩陣是一個巨大的矩陣,除了某些特定塊,其余部分都是零。而在其中大部分塊中,元素都是相等的。
任何全連接層都可以被轉化為卷積層。
全連接層實際就是卷積核大小為上層特征大小的卷積運算,卷積后的結果為一個節點,就對應全連接層的一個點。即若全卷積上一層的feature map尺寸為:
全卷積層為:
則可以通過一個卷積操作來代替全連接層,該卷積核大小為,且共有K個。
卷積層到全連接層的實現:可以通過一個W和b完成卷積層到全連接層的轉化,W:[K,W],b:[K,1]。
如下圖所示,FCN將傳統CNN中的全連接層轉化成卷積層,對應CNN網絡FCN把最后三層全連接層轉換成為三層卷積層 :
- 連接層轉化為全卷積層 : 在傳統的CNN結構中,前5層是卷積層,第6層和第7層分別是一個長度為4096的一維向量,第8層是長度為1000的一維向量,分別對應1000個不同類別的概率。FCN將這3層表示為卷積層,卷積核的大小 (通道數,寬,高) 分別為 (4096,1,1)、(4096,1,1)、(1000,1,1)。看上去數字上并沒有什么差別,但是卷積跟全連接是不一樣的概念和計算過程,使用的是之前CNN已經訓練好的權值和偏置,但是不一樣的在于權值和偏置是有自己的范圍,屬于自己的一個卷積核
- CNN中輸入的圖像大小是統一固定成227x227大小的圖像,第一層pooling后為55x55,第二層pooling后圖像大小為27x27,第五層pooling后的圖像大小為13x13, 而FCN輸入的圖像是H*W大小,第一層pooling后變為原圖大小的1/2,第二層變為原圖大小的1/4,第五層變為原圖大小的1/8,第八層變為原圖大小的1/16
- 經過多次卷積和pooling以后,得到的圖像越來越小,分辨率越來越低。其中圖像到的時候圖片是最小的一層時,所產生圖叫做heatmap熱圖,熱圖就是我們最重要的高維特征圖,得到高維特征的heatmap之后就是最重要的一步也是最后的一步對原圖像進行upsampling,把圖像進行放大幾次到原圖像的大小