膨脹卷積(Dilated convolution)

Dilated conv,中文叫做空洞卷積或者擴張卷積,起源於語義分割,大部分文章也用於語義分割,具體能否對其他應用有價值姑且還不知道,但確實是一個不錯的探究方向。

感受野(receptive field):CNN中,某一層輸出結果中一個元素所對應的輸入層的區域大小,感受野是卷積核在圖像上看到的大小,例如3×3卷積核的感受野大小爲9。越大的感受野包含越多的上下文關係。

  • 膨脹卷積與普通的卷積相比:除了卷積核的大小以外,還有一個擴張率(dilation rate)參數,主要用來表示膨脹的大小。
  • 膨脹卷積與普通卷積的相同點在於:卷積核的大小是一樣的,在神經網絡中即參數數量不變,區別在於膨脹卷積具有更大的感受野。
  • 對比傳統的conv操作,3層3x3的卷積加起來,stride爲1的話,只能達到(kernel-1)*layer+1=7感受野,也就是和層數layer成線性關係,而dilated conv的感受野是指數級的增長
  • 適用情況:在圖像需要全局信息、語音文本需要較長的sequence信息依賴的問題中,都能很好的應用dilated conv。

膨脹卷積:保持參數個數不變的情況下增大了卷積核的感受野,讓每個卷積輸出都包含較大範圍的信息;同時它可以保證輸出的特徵映射(feature map)的大小保持不變。一個擴張率爲2的3×3卷積核,感受野與5×5的卷積核相同,但參數數量僅爲9個,是5×5卷積參數數量的36%。

                 傳統卷積: å¨è¿éæå¥å¾çæè¿°空洞卷積å¨è¿éæå¥å¾çæè¿°

感受野:d*f + (d-1)

(a) 普通卷積,1-dilated convolution,卷積核的感受野爲3×3=93×3=9。                    1*3 + 0
(b) 膨脹卷積,2-dilated convolution,卷積核的感受野爲7×7=497×7=49。                2*3 + 1
(c) 膨脹卷積,4-dilated convolution,卷積核的感受野爲15×15=22515×15=225。    4*3 + 3

1. 誕生背景

首先是誕生背景,在圖像分割領域,圖像輸入到CNN(典型的網絡比如FCN[3])中,FCN先像傳統的CNN那樣對圖像做卷積再pooling,降低圖像尺寸的同時增大感受野,但是由於圖像分割預測是pixel-wise的輸出,所以要將pooling後較小的圖像尺寸upsampling到原始的圖像尺寸進行預測(upsampling一般採用deconv反捲積操作,deconv可參見知乎答案如何理解深度學習中的deconvolution networks?),之前的pooling操作使得每個pixel預測都能看到較大感受野信息。因此圖像分割FCN中有兩個關鍵,一個是pooling減小圖像尺寸增大感受野,另一個是upsampling擴大圖像尺寸。在先減小再增大尺寸的過程中,肯定有一些信息損失掉了,那麼能不能設計一種新的操作,不通過pooling也能有較大的感受野看到更多的信息呢?答案就是dilated conv

Deep CNN 對於其他任務還有一些致命性的缺陷。較爲著名的是 up-sampling 和 pooling layer 的設計。這個在 Hinton 的演講裏也一直提到過。

主要問題有:

  1. Up-sampling / pooling layer (e.g. bilinear interpolation) is deterministic. (a.k.a. not learnable)
  2. 內部數據結構丟失;空間層級化信息丟失。
  3. 小物體信息無法重建 (假設有四個pooling layer 則 任何小於 2^4 = 16 pixel 的物體信息將理論上無法重建。)

在這樣問題的存在下,語義分割問題一直處在瓶頸期無法再明顯提高精度, 而 dilated convolution 的設計就良好的避免了這些問題。

dilated convolution優點:

  • 內部數據結構的保留;

  • 避免使用 down-sampling 這樣的特性

題主提到的這篇文章 MULTI-SCALE CONTEXT AGGREGATION BY DILATED CONVOLUTIONS 可能(?) 是第一篇嘗試用 dilated convolution 做語義分割的文章。後續圖森組和 Google Brain 都對於 dilated convolution 有着更細節的討論,推薦閱讀:Understanding Convolution for Semantic Segmentation Rethinking Atrous Convolution for Semantic Image Segmentation 。

2. 區別:deconv  & dilated conv

對於標準的k*k卷積操作,stride爲s,分三種情況:

(1) s>1,即卷積的同時做了downsampling,卷積後圖像尺寸減小;pooling = downsampling 

(2) s=1,普通的步長爲1的卷積,比如在tensorflow中設置padding=SAME的話,卷積的圖像輸入和輸出有相同的尺寸大小;

(3) 0<s<1,fractionally strided convolution,相當於對圖像做upsampling。比如s=0.5時,意味着在圖像每個像素之間padding一個空白的像素後,stride改爲1做卷積,得到的feature map尺寸增大一倍。

  • dilated conv不是在像素之間padding空白的像素,而是在已有的像素上,skip掉一些像素,或者輸入不變(輸入圖像尺寸不變,沒有信息損失),對conv的kernel參數中插一些0的weight,達到一次卷積看到的空間範圍變大的目的。

  • 當然將普通的卷積stride步長設爲大於1,也會達到增加感受野的效果,但是stride大於1就會導致downsampling,圖像尺寸變小在先減小再增大尺寸的過程中,有一些信息損失掉)。

3. 空洞卷積的問題及解決

對於 dilated convolution, 我們已經可以發現他的優點,即內部數據結構的保留和避免使用 down-sampling 這樣的特性。但是完全基於 dilated convolution 的結構如何設計則是一個新的問題。

潛在問題 1:The Gridding Effect

假設我們僅僅多次疊加 dilation rate 2 的 3 x 3 kernel 的話,則會出現這個問題:

我們發現我們的 kernel 並不連續,也就是並不是所有的 pixel 都用來計算了,因此這裏將信息看做 checker-board 的方式會損失信息的連續性。這對 pixel-level dense prediction 的任務來說是致命的。

潛在問題 2:Long-ranged information might be not relevant.

我們從 dilated convolution 的設計背景來看就能推測出這樣的設計是用來獲取 long-ranged information。然而光采用大 dilation rate 的信息或許只對一些大物體分割有效果,而對小物體來說可能則有弊無利了。如何同時處理不同大小的物體的關係,則是設計好 dilated convolution 網絡的關鍵。

解決:通向標準化設計Hybrid Dilated Convolution (HDC)

對於上個 section 裏提到的幾個問題,圖森組的文章對其提出了較好的解決的方法。他們設計了一個稱之爲 HDC 的設計結構。

第一個特性是,疊加捲積的 dilation rate 不能有大於1的公約數。比如 [2, 4, 6] 則不是一個好的三層卷積,依然會出現 gridding effect。

第二個特性是,我們將 dilation rate 設計成 鋸齒狀結構,例如 [1, 2, 5, 1, 2, 5] 循環結構。

第三個特性是,我們需要滿足一下這個式子: 

其中 r_{i} 是 i 層的 dilation rate 而M_{i}是指在 i 層的最大dilation rate,那麼假設總共有n層的話,默認M_{n}=r_{n}。假設我們應用於 kernel 爲 k x k 的話,我們的目標則是  M_{2}<=k,這樣我們至少可以用 dilation rate 1 即 standard convolution 的方式來覆蓋掉所有洞。

一個簡單的例子: dilation rate [1, 2, 5] with 3 x 3 kernel (可行的方案)

而這樣的鋸齒狀本身的性質就比較好的來同時滿足小物體大物體的分割要求(小 dilation rate 來關心近距離信息,大 dilation rate 來關心遠距離信息)。

這樣我們的卷積依然是連續的也就依然能滿足VGG組觀察的結論,大卷積是由小卷積的 regularisation 的 疊加。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章