現現在,卷積神經網絡在人工智能領域應用的普遍性及重要性可謂是不言而喻。爲了讓你們對卷積的類型有一個清晰明瞭的認識,我快速概述了幾種不一樣類型的二維卷積及其好處。網絡
卷積(Convolutions)架構
首先,咱們須要就定義卷積層的幾個參數。學習
圖1 二維卷積、內核大小爲三、步幅爲1動畫
內核大小:內核大小定義了卷積的視野。二維的常見選擇是3——即3x3像素。ui
步幅:步幅定義了遍歷圖像時內核的步長。雖然它的默認值一般爲1,但咱們可使用2的步長,相似於最大池化對圖像進行下采樣。人工智能
padding:padding定義樣本的邊框如何處理。一(半)個padding卷積將保持空間輸出尺寸等於輸入尺寸,而若是內核大於1,則不加捲積將消除一些邊界。spa
輸入和輸出通道:卷積層須要必定數量的輸入通道(I),並計算出特定數量的輸出通道(O)。能夠經過I * O * K來計算這樣一層所需的參數,其中K等於內核中的值的數量。3d
擴張卷積(Dilated Convolutions)code
(又名阿魯斯卷積)blog
擴張卷積引入另外一個卷積層的參數被稱爲擴張率。這定義了內核中值之間的間距。擴張速率爲2的3x3內核將具備與5x5內核相同的視野,而只使用9個參數。 想象一下,使用5x5內核並刪除每一個間隔的行和列。
圖2 二維卷積、擴展速率爲2的3核,無padding
它使得系統可以以相同的計算成本提供更普遍的觀察範圍。擴張卷積在實時分割領域特別受歡迎。 若是你須要更大的觀察範圍,且沒法承受多個卷積或更大的內核,請考慮使用它。
轉置卷積(Transposed Convolutions)
(又名反捲積或分段纏繞卷積)
一些人使用反捲積這個名稱,這不是特別恰當的,由於它不是一個反捲積。使事情變得更糟糕的反捲積確實存在,但在深度學習領域並不常見。實際的反捲積是反轉卷積的過程。想象一下,將圖像輸入到單個卷積層。如今開始輸出,把放置到一個黑盒子裏,而後將你的原始圖像再次輸出。這個黑盒子進行了一個反捲積操做。這就是卷積層的數學反演。
轉置的卷積在某種程度上來講是類似的,由於它和一個假設的反捲積層所產生的空間分辨率是相同的。可是,正在執行的實際數學運算在值上是不一樣的。轉置卷積層執行的是常規卷積,但它會恢復其空間變換。
圖3 二維卷積無padding,步幅2和內核3
關於這一點你可能會感到困惑,因此讓咱們來看一個具體的示例。將一個5x5的圖像饋送到卷積層。其步幅設置爲2,padding禁用,內核爲3x3。結果是產生一個2x2的圖像。
若是咱們想反轉這個過程,咱們須要反數學運算,以便從咱們輸入的每一個像素中生成9個值。以後,咱們以2步幅的設置來遍歷輸出圖像。這將是一個反捲積。
圖4 轉置的二維卷積無padding,步幅2和內核3
而轉置卷積將不會進行此類操做。惟一的共同之處在於它保證輸出也將是一個5x5的圖像,同時仍然執行正常的卷積運算。爲了實現這一點,咱們須要在輸入上執行一些漂亮的padding。
正如你如今能夠想象的,這一步並不會從上面扭轉這個過程。 至少不包括數值。
它只是在以往的基礎上重建空間分辨率並執行卷積操做。這可能不是數學的反演,可是對於Encoder-Decoder架構來講,它仍然很是有用。這樣,咱們能夠將圖像的縮放與卷積相結合,而不是將兩個過程單獨分開進行。
可分離卷積(Separable Convolutions)
在一個可分離卷積中,咱們能夠將內核操做拆分紅多個步驟。咱們用y = conv(x,k)表示卷積,其中y是輸出圖像,x是輸入圖像,k是內核。這一步很簡單。接下來,咱們假設k能夠由下面這個等式計算得出:k = k1.dot(k2)。這將使它成爲一個可分離的卷積,由於咱們能夠經過對k1和k2作2個一維卷積來取得相同的結果,而不是用k作二維卷積。
圖5 Sobel X和Y濾鏡
咱們以一般用於圖像處理的Sobel內核爲例。你能夠經過乘以向量[1,0,-1]和[1,2,1] .T得到相同的內核。在執行相同的操做時,你只須要6個而不是9個參數。
上面的示例顯示了所謂的空間可分離卷積,據我所知,這並非在深度學習中使用的。我只是想確保在他人費勁地操做時,你不會受到如此困惑。在神經網絡中,咱們一般使用的是一種叫作深度可分離卷積的神經網絡。
這將執行一個空間卷積,同時保持通道獨立,而後進行深度卷積操做。在我看來,爲了加深瞭解,能夠用一個示例做爲典範。
假設咱們在一個16輸入通道和32輸出通道上有一個3x3的卷積層。那麼將要發生的就是16個通道中的每個都由32個3x3的內核進行遍歷,從而產生512(16x32)的特徵映射。接下來,咱們經過將每一個輸入通道中的特徵映射相加從而合成一個大的特徵映射。因爲咱們能夠進行此操做32次,所以咱們獲得了指望的32個輸出通道。
那麼,針對同一個示例,深度可分離卷積的表現又是怎樣的呢?咱們遍歷16個通道,每個都有一個3x3的內核,能夠給出16個特徵映射。如今,在作任何合併操做以前,咱們將遍歷這16個特徵映射,每一個都含有32個1x1的卷積,而後才逐此開始添加。這致使與上述4608(16x32x3x3)個參數相反的656(16x3x3 + 16x32x1x1)個參數。
該示例是深度可分離卷積的具體實現,其中所謂的深度乘數爲1。而這是目前爲止這些層最多見的設置。
咱們這樣作是由於假設空間和深度信息是能夠去耦的。而反觀Xception模型的表現,能夠發現這個理論彷佛是有效的。其實,可移動設備中也可使用深度可分離卷積。由於它們的參數是能夠有效利用的。
總 結
到此爲止,能夠說對於卷積網絡類型的介紹就要告一段落了。我但願能幫助你們簡要了解一下這個問題。而接下來,咱們將爲你們展現一些卷積動畫,幫助你們對此作深一步瞭解。
動圖
01無padding無步幅
動圖
02隨機padding無步幅
動圖
03半padding無步幅
動圖
04全padding無步幅
動圖
05無padding無步幅轉置
動圖
06隨機padding無步幅轉置
動圖
07半padding無步幅轉置
動圖
08全padding無步幅轉置
動圖
09無padding有步幅
動圖
10有padding有步幅
動圖
11有padding有步幅(奇數)
動圖
12擴張
-END-