語義分割網路經典:FCN與SegNet

重磅乾貨,第一時間送達

全文目錄

1、FCN

概述

編碼和解碼過程

2、SegNet

概述:

特徵上取樣與融合細節

程式碼地址

將影象中每個畫素分配到某個物件類別,相關模型要具有畫素級的密集預測能力。

01

FCN

(一)概述

改編當前的分類網路:AlexNet、VGG、GoogLeNet到全卷積網路和透過微調傳遞它們學習的特徵表達能力到分割任務中。然後定義了一個跳躍式的架構,結合來自深、粗層的語義資訊和來自淺、細層的表徵資訊來產生準確和精細的分割。

由上圖可以看出,將分類網路改成全卷積網路,生成了一個低解析度的類的熱圖(圖中的:tabby cat heatmap),上取樣用雙線性初始化的反捲積,並在上取樣的每一個階段透過融合(簡單地相加)下采樣階段網路中的低層的更加粗糙但是解析度更高的特徵圖進一步細化特徵。

(二)特徵上取樣與融合細節

語義分割網路經典:FCN與SegNet

上圖可以看出該演算法採用了“融合層”策略(簡單地相加),將高層特徵和低層特徵進行融合來提高分割效能,分別採用了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的結果進行“融合”,之後進行八倍的上取樣。

三種結構實驗結果表明,將高層特徵與低層特徵的融合能夠明顯提高畫素點的分類效果,如下圖所示:

語義分割網路經典:FCN與SegNet

02

SegNet

(一)概述

語義分割網路經典:FCN與SegNet

上圖可以看到segNet沒有全連線的層。SegNet和FCN思路十分相似,不同之處在於解碼器使用從編碼器傳輸的最大池化索引(位置)對其輸入進行非線性上取樣,從而使得上取樣不需要學習,生成稀疏特徵對映。然後,使用可訓練的卷積核進行卷積操作,生成密集的特徵圖。最後的解碼器輸出特徵對映被送入soft-max分類器進行畫素級分類。

上取樣使用池化層索引的優勢:

1)提升邊緣刻畫度;

2)減少訓練的引數;

3)這種模式可包含到任何編碼-解碼網路中。

(2)編碼和解碼過程

SegNet在編碼階段進行pooling的時候會保留儲存透過max選出的權值在2x2 filter中的相對位置,用於之後在解碼器中使用那些儲存的索引來對相應特徵圖進行去池化操作,如下圖所示:

語義分割網路經典:FCN與SegNet

03

程式碼地址

網路結構部分的程式碼詳見:

https://github。com/cswhshi/segmentation/blob/master/FCN。ipynb

https://github。com/cswhshi/segmentation/blob/master/SegNet。ipynb

歡迎大家指正和star~

下載1:OpenCV-Contrib擴充套件模組中文版教程

下載2:Python視覺實戰專案52講

下載3:OpenCV實戰專案20講

交流群