原文鏈接:https://arxiv.org/pdf/1511.00561.pdf
github(tensorflow):https://github.com/aizawan/segnet
基於SegNet的鋼鐵分割實驗:https://github.com/fourmi1995/IronSegExprement-SegNet
摘要
Segnet是用於進行像素級別圖像分割的全卷積網絡,分割的核心組件是一個encoder 網絡,及其相對應的decoder網絡,后接一個象素級別的分類網絡。encoder網絡:其結構與VGG16網絡的前13層卷積層的結構相似。decoder網絡:作用是將由encoder的到的低分辨率的feature maps 進行映射得到與輸入圖像featuremap相同的分辨率進而進行像素級別的分類。Segnet的亮點:decoder進行上采樣的方式,直接利用與之對應的encoder階段中進行max-pooling時的polling index 進行非線性上采樣,這樣做的好處是上采樣階段就不需要進行學習。 上采樣后得到的feature maps 是非常稀疏的,因此,需要進一步選擇合適的卷積核進行卷積得到dense featuremaps 。作者與FCN,DeepLab-LargeFOV, DenconvNet結構進行比較,統籌內存與准確率,Segnet實現良好的分割效果。SegNet主要用於場景理解應用,需要在進行inference時考慮內存的占用及分割的准確率。同時,Segnet的訓練參數較少(將前面提到的VGG16的全連接層剔除),可以用SGD進行end-to-end訓練。
說明
在decoder 網絡中重用encder 網絡中對應max pooling index的三點好處:(i)提高邊界划分 (ii)減少訓練的參數 (iii)這種形式可以廣泛的應用在其他encoder-decoder結構。
本文重點是分析SegNet的decoding模塊和FCN網絡,目前的分割網絡都有相似的編碼結構(VGG16)但是decoder網絡的結構各異,同時訓練和推理形式等也有所不同。由於大量訓練參數導致進行end-to-end training困難度較大。因此產生多步訓練方式,將預訓練好的網絡添加到FCN后進行再訓練,同時,使用一些輔助性操作,如用於inference的region proposals,用於分類網絡和分割網絡的不相交訓練,使用額外的訓練數據作為預訓練或者全局訓練,另外,提升預處理技術也比較流行。
相關工作(可略過)
在深度網絡興起之前,實現像素級語義分割最好的是基於手工設計的特征分別對每個像素進行分類,典型的是將一個patch送入分類器(隨機森林,Boosting)來預測中心那個像素的類別概率。基於外形或者SfM已被用於Camvid的場景理解測試,成對或者更高級的CRF平滑預測出的噪聲進而提高准確率。而近年來更傾向於預測整個patch的每個像素的類別,而不是中心像素的類別。由於隨機森林更偏向於分錯類樣本的訓練,因此,准確率會有改善,而不利於結構性類別的分類。從Camvid視頻集中計算得到的深度圖被用於隨機森林的分類。另一種方法是利用流行的手工設計的特征和空間超像素特征來獲得更高的准確率。Camvid中表現最好的技術是將目標檢測的輸出與CRF中的分類器預測相結合解決標簽頻率不平衡問題。所有結果都表明用於提升分類特征的必要性。
NYU數據集表明通道數的對於分割效果的提升的作用較弱。用到的特征如RGB-SIFT,depth-SIFT 和像素位置。對於噪聲采用CRF進行平滑。后來用更加豐富的特征集包括LBP和區域分割后接CRF來提高准確率。更近期的工作,利用RGB和基於深度的融合信息來推理類別分割,及支持關聯。另一種方法致力於基於隨機森林分類器的實時重建和語義分割。這些方法的共性是都是基於手工設計的特征來對RGB或者RGBD圖像進行分類。
隨着深度卷積網絡的興起,讓研究者探索網絡特征學習的能力用於分割等結構預測問題,一種是復制網絡中最深層的特征並變換匹配圖像尺寸,然而結果是塊狀的。另一種利用RRN融合多個低分辨率的預測進而生成輸入圖像分辨率的預測。這些相比於手工特征已經有所進步,但對界定邊界仍不足。
較新的深度結構通過學習decode或map較低頻率圖片表示為像素級的預測。encoder網絡基於VGG16分類網絡產生低分辨率的特征表示。VGG16=Conv*13+FC*3,encoder網絡的權重 在ImageNet的目標分類中進行預訓練。decoder網絡更具不同結構而各異。同時產生多維度特征用於對每個像素進行分類。
FCN中的decoder將特征圖進行上采樣,同時結合相應的encoder特征圖,然后送入下一個encoder。FCN encoder參數量較大(134M)而decoder很少(0.5M),整體很難進行end-to-end訓練。對此,作者使用階段性訓練。在一個存在的訓練網絡中添加一個decoder網絡直到performance不能再進行提升。FCN中在三個decoder后就停止,所以忽略了高分辨率的特征,導致edge information的損失。同時,在進行測試過程中重利用encoder中的特征使內存變得緊張。
通過在FCN網絡后接RNN,同時用大數據集的fine-tune 可以提高FCN的預測性能。RNN模仿CRF較強的邊界界定,也利用了FCN的特征表示。這種方式明顯優於FCN-8,但隨着訓練數據的加大,二者效果相差不大。CRF-RNN與FCN-8等結構進行共同訓練時,CRF-RNN的優勢得以體現。雖然反卷積網絡需要消耗更多的計算資源,但是效果比FCN要好。CRF—RNN可以被添加到任何分割網絡后面。
多尺寸網絡的兩個特點:(i)使用多尺度的輸入圖片以及相應的深度特征提取網絡。(ii)單個網絡中不同層特征圖的組合。利用在多個尺度上提取的特征來提供局部和全局的上下文信息,同時利用早期encoder保存的高質量的細節信息來銳化分類邊界。
Deconvolutional網絡及其半監督形式的變體,利用encoder max pooling過程最大值的位置進行非線性上采樣,但其encoder 中的VGG16用到其FC層,導致訓練參數很大,不易進行訓練。
結構
SegNet由編碼網絡,解碼網絡后接一個分類層組成。編碼網絡由13個卷積層組成,與VGG16的前13層卷積相同,將VGG16在大型數據集上訓練得到的權重值作為編碼網絡的權重初始值,為了保留encoder 最深層輸出的到高分辨率的feature maps,刪掉VGG16中的全連接層,這么做的一個好處是可以大幅度減少encoder層中訓練參數的數量(from 134M to 14.7M),每一層encoder都對應着一層decoder,因此decoder網絡也是13層,在decoder網絡輸出后接一個多分類的soft-max分類器對每個像素生成類別概率。
encod網絡中的每一個編碼器通過一組卷積核來產生一系列的feature maps,后接一層BN+RELU+Max-pooling(2x2,stride=2),Max-pooling用於實現小空間移動上的空間不變性,同時,可以在feature map上有較大的感受野,但由於使用Max-pooling 導致分辨率上的損失。這種損失對邊界界定產生不利的影響,因此encoder網絡要在進行下采樣前着重捕捉和保存邊界信息。由於實際內存的限制,所以無法保存feature map 的全部信息。本文提出只保存encode Max-pooling中feature map value值最大的位置。對於pooling 2*2的窗口可以用2比特位實現,相比存儲feature map的float精度,效率較高,但對准確率會有輕微的損失,但仍適用實際應用。
decode網絡中的decoder 利用對應encoder feature map中保存的max-index對輸入的feature map進行上采樣,產生的稀疏feature maps后接一系列可訓練的卷積核,輸出密集的feature maps,后接BN用於規范化處理正則化減弱過擬合,與輸入對應的decoder產生多通道feature map,雖然輸入只有(RGB)三通道。其他的encoder,decoder的通道數,尺寸大小都是一一對應。decoder輸出的高維度的特征表示被送入一個可訓練的soft-max多分類器,對每個像素進行單獨分類。
soft-max輸出的是一個K(類別數)同的的概率圖,預測后的分割圖中的每個類別是每個像素中概率值最大所對應的類別。
DeconvNet與U-Net有與Se gNet相似的結構,但DeconvNet有更多的訓練參數,需要更多的計算資源而且不利於進行end-to-end的訓練。
U-Net不利用max-pooling index而是將整個feature map 送到decoder 拼接到上采樣后的feature map,十分占用內存資源,因此U-Net中無法使用到conv5和max-pool5模塊,而SegNet卻可以利用VGG16全部預訓練過的卷積層的權重值。
Decoder Variants
許多分割網絡的編碼網大同小異,而其解碼網絡的形式卻相差很大。SegNet decoding 上采樣階段借用encode階段產生的最大值的索引,這里不存在可學習的變量,但是上采樣后的feature map需要經過可訓練的多通道decoder 卷積核來降低輸入feature map 的稀疏性。其通道數與上采樣得到的feature map數目相同。有種變體是卷積核都是單通道的,只卷積與之對應的上采樣后的feature map,此種變體可以減少大量的訓練參數。
FCN中一個亮點是編碼過程中維度降低,將encoder feature map進行壓縮后用於對應的decoder feature map中。encode層中一個64通道的feature map 與1x1x64xK個卷積核卷積將維度講到K,encoder將壓縮后的這K通道的feature map送入decode層。FCN中通過使用固定可訓練的多通道的反卷積核實現上采樣。這里設置其核的大小為8x8,這里FCN將decode層反卷積后的feature map與對應的encode層的feature map進行相加作為decode層的輸出。核的權重值通常采用雙線性插值初始化。FCN需要在inference 有特征明顯的feature map,這就會造成內存資源的緊張。
其他變體有,將SegNet的decode層通過使用固定的雙線性插值賦值,消除可訓練參數,另一種極端是,在每一個decode層添加64個對應encode層的feature map。上述兩中的maxpooling Index都被使用,后接卷積操作,最后將featur map逐像素送入編碼網絡作為解碼網絡的輸出。還有將編碼層的下采樣層去掉,占用計算資源較多且效果較差。
訓練
數據集:CamVid (訓練:367張,測試:233,圖片尺寸:360X480,11個類別)
優化方法:SGD
learning_rate:0.1
momentum: 0.9
mini-batch: 12
loss: cross-entropy
分析
使用三種評價指標:global accuracy 數據集中被正確分類的像素所占的比例。
class average accuracy 每種類別准確率和取平均。
mIoU 懲罰 FalsePositivate 的預測,在每個類別上計算IOU然后取平均值。
實現性能最好的是當encoder 的feature map全部被保存,對於一個給定的encoder 網絡,更大的decode網絡可以提升性能,當inference 內存被限制時,encoder層壓縮后的feature maps(降維,max-pooling indices) 可以進行保存並用適當的解碼器來提升性能。
[1] K. Simonyan and A. Zisserman, “Very deep convolutional networks for large-scale image recognition,” arXiv preprint arXiv:1409.1556, 2014.
個人實驗結果