[卷積]空洞卷積的改進
文章來源: https://zhuanlan.zhihu.com/p/50369448
從這幾年的分割結果來看,基於空洞卷積的分割方法效果要好一些,為此,拿出兩天時間來重新思考下空洞卷積問題。
- . -語義分割創新該怎麽做呢。
引言
空洞卷積(Dilated/Atrous Convolution),廣泛應用於語義分割與目標檢測等任務中,語義分割中經典的deeplab系列與DUC對空洞卷積進行了深入的思考。目標檢測中SSD與RFBNet,同樣使用了空洞卷積。
- 標準卷積:以3*3為例,以下分辨率不變與分辨率降低的兩個實例;
- 空洞卷積:在3*3卷積核中間填充0,有兩種實現方式,第一,卷積核填充0,第二,輸入等間隔采樣。
標準卷積與空洞卷積在實現上基本相同,標準卷積可以看做空洞卷積的特殊形式。看到這,空洞卷積應該不那麽陌生了。。
空洞卷積的作用
空洞卷積有什麽作用呢?
- 擴大感受野:在deep net中為了增加感受野且降低計算量,總要進行降采樣(pooling或s2/conv),這樣雖然可以增加感受野,但空間分辨率降低了。為了能不丟失分辨率,且仍然擴大感受野,可以使用空洞卷積。這在檢測,分割任務中十分有用。一方面感受野大了可以檢測分割大目標,另一方面分辨率高了可以精確定位目標。
- 捕獲多尺度上下文信息:空洞卷積有一個參數可以設置dilation rate,具體含義就是在卷積核中填充dilation rate-1個0,因此,當設置不同dilation rate時,感受野就會不一樣,也即獲取了多尺度信息。多尺度信息在視覺任務中相當重要啊。
從這裏可以看出,空洞卷積可以任意擴大感受野,且不需要引入額外參數,但如果把分辨率增加了,算法整體計算量肯定會增加。
空洞卷積感受野如何計算
說了這麽多有關感受野的話,感受野究竟怎麽計算呢?其實和標準卷積是一致的。
空洞卷積實際卷積核大小:
K=k+(k-1)(r-1),k為原始卷積核大小,r為空洞卷積參數空洞率;
以三個r=2的3*3/s1空洞卷積為例計算感受野:
K=k+(k-1)(r-1)=3+2*1=5
R=1+4+4+4=13
而語義分割由於需要獲得較大的分辨率圖,因此經常在網絡的最後兩個stage,取消降采樣操作,之後采用空洞卷積彌補丟失的感受野。
以語義分割中常使用的VGG和ResNet50為例,計算其空洞前與空洞後的感受野。
VGG16:將FC6層使用7*7卷積替換,其他不變,此版本我們稱為VGG_Conv,根據deeplabv1的設置,我們使用DeepLab-CRF-7x7,即取消pool4和pool5的降采樣操作,改為了3*3/s1,同時將 conv5_1-conv5_3使用r=2的空洞卷積。FC的空洞率r=4。
VGG_Conv:R=1+6)*2+2+2+2)*2+2+2+2)*2+2+2+2)*2+2+2)*2+2+2=404
DeepLab-CRF-7x7:R=1+24)+2+4+4+4)+2+2+2+2)*2+2+2+2)*2+2+2)*2+2+2=412
兩者和感受野近似相等,從deeplab實驗結果可以看出,感受野不一定和之前完全一樣,但感受野大了效果會好一些。表中結果和自己計算的不一樣,不知道表中感受野怎麽計算的。。
結論:空洞前與空洞後感受野可以不一致,但空洞後的感受野不要小於之前的,這樣其實是不影響網絡精調的,因為參數沒有變。恍然大悟啊!
空洞卷積gridding問題
是的,空洞卷積是存在理論問題的,論文中稱為gridding,其實就是網格效應/棋盤問題。因為空洞卷積得到的某一層的結果中,鄰近的像素是從相互獨立的子集中卷積得到的,相互之間缺少依賴。
- 局部信息丟失:由於空洞卷積的計算方式類似於棋盤格式,某一層得到的卷積結果,來自上一層的獨立的集合,沒有相互依賴,因此該層的卷積結果之間沒有相關性,即局部信息丟失。
- 遠距離獲取的信息沒有相關性:由於空洞卷積稀疏的采樣輸入信號,使得遠距離卷積得到的信息之間沒有相關性,影響分類結果。
解決方案
- Panqu Wang,Pengfei Chen, et al.Understanding Convolution for Semantic Segmentation.//WACV 2018
通過圖a解釋了空洞卷積存在的問題,從左到右屬於top-bottom關系,三層卷積均為r=2的dilatedConv,可以看出最上層的紅色像素的感受野為13且參與實際計算的只有75%,很容易看出其存在的問題。
使用HDC的方案解決該問題,不同於采用相同的空洞率的deeplab方案,該方案將一定數量的layer形成一個組,然後每個組使用連續增加的空洞率,其他組重復。如deeplab使用rate=2,而HDC采用r=1,r=2,r=3三個空洞率組合,這兩種方案感受野都是13。但HDC方案可以從更廣闊的像素範圍獲取信息,避免了grid問題。同時該方案也可以通過修改rate任意調整感受野。
- Fisher Yu, et al. Dilated Residual Networks. //CVPR 2017
如果特征map有比空洞率更高頻的內容,則grid問題更明顯。
提出了三種方法:
Removing max pooling:由於maxpool會引入更高頻的激活,這樣的激活會隨著卷積層往後傳播,使得grid問題更明顯。
Adding layers:在網絡最後增加更小空洞率的殘參block, 有點類似於HDC。
Removing residual connections:去掉殘參連接,防止之前層的高頻信號往後傳播。
- Zhengyang Wang,et al.Smoothed Dilated Convolutions for Improved Dense Prediction.//KDD 2018.
空洞卷積的分解觀點,在原始特征圖上周期性采樣形成4組分辨率降低的特征圖,然後使用原始的空洞卷積參數(去掉了空洞0)分別進行卷積,之後將卷積的結果進行上采樣組合。從該分解觀點可以看出,卷積前後的4個組之間沒有相互依賴,使得收集到不一致的局部信息。
從上面分解的觀點出發:
(1) 在最後生成的4組卷積結果之後,經過一層組交錯層,類似於ShuffleNet,使得每組結果能進行相互交錯,相互依賴,以此解決局部信息不一致的問題。
(2) 第二種方法為在空洞卷積之前進行局部信息依賴,即增加一層卷積操作,卷積利用了分離卷積,並且所有通道共享參數。
- Liang-Chieh Chen,et al.Rethinking Atrous Convolution for Semantic Image Segmentation//2017
deeplabv3在v2基礎上進一步探索空洞卷積,分別研究了級聯ASPP與並聯ASPP兩種結構。
deeplabv3不同於deeplabv2,在resnet101基礎上級聯了更深的網絡,隨著深度的增加,使用了不同的空洞率的卷積,這些卷積保證分辨率不降低的情況下,感受野可以任意控制,一般讓空洞率成倍增加。同時使用了Multigrid策略,在同一個blocks的不同層使用分層的空洞率,如2,4,8,而不是都使用2,這樣使得感受野相比原來的有所增加。但這樣同樣會存在grid問題。
ASPP存在的問題,當使用的空洞率增大時,有效的濾波參數數量逐漸減小。極端的,當r等於特征圖大小時,該卷積沒有捕獲整幅圖像的上下文信息,而是退化為1*1卷積。
解決方案:增加圖像級特征,使用全局池化獲取圖像全局信息,而其他部分的卷積為了捕獲多尺度信息,這裏的卷積不同於deeplabv2,加了batch normalization。
- Sachin Mehta,et al. ESPNet: Efficient Spatial Pyramid of Dilated Convolutions for Semantic Segmentation. //ECCV 2018
ESPNet利用分解卷積的思想,先用1*1卷積將通道數降低減少計算量,後面再加上基於空洞卷積的金字塔模型,捕獲多尺度信息。
之前的方法都是通過引入新的計算量,學習新的參數來解決grid問題。而這裏直接使用了特征分層的思想直接將不同rate的空洞卷積的輸出分層sum,其實就是將不同的感受野相加,彌補了空洞帶來的網格效應。從結果上看效果不錯。
訓練技巧:
所有卷積後都使用BN和PReLU,很多實時分割小網絡都使用了PReLU;
使用Adam訓練,很多小網絡使用這個;
- Tianyi Wu,et al.Tree-structured Kronecker Convolutional Networks for Semantic Segmentation.//AAAI2019
使用Kronecker convolution來解決空洞卷積局部信息丟失問題,以r1=4、r2=3為例,KConv將每個標準卷積的元素都乘以一個相同的矩陣,該矩陣由0,1組成,這樣參數量是不增加的。該矩陣為:
這樣每個元素乘以矩陣後變為上面右圖所示的圖。因此,可以看出r1控制空洞的數量,也即擴大了感受野,而r2控制的是每個空洞卷積忽視的局部信息。當r2=1時,其實就是空洞卷積,當r2=r1=1時就是標準卷積。
總體效果mIOU提升了1%左右。
除此之外,提出了一個TFA模塊,利用樹形分層結構進行多尺度與上下文信息整合。結構簡單,但十分有效,精度提升4-5%。
- Hyojin Park,et al.Concentrated-Comprehensive Convolutions for lightweight semantic segmentation.//2018
針對實時語義分割提出的網絡結構,深度分離卷積與空洞卷積的組合,在ESPNet上做的實驗。並且說明簡單的組合會帶來精度的降低,由於局部信息的丟失。為此,在深度分離空洞卷積之前,使用了兩級一維分離卷積捕獲局部信息。
網絡結構上與ESPNet保持一致,其中,並行分支結果直接Cat,不需要後處理,每個分支不需要bn+relu。消融實驗表明,在一維卷積之間加入BN+PReLU,精度會增加1.4%。
[卷積]空洞卷積的改進