FCN論文筆記

這篇文章的作者是Jonathan Long,于2015年發(fā)表于XXXX。

這篇文章的主要貢獻是:提出了一種全卷積網絡,即FCN,并在圖像語義分割上做出了很好的效果。

網絡框架如下:

  1. 整體的網絡框架基于正常的CNN,將最后的全連接網絡改為了卷積。
    這樣做的效果是:
    1)網絡得以接受任意維度的輸入,不需要變成224x224了;
    2)最后本該是1000x1x1維的特征變成了1000xWxH維,這個w和h就是熱點圖的尺寸。關于這個熱點圖,應該是有1000張熱點圖,可以看出整張圖片的不同區(qū)域都激活了哪種分類的輸出。

  2. 在上述結構的基礎上,將1000維變成21維(20種分類+背景類),再接一個反卷積層。
    這樣做的效果就是:
    1)輸出了21張熱點圖,然后通過反卷積網絡變成了21張大小等于原圖的Mask;
    2)21張Mask出來之后就可以和真實數據做逐像素的損失函數了,進行訓練。
    這樣做還有一些缺點:
    1)先得到的熱點圖的尺寸和最后一層卷積的特征圖尺寸是相當的,在作者采用的VGG16中,尺寸為原圖的1/32,這就讓一層反卷積網絡實現32倍的放大,結果可想而知是粗糙(coarse)的。作者后來采用了skip的方法做了精細化,但或許直接采用多層的反卷積就可以有不錯的效果。
    2)這一段寫的過程中被刪掉了,因為寫著寫著發(fā)現了問題,我把刪掉的放到后面,可以作為思路記錄。訓練的時候每個點的預測值就是一個21維的向量,做交叉熵損失函數。最后預測結果采用max算法。嗯這是一個提醒自己訓練和測試不同的好例子。
    其實21張Mask出來之后他有采用一個最大值算法,使得最后輸出的MAsk就一張,包括了每個點最可能的預測。這種方式有個缺陷就是它相當于把每個點的非極大預測值變成了0。之后loss具體是交叉熵還是單純的3-2(這個不太可能)不太清楚,就以交叉熵來說,他的損失函數就是不合理的,因為可能本身該點像素預測第二名就是對的,但這下又要推倒重來。

  3. 接下來是Skip結構,是將pool3和pool4層的特征引到輸出。
    具體來說,pool3和pool4層特征圖的大小是pool5層的4、2倍,所以最后的熱點圖要先反卷積擴大為2倍、4倍再相加,然后再反卷積擴大為16倍、8倍。得到原圖尺寸。
    這樣做是為了讓Mask更加精細,之前說過這個方法或許可以被替代。

接下來是訓練過程:

其實上面說的比較清楚了,就是利用FCN得到圖像的熱點圖,然后通過反卷積的方式得到與原圖像尺寸相同的Mask,每個像素均包含21類的預測值,然后利用這個進行訓練。測試方式是取21預測值的最大為結果。
但是還有一些細節(jié)需要說明:

  1. 作者采用了VGG網絡,默認大小是224x224,在pool5層后輸出尺寸變?yōu)?/32,為7x7,之后進行7x7的卷積,可以得出,最后熱點圖的大小并不是原圖尺寸/32,而是$h_1 = (h-192)/32$。這就有2個問題:
    1)圖像尺寸不能小于224,否則輸出不足1.
    2)skip結構中,fc7與pool4層之間不是2倍關系。
    對于這一問題的解決方式是:
    1)圖像在輸入過程中被pad了100,最終尺寸變?yōu)?h_1 = (h+6)/32$,從而可以接受任意尺寸圖像。
    2)對fc7反卷積x2后進行crop裁剪。(因為他多了6)
  2. 好像沒了。

總結

這篇文章提出了一種FCN,但重點實際上在反卷積的效果上。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容