論文閱讀筆記六:FCN:Fully Convolutional Networks for Semantic Segmentation(CVPR2015)


 今天來看一看一個比較經典的語義分割網絡,那就是FCN,全稱如題,原英文論文網址:https://people.eecs.berkeley.edu/~jonlong/long_shelhamer_fcn.pdf

三位大佬:Jonathan Long Evan Shelhamer Trevor Darrell

這個網址是網上一個大佬記錄的FCN的博客,同時深深感受到了自己與大佬的差距,但還是硬着頭皮把論文閱讀完成,貼出網址,和大家一起學習:https://blog.csdn.net/happyer88/article/details/47205839

       進入正題,作者在開始就說了,引以為傲的是他們提出了“完全卷積”網絡,這種網絡的特點是可以輸入任意大小的數據,並通過有效的脫離和學習能產生相應大小尺寸的輸出。用AlexNet,GoogleNet,VGG修改為全卷積網絡,並進行遷移學習微調。接着,作者定義一個跳躍結構,結合來自深層的,粗略層的分割信息,其中,該層中含有來自淺層的,精細層的外觀信息,通過前面的結構與信息,能夠進行精確的和詳細的分割。(插播:CNN的強大之處在於它的多層結構能自動學習特征,並且可以學習到多個層次的特征:較淺的卷積層感知域較小,學習到一些局部區域的特征;較深的卷積層具有較大的感知域,能夠學習到更加抽象一些的特征。這些抽象特征對物體的大小、位置和方向等敏感性更低,從而有助於識別性能的提高。)

       作者認為卷積網絡不僅改進了全圖分類效果,而且在結構化輸出的定位任務上也取得了較大的進步(邊界框對象的檢測,部分和關鍵點的預測,匹配定位等)。FCN進行了很多開創性的工作,是首個對像素點進行end-to-end訓練,同時進行有監督的預訓練,同時對現有的網絡修改為全卷積網絡,可以對任意大小的輸入產生密集輸出。作者指出學習和推理的過程都是通過前饋計算和反向傳播在整幅圖像上進行的。網絡內不的上采樣層可以實現像素的預測,同時,采用降采樣的池化層在網絡中進行學習。大佬表示,分批訓練目前是很常見的方式,但是和全卷積訓練相比,效率上還是稍遜一點。FCN並不需要產生proposals,或通過隨機場,分類器進行事后的優化操作等,由此可以看出,FCN還是很輕便的。作者在論文中經常提到的密集預測,個人 感覺和針對像素點的預測的說法大同小異。語義分割在位置和語義之間有一個緊密的聯系,全局信息可以解析局部信息。深層特征層次在非線性的 局部-全局金字塔上進行位置和語義的編碼。作者由此定義了前面的跳躍結構,以更好的利用特征信息。

      作者提出的方法是將圖像分類作為有監督的預訓練,同時進行微調全卷積,從而可以從整個輸入圖片和groundTruth上進行高效的學習。作者融合了各個層的特征定義一個非線性的端到端的局部-全局表示。感受野從CNN可視化的角度來講,就是輸出featuremap某個節點的響應對應的輸入圖像的區域。網絡中卷積,池化,及激活函數等結構在局部的輸入圖像上運行,並依賴相對應的空間坐標。一般深層網絡用於計算一般的非線性函數,但只有計算非線性函數的網絡層被叫做深層濾波器或者全卷積網絡。在loss函數這,有點不好理解,作者說一個由FCN組成的實值loss函數定義了一個任務,如果這個loss function是最后一層網絡所有空間維度的和,這里它給出了一個式子, loss function的梯度是每個像素梯度的和,所以,整幅圖像L的隨機梯度下降等同於每個像素點隨機梯度下降,這里將網絡最后一層上所有感受野作為一個minibatch。當感受野顯著重疊時,由層與層之間的 計算相比patch-by-patch,前饋計算和反向傳播會更高效。

       整體過程為,首先是將網絡調整為全卷積網絡,用於產生粗略的輸出,針對像素級的,需要將上述粗略的輸出反映到像素。相比改造之前的AlexNet ,VGG,LeNet等網絡,這些網絡有固定的輸入,同時產生非空間的輸出,折磨受限的罪魁禍首是全連接層,其固定的尺寸就算了,還把空間位置給扔了,然而,作者就比較機智了,把全連接層看成卷積核覆蓋整個輸入圖像的卷積。這種轉變可以進行任意尺寸的輸入。

 

全卷積網絡得到的結果圖相當於調整前的網絡對特定輸入區域的評估,但是對那些patch中重疊區域的計算還是比較集中的。在FCN中,雖然輸出map的大小由任意大小的輸入圖片控制,但是輸出維度通常是由降采樣減少的。分類網絡進行降采樣的原因是為了保持濾波器數量不大,同時計算要求可行,此版本的全卷積網絡,通過乘上輸出單元感受野的像素跨度因子使輸出變得看起來“粗糙點”。

         在看到shift and stitch is filter 這一塊感覺沒看懂,參考前面提供的大佬的網址,了解到Shift and stitch 是作者為了得到dense pretiction的方案之一,作者提到,Dense Prediction可以由在輸入圖片上進行移動得到的輸出進行一起 拼接得到,如果輸出圖的下采樣因子為f,則將輸入像素向右移動x個,同時向下移動y個像素,(x,y) st 0<x,y<f。顯而易見,經過一系列移動(這里前面的移動貌似是一步一步走的),相當於可以得到f*f個輸入(這里注意,雖然計算量為f*f,增大了,但是獲得了可以預測單個像素的效果),同時進行交錯輸出,使預測能夠對應感受野中心的像素。接着,作者又提到了一個stride 為s的網絡層(卷積或者池化層)和一系列帶有權重fij的卷積層(忽略非相關特征的維度),設定低層網絡的輸入步長為1,對底層網絡的輸出進行因子為s的上采樣。但是,將原始filter與上采樣后的結果進行卷積卻與

shift and stitch的不同,這里是因為這里進行卷積的filter只能看到輸入減少的一部分,作者為此對filter 進行修改如下:

       為了達到shift and stitch的效果,對濾波器進行逐層重復放大濾波器,直到所有的降采樣消失。減少網絡內的降采樣是一個折中的措施,這樣,filter可以獲得更好的信息,但缺點就是有更小的感受野,並需要更多的時間進行計算。shift and stitch也是一種折中,在不見底濾波器感受野帶線啊哦的情況下進行更密集的輸出,但是缺點是禁止filters 以比當初設定的更精細的尺寸來訪問信息。

       卵而,上面兩個技巧,作者並沒有用到模型中,而是采用了上采樣的技能。上采樣中用到了插值的思想。作者解釋道,一個因子為f的上采樣就是一個步長大小為1/f的卷積。所以只要f為一個整數,上采樣就進行一個輸出stride為f的反卷積(實際上就是反轉了卷積的前向和后向過程)。上采樣是在網絡內通過像素的損失反向傳播進行end-to-end學習。反卷積濾波器的一個特點是尺寸不是固定,可以被學習的。

      作者將ILSVRC分類器映射為FCN,並進行擴充,使其可以通過上采樣和像素級的loss function進行dnese prediction。接下來,進行微調訓練。在剛開始,提到過一個skip結構,這個個結構是進行end-to-end學習以細化輸出的語義和空間精度(更精細的尺寸需要的網絡層較少,將精細網絡層和粗糙的網絡層組合一起可以讓model在考慮全局結構下進行局部預測)。

    作者定義的網絡結構如下:

FCN的理論大體到此結束,有關網絡結構的詳細介紹會在代碼中出現。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM