一、從普通卷積到空洞卷積的直觀理解
二、關於卷積的重新思考——普通卷積的缺陷
三、空洞卷積的拯救之路:Dilated Convolution to the Rescue
3.1 潛在問題 1:The Gridding Effect(所謂的網格效應)
3.2 潛在問題 2:Long-ranged information might be not relevant.
3.3 通向標準化設計:Hybrid Dilated Convolution (HDC)
3.4 多尺度分割的另類解:Atrous Spatial Pyramid Pooling (ASPP)
四、總結
一、從普通卷積到空洞卷積的直觀理解
Dilated/Atrous Convolution 或者是 Convolution with holes 從字面上就很好理解,是在標準的 convolution map 裡注入空洞,以此來增加 reception field。相比原來的正常convolution,dilated convolution 多了一個 hyper-parameter 稱之為 dilation rate 指的是kernel的間隔數量(e.g. 正常的 convolution 是 dilatation rate 1)。
一個簡單的例子,[動態圖來源:vdumoulin/conv_arithmetic]:
不過光理解他的工作原理還是遠遠不夠的,要充分理解這個概念我們得重新審視卷積本身,並去了解他背後的設計直覺。以下主要討論 dilated convolution 在語義分割 (semantic segmentation) 的應用。
二、關於卷積的重新思考——普通卷積的缺陷在贏得其中一屆ImageNet比賽裡VGG網絡的文章中,他最大的貢獻並不是VGG網絡本身,而是他對於卷積疊加的一個巧妙觀察。
This (stack of three 3 × 3 conv layers) can be seen as imposing a regularisation on the 7 × 7 conv. filters, forcing them to have a decomposition through the 3 × 3 filters (with non-linearity injected in between).這裡意思是 7 x 7 的卷積層的正則等效於 3 個 3 x 3 的卷積層的疊加。而這樣的設計不僅可以大幅度的減少參數,其本身帶有正則性質的 convolution map 能夠更容易學一個 generlisable, expressive feature space。這也是現在絕大部分基於卷積的深層網絡都在用小卷積核的原因。
然而 Deep CNN 對於其他任務還有一些致命性的缺陷。較為著名的是 up-sampling 和 pooling layer 的設計。這個在 Hinton 的演講裡也一直提到過。
主要問題有:
Up-sampling / pooling layer (e.g. bilinear interpolation) is deterministic. (a.k.a. not learnable)
內部數據結構丟失;空間層級化信息丟失。
小物體信息無法重建 (假設有四個pooling layer 則 任何小於 2^4 = 16 pixel 的物體信息將理論上無法重建。)
在這樣問題的存在下,語義分割問題一直處在瓶頸期無法再明顯提高精度, 而 dilated convolution 的設計就良好的避免了這些問題。
三、空洞卷積的拯救之路:Dilated Convolution to the Rescue題主提到的這篇文章 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。
對於 dilated convolution, 我們已經可以發現他的優點,即內部數據結構的保留和避免使用 down-sampling 這樣的特性。但是完全基於 dilated convolution 的結構如何設計則是一個新的問題。
3.1 潛在問題 1:The Gridding Effect(所謂的網格效應)
假設我們僅僅多次疊加 dilation rate 2 的 3 x 3 kernel 的話,則會出現這個問題:
我們發現我們的 kernel 並不連續,也就是並不是所有的 pixel 都用來計算了,因此這裡將信息看做 checker-board 的方式會損失信息的連續性。這對 pixel-level dense prediction 的任務來說是致命的。
總結:多次疊加多個具有相同空洞率的卷積核會造成格網中有一些像素自始至終都沒有參與運算,不起任何作用,這對於像素級別的預測是不友好的。
3.2 潛在問題 2:Long-ranged information might be not relevant.
我們從 dilated convolution 的設計背景來看就能推測出這樣的設計是用來獲取 long-ranged information。然而光採用大 dilation rate 的信息或許只對一些大物體分割有效果,而對小物體來說可能則有弊無利了。如何同時處理不同大小的物體的關係,則是設計好 dilated convolution 網絡的關鍵。
總結:簡單來說,就是空洞卷積雖然在參數不變的情況下保證了更大的感受野,但是對於一些很小的物體,本身就不要那麼大的感受野來說,這是嫉妒不友好的。
3.3 通向標準化設計:Hybrid Dilated Convolution (HDC)說得更簡單明白一點其實就是使用多個不同空洞率的空洞卷積核混合,當然至於沒一個卷積核的空洞率rate怎麼選擇,是有一些技巧和原則的,就是下面要講的原則。
對於上個 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 網絡能夠有效避免 gridding effect.
3.4 多尺度分割的另類解:Atrous Spatial Pyramid Pooling (ASPP)在處理多尺度物體分割時,我們通常會有以下幾種方式來操作:
然僅僅(在一個卷積分支網絡下)使用 dilated convolution 去抓取多尺度物體是一個不正統的方法。比方說,我們用一個 HDC 的方法來獲取一個大(近)車輛的信息,然而對於一個小(遠)車輛的信息都不再受用。假設我們再去用小 dilated convolution 的方法重新獲取小車輛的信息,則這麼做非常的冗餘。
基於港中文和商湯組的 PSPNet 裡的 Pooling module (其網絡同樣獲得當年的SOTA結果),ASPP 則在網絡 decoder 上對於不同尺度上用不同大小的 dilation rate 來抓去多尺度信息,每個尺度則為一個獨立的分支,在網絡最後把他合併起來再接一個卷積層輸出預測 label。這樣的設計則有效避免了在 encoder 上冗餘的信息的獲取,直接關注與物體之間之內的相關性。
四、總結Dilated Convolution 個人認為想法簡單,直接且優雅,並取得了相當不錯的效果提升。他起源於語義分割,大部分文章也用於語義分割,具體能否對其他應用有價值姑且還不知道,但確實是一個不錯的探究方向。有另外的答主提到WaveNet, ByteNet 也用到了 dilated convolution 確實是一個很有趣的發現,因為本身 sequence-to-sequence learning 也是一個需要關注多尺度關係的問題。則在 sequence-to-sequence learning 如何實現,如何設計,跟分割或其他應用的關聯是我們可以重新需要考慮的問題。
1. 機器學習理論與實踐篇(歷史文章索引)
2. python語言基礎與進階篇(歷史文章索引)
3. 96編輯器如何保存編輯完的內容?
4. 如何註冊微信公眾號,詳細步驟流程?
5. 關於粘貼亂碼或者無法複製的問題?
6.進群學習交流
7.資源分享
有趣的靈魂終究會相遇
好看的皮囊風乾在路上
掃碼即可相遇哦