深度學習中的各種卷積總結


深度學習中的各種卷積總結

在深度學習中,卷積是一個非常重要的概念,卷積也是卷積神經網絡擁有良好的圖像處理能力的關鍵。這篇文章將介紹一下不同類型的卷積,爲了簡單起見,本文只關注於二維的卷積。首先我們先回憶一下卷積的基本概念:
卷積核大小(Kernel Size):卷積核的大小定義了卷積操作的感受野。在二維卷積中,通常設置爲3,即卷積核大小爲3×3。
步長(Stride):定義了卷積核遍歷圖像時的步幅大小。其默認值通常設置爲1,也可將步幅設置爲2後對圖像進行下采樣,這種方式與最大池化類似。
填充(Padding):定義了網絡層處理樣本邊界的方式。當卷積核大於1且不進行邊界擴充,輸出尺寸將相應縮小;當卷積核以標準方式進行邊界擴充,則輸出數據的空間尺寸將與輸入相等。
輸入和輸出通道(Channel):構建卷積層時需定義輸入通道II,並由此確定輸出通道OO。這樣,可算出每個網絡層的參數量爲IOKI*O*K,其中KK爲卷積核的參數個數。例如,某個網絡層有64個大小爲3×3的卷積核,則對應KK值爲 3×3 =9。

參考論文:
01 Paper: A guide to convolution arithmetic for deep learning
02 Paper:Multi-Scale Context Aggregation by Dilated Convolutions
卷積動畫:
https://github.com/vdumoulin/conv_arithmetic


01 普通卷積(Convolution)

A. 普通卷積的計算操作

如圖所示卷積是一個相當簡單的操作:從卷積核開始,這是一個小的權值矩陣。這個卷積核在 輸入數據上“滑動”,對當前輸入的部分元素進行矩陣乘法,然後將結果匯爲feature map。
在這裏插入圖片描述

\bigtriangledown 卷積核大小爲3、步長爲2、填充爲0的二維卷積(藍色爲輸入,綠色爲輸出)
在這裏插入圖片描述

\bigtriangledown 卷積核大小爲3、步長爲1、填充爲1的二維卷積
在這裏插入圖片描述

B. 特殊的普通卷積

B1.用途廣泛的1x1卷積

1x1的卷積核由於大小隻有1x1,所以並不需要考慮像素跟周邊像素的關係,它並不改變feature map的尺寸,它能夠改變的只是通道數,對不同的通道上的像素點進行線性組合,然後進行非線性化操作。基於這一點,1x1卷積有着一些奇妙且實用的作用:

  • 升維/降維
    所謂升維/降維,就是增加/減少通道數。如下圖所示,使用2個1x1大小的卷積核,那麼feature map的通道數將會從3變成2,如果使用4個1x1的卷積核,feature map的通道數將會由3變成4。 在這裏插入圖片描述
  • 通道間的信息聚合
    升維/降維的意義再往深處想,就是能實現通道之間的信息聚合。Think about that:使用1x1卷積核,實現升維和降維的操作其實就是通道間信息的線性組合變化。比如,3x3,64channels的卷積核後面添加一個1x1,28channels的卷積核,就變成了3x3,28channels的卷積核,原來的64個channels就可以理解爲跨通道線性組合變成了28channels,這實現通道間的信息交互及融合。
  • 減少參數
    前面所說的降維,其實也是減少了參數,因爲feature map的通道數少了,參數也自然跟着就減少,相當於先壓縮特徵圖,二次提取特徵,使得新特徵圖的特徵表達更佳(去除掉了冗餘的信息)。
  • 增加非線性
    因爲1*1卷積核後接了非線性激活函數,就可以可以在保持feature map尺寸不變(即不損失分辨率)的前提下大幅增加非線性特性,把網絡做的很deep,使網絡學習到更復雜的模式。

B2.卷積都是奇數的、nxn的麼?

我們現在關注的是cv領域的,大多接觸的卷積核是正方形,比如說5x5,3x3,1x1的卷積核大小,那麼卷積核都是正方形的麼?都是奇數的麼?有沒有其他的卷積核大小?要回答這些問題,我們需要一步步的來~

【爲什麼認爲卷積操作是有效的?】
除了大量的實驗數據可以證明卷積操作是有效的以外,實際上我們是無法破解爲什麼卷積是真的可以work的,但是我們可以從一些角度去推測卷積有效的可能原因。首先,卷積操作的第一個靈感來源或者基礎就是仿生,模仿人眼對於事物的感知,人眼對於事物的感知是整片區域,並且可以理解爲一個神經元來負責理解,這也就是說每個感受野要有一個輸出,這就類似於卷積操作;其次,卷積操作的第二個基礎就是假設,如果說在同一張圖片上,人可以辨認出狗頭,那麼也可以辨認出狗腿,所以,當卷積核或者濾波器遍歷圖像的時候,要求此卷積核又要認識狗頭又要認識狗腿,就要求卷積核要共享權重。

【爲什麼大多使用3x3的卷積核?】
個人認爲,3x3的卷積核是可以考慮到目標點周圍8個方向上的信息(上/下/左/右/左上/左上/右下/右上),並且比5x5的卷積計算量要小,因爲可以用兩個3x3的卷積來代替1個5x5的卷積(但是,如果你在計算資源允許的情況下,淺層特徵要較大的感受野的話推薦使用5x5,也是具體問題具體分析)。

【爲什麼卷積核大多是正方形的?有矩形的卷積核麼?】
卷積核不只是有正方形的,也有矩形的,例如非對稱卷積的卷積核就是1xn或者nx1;此外,在nlp領域中常用的就是矩形卷積。是用矩形卷積還是正方形卷積也是具體問題具體分析,在通常的cv領域中,我們可以都使用正方形的卷積,因爲人眼的感受區域是圓形,越接近人眼仿生的卷積越能捕捉到圖像特徵;但是在一些特定的單類別檢測或者特徵提取中,如果被檢測或者被提取的物體呈現出了統一的矩形形狀特點,也可以嘗試使用矩形卷積捕捉這種特性。


02 轉置卷積/反捲積(Transposed convolution)

我們一般可以通過卷積操作來實現高維特徵到低維特徵的轉換,而如果想要將這一過程反過來,即由低維特徵恢復到高維特徵,我們可以藉由轉置卷積來實現。之所以叫轉置卷積是因爲,它其實是把我們平時所用正常卷積操作中的卷積核做一個轉置,然後把正常卷積的輸出作爲轉置卷積的輸入,而轉置卷積的輸出,就是正常卷積的輸入。

A.轉置卷積/反捲積的計算操作

那麼具體怎麼實現的呢,讓我們先來將正常卷積換一個寫法:

在這裏插入圖片描述

這是一個4x4的輸入,經過一個3x3的卷積核(步長爲1,填充爲0),得到的是2x2的輸出。
本來輸入輸出都是矩陣的形式,現在我們把他們變成向量的形式,也就是把輸入reshape成16x1,把輸出reshape成4x1。那麼相應的,想要由16x1的輸入得到4x1的輸出,卷積核就得變成4x16的。我們就可以把卷積核寫成這個亞子:

在這裏插入圖片描述

x,C,zx,C, z分別表示變換之後的輸入、卷積核和輸出,那麼正常卷積就可以這樣寫:z=Cxz = Cx
這個就是正常卷積的過程:由輸入和卷積核得到輸出。
那麼反過來由輸出和卷積核的轉置就能得到輸入:x=CTzx = C^Tz
這就是轉置卷積的由來。

讓我們來看幾個例子:

  • 首先是正常卷積步長s=1的時候,其對應的轉置矩陣卷積核大小不變的情況下,我們可以通過填充來實現轉置卷積。
    \bigtriangledown 卷積核大小爲3×3、步長爲1和無填充的正常卷積;輸入爲4x4,輸出爲2x2

    在這裏插入圖片描述
    \bigtriangledown 卷積核大小爲3×3、步長爲1和填充爲2的轉置卷積;輸入爲2x2,輸出爲4x4
    在這裏插入圖片描述

  • 如果正常卷積步長爲s>1時,希望其對應的轉置卷積步長爲1s\frac{1}{s},我們需要在輸入中插入s-1個0來實現轉置矩陣的步長s<1的效果。步長s<1的轉置卷積也稱爲微步卷積(Fractionally-strided convolution)
    \bigtriangledown 卷積核大小爲3×3、步長爲2和無填充的正常卷積;輸入爲5x5,輸出爲2x2
    在這裏插入圖片描述
    \bigtriangledown 卷積核大小爲3×3、步長爲1/2和填充爲2的轉置卷積;輸入爲2x2,輸出爲5x5 在這裏插入圖片描述

注意的是:其實嚴格意義上轉置卷積不是反捲積
反捲積在數學含義上是可以完全還原輸入信號的是卷積的逆過程;但是轉置卷積只能還原到原來輸入的shape,重建先前的空間分辨率,執行了卷積操作,其value值是不一樣的,並不是卷積的數學逆過程。
但是應用於編碼器-解碼器結構中,轉置矩陣仍然很有用。這樣轉置卷積就可以同時實現圖像的粗粒化(upscaling)和卷積操作,而不是通過兩個單獨過程來完成了。並且轉置卷積常常用於CNN中對特徵圖進行上採樣,比如語義分割和超分辨率任務中。

B.轉置卷積/反捲積有什麼作用?

轉置卷積/反捲積可以認爲是步長爲分數的卷積操作,最直觀的感受可以實現上採樣,在ZFNet中,轉置卷積/反捲積被用作特徵的可視化,在SRCNN/FSRCNN中,轉置卷積/反捲積被用作了上採樣圖像,成爲超分(SR)中的一小步,轉置卷積/反捲積的作用還是很多的。


03 空洞卷積/膨脹卷積(Dilated convolution)

空洞卷積(又名膨脹卷積),是一種不增加參數數量,但卻增加感受野的特殊卷積。它通過給卷積核插入“空洞”來變相地增加其大小,只是引入了一個稱爲 “膨脹率(dilation rate)”的超參數。

A.空洞卷積/膨脹卷積的計算操作

如果膨脹率爲d,那麼就會在卷積核的每兩個元素之間插入d-1個空洞。當d=1時卷積核爲普通的卷積核。

在這裏插入圖片描述

\bigtriangledown 卷積核大小爲3、步長爲1、填充爲0、膨脹率爲2的二維卷積

在這裏插入圖片描述

B.空洞卷積/膨脹卷積有什麼作用?

在相同的計算條件下,空洞卷積提供了更大的感受野。空洞卷積經常用在實時圖像分割中。當網絡層需要較大的感受野,但計算資源有限而無法提高卷積核數量或大小時,可以考慮空洞卷積。


我們對於深度學習還在不斷摸索中,如果在學習過程中遇到了特殊的卷積操作會不斷的補充上來。也給實驗室的師弟們師妹們打call,即使放假了還在不斷學習和分享,我們仍是深度學習的小學生,請大家多多指教!

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