一、空洞卷積的提出
空洞卷積(atrous convolutions)又名擴張卷積(dilated convolutions),向卷積層引入了一個稱爲 “擴張率(dilation rate)”的新參數,該參數定義了卷積核處理數據時各值的間距。
該結構的目的是在不用pooling(pooling層會導致信息損失)且計算量相當的情況下,提供更大的感受野。 順便一提,卷積結構的主要問題如下:
池化層不可學
內部數據結構丟失;空間層級化信息丟失。
小物體信息無法重建 (假設有四個pooling layer 則 任何小於 2^4 = 16 pixel 的物體信息將理論上無法重建。)
而空洞卷積就有內部數據結構的保留和避免使用 down-sampling 這樣的特性,優點明顯。
二、空洞卷積原理
如下如,卷積核沒有紅點標記位置爲0,紅點標記位置同正常卷積核。
假設原始特徵爲feat0,首先使用擴張率爲1的空洞卷積生成feat1,feat1上一點相對feat0感受野爲33(如圖a);
然後使用擴張率爲2的空洞卷積處理feat1生成feat2(如圖b),使第一次空洞卷積的卷積核大小等於第二次空洞卷積的一個像素點的感受野,圖b即feat1上一個點綜合了圖a即feat0上33區域的信息,則生成的feat2感受野爲77,即整個圖b深色區域;
第三次處理同上,第二次空洞卷積的整個卷積核大小等於第三次空洞卷積的一個像素點的感受野,圖c即feat2上每個點綜合了feat0上77的信息(感受野),則採用擴張率爲3的空洞卷積,生成的feat3每一個點感受野爲1515。
相比較之下,使用stride爲1的普通33卷積,三層之後感受野僅僅爲(kernel-1)*layer+1=7。
三、空洞卷積問題
感受野跳躍
我們對同一張圖連續三次使用擴張率爲1的空洞卷積,觀察整張圖的中心點的感受野(如下圖):
很明顯,感受野不連續(我們上一小結的例子就沒這個問題,所以空洞卷積依賴網絡設計)。
小尺度物體檢測
類似第一個問題,仍然需要調整擴張率的組合來解決這個問題。
四、網絡設計研究
第一個特性是,疊加捲積的 dilation rate 不能有大於1的公約數。比如 [2, 4, 6] 則不是一個好的三層卷積,依然會出現 gridding effect。
第二個特性是,我們將 dilation rate 設計成 鋸齒狀結構,例如 [1, 2, 5, 1, 2, 5] 循環結構。
第三個特性是,我們需要滿足一下這個式子:
一個簡單的例子: dilation rate [1, 2, 5] with 3 x 3 kernel (可行的方案):
而這樣的鋸齒狀本身的性質就比較好的來同時滿足小物體大物體的分割要求(小 dilation rate 來關心近距離信息,大 dilation rate 來關心遠距離信息)。
單分支設計的研究
通向標準化設計:Hybrid Dilated Convolution (HDC),可以很好的滿足分割需要,如下圖所示:
多分支研究解決多尺度分割
僅僅(在一個卷積分支網絡下)使用 dilated convolution 去抓取多尺度物體是一個不正統的方法。比方說,我們用一個 HDC 的方法來獲取一個大(近)車輛的信息,然而對於一個小(遠)車輛的信息都不再受用。假設我們再去用小 dilated convolution 的方法重新獲取小車輛的信息,則這麼做非常的冗餘。
基於港中文和商湯組的 PSPNet 裏的 Pooling module (其網絡同樣獲得當年的SOTA結果),ASPP 則在網絡 decoder 上對於不同尺度上用不同大小的 dilation rate 來抓去多尺度信息,每個尺度則爲一個獨立的分支,在網絡最後把他合併起來再接一個卷積層輸出預測 label。這樣的設計則有效避免了在 encoder 上冗餘的信息的獲取,直接關注與物體之間之內的相關性。