帶你認識9種常用卷積神經網絡


摘要:在卷積神經網絡中,通過使用filters提取不同的特征,這些filters的權重是在訓練期間自動學習的,然后將所有這些提取的特征“組合”以做出決策。

本文分享自華為雲社區《神經網絡常用卷積總結》,原文作者:fdafad 。

進行卷積的目的是從輸入中提取有用的特征。在圖像處理中,可以選擇各種各樣的filters。每種類型的filter都有助於從輸入圖像中提取不同的特征,例如水平/垂直/對角線邊緣等特征。在卷積神經網絡中,通過使用filters提取不同的特征,這些filters的權重是在訓練期間自動學習的,然后將所有這些提取的特征“組合”以做出決策。

目錄:

  1. 2D卷積
  2. 3D卷積
  3. 1*1卷積
  4. 空間可分離卷積
  5. 深度可分離卷積
  6. 分組卷據
  7. 擴展卷積
  8. 反卷積
  9. Involution

2D卷積

單通道:在深度學習中,卷積本質上是對信號按元素相乘累加得到卷積值。對於具有1個通道的圖像,下圖演示了卷積的運算形式:

這里的filter是一個3 x 3的矩陣,元素為[[0,1,2],[2,2,0],[0,1,2]]。filter在輸入數據中滑動。在每個位置,它都在進行逐元素的乘法和加法。每個滑動位置以一個數字結尾,最終輸出為3 x 3矩陣。

多通道:由於圖像一般具有RGB3個通道,所以卷積一般多用於多通道輸入的場景。下圖演示了多通道輸入場景的運算形式:

這里輸入層是一個5 x 5 x 3矩陣,有3個通道,filters是3 x 3 x 3矩陣。首先,filters中的每個kernels分別應用於輸入層中的三個通道,執行三次卷積,產生3個尺寸為3×3的通道:

然后將這三個通道相加(逐個元素相加)以形成一個單個通道(3 x 3 x 1),該通道是使用filters(3 x 3 x 3矩陣)對輸入層(5 x 5 x 3矩陣)進行卷積的結果:

3D卷積

在上一個插圖中,可以看出,這實際上是在完成3D-卷積。但通常意義上,仍然稱之為深度學習的2D-卷積。因為filters的深度和輸入層的深度相同,3D-filters僅在2個維度上移動(圖像的高度和寬度),得到的結果為單通道。通過將2D-卷積的推廣,在3D-卷積定義為filters的深度小於輸入層的深度(即卷積核的個數小於輸入層通道數),故3D-filters需要在三個維度上滑動(輸入層的長、寬、高)。在filters上滑動的每個位置執行一次卷積操作,得到一個數值。當filters滑過整個3D空間,輸出的結構也是3D的。2D-卷積和3D-卷積的主要區別為filters滑動的空間維度,3D-卷積的優勢在於描述3D空間中的對象關系。3D關系在某一些應用中十分重要,如3D-對象的分割以及醫學圖像的重構等。

1*1卷積

對於1*1卷積而言,表面上好像只是feature maps中的每個值乘了一個數,但實際上不僅僅如此,首先由於會經過激活層,所以實際上是進行了非線性映射,其次就是可以改變feature maps的channel數目。

上圖中描述了:在一個維度為 H x W x D 的輸入層上的操作方式。經過大小為 1 x 1 x D 的filters的 1 x 1 卷積,輸出通道的維度為 H x W x 1。如果我們執行 N 次這樣的 1 x 1 卷積,然后將這些結果結合起來,我們能得到一個維度為 H x W x N 的輸出層。

空間可分離卷積

在一個可分離卷積中,我們可以將內核操作拆分成多個步驟。我們用y = conv(x,k)表示卷積,其中y是輸出圖像,x是輸入圖像,k是內核。這一步很簡單。接下來,我們假設k可以由下面這個等式計算得出:k = k1.dot(k2)。這將使它成為一個可分離的卷積,因為我們可以通過對k1和k2做2個一維卷積來取得相同的結果,而不是用k做二維卷積。

以通常用於圖像處理的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)個參數。下面再進行詳細說明。前面部分所提到的 2D 卷積核 1x1 卷積。讓我們先快速過一下標准的 2D 卷積。舉一個具體的案例,假設輸入層的大小為 7 x 7 x 3(高 x 寬 x 通道),過濾器大小為 3 x 3 x 3,經過一個過濾器的 2D 卷積后,輸出層的大小為 5 x 5 x 1(僅有 1 個通道)。如下圖所示:

一般來說,兩個神經網絡層間應用了多個過濾器,現在假設過濾器個數為 128。128 次 2D 卷積得到了 128 個 5 x 5 x 1 的輸出映射。然后將這些映射堆疊為一個大小為 5 x 5 x 128 的單個層。空間維度如高和寬縮小了,而深度則擴大了。如下圖所示:

接下來看看使用深度可分離卷積如何實現同樣的轉換。首先,我們在輸入層上應用深度卷積。我們在 2D 卷積中分別使用 3 個卷積核(每個過濾器的大小為 3 x 3 x 1),而不使用大小為 3 x 3 x 3 的單個過濾器。每個卷積核僅對輸入層的 1 個通道做卷積,這樣的卷積每次都得出大小為 5 x 5 x 1 的映射,之后再將這些映射堆疊在一起創建一個 5 x 5 x 3 的圖像,最終得出一個大小為 5 x 5 x 3 的輸出圖像。這樣的話,圖像的深度保持與原來的一樣。

深度可分離卷積—第一步:在 2D 卷積中分別使用 3 個卷積核(每個過濾器的大小為 3 x 3 x 1),而不使用大小為 3 x 3 x 3 的單個過濾器。每個卷積核僅對輸入層的 1 個通道做卷積,這樣的卷積每次都得出大小為 5 x 5 x 1 的映射,之后再將這些映射堆疊在一起創建一個 5 x 5 x 3 的圖像,最終得出一個大小為 5 x 5 x 3 的輸出圖像。深度可分離卷積的第二步是擴大深度,我們用大小為 1x1x3 的卷積核做 1x1 卷積。每個 1x1x3 卷積核對 5 x 5 x 3 輸入圖像做卷積后都得出一個大小為 5 x 5 x1 的映射。

這樣的話,做 128 次 1x1 卷積后,就可以得出一個大小為 5 x 5 x 128 的層。

分組卷積

Group convolution 分組卷積,最早在AlexNet中出現,由於當時的硬件資源有限,訓練AlexNet時卷積操作不能全部放在同一個GPU處理,因此作者把feature maps分給多個GPU分別進行處理,最后把多個GPU的結果進行融合。

下面描述分組卷積是如何實現的。首先,傳統的 2D 卷積步驟如下圖所示。在這個案例中,通過應用 128 個過濾器(每個過濾器的大小為 3 x 3 x 3),大小為 7 x 7 x 3 的輸入層被轉換為大小為 5 x 5 x 128 的輸出層。針對通用情況,可概括為:通過應用 Dout 個卷積核(每個卷積核的大小為 h x w x Din),可將大小為 Hin x Win x Din 的輸入層轉換為大小為 Hout x Wout x Dout 的輸出層。在分組卷積中,過濾器被拆分為不同的組,每一個組都負責具有一定深度的傳統 2D 卷積的工作。下圖的案例表示得更清晰一些。

擴張卷積

擴張卷積引入另一個卷積層的參數被稱為擴張率。這定義了內核中值之間的間距。擴張速率為2的3x3內核將具有與5x5內核相同的視野,而只使用9個參數。 想象一下,使用5x5內核並刪除每個間隔的行和列。(如下圖所示)系統能以相同的計算成本,提供更大的感受野。擴張卷積在實時分割領域特別受歡迎。 在需要更大的觀察范圍,且無法承受多個卷積或更大的內核,可以才用它。

直觀上,空洞卷積通過在卷積核部分之間插入空間讓卷積核「膨脹」。這個增加的參數 l(空洞率)表明了我們想要將卷積核放寬到多大。下圖顯示了當 l=1,2,4 時的卷積核大小。(當l=1時,空洞卷積就變成了一個標准的卷積)。

反卷積

這里提到的反卷積跟1維信號處理的反卷積計算是很不一樣的,FCN作者稱為backwards convolution,有人稱Deconvolution layer is a very unfortunate name and should rather be called a transposed convolutional layer. 我們可以知道,在CNN中有con layer與pool layer,con layer進行對圖像卷積提取特征,pool layer對圖像縮小一半篩選重要特征,對於經典的圖像識別CNN網絡,如IMAGENET,最后輸出結果是1X1X1000,1000是類別種類,1x1得到的是。FCN作者,或者后來對end to end研究的人員,就是對最終1x1的結果使用反卷積(事實上FCN作者最后的輸出不是1X1,是圖片大小的32分之一,但不影響反卷積的使用)。這里圖像的反卷積與圖6的full卷積原理是一樣的,使用了這一種反卷積手段使得圖像可以變大,FCN作者使用的方法是這里所說反卷積的一種變體,這樣就可以獲得相應的像素值,圖像可以實現end to end。

目前使用得最多的deconvolution有2種:

方法1:full卷積, 完整的卷積可以使得原來的定義域變大
方法2:記錄pooling index,然后擴大空間,再用卷積填充。圖像的deconvolution過程如下:

 

輸入:2x2, 卷積核:4x4, 滑動步長:3, 輸出:7x7

即輸入為2x2的圖片經過4x4的卷積核進行步長為3的反卷積的過程

1.輸入圖片每個像素進行一次full卷積,根據full卷積大小計算可以知道每個像素的卷積后大小為 1+4-1=4, 即4x4大小的特征圖,輸入有4個像素所以4個4x4的特征圖

2.將4個特征圖進行步長為3的fusion(即相加); 例如紅色的特征圖仍然是在原來輸入位置(左上角),綠色還是在原來的位置(右上角),步長為3是指每隔3個像素進行fusion,重疊部分進行相加,即輸出的第1行第4列是由紅色特陣圖的第一行第四列與綠色特征圖的第一行第一列相加得到,其他如此類推。

可以看出反卷積的大小是由卷積核大小與滑動步長決定, in是輸入大小, k是卷積核大小, s是滑動步長, out是輸出大小

得到 out = (in - 1) * s + k
上圖過程就是, (2 - 1) * 3 + 4 = 7

Involution

論文:Involution: Inverting the Inherence of Convolution for Visual Recognition (CVPR'21)

代碼開源地址:https://github.com/d-li14/involution

盡管神經網絡體系結構發展迅速,但卷積仍然是深度神經網絡架構構建的主要組件。從經典的圖像濾波方法中得到的靈感,卷積核具有2個顯著的特性Spatial-agnostic和Channel-specific。在Spatial上,前者的性質保證了卷積核在不同位置之間的共享,實現了平移不變性。在Channel域中,卷積核的頻譜負責收集編碼在不同Channel中的不同信息,滿足后一種特性。此外,自從VGGNet出現以來,現代神經網絡通過限制卷積核的空間跨度不超過3*3來滿足卷積核的緊湊性。

一方面,盡管Spatial-Agnostic和Spatial-Compact的性質在提高效率和解釋平移不變性等價方面有意義,但它剝奪了卷積核適應不同空間位置的不同視覺模式的能力。此外,局部性限制了卷積的感受野,對小目標或者模糊圖像構成了挑戰。另一方面,眾所周知,卷積核內部的通道間冗余在許多經典深度神經網絡中都很突出,這使得卷積核對於不同通道的靈活性受到限制。

為了克服上述限制,本文作者提出了被稱為involution的操作,與標准卷積相比,involution具有對稱反向特性,即Spatial-Specific和Channel-Agnostic。具體地說,involution核在空間范圍上是不同的,但在通道上是共享的。由於involution核的空間特性,如果將其參數化為卷積核等固定大小的矩陣,並使用反向傳播算法進行更新,則會阻礙學習到的對合核在不同分辨率的輸入圖像之間的傳輸。在處理可變特征分辨率的最后,屬於特定空間位置的involution核可能僅在對應位置本身的傳入特征向量的條件下作為實例生成。此外,作者還通過在通道維數上共享involution核來減少核的冗余。

綜合上述2個因素,involution運算的計算復雜度隨特征通道數量線性增加,動態參數化involution核在空間維度上具有廣泛的覆蓋。通過逆向設計方案,本文提出的involution具有卷積的雙重優勢:

1:involution可以在更廣闊的空間中聚合上下文,從而克服了對遠程交互進行建模的困難

2:involution可以在不同位置上自適應地分配權重,從而對空間域中信息最豐富的視覺元素進行優先排序。

大家也都知道最近基於Self-Attention進一步的研究表明,很多任務為了捕獲特征的長期依賴關系提出使用Transformer來進行建模。在這些研究中,純粹的Self-Attention可以被用來構建具有良好性能的獨立模型。而本文將揭示Self-Attention是通過一個復雜的關於核結構的公式來對鄰近像素之間的關系進行建模,其實也就是involution化的特殊情況。相比之下,本文所采用的核是根據單個像素生成的,而不是它與相鄰像素的關系。更進一步,作者在實驗中證明,即使使用簡單版本,也可以實現Self-Attention的精確。

involution的計算過程如下圖所示:

針對輸入feature map的一個坐標點上的特征向量,先通過 ∅ (FC-BN-ReLU-FC)和reshape (channel-to-space)變換展開成kernel的形狀,從而得到這個坐標點上對應的involution kernel,再和輸入feature map上這個坐標點鄰域的特征向量進行Multiply-Add得到最終輸出的feature map。具體操作流程和tensor形狀變化如下:

另外作者基於MM系列代碼,實現了mmclassficton、mmsegmentation、mmdetection中的部分模型。

 

點擊關注,第一時間了解華為雲新鮮技術~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM