空洞卷積(dilated convolution)深入詳解——優點與缺點

2021-03-02 機器學習與python集中營

一、從普通卷積到空洞卷積的直觀理解

二、關於卷積的重新思考——普通卷積的缺陷

三、空洞卷積的拯救之路: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]:

Standard Convolution with a 3 x 3 kernel (and padding)

Dilated Convolution with a 3 x 3 kernel and dilation rate 2

不過光理解他的工作原理還是遠遠不夠的,要充分理解這個概念我們得重新審視卷積本身,並去了解他背後的設計直覺。以下主要討論 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.資源分享

有趣的靈魂終究會相遇

好看的皮囊風乾在路上

掃碼即可相遇哦

相關焦點

  • 總結-空洞卷積(Dilated/Atrous Convolution)
    點擊文末「閱讀原文」立刻申請入群~作者 | yyfyan來源 | https://zhuanlan.zhihu.com/p/50369448從這幾年的分割結果來看,基於空洞卷積的分割方法效果要好一些,極市之前也對這一問題做過相關報導推送:如何理解空洞卷積(dilated convolution)?
  • 對Dilated Convolution理解
    如果考慮到這個2-dilated convolution的前一層有一個1-dilated convolution的話,那麼每個紅點就是1-dilated的卷積輸出,感受野為3x3,所以1-dilated和2-dilated合起來就能達到7x7的卷積;(c) 圖是4-dilated convolution操作,同理跟在1-dilated和2-dilated
  • 吃透空洞卷積(Dilated Convolutions)
    ,本文詳細介紹了空洞卷積的誕生、原理、計算過程以及存在的兩個潛在的問題,幫助大家將空洞卷積這一算法「消化吸收」。   一、空洞卷積的提出空洞卷積中文名也叫膨脹卷積或者擴張卷積,英文名也叫Atrous Convolution空洞卷積最初的提出是為了解決圖像分割的問題而提出的,常見的圖像分割算法通常使用池化層和卷積層來增加感受野
  • 一文帶你掌握4種卷積方法
    3 空洞(擴張)卷積(Dilated/Atrous Convolution)空洞卷積(dilated convolution)是針對圖像語義分割問題中下採樣會降低圖像解析度、丟失信息而提出的一種卷積思路。
  • 卷積與反卷積的實現
    another.Dilated Convolution 被中文翻譯為「空洞卷積」或「膨脹卷積」,我更傾向於稱之為「膨脹卷積」。kernel size還是3x3,但是空洞為1,也就是對於一個7x7的圖像patch,只有9個紅色的點和3x3的kernel發生卷積操作,其餘的點略過。
  • 空洞卷積(Dilated Convolution):有之以為利,無之以為用
    轉載自知乎,作者:Uno Whoiam原文連結:https://zhuanlan.zhihu.com/p/66796313原論文連結arxiv.org/pdf/1705.0991一、論文核心《Dilated Residual Networks》這篇論文的核心在於創造性地提出了空洞卷積
  • 膨脹卷積學習筆記
    膨脹卷積 (Dilated Convolution,也稱為空洞卷積),與標準的卷積核不同,膨脹卷積在 kernel 中增加了一些空洞,從而可以擴大模型的感受野。1.膨脹卷積和標準卷積區別我們先通過下圖看一下膨脹卷積和標準卷積的區別,採用的卷積核都是 3×3 的。
  • DeepLabv1 & DeepLabv2 - 空洞卷積(語義分割)
    因此Atrous conv.也被稱為「空洞卷積」。一些論文也稱之為"dilated convolution"。它通常用於小波變換,現在它被應用於卷積中以進行深度學習。 下圖說明這一點 標準卷積(頂部)空洞卷積(底部) atrous卷積的想法很簡單。在上圖的頂部是標準卷積。
  • DilatedNet - 擴張卷積(語義分割)
    DilatedNet — Dilated Convolution (Semantic Segmentation) 作者 |Sik-Ho Tsang 翻譯 | 史蒂芬·二狗子 校對 | 醬番梨 審核 | 詹森·李加薪 整理 | 立魚王 原文連結: https://towardsdatascience.com/review-dilated-convolution-semantic-segmentation
  • 從全卷積網絡到大型卷積核:深度學習的語義分割全指南
    本文由淺層模型到深度模型,簡要介紹了語義分割各種技術,雖然本文並沒有深入講解語義分割的具體實現,但本文簡要地概述了每一篇重要論文的精要和亮點,希望能給讀者一些指南。  什麼是語義分割?  語義分割指像素級地識別圖像,即標註出圖像中每個像素所屬的對象類別。
  • 資源 | 從全連接層到大型卷積核:深度學習語義分割全指南
    U-Net:一種編碼器-解碼器結構 第二種方法使用空洞/帶孔卷積(dilated/atrous convolutions)結構,來去除池化層。解卷積層又被稱為上卷積(upconvolution)、完全卷積、轉置卷積或微步卷積(fractionally-strided convolution)。但是,由於池化過程造成信息丟失,上採樣(即使帶有解卷積層)生成的分割圖較為粗糙。因此我們可以從高解析度的特徵圖中引入跳躍連接(shortcut/skip connection)來改善上採樣的粗糙程度。
  • 變形卷積核、可分離卷積?卷積神經網絡中十大拍案叫絕的操作。
    一、卷積只能在同一組進行嗎?-- Group convolutionGroup convolution 分組卷積,最早在AlexNet中出現,由於當時的硬體資源有限,訓練AlexNet時卷積操作不能全部放在同一個GPU處理,因此作者把feature maps分給多個GPU分別進行處理,最後把多個GPU的結果進行融合。
  • 一文了解各種卷積結構原理及優劣
    空洞卷積空洞卷積(atrous convolutions)又名擴張卷積(dilated convolutions),向卷積層引入了一個稱為 「擴張率(dilation rate)」的新參數,該參數定義了卷積核處理數據時各值的間距。
  • 不同類型卷積結構原理和優缺點
    空洞卷積 空洞卷積(atrous convolutions)又名擴張卷積(dilated convolutions),向卷積層引入了一個稱為 「擴張率(dilation rate)」的新參數,該參數定義了卷積核處理數據時各值的間距。
  • 萬字長文帶你看盡深度學習中的各種卷積網絡(下篇)
    by dilated convolutions,https://arxiv.org/abs/1511.07122) 空洞卷積也稱作擴張卷積(Atrous Convolution)。正因為此,空洞卷積常被用以低成本地增加輸出單元上的感受野,同時還不需要增加卷積核大小,當多個空洞卷積一個接一個堆疊在一起時,這種方式是非常有效的。 《通過空洞卷積做多規模的上下文聚合》的論文作者在多層空洞卷積以外創建了一個網絡,其中的空洞率 l 每層都以指數級的方式增長。結果,當參數數量每層僅有直線式的增長時,有效的感受野實現了指數型的增長。
  • 大白話深度可分離卷積(Depthwise separable convolution)
    一、深度可分離卷積(Depthwise separable convolution)一些輕量級的網絡,如mobilenet中,會有深度可分離卷積