ENet論文解讀
最近在用caffe來訓練用於移動設備的分割模型,但是由於對時間要求很高,所以不斷嘗試..
於是我看到了ENet,目前還在訓練中,不知道效果怎麼樣:)
應用背景
許多移動應用需要實時語義分割(Real-timeSemanticSegmentation)模型,現有的深度神經網路難以實現,問題在於深度神經網路需要大量的浮點運算,導致運行時間長,從而降低了時效性。ENet即針對這一問題提出的一種新型有效的深度神經網路,相比於現有的模型,在速度加快了18×倍,浮點計算量上減少了75×,參數減少了79×,且有相似的精度。ENet在CamVid,
Cityscapes and SUN datasets做了相關對比測試。
下採樣上採樣過程
使用卷積網路就會遇到下採樣(downsampling),下採樣會導致丟失部分邊緣信息,同時上採樣也會需要較大計算量。前者通過SegNet的方法解決,後者不可避免精度的損失,但是還是有一些方法來均衡效率與精度。 網路輸入的幀若是較大會耗費大量時間去處理。所以本文將輸入先壓縮,只輸入小的特徵地圖給網路結構,這樣也去除了一部分圖片的視覺冗餘內容。
SegNet的encoder和decoder是對稱的,然而ENet中考慮到decoder僅僅是對encoder的輸出做上採樣,只需要在細節上微調,所以設計了「大Encoder」「小Decoder」的結構。
採用PRelu
有趣的是,非線性激活函數ReLU的應用反而降低了精度,分析的原因是我們的網路層數太少了,不夠深,所以不能很快過濾我們的信息.所以我們在網路的第一層並沒有採用relu,後面幾層都採用PRelu
Dilated
convolutions(膨脹/帶孔卷積):延伸了感受野,詳見「Multi-scalecontext aggregation by dilated convolutions,」,精度蹭蹭蹭上升。bottleneck
每個block共兩條路線,學習殘差.這裡主要講在encoder階段的構成。 分為兩種情況:
- 下採樣的bottleneck:
- 主線包括三個卷積層,
- 先是2×2投影做降採樣;
- 然後是卷積(有三種可能,Conv普通卷積,asymmetric分解卷積,Dilated空洞卷積)
- 後面再接一個1×1的做升維 注意每個卷積層後均接Batch Norm和PReLU。
- 輔線包括最大池化和Padding層
- 最大池化負責提取上下文信息
- Padding負責填充通道,達到後續的殘差融合 融合後再接PReLU。
- 非下採樣的bottleneck:
- 主線包括三個卷積層,
- 先是1×1投影;
- 然後是卷積(有三種可能,Conv普通卷積,asymmetric分解卷積,Dilated空洞卷積)
- 後面再接一個1×1的做升維 注意每個卷積層後均接Batch Norm和PReLU。
- 輔線直接恆等映射(只有下採樣才會增加通道數,故這裡不需要padding層) 融合後再接PReLU。
stage
ENet模型大致分為5個Stage:
- initial:初始化模塊,
左邊是做3×3/str=2的卷積,右邊是做MaxPooling,將兩邊結果concat一起,做 通道合 並,這樣可以上來顯著減少存儲空間。
- Stage1:encoder階段。包括5個bottleneck,第一個bottleneck做下採樣,後面4個重複的bottleneck
- Stage2-3:encoder階段。stage2的bottleneck2.0做了下採樣,後面有時加空洞卷積,或分解卷積。stage3沒有下採樣,其他都一樣。
- Stage4~5:屬於decoder階段。比較簡單,一個上採樣配置兩個普通的bottleneck。
模型架構在任何投影上都沒有使用bias,這樣可以減少內核調用和存儲操作。在每個卷積操作中使用BatchNorm。encoder階段是使用padding配合max pooling做下採樣。在decoder時使用max unpooling配合空洞卷積完成上採樣。
Feature map resolution
對圖像的下採樣有兩個缺點:
- 1、降低feature map resolution,會丟失細節信息,容易丟失邊界信息。
- 2、semantic
segmentation輸出與輸入有相同的解析度,strong downsampling對應著strong upsampling,這增加了模型的size和計算量
下採樣的好處在於可以獲取更大的感受野,獲取更多的上下文信息,便於分類。針對問題1,有兩個解決方案:
- FCN的解決辦法是將encoder階段的feature map塞給decoder,增加空間信息。
- SegNet的解決辦法是將encoder階段做downsampling的indices保留到decoder階段做upsampling使用。
ENet採用的是SegNet的方法,這可以減少內存需求。同時為了增加更好的上下文信息,使用dilated conv(空洞卷積)
擴大上下文信息。
Early downsampling
早期處理高解析度的輸入會耗費大量計算資源,ENet的初始化模型會大大減少輸入的大小。這是考慮到視覺信息在空間上是高度冗餘的,可以壓縮成更有效的表示方式。
網路的初始層不應該直接面向分類做貢獻,而且儘可能的提取輸入的特徵。
Decoder
size 相比於SegNet中encoder和decoder的鏡像對稱,ENet的Encoder和Decoder不對稱,由一個較大的Encoder和一個較小的Decoder組成。
Encoder主要進行信息處理和過濾,和流行的分類模型相似。而decoder主要是對encoder的輸出做上採樣,對細節做細微調整。
Nonlinear operations
一般在卷積層之前做ReLU和Batch Norm效果會好點,但是在ENet上使用ReLU卻降低了精度。 論文分析了ReLU沒有起作用的原因是網路架構深度,在類似ResNet的模型上有上百層,而ENet層數很少,較少的層需要快速過濾信息,故最終使用PReLUs。
Information-preserving dimensionality changes
在Initial Block,將Pooling操作和卷積操作並行,再concat到一起,這將inference階段時間加速了10倍。同時在做下採樣時,原來ResNet的卷積層分支會使用1×1/str=2的卷積,這會丟失大量的輸入數據。ENet改為2×2的卷積核,有效的改善了信息的流動和準確率。
Factorizing filters
將n×n的卷積核拆為n×1和1×n(InceptionV3提出的)。可以有效的減少參數量,並提高模型感受野。
Dilated convolutions
空洞卷積Dilated convolutions可以有效的提高感受野。有效的使用Dilated convolutions提高了4%的IoU,使用Dilated convolutions是交叉使用,而非連續使用。
Regularization
因為數據集本身不大,很快會過擬合。使用L2效果不佳,使用stochastic depth還可以,但琢磨了一下stochastic depth就是Spatial Dropout的特例,故最後選擇Spatial Dropout,效果相對好一點
總結:
1.開始採用下採樣和pooling層結合,減少有用信息損失
2.bottleneck結構,左邊下採樣,右邊max-pooling,然後將信息結合到一起
3.使用PRelu代替Relu
4.使用非對稱卷積
5.使用空洞卷積來增大感受野
推薦閱讀:
※不容錯過的八大商科資料庫,再多Paper也不怕
※AAAI 2018最佳論文出爐,中國留學生再下一城
※【AAAI Oral】利用DeepMind的DQN解數學應用題,準確率提升15%
※fpn論文解讀
※在社交媒體上曬論文,會帶來更高的引用嗎?
TAG:論文 |