1. 程式人生 > >FCN(Fully Convolutional Networks for Semantic Segmentation) 學習

FCN(Fully Convolutional Networks for Semantic Segmentation) 學習

  FCN:全卷積神經網路,在神經網路中只有conv層(pooling act) 將fc層的功能用conv層替代,更好地實現語義分割。

    2016年發表在ieee上的大作。

fc層被替代有諸多好處,最直接的就是引數減少。

 

 輸入AlexNet, 得到一個長為1000的輸出向量, 表示輸入影象屬於每一類的概率, 其中在“tabby cat”這一類統計概率最高。

FCN對影象進行畫素級的分類,從而解決了語義級別的影象分割(semantic segmentation)問題。與經典的CNN在卷積層之後使用全連線層得到固定長度的特徵向量進行分類(全聯接層+softmax輸出)不同,FCN可以接受任意尺寸的輸入影象,採用反捲積層對最後一個卷積層的feature map進行上取樣, 使它恢復到輸入影象相同的尺寸,從而可以對每個畫素都產生了一個預測, 同時保留了原始輸入影象中的空間資訊, 最後在上取樣的特徵圖上進行逐畫素分類。

最後逐個畫素計算softmax分類的損失, 相當於每一個畫素對應一個訓練樣本。

classification network

  

很好地判斷出一幅影象中包含什麼類別的物體,但是因為丟失了一些物體的細節,不能很好地給出物體的具體輪廓、指出每個畫素具體屬於哪個物體,因此做到精確的分割就很有難度 。

 傳統的cnn網路:為了對一個畫素分類,使用該畫素周圍的一個影象塊作為CNN的輸入用於訓練和預測。這種方法有幾個缺點:  一是儲存開銷很大。例如對每個畫素使用的影象塊的大小為15x15,然後不斷滑動視窗,每次滑動的視窗給CNN進行判別分類,因此則所需的儲存空間根據滑動視窗的次數和大小急劇上升。二是計算效率低下

。相鄰的畫素塊基本上是重複的,針對每個畫素塊逐個計算卷積,這種計算也有很大程度上的重複。三是畫素塊大小的限制了感知區域的大小。通常畫素塊的大小比整幅影象的大小小很多,只能提取一些區域性的特徵,從而導致分類的效能受到限制。

全卷積網路(FCN)則是從抽象的特徵中恢復出每個畫素所屬的類別。即從影象級別的分類進一步延伸到畫素級別的分類。

全連線層 -> 成卷積層

經過多次卷積和pooling以後,得到的影象越來越小,解析度越來越低。其中影象到 H/32∗W/32 的時候圖片是最小的一層時,所產生圖叫做heatmap熱圖,熱圖就是我們最重要的高維特診圖,得到高維特徵的heatmap之後就是最重要的一步也是最後的一步對原影象進行upsampling,把影象進行放大、放大、放大,到原影象的大小。

 upsampling

上取樣是通過反捲積(deconvolution)實現的。對第5層的輸出(32倍放大)反捲積到原圖大小,得到的結果還是不夠精確,一些細節無法恢復。於是Jonathan將第4層的輸出和第3層的輸出也依次反捲積,分別需要16倍和8倍上取樣

缺點

在這裡我們要注意的是FCN的缺點:

  1. 是得到的結果還是不夠精細。進行8倍上取樣雖然比32倍的效果好了很多,但是上取樣的結果還是比較模糊和平滑,對影象中的細節不敏感。

  2. 是對各個畫素進行分類,沒有充分考慮畫素與畫素之間的關係。忽略了在通常的基於畫素分類的分割方法中使用的空間規整(spatial regularization)步驟,缺乏空間一致性