1. 程式人生 > >SegNet:A Deep Convolutional Encoder-Decoder Architecture for Image Segmentation

SegNet:A Deep Convolutional Encoder-Decoder Architecture for Image Segmentation

題目 精確 ctu 記錄 aries vol log engine unet

論文英文原文網址:https://arxiv.org/abs/1511.00561

SegNet也是圖像分割的經典網絡,論文的題目可以了解到,SegNet是一個有深度的,帶卷積的,同時也自帶編碼-解碼的結構,這個結構主要用於圖像分割。SegNet也是一個全卷積神經網絡。他的中心結構主要包括:一個編碼網絡,有編碼就有解碼,這另一個就是解碼網絡,解碼網絡後面又跟著一個像素級的分類層。編碼網絡的結構與VGG16的13個卷積層的拓撲結構相同。剛開始的編碼網絡產生低分辨率特征,而解碼網絡的作用就是將這個粗略的特征映射到整個輸入圖像級分辨率特征圖上用於像素級的分類(此映射必須產生對精確邊界定位有用的特征)。作者強調了一小下,SegNet的新穎之處在於解碼器上采樣其低分辨率輸入特征圖的方式。這種方式就是解碼器通過池化索引來實現非線性的上采樣,這個池化索引是由與解碼器相對應的編碼器進行最大池化操作計算得到的。這就消除了學習上采樣的必要,上采樣後的maps是稀疏的,然後和可訓練的濾波核進行卷積,以產生密集的feature maps。分割後的結果會很粗糙,主要是因為最大池化層和降采樣減少了feature maps的分辨率。為了讓形狀很小的物體也可以被描述出來,要從提取的圖像映射中保留邊界信息。采用SGD進行訓練,因為可以進行end-to-end訓練可以一起調節網絡的所有權重。前面提到SegNet的編碼網絡與VGG16中的13個卷積層相同,由於閹割掉了VGG的全連接層,使SegNet的網絡要比其他網絡小許多,更容易進行訓練。SegNet的一個關鍵component是解碼網絡,這個有層次的網絡與編碼網絡相對應,前面也說過,解碼器使用從與之對應的編碼器得到的最大池化索引來對輸入的特征圖進行非線性上采樣。這個想法受到了一個為無監督進行特征學習的結構的啟發。在解碼過程中重使用最大池化索引有幾個接地氣的優點:一是改善了邊界的劃定,二是減少了進行end-to-end訓練的參數,因為共用相應池化層的參數,最後一個是這種形式的上采樣可以合並到任何encoder-decoder中。在用於分割的深度框架裏具有相同的編碼網絡同時訓練參數量也是巨大的,即VGG16,不同點主要體現在解碼網絡的訓練和推理中。

作者在主要是對SegNet解碼技術和FCN的分析,關註分割結構設計的實際權衡。作者提到最近用於分割的深度框架都有自己的編碼網絡,像VGG16,但是其解碼網絡的訓練和推理上卻有所不同。由於要訓練的網絡參數太多,訓練網絡較為困難,這就導致出現了多階段訓練,將網絡加到預先訓練好的架構中(像FCN),用RPN,非相交分類訓練,和分割網絡以及預訓練過的額外的訓練數據又或者進行全訓練等方法進行輔助推理一波。

作者總結了一些分割的前世和今生,今天在這裏記錄一下,在深度神經網絡出現之前,最好的方法是對每個要分類的像素進行手工特征設計。經典的,像隨機森林或者Boosting那樣通過將一個patch送到分類器中從而預測每個中心像素的類別概率,

來自每個像素級噪聲的預測,通過使用成對或更高階的CRF來進行平滑以提高其準確度。前面提到過是通過預測patch,基於外形的特征或者是基於SfM(SFM算法是一種基於各種收集到的無序圖片進行三維重建的離線算法 參考:https://blog.csdn.net/qq_20791919/article/details/74936438)處理後的外觀已經在道路場景理解測試中進行探索。

來自分類器的對每個像素噪聲的預測通過使用成對或者更高級別的CRF(條件隨機場)來進行平滑以提高精度。更近的方法是通過嘗試預測patch中所有像素的標簽而不僅僅是只預測中心像素的標簽來生成高質量的unary(個人感覺這個unary翻譯過來就問單元)。雖然改善了基於的隨機森林的unaries結果,但是精簡結構後的類別分的效果較差。另一種方法是主張利用手工設計的特征和時空超像素的組合來獲得更高的準確率。CamVid測試中最好的方法通過在CRF框架中將對象檢測輸出與分類器預測相結合從而解決標簽之間頻率不平衡問題。作者提到了室內RGBD數據集,使用的方法為RGB-SIFT,深度SIFT和像素位置等作為神經網絡分類器的輸入,然後接一個CRF進行平滑,通過使用LBP和區域分割在內的更豐富的特征集合進行改進,從而獲得更高的準確性。在最近的工作中,使用RGB和基於深度cues的組合來推斷出類別分割和支持關系。另一種方式側重於實時的進行聯合重建和語義分割,隨機森林被用作分類器(隨機森林真心很強大),在進行類別的分割之前使用邊界檢測和分層分組。上述這些方法的共同特征是使用手工設計的特征來對RGB或RGBD圖像進行分類。

用分類網絡中最深一層的特征來匹配圖像尺寸應用於圖像的分割,但是產生的分類結果是塊狀的。另一種是使用普通的 神經網絡合並幾個低分辨率的預測chaung,另一種使用循環神經網絡合並幾個低分辨率的預測來創建輸入圖片的分辨率預測圖,其劃定邊界的能力很差。

用於分割的新的框架結構通過學習解碼或者將低分辨率圖像映射為像素級的預測來應用於分割。其中,產生低分辨率圖像的表示的編碼網絡是VGG16分類網絡,有13個卷積層和3個全連接層。不同結構的解碼網絡有所不同,並為每個像素產生多個特征以用於接下來的分類。

FCN中的每個解碼器學習對輸入的特征映射進行上采樣,並將他們與相應的編碼器的feature map進行組合作為下一個解碼器的輸入。這種結構的特點是編碼網絡中有大量的可訓練的參數,而解碼網絡的卻很少。此網絡的整體規模很大,很難進行end-to-end訓練。所以,作者使用分段式訓練處理,解碼網絡中的每個解碼器都被逐個的添加到訓練網絡中,網絡不會一直增加,如果觀察的性能沒有增加則停止。網絡的增長在三個解碼器之後就會停止,如果忽略高分辨率的feature map就會導致邊緣信息的丟失。上面是有關訓練的問題,在編碼器中重新使用編碼器產生的feature map會在測試時時內存比較擁擠。

在RNN上外加FCN進行微調實現,在利用FCN的特征表示時,RNN層模仿CRF的清晰的邊界描繪能力。與FCN-8相比,前面的結構有著顯著的改進,隨著數據的增多,這種改進也不大。FCN+CRF-RNN這種結構在進行聯合訓練時體現出了優勢,雖然以更復雜的訓練和推理為代價,去卷積網絡的性能要明顯優於FCN。這裏作者提出一個疑問,就是隨著前饋分割engine變得更好,CRF-RNN的感知優勢是否會降低。在任何條件下,CRF-RNN網絡都可以加到包括SegNet的任何分段體系結構中。作者提到過多尺寸的深層結構也是比較流行的。有兩種風格,一是結合來自深層特征提取網絡的少量尺寸的輸入圖像,另一種是結合來自單一深層架構的不同層的feature maps。常見的思路就是進行不同尺寸的特征提取,從而提供局部或全局的上下文,同時,早期編碼層使用的feature maps保留了更多的高頻率細節,從而是類邊界更加清晰。為了使訓練更易進行,采用多階段訓練和數據增強一起使用,用多個卷積路徑推理進行特征提取是十分昂貴的。將CRF添加到多尺寸網絡進行聯合訓練。反卷積網絡及其半監督的變體形式,使用的是編碼器的feature maps在解碼網絡中實現非線性上采樣。

作者提出的網絡結構是編碼-解碼網絡,編碼器是由卷積,非線性單元,最大池化以及降采樣來獲得feature maps。對於每個樣本,池中計算的最大位置索引被存儲到解碼器中。解碼器通過存儲中的索引來對feature maps進行上采樣操作。解碼網絡使用可訓練的卷積核與上采樣的feature map卷積用於重建輸入圖像。這種結構用於無監督前的預訓練,通過使用小的輸入patch進行分層特征的學習從而能夠將整幅圖用於分層編碼器的學習。

SegNet的網絡結構

技術分享圖片

SegNet有編碼網絡和相對應的解碼網絡,其後是最終的像素級分類層。編碼網絡由13個卷積層組成,他們對應於VGG16中的前13個卷積層,用於對物體的分了。作者使用初始化訓練過程,使用經過訓練的權重對大數據集進行分類。SegNet將全連接層去除(某種程度上也減少了網絡的參數的數量),目的是在最深的編碼器輸出端保留更高分辨率的feature maps。在編碼網絡中每個編碼器進行卷積從而產生一組feature maps。這些feature maps會被進行標準化處理,然後應用ReLU進行處理。然後進行大小2*2,步長為2的最大池化操作,將結果進行二倍降采樣。最大池化操作用於實現輸入圖像中小空間位移的平移不變性。降采樣會產生feature map中每個像素在一個輸入圖像的上下文信息。多層最大池化和降采樣可以實現更多的平移不變性從而使分類更加魯棒,但對feature maps 上的空間分辨率仍有一定損失。對邊界細節有損的圖像表示不利於分割(對邊界劃分很重要的分割)。因此,需要在進行降采樣前對編碼器中feature map捕獲並存儲邊界信息。要對所有的feature map進行存儲是不可能的,只存儲每個編碼器feature map的每個池化窗口中最大特征值的位置。解碼網絡中的適當解碼器通過利用來自對應的編碼網絡feature map中存儲的最大池化索引值對輸入的feature map進行上采樣。從而得到稀疏的特征圖。SegNet的解碼過程如下圖,

技術分享圖片

圖中也說了,解碼後的feature map還要進行卷積操作從而生成密集的feature maps然後進行批標準化處理。這裏與常識不同,雖然編碼器輸入由RGB3個通道,但是與第一個編碼器對應的解碼器會生成多通道的feature map,這個與網絡中的其他編碼器不同(其他的解碼器能夠產生和編碼器輸入相同數量的大小和通道的feature maps)。最後一個解碼器輸出的高維特征表示被送到可訓練的softmax分類器,用於分割每個獨立的像素。DeconvNet和Unet具有與SegNet相似的結構。但由於DeconvNet具有全卷積,有大量的參數,從而難以進行end-to-end的訓練。而Unet無法重復使用池化的 索引,而是將整個feature map轉移的對應的解碼器中,通過反卷積進行上采樣得到解碼器的feature map。而且Unet沒有VGG中的conv5和max-pool5層。SegNet使用來自VGG所有預先訓練的卷積層權重作為預訓練的權重。

作者後面提到了一個只有四個encoder 和四個decoder的miniSegNet,其在卷積之後就不在使用bias,在decoder網絡中也沒有ReLU非線性化處理。所有encoder decoder層的核大小定義為7*7,可以從feature map中獲得更多的上下文信息。

具體實驗及分析請參考論文原文。

SegNet:A Deep Convolutional Encoder-Decoder Architecture for Image Segmentation