1. 程式人生 > >論文閱讀筆記十八:ENet: A Deep Neural Network Architecture for Real-Time Semantic Segmentation

論文閱讀筆記十八:ENet: A Deep Neural Network Architecture for Real-Time Semantic Segmentation

每一個 內核 基於 proc vgg 包含 rep 重要 偏差

技術分享圖片

論文源址:https://arxiv.org/abs/1606.02147

tensorflow github: https://github.com/kwotsin/TensorFlow-ENet

摘要

在移動端上進行實時的像素級分割十分重要。基於分割的深度神經網絡中存在大量的浮點運算而且需要經過較長的時間才可以進行投入使用。該文提出的ENet目的是減少潛在的計算。ENet相比現存的分割網絡,速度快18倍,參數量要少79倍,同時分割得到的準確率不有所損失,甚至有所提高。

介紹

目前,增強現實可穿戴設備,家庭智能設備,自動駕駛的興起,迫切需要將語義分割(場景理解)算法移植到較低性能的移動端設備上。分割算法對圖像中的每一個像素點進行類別標記。進來,較大的數據集與較強的計算資源(GPU,TPU)的出現促進了卷積神經網絡超越傳統的計算機視覺算法。盡管卷積網絡在分類和識別任務取得較好的效果,但進行像素級分割時,仍生成較為粗糙的空間結果。因此,經常會在此算法基礎上拼接其他算法來對結果進行增強,像基於顏色的分割,條件隨機場等。

為了對圖片進行空間分類和進行精細的分割,已經出現了像SegNet,FCN等網絡結構,這些結構都是基於VGG-16的大型多分類網絡。但其有大量的參數和長時間的推理時間。因此,這些網絡並不適用於要求處理圖片速度高於10fps的移動端或者電池供電的應用設備上。

該文所提出的網絡結構主要應用於快速的推理與進行較高準確率的分割。

相關工作

語義分割對於圖片理解與尋找目標發揮著重要的作用。在增強現實與自動駕駛中,語義分割發揮著舉足輕重的作用,此外,實時性的要求也是極高的。當下的計算機視覺應用普遍使用深度神經網絡。場景分析較好的卷積網絡使用兩階段網絡結構:編碼層和解碼層。受自編碼器的啟發。編碼-解碼結構的網絡在SegNet中出現並得到了改進。編碼部分類似於VGG的卷積網絡用於對輸入進行分類,而解碼部分主要用於對編碼網絡部分的輸出進行上采樣。但這些網絡的一個重大缺點是數量巨大的參數延長了其推理時間。不同於FCN,在SegNet中,VGG16的全連接層被移除,為了減少其浮點操作和內存的占用。但SegNet這種輕量級的網絡仍無法做到實時分割。

其他結構基於較簡單的分類器後接CRF作為一個後處理的步驟。這些復雜的後處理操作經常無法標記一幀圖片中較小的物體。CNN可以結合RNN來提高準確率,但無法解決速度消失的問題。但RNN可以作為一種後處理手段與任何其他技術進行結合。

網絡結構

ENet網絡結構如下表格,該文參考ResNet,將其結構描述為一個主分支與一個帶有卷積核的附加分支,最後進行像素級的相加融合。

技術分享圖片

ENet中的每個block如下圖b所示,每個block包含有三個卷積層:一個1x1的映射用於減少維度,一個主卷積層,一個1x1的擴張。將BN層與PReLU層穿插其中,將此結構組合定義為bottleneck 模型。如果bottleneck為下采樣,則在主分支上添加一個最大池化層,同時,bollteneck中第一個1x1的映射被一個大小為2x2,stride為2的卷積進行替換,對激活值進行padding操作,使其與feature map的尺寸相匹配。卷積大小為3x3的,類型有普通卷積,空洞卷積,及轉置卷積等,有時,用1x5或者5x1的非對稱卷積對其替換。對於正則化處理,在bottleneck2.0之前使用p=0.01,其他條件下使p=0.1。

ENet的初始部分包含單獨的一個block。如上圖a.第一階段包含5個bottleneck部分。第二,三階段結構相同,但第三階段的開始處並未有下采樣的過程。前三個階段屬於編碼階段。第四五階段屬於解碼階段。由於cuDNN使用分離的內核進行卷積與偏差項的計算,為了減少內核的調用與內存的占用,該網絡並未使用偏差項,結果發現,準確率也並未受很大的影響。在每個卷積層與pReLU層之間添加了一層BN層。在解碼網絡部分,最大池化層,被最大上采樣層代替,padding被無偏差項的空間卷積替換。ENet在最後一個上采樣過程中並未使用最大池化的索引,因為輸入圖片的通道為3,而輸出通道數為類別數,最終,用一個全卷積模型作為網絡的最後模型,占用部分解碼網絡的處理時間。

技術分享圖片

設計選擇

Feature map的尺寸:語義分割中對圖片進行下采樣操作有兩處缺點:(1)feature map分辨率的減少意味著空間位置信息的損失,如準確的邊界信息等。(2)進行全像素的語義分割要求網絡的輸出大小要與輸入的大小相同。這意味著對圖片進行了下采樣,就要進行形同程度的上采樣。增加了模型的大小與計算資源。對於第一個問題,FCN通過添加編碼層的feature map,SegNet通過保留編碼網絡中最大池化過程中最大值的索引,並借此在解碼網絡中生成稀疏的上采樣maps。考慮到內存需要,該文使用SegNet的方式。同時,過分的下采樣,十分不利於分割的準確率。

下采樣的一個優點是:在下采樣過的圖片中進行卷積操作會有較大的感受野,從而可以獲得更多的上下文信息。上下文信息十分利於不同類別的區分。該文發現使用空洞卷積的效果會更好。

Early downsampling: 要想實現較好的分割效果和實時的操作,要意識到處理較大的輸入圖片是十分消耗資源的。ENet的前兩個block極大的減少了輸入的尺寸,同時,只使用了一小部分feature map。由於可視化信息是高度空間冗余的,可以將其壓縮為一種更有效的表達形式。網絡的初始部分作用為特征提取及後續網絡對輸入的預處理。

解碼尺寸大小:SegNet是一個極其對稱的網絡結構,ENet網絡結構是非對稱的,包含一個較大的編碼層和一個小的解碼網絡。原因是編碼層應該像原始分類網絡的結構相似。用於處理較小的數據,同時進行信息的處理與濾波,解碼網絡對編碼網絡的輸出進行上采樣用於對細節的微調。

非線性操作:該文發現去掉網絡初始層中的大部分ReLU層會提升分割的效果,作者認為此網絡的深度不夠深。然後,該文將所有ReLU替換為PReLUs,針對每張feature map增加了一個額外的參數。

信息保留的維度變化: 前半部分進行下采樣是有必要的,但劇烈的維度衰減不利於信息的流動。為解決這個問題,該文任務在池化層後接一個卷積層增加了維度,進而增加了計算資源。為此,該文將池化操作與卷積操作進行並行操作,然後進行拼接。同時,在原始的ResNet的結構中,進行下采樣時,第一個1x1的映射,在所有維度上進行的是步長為2的卷積,丟棄了75%左右的輸入信息。將卷積核增加至2x2利於信息的保留。

分解卷積核: 一個二維的卷積可以被分解為兩個維度為1的卷積核。(nxn => nx1,1xn),該文使用5x1,1x5的非對稱卷積,減弱了函數學習的過擬合同時增加了感受野。卷積核的分解帶來的另一個好處是可以減少大量的參數。加上非線性處理,使計算功能更加豐富。

空洞卷積:該文將bottleneck中的卷積層替換為空洞卷積並進行串聯,增大了感受野,提高了分割的IOU。

正則化:目前的分割數據集有限,因此網絡的訓練很容易達到過擬合。該文使用空間Dropout進行處理。

結果

技術分享圖片

技術分享圖片

技術分享圖片

Reference

[1] Y. LeCun and Y. Bengio, “Convolutional networks for images, speech, and time series,” The handbook of brain theory and neural networks, pp. 255–258, 1998.

[2] A. Krizhevsky, I. Sutskever, and G. E. Hinton, “Imagenet classi?cation with deep convolutional neural networks,” in Advances in Neural Information Processing Systems 25, 2012, pp. 1097–1105.

[3] K. Simonyan and A. Zisserman, “Very deep convolutional networks for large-scale image recognition,” arXiv preprint arXiv:1409.1556, 2014.

論文閱讀筆記十八:ENet: A Deep Neural Network Architecture for Real-Time Semantic Segmentation