《SegNet: A Deep ConvolutionalnEncoder-Decoder Architecture for ImagenSegmentation》論文筆記
SegNet和DeconvNet、U-Net n結構相似,都蘊含著「先編碼,後解碼」的思想。而這種思想可以較方便地應用到其他網路結構(如FCN、CRFasRNN)。
用於語義分割的網路通常是將用於分類的網路進行全卷積化而來的。這帶來了空間解析度的下降(網路存在降採樣)的問題,產生較為粗糙的分割結果;而後需要將低解析度的結果上採樣到原圖大小。這個還原的過程即解碼過程。現今大部分的用於分割的網路都有相同或相似的encoder network,之所以會產生不同精度的分割結果,關鍵在於decoder network的不同(當然訓練和預測所採用的方法也起著一定作用)。因此,作者分析一些網路的解碼過程,提出了SegNet這種網路結構。
SegNet的encoder network為vgg16(移除了全連接層,既提高了encoder network最終輸出的解析度,又大大減少了參數,從134M減少到14.7M),在decoder network里依靠encoder network的max pooling層所產生的最大值位置索引(the locations of the maximum feature value in each pooling window n)對輸入進行upsample(無需學習),將得到稀疏的feature maps,然後對稀疏的feature maps進行卷積緻密。每個decoder對應一個encoder。最後接一個softmax分類器。
重複使用max-pooling indices In decoding process 的好處:
1. 提高了邊界刻畫能力;2. 減少端到端的訓練參數;3. 其他任何的encoder-decoder 結構都可以使用這種上採樣形式(只需做小小的修改)。
這篇論文其中一個主要貢獻是對SegNet和FCN的解碼手法進行了分析。如下圖所示:
從上圖可以看到,FCN存儲了encoder feature map(memory佔用大大提升,缺乏效率),然後與上採樣結果相加得到decoder的輸出;而對於SegNet,只需要存儲max-pooling indices(需要的memory較少)。FCN進行上採樣的方式是Deconvolution(可以是固定的雙線性插值,也可以是能學習的核進行反卷積)。
作者使用兩個數據集來訓練和測試SegNet:CamVid road scene segmentation(對自動駕駛有實際意義)和SUN RGB-D indoor scene segmentation(對AR有實際意義) n。為什麼不用pascal voc數據集?因為該數據集中有少數foreground與background有明顯區分,這讓一些投機者可以使用類似於邊緣檢測來刷分數。
SegNet在道路場景和室內場景的預測效果圖如下:
作者提出SegNet的好幾種變體(SegNet-Basic n、SegNetBasic-SingleChannelDecoder 等);同時也提出FCN的好幾種變體(FCN-Basic-NoAddition n、FCN-Basic-NoDimReduction n等)。對這些變體進行比較,表格如下:
作者對上面表格的結果進行了一番分析,有點啰嗦,具體的大家自行看論文吧。。作者最後總結了幾個點,我大概翻譯一下。(1)當encoder feature maps被完整存儲用於和decoder上採樣結果相加時,表現得最好(從BF這個指標可以明顯反映出來);(2)當內存受限時,無法存儲完整的encoder feature maps,可以存儲encoder feature maps的壓縮形式(進行降維)或者max-pooling indices n,這樣也能得到較好的表現;(3)當encoder network固定時,decoder network越大,表現越好。 n作者用CamVid road scenes dataset n來訓練、評價這些變體。這個數據集比較小,由367張訓練圖片和233測試圖片組成(解析度全為360*480)。訓練時,使用SGD、固定的學習率。由於訓練集中,某幾種類別的像素數量較多,因此需要class balancing(作者用了median frequency balancing n)。
作者使用了四個評價指標: global accuracy (G) n、class average accuracy (C) 、mIoU和the boundary F1-measure (BF)。
segnet和非deep learning方法的對比結果:
segnet和其他deep learning方法的對比結果:注意:上面表格作者沒有使用class balance來調整class的權重,因為Deconvnet這種參數比較多的網路中加入class balance以後難以訓練。
總結
提出SegNet用於語義分割。主要動機是為了設計一個memory and computational time均高效的網路結構用於道路和室內場景理解。對SegNet進行了分析,和其他的變體進行了對比,展示了設計網路結構過程中實際的取捨、權衡(training time, memory versus accuracy n,有得必有失嘛)。那些能夠完整存儲encoder network feature maps n的結構表現得最好,但是花費更多的內存和時間。而SegNet則是更加高效的,因為它只存儲the max-pooling indices,然後在decoder network 中使用來得到好的表現。 n n
推薦閱讀:
※FDDB和LFW數據集淺析及刷分心得
※ImageNet冠軍領隊帶你入門計算機視覺:監督學習與神經網路的簡單實現
※生成式對抗網路(GAN)基礎