作者:石文華
編輯:田 旭
語義分割網絡經典:FCN與SegNet
全文目錄
1、FCN
概述
編碼和解碼過程
2、SegNet
概述:
特徵上採樣與融合細節
代碼地址
將圖像中每個像素分配到某個對象類別,相關模型要具有像素級的密集預測能力。
FCN(一)概述
改編當前的分類網絡:AlexNet、VGG、GoogLeNet到全卷積網絡和通過微調傳遞它們學習的特徵表達能力到分割任務中。然後定義了一個跳躍式的架構,結合來自深、粗層的語義信息和來自淺、細層的表徵信息來產生準確和精細的分割。
由上圖可以看出,將分類網絡改成全卷積網絡,生成了一個低解析度的類的熱圖(圖中的:tabby cat heatmap),上採樣用雙線性初始化的反卷積,並在上採樣的每一個階段通過融合(簡單地相加)下採樣階段網絡中的低層的更加粗糙但是解析度更高的特徵圖進一步細化特徵。
(二)特徵上採樣與融合細節
上圖可以看出該算法採用了「融合層」策略(簡單地相加),將高層特徵和低層特徵進行融合來提高分割性能,分別採用了3種不同的結構,第一種是32x upsampled ,第二種是16x upsampled,第三種是8x upsampled。
過程是這樣的:
1、32x upsampled
原圖經過不斷的卷積和池化,得到pool5層的特徵(比原圖縮小了32倍),將pool5通過32倍的上採樣(反向卷積)得到最後結果。但是pool5層的特徵屬於高層抽象特徵,採樣後得到的結果不夠精細。
2、16x upsampled
將pool5的結果進行2倍上採樣,與pool4相加,作為「融合」,然後將「融合」結果進行16倍的上採樣(反向卷積)得到最後結果(註:融合是指對應位置像素值相加,後來的u-net則直接是通道上拼接)。
3、8x upsampled
將pool5的結果進行2倍上採樣,與pool4相加,作為「融合」,然後將「融合」結果進行2倍的上採樣,再與pool3的結果進行「融合」,之後進行八倍的上採樣。
三種結構實驗結果表明,將高層特徵與低層特徵的融合能夠明顯提高像素點的分類效果,如下圖所示:
(一)概述
上圖可以看到segNet沒有全連接的層。SegNet和FCN思路十分相似,不同之處在於解碼器使用從編碼器傳輸的最大池化索引(位置)對其輸入進行非線性上採樣,從而使得上採樣不需要學習,生成稀疏特徵映射。然後,使用可訓練的卷積核進行卷積操作,生成密集的特徵圖。最後的解碼器輸出特徵映射被送入soft-max分類器進行像素級分類。
上採樣使用池化層索引的優勢:
1)提升邊緣刻畫度;
2)減少訓練的參數;
3)這種模式可包含到任何編碼-解碼網絡中。
(2)編碼和解碼過程
SegNet在編碼階段進行pooling的時候會保留保存通過max選出的權值在2x2 filter中的相對位置,用於之後在解碼器中使用那些存儲的索引來對相應特徵圖進行去池化操作,如下圖所示:
網絡結構部分的代碼詳見:
https://github.com/cswhshi/segmentation/blob/master/FCN.ipynb
https://github.com/cswhshi/segmentation/blob/master/SegNet.ipynb
歡迎大家指正和star~
END
機器學習算法工程師
一個用心的公眾號
長按,識別,加關注進群,學習,得幫助
你的關注,我們的熱度,
我們一定給你學習最大的幫助