影象分割之FCN
阿新 • • 發佈:2019-01-07
基於caffe的程式碼:https://github.com/shelhamer/fcn.berkeleyvision.org
反捲積:
在學習FCN之前,需要了解反捲積相關的知識。論文Adaptive deconvolutional networks for mid and high level feature learning中提出了反捲積網路,用於無監督學習。論文visualizing and Understanding Convolutional Networks,利用反捲積過程視覺化一個已經訓練好的卷積網路模型,可以參考部落格中的講解。
假定利用卷積核卷積影象A後得到影象B,反捲積就是利用剛剛用到的卷積核的轉置對影象B進行卷積得到影象A的近似。本質上,反捲積過程就是先對影象進行padding,然後再進行卷積,可以參考 這裡。
FCN:
傳統的基於CNN的分割方法:為了對一個畫素分類,使用該畫素周圍的一個影象塊作為CNN的輸入,用於訓練與預測,這種方法主要有幾個缺點:1)儲存開銷大,例如,對每個畫素使用15*15的影象塊,然後不斷滑動視窗,將影象塊輸入到CNN中進行類別判斷,因此,需要的儲存空間隨滑動視窗的次數和大小急劇上升;2)效率低下,相鄰畫素塊基本上是重複的,針對每個畫素塊逐個計算卷積,這種計算有很大程度上的重複;3)畫素塊的大小限制了感受區域的大小,通常畫素塊的大小比整幅影象的大小小很多,只能提取一些區域性特徵,從而導致分類效能受到限制。 全卷積網路(FCN)將從抽象的特徵中恢復出每個畫素所屬的類別,進而實現了將從影象級別的分類延伸到畫素級別的分類,如圖所示:1)將第一個全連線層變為kernel_size = 7的卷積層 2)將第二個全連線層、第三個全連線層變為kernel_size = 1的卷積層 舉例說明:將224×224的視窗,以步長32在384×384的圖片上滑動,把每個經停的位置都帶入卷積網路,最後得到6×6個位置的類別得分。 如果224×224的輸入圖片經過卷積層和下采樣層之後得到了[7x7x512]的陣列,那麼,384×384的大圖片直接經過同樣的卷積層和下采樣層之後會得到[12x12x512]的陣列。然後再經過上面由3個全連線層轉化得到的3個卷積層,最終得到[6x6x1000]的輸出。這個結果正是視窗在原圖經停的6×6個位置
參考部落格: http://www.cnblogs.com/gujianhan/p/6030639.html http://blog.csdn.net/hjimce/article/details/50268555