1. 程式人生 > >深度學習筆記(基礎)——(六)全卷積神經網路(FCN)

深度學習筆記(基礎)——(六)全卷積神經網路(FCN)

    通常CNN在卷積層之後會接上若干個全連線層,將卷積層產生的特徵圖(Feature Map)對映成一個固定長度的特徵向量進行分類。以AlexNet為代表的經典CNN結構適合於影象級的分類和迴歸任務,因為它們最後都期望得到整個輸入影象的一個數值描述,如AlexNet的ImageNet模型輸出一個1000維的向量,表示輸入影象屬於每一類的概率。例如,圖4.15中的貓,輸入AlexNet,得到一個長為1000的輸出向量,表示輸入影象屬於每一類的概率,其中在“tabby cat”這一類上響應最高。

    與物體分類建立影象級理解任務不同的是,有些應用場景

下要得到影象畫素級別的分類結果,如語義級別影象分割(Semantic Image Segmentation),最終要得到對應位置每個畫素的分類結果;又如邊緣檢測,相當於對每個畫素做一次二分類(是邊緣或不是邊緣)。以語義影象分割為例,其目的是將影象分割為若干個區域,使得語義相同的畫素被分割在同一區域內。圖4.16是一個語義影象分割的例子,輸入影象,輸出不同顏色的分割區域表示不同的語義:背景、人和馬。

    Lonjong等發表在CVPR2015的論文提出了,全卷積網路(FCN)進行畫素級的分類從而高效地解決了語義級別的影象分割問題。與經典的CNN在卷積層之後使用全連線層得到固定長度的特徵向量進行分類不同,FCN

可以接受任意尺寸的輸入影象,採用反捲積層對最後一個卷積層的Feature Map進行取樣,使它恢復到與輸入影象相同的尺寸,從而可以對每個畫素都產生了一個預測,同時也保留了原始輸入影象中的空間資訊,最後在上取樣的特徵圖上進行逐畫素分類。逐畫素計算Softmax分類的損失,相當於每一個畫素對應一個訓練樣本。

Lonjong的論文包含了當下CNN的三個思潮,具體如下:

  • 不含全連線層(FC)的全卷積(Fully Conv)網路,可適應任意尺寸輸入
  • 增大資料尺寸的反捲積(Deconv)層,能夠輸出精細的結果
  • 結合不同深度層結果的跳級(Skip)結構,同時確保魯棒性和精確性。

全卷積網路的原理:

    FCN將傳統CNN中的全連線層轉化成一個個的卷積層。如圖4.15所示,在傳統的CNN結構中,前5層是卷積層,第6層和第7層分別是一個長度為4096的一維向量,第8層是長度為1000的一維向量,分別對應1000個類別的概率。FCN將這3層也表示為卷積層,卷積核的大小通道數,寬,高)分別為(4096,1,1)、(4096,1,1)、(1000,1,1)。這樣所有的層都是卷積層,故稱為全卷積網路。

    可以發現,經過多次卷積(還有Pooling)以後,得到的影象越來越小,解析度越來越低(粗略的影象),那麼FCN是如何得到影象中每一個畫素的類別的呢?為了從這個解析度低的粗略影象恢復到原圖的解析度,FCN使用了上取樣。例如經過5次卷積(和Pooling)以後,影象的解析度依次縮小了2、4、8、16、32倍。對於最後一層的輸出影象,需要進行32倍的上取樣,以得到與原圖一樣的大小。

    這個上取樣是通過反捲積(Deconvolution)實現的。對第5層的輸出(32倍放大)反捲積得到原圖大小,得到的結果還是不夠精確,一些細節無法恢復。於是,Jonathan將第4層的輸出和第3層的輸出也依次反捲積,分別需要16倍和8倍上取樣,結果就精細一些了。圖4.17所示的對比,可以看到他們得到的結果越來越精確。

    與傳統用CNN進行影象分割的方法相比,FCN有兩大明顯的優點:一是可以接受任意大小的輸入影象,而不用要求所有的訓練影象和測試影象具有同樣的尺寸;二是更加高效,因為避免了由於使用畫素塊帶來的重複儲存和計算卷積的問題

    同樣FCN的缺點也比較明顯:一是得到的結果還是不夠精細,進行8倍上取樣雖然比32倍的效果好了很多,但是上取樣的結果還是比較模糊和平滑,對影象中的細節不敏感;二是對各個畫素進行分類,沒有充分考慮畫素與畫素之間的關係,忽略了在通常的基於畫素分類的分割方法中使用的空間規整(Spatial Regularization)步驟,缺乏空間一致性。