1. 程式人生 > 實用技巧 >論文閱讀筆記:《SegNet: A Deep Convolutional Encoder-Decoder Architecture for Image Segmentation》

論文閱讀筆記:《SegNet: A Deep Convolutional Encoder-Decoder Architecture for Image Segmentation》

論文閱讀筆記:《SegNet: A Deep Convolutional Encoder-Decoder Architecture for Image Segmentation》

論文下載地址:SegNet

轉載請註明:https://blog.csdn.net/weixin_42143615/article/details/109035138

一、論文簡介

提出了一種新穎實用的用於語義分割的深度全卷積神經網路結構SegNet。其核心的分割網路由一個編碼器網路、一個對應的解碼網路和一個畫素級分類層組成。編碼器網路的結構在拓撲上與VGG16網路中的13個卷積層相同(與FCN一樣,SegNet也基於VGG-16。不同的是,SegNet將後面3個全連線層刪掉而不是像FCN一樣,將其轉換為卷積層

)。此外,SegNet明確將反捲積(上取樣)組織為解碼器,將卷積(下采樣)組織為編碼器。解碼器網路的作用是將低解析度編碼器的特徵對映到全輸入解析度的特徵圖,以進行畫素級分類。其核心思想如下:

(1)其新穎之處在於解碼器對其低解析度輸入特徵對映進行上取樣的方式。

具體地說,解碼器使用在對應編碼器的最大池化步驟中計算的池索引來執行非線性上取樣。這就消除了學習向上取樣的需要。

(2)可以提高物體邊界的分割效果。

(3)相比反捲積操作,減少了引數數量,減少了運算量;相比resize操作,減少了插值的運算量,而實際增加的索引引數也很少,並且它可以通過隨機梯度下降演算法進行端到端的訓練。

(4)該pooling操作可以應用於任何基於編碼-解碼的分割模型。

二、論文內容

SegNet是為畫素級語義分割而設計的,其關鍵元件是解碼器網路,該網路由與每個編碼器相對應的一個解碼器按層次構成。編碼器由卷積層、單元非線性、最大池和子取樣組成。其中,合適的解碼器使用從相應編碼器接收的最大池索引來對其輸入特徵圖進行非線性上取樣。它使用一個可訓練的解碼器濾波器組卷積這個上取樣的對映來重建輸入影象。

2.1網路結構

SegNet有一個編碼器網路和一個相應的解碼器網路,然後是最後的畫素分類層。該架構如圖1所示。

圖1 SegNet網路結構

(1)卷積單元

可以看到,SegNet的編碼和解碼都有卷積模組。這個卷積模組包含:same卷積(卷積前後尺寸不變)、BN批歸一化、ReLU啟用。Batch Normalisition通過對輸入啟用函式的資料做歸一化處理可以在一定程度上改善梯度彌散的問題。同樣,作為Sigmoid的改進版,ReLU可以通過避免輸出進入飽和區域而改善梯度彌散問題。

same卷積:https://blog.csdn.net/leviopku/article/details/80327478

(2)池化與上取樣

編碼與解碼模組最大的不同在於,前者通過池化縮小尺寸,後者通過上取樣恢復尺寸。SegNet中使用最大池化,用於在輸入影象中實現小空間位移的平移不變性,同時輸出最大點的index。同一層次的上取樣根據index確定池化前max值的點的位置,並對其他丟失的點做插值。

(3)Softmax輸出

網路最後一層通過Softmax選擇概率最大的為該畫素的類別。

2.2 解碼器的改變

為了分析SegNet並將其效能與FCN進行比較,作者使用了一個更小版本的SegNet,稱為SegNet-Basic,它有4個編碼器和4個解碼器。SegNet Basic中的所有編碼器執行最大池和子取樣,相應的解碼器使用接收到的最大池索引對其輸入進行上取樣。在編碼器和解碼器網路中,在每個卷積層之後都使用批標準化。卷積後不使用任何偏差,解碼器網路中不存在ReLU非線性。此外,在所有編碼器和解碼器層上選擇7×7的恆定核心大小以提供用於平滑標記的寬上下文,即,可以將最深層特徵對映中的畫素追溯到106×106畫素的輸入影象中的上下文視窗。這個小尺寸的SegNet Basic允許我們探索許多不同的變體(解碼器),並在合理的時間內訓練它們。同樣地,我們建立了FCN Basic,一個FCN的可比版本,用於我們分析使用相同編碼器網路的SegNet,但是FCN解碼技術用在了所有的解碼器中,如圖2所示。

圖2 SegNet與FCN上取樣區別

圖2的左側是SegNet(也是SegNet Basic)使用的解碼技術,其中上取樣步驟不涉及學習。然而,上取樣圖被卷積成可訓練的多通道解碼器卷積,以加密其稀疏輸入。每個解碼器卷積具有與上取樣特徵圖數相同的通道數。較小的變體是解碼器卷積是單通道的,即它們只卷積相應的上取樣特徵圖。這種變體顯著減少了可訓練引數的數量和推理時間。

圖2的右側是FCN解碼技術。FCN模型的重要設計元素是編碼器特徵圖的降維步驟。這壓縮編碼器特徵圖,然後在相應的解碼器中使用。編碼器特徵圖(例如64個通道)的維數降維是通過用1×1×64×K可訓練濾波器卷積來實現的,其中K是類的數目。壓縮後的K通道最終編碼器層特徵對映是解碼器網路的輸入。在該網路的譯碼器中,上取樣採用固定或可訓練的多通道上取樣核進行逆卷積。我們將核心大小設定為8×8。這種上取樣方式也稱為反捲積。注意,相比之下,SegNet使用可訓練解碼器卷積的多通道卷積是在上取樣到加密特徵圖之後執行的。FCN中的上取樣特徵圖有K個通道。然後將其逐元素新增到相應的解析度編碼器特徵圖中,以生成輸出解碼器特徵圖。上取樣核使用雙線性插值權進行初始化。

2.3 訓練

使用CamVid道路場景資料集來測試解碼器變體的效能。這個資料集很小,由367個訓練影象和233個測試RGB影象(白天和黃昏場景)組成,解析度為360×480。我們面臨的挑戰是分割11個類別,如道路、建築、汽車、行人、標誌、電線杆、人行道等。我們對RGB輸入執行區域性對比度標準化。編碼器和解碼器的權重都是使用何凱明等人描述的技術初始化的。為了訓練所有變數,我們使用隨機梯度下降(SGD),固定學習率為0.1,動量為0.9,使用SegNet Basic的Caffe實現。我們訓練這個模型直到損失值收斂。在每個epochs之前,訓練集被打亂,然後按順序挑選每個小批次(12幅影象),從而確保每個影象在一個epochs中只使用一次。我們選擇在驗證資料集上效能最高的模型。

利用交叉熵損失作為訓練網路的目標函式。在一個小批量中,所有畫素的損失總和。當訓練集中每個類的畫素數量有很大變化時(例如道路、天空和建築物畫素主導CamVid資料集),則需要根據真實類別對損失進行不同的加權。這被稱為階級平衡。我們使用中值頻率平衡[,其中在損失函式中分配給一個類的權重是在整個訓練集上計算的類頻率的中值除以類頻率的比率。這意味著訓練集中較大的類的權重小於1,最小類的權重最高。我們還試驗了在沒有類平衡或等效使用自然頻率平衡的情況下訓練不同的變體。

2.4分析

現在可以用以下幾點概括上述分析:

(1)當編碼器特徵對映被完全儲存時,效能最佳。這在語義輪廓描繪度量(BF)中反映得最清楚。

(2)當推理過程中的記憶體受到限制時,可以儲存壓縮形式的編碼器特徵對映(維數縮減、最大池索引)並與適當的解碼器(例如SegNet型別)一起使用,以提高效能。

(3)較大的解碼器可以提高給定編碼器網路的效能。

三、總結

(1)編碼器部分的特徵如果可以被很好的儲存,例如本文的pooling操作,儲存了其索引,可以取得很好的分割效果,尤其是在邊緣部分。

(2)SegNet效率很高,因為它只儲存特徵對映的最大池索引,並在其解碼器網路中使用它們來獲得良好的效能。

(3)本文的pooling操作可以解決推斷過程中記憶體消耗大的問題。

(4)對於給定的編碼器,使用更大的解碼器可以提升分割的精度。

(5)Bayesian SegNet就是在SegNet基礎上網路結構增加dropout,增加後處理操作,本質是一種模型整合。