空洞卷積(atrous convolution)又叫擴張卷積(dilated convolution),其實就是向卷積層引入了一個稱為“擴張率(dilation rate)”的新參數,這個參數定義了卷積核處理數據時各值的間距。普通卷積和空洞卷積圖示如下(以3*3卷積為例)
(普通卷積)
(空洞卷積)
那么這樣的結構是為了解決什么問題呢?
這又不得不提起傳統網絡VGG,在VGG的設計中,作者發現了卷積疊加過程中的一個巧妙規律,即7*7的卷積層正則等效於3個3*3卷積層的疊加,在減少參數的同時,這樣的結構更容易學到一個可生成的、表現力良好的特征空間,這也是為什么我們現在看到的網絡結構幾乎都是3*3,5*5的卷積層的原因。
但與此同時,伴隨產生了對於deep cnn中上采樣和下采樣的一系列問題,一方面是pooling導致的內部數據結構和空間層級化的信息丟失,另一方面,小物體(在一定條件下)經過下采樣之后數據會丟失,導致信息無法重建。這個問題在語義分割中尤其顯著,而空洞卷積的設計很好的避免了這些問題。
空洞卷積的兩大優勢:
1.特征圖相同情況下,空洞卷積可以得到更大的感受野,從而獲得更加密集的數據
2.特征圖相同情況下,更大的感受野可以提高在目標檢測和語義分割的任務中的小物體識別分割的的效果。
我們可以顯而易見的看到,使用空洞卷積代替下采樣/上采樣可以很好的保留圖像的空間特征,也不會損失圖像信息。當網絡層需要更大的感受野,但是由於計算資源有限無法提高卷積核數量或大小時,可以考慮使用空洞卷積。
空洞卷積存在的問題:
1.網格效應
當多次疊加擴張率為2的3*3 kernel時,會產生如下問題:
由此可見,並不是所有的pixel都用來計算了,這樣的方式會損失信息的連續性,這對於像素級的任務來說是致命的。
2.遠距離信息可能不相關
需要注意的是,如果光采用大的擴張率的卷積可能只對一些大物體分割有效果。設計好空洞卷積層的關鍵在於如何同時處理不同大小物體的關系。
一個稱為HDC(混合空洞卷積)的結構被設計出來解決卷積核不連續的問題,它具有如下幾個特性:
1.疊加卷積的擴張率不能有大於1的公約數
2.將擴張率設計成鋸齒狀結構,如[1,2,5,1,2,5]
圖(a)是連續做rate = 2的空洞卷積的結果,圖(b)是分別做rate為1/2/3空洞卷積的結果。
后者的優勢在於,從一開始就保留了完整連續的3*3區域,之后的幾個rate設計又保證了感受野的連貫性,即使有重疊也密不透風。