fcn語義分割 論文
全卷積網路:
個人認為本文主要是兩個重點:
第一是fcn,全卷積網路(+上取樣)
第二是skip net
首先說全卷積網路:
通常cnn在卷積層後會接上若干全連線層,但是全連線層和卷積層的連線數量是固定的,這也就導致了輸入必須是固定的尺寸。如下圖所示:
但是在fcn中將fc用卷積取代,再加上取樣層,這樣能夠輸入任何大小的圖片,同時輸出圖片相應大小的語義分割。如下圖所示:
可以看到兩站圖中的紅色部分略有不同,這是因為第一幅圖中通過全連線層,已經破壞了卷積層輸出feature map的空間結構,而第二幅圖中通過全卷積網路保持了feature map空間結構,在通過反捲積完全可以恢復原影象中目標的空間位置,也成為heat map。從下圖中可以看出heat map中的標記與原圖中cat的位置相似。
那作者是如何將fc層替換為全連線層呢?這就樣引出卷積層和全連線層可以相互轉化的關係了。
卷積--------》全連線 :全連線矩陣是一個非常巨大的矩陣,很明顯,全連線層的連線數量要遠遠多於卷積層,所以就可以通過將某些連線置0,使其模擬卷積。
全連線-------》卷積:例如將100x100x1的feature map通過全連線輸出1000大小的一維向量,就可以將每一個輸出看做一個卷積的結果,而卷積的核大小為100x100。
將fc都用conv替換後,接下來就是上取樣(很多部落格稱為反捲積,但是為了區別視覺化中的反捲積還是稱為上取樣了好了)。引用一張cs231n中的ppt,
通過輸入設定卷積的權重,然後在輸出中相加。類似於插值的思想。(ps:既然如此那能夠使用反捲積網路搭建一個可學習的插值器,理論上這比採用人工設計的插值要好很多,不知道現在有沒有人做)。
當然整個卷積網路是可以使用反向傳播的。
其次是skip net:
雖然作者在文中也並不是那麼重點地講,但是這種思想還是可以學習的。如下圖:
在卷積網路(包括卷積、池化)中,層數越深,感受野越大,學習到的特徵就越概括,作者稱之為coarse(粗糙)。fcn-32s從pooling5上取樣,而結果也顯示細節處理很不好。如下圖:
作者通過將低層和高層進行連線,最終可以將低層的影象細節加到粗糙的輪廓中,如上圖。具體怎樣連線的可以看圖。
當見過skip net這種結構的時候,再見到下圖的結構也就不懵逼了。