膨胀卷积(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 的演講里也一直提到過。
主要問題有:
在這樣問題的存在下,語義分割問題一直處在瓶頸期無法再明顯提高精度, 而 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] 循環結構。
第三個特性是,我們需要滿足一下這個式子:?
其中??是 i 層的 dilation rate 而是指在 i 層的最大dilation rate,那么假設總共有n層的話,默認。假設我們應用于 kernel 為 k x k 的話,我們的目標則是??,這樣我們至少可以用 dilation rate 1 即 standard convolution 的方式來覆蓋掉所有洞。
一個簡單的例子: dilation rate [1, 2, 5] with 3 x 3 kernel (可行的方案)
而這樣的鋸齒狀本身的性質就比較好的來同時滿足小物體大物體的分割要求(小 dilation rate 來關心近距離信息,大 dilation rate 來關心遠距離信息)。
這樣我們的卷積依然是連續的也就依然能滿足VGG組觀察的結論,大卷積是由小卷積的 regularisation 的 疊加。
?
?
總結
以上是生活随笔為你收集整理的膨胀卷积(Dilated convolution)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 几种NER模型
- 下一篇: matplot 绘图总结