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

摘要:在卷積神經網絡中,經過使用filters提取不一樣的特徵,這些filters的權重是在訓練期間自動學習的,而後將全部這些提取的特徵「組合」以作出決策。

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

進行卷積的目的是從輸入中提取有用的特徵。在圖像處理中,能夠選擇各類各樣的filters。每種類型的filter都有助於從輸入圖像中提取不一樣的特徵,例如水平/垂直/對角線邊緣等特徵。在卷積神經網絡中,經過使用filters提取不一樣的特徵,這些filters的權重是在訓練期間自動學習的,而後將全部這些提取的特徵「組合」以作出決策。github

目錄:

  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數目。url

上圖中描述了:在一個維度爲 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 的輸出層。spa

空間可分離卷積

在一個可分離卷積中,咱們能夠將內核操做拆分紅多個步驟。咱們用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中的部分模型。

 

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

相關文章
相關標籤/搜索