空洞(擴張dilated)卷積

空洞卷積

  也可以根據字面意思把dilated這個詞直接翻譯成膨脹卷積或者擴張卷積。這個概念就得重新回到感受野這個話題上,這裏補充一些感受野的知識點。感受野可以理解爲一個神經元接觸到原始特徵圖的區域範圍,感受野越大,神經網絡越可以看到更加宏觀的特徵。這個也很好理解,如果關注一個像素,只能看到圖像的顏色信息,但是關注更多像素,這樣就能看到輪廓。所以增大感受野對於宏觀語義特徵的提取是有幫助的。
  我們之前談到過正常的卷積,卷積核的大小對應感受野的大小,這個3×3的卷積,感受野區域也就是這麼大。但是如果給一個卷積加上dilated的概念,就意味着要對這個卷積核做膨脹處理,我在轉置卷積中提到了膨脹這個概念,那個時候是特徵圖做膨脹處理,這個時候是對卷積核做膨脹處理,操作是一樣的。而卷積一旦膨脹之後,雖然是通過在卷積核中填充了一些零,但是不得不說,卷積核的感受野確實變大了,是在沒有增加參數的前提上,感受野變大了。
卷積核擴張示意圖
  在VGG Net的文章中提出來一種理論:一個5×5的卷積,等價於兩個3×3的卷積在不同層上的堆疊(stack),而一個7×7的卷積等價於三個3×3的卷積在不同層上的堆疊。這個概念主要也是從感受野的角度去理解的,把一個7×7的特徵圖(感受野區域)經過三層3×3的卷積之後,得到的結果正好是1×1的,這個1×1的小區域其實就是感受到了特徵圖中7×7的區域。使用三個3×3的卷積在不同層上的堆疊代替一個7×7的卷積,不僅可以減少參數量(7×7>3×3×37×7->3×3×3),而且增加了網絡的層數,可以引入更多的非線性單元。
  神經網絡中除了卷積可以逐漸的擴大神經元的感受野,還有一種方式是通過下采樣來增大圖像的感受野。如常見的池化操作,通過一個池化(最大池化、平均池化)一般都能把一個元素的感受野擴大兩倍,因爲一個池化結果對應着上層特徵圖2×2的區域。但是使用池化層會帶來一些問題:
  首先是內部數據結構的丟失,池化層對數據的丟棄理由是不充分的,這樣會丟失信息。其次是如果在語義分割的任務中,小物體的信息是無法重建的,假如使用了四個池化層,則感受野(的邊長)經過四個池化層擴大了16倍,此時一個區域對應16×16個上層特徵圖區域。如果物體的尺寸小於16個像素,顯然這個物體的的特徵就丟失了,已經再也無法對這個物體進行重建了。而且下采樣是不可學習的。
  針對以上幾個問題,在語義分割的網絡中,提出了擴張卷積這個概念,通過卷積來實現下采樣。如上圖,7×7的特徵圖,經過3×3的卷積核做膨脹係數爲2的卷積運算,結果變成了3×3的。而且每一個1×1的區域在原來的特徵圖上關聯區域是5×5的,直接就擴大了感受野。

空洞卷積運算
  膨脹係數,就是卷積核一個1×1小區域擴張的倍數,原本兩個小區域的之間的差距是1,擴張係數是幾,擴張後的距離就是幾。所以兩個小區域之間填充0的個數=擴張係數-1。而擴張後整個卷積核的感受野的邊長=(卷積核的邊長-1)×膨脹率+1。
  但是使用擴張卷積,可能會出現The Gridding Effect(網格效應)這個問題,假如多次疊加膨脹係數爲2的卷積核(大小爲3×3)的話,則我們最終得到的一個小區域,是對應原特徵圖的5×5的感受野的。
對應的5×5感受野區域
  假如這個5×5的感受野是我們通過同樣尺寸同樣方式的卷積得到的,我們可以將其對應到上層9×9的特徵圖中。
對應的9×9感受野區域
  我們可以繼續往上追溯,但是每一層總會有沒有用到的一些的特徵圖信息,造成了很嚴重的信息丟失和不連續。事實上,不同層級的擴張係數如果不互質的話,總會存在這樣沒有用到的區域。所以一般設置的時候都需要滿足不同層的dilation rate互質的關係,至於這裏還會有更深入的分析,這裏僅給出一點點比較重要的。
  轉置卷積和空洞卷積都是符合卷積的輸出大小計算公式的,轉置卷積中想要輸出的特徵圖更大,就得擴大特徵大,所以對特徵圖進行擴張,而這裏想要讓感受野更大,也就意味着要對卷積核做擴張。

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