科普-深度學習中的卷積-卷積核和濾波器的區別


卷積的目的是為了從輸入中提取有用的特征。在圖像處理中,有很多濾波器可以供我們選擇。每一種濾波器幫助我們提取不同的特征。比如水平/垂直/對角線邊緣等等。在CNN中,通過卷積提取不同的特征,濾波器的權重在訓練期間自動學習。然后將所有提取到的特征“組合”以作出決定。

 

卷積的優勢在於,權重共享和平移不變性。同時還考慮到了像素空間的關系,而這一點很有用,特別是在計算機視覺任務中,因為這些任務通常涉及識別具有空間關系的對象。(例如:狗的身體通常連接頭部、四肢和尾部)。

 

單通道版本

單個通道的卷積

 

在深度學習中,卷積是元素對元素的加法和乘法。對於具有一個通道的圖像,卷積如上圖所示。這里的濾波器是一個3x3的矩陣[[0,1,2],[2,2,0],[0,1,2]]。濾波器滑過輸入,在每個位置完成一次卷積,每個滑動位置得到一個數字。最終輸出仍然是一個3x3的矩陣。(注意,在上面的例子中,stride=1, padding=0)

 

多通道版本

在很多應用中,我們需要處理多通道圖片。最典型的例子就是RGB圖像。

不同的通道強調原始圖像的不同方面

 

另一個多通道數據的例子是CNN中的層。卷積網絡通常由多個通道組成(通常為數百個通道)。每個通道描述前一層的不同方面。我們如何在不同深度的層之間進行轉換?如何將深度為n的層轉換為深度為m的下一層?

 

在描述這個過程之前,我們先介紹一些術語:layers(層)、channels(通道)、feature maps (特征圖)、filters(濾波器)、kernels(卷積核)。從層次結構來看,層和濾波器的概念處於同一水平,而通道和卷積核在下一級結構中。通道和特征圖是同一個事情。一層可以有多個通道(或者說特征圖)。如果輸入的是一個RGB圖像,那么就會有3個通道。“channel"通常被用來描述"layer"的結構。相似的,"kernel"是被用來描述”filter”的結構。

filter和kernel之間的不同很微妙。很多時候,它們可以互換,所以這可能造成我們的混淆。那它們之間的不同在於哪里呢?一個"kernel"更傾向於是2D的權重矩陣。而'filter"則是指多個Kernel堆疊的3D結構。如果是一個2D的filter,那么兩者就是一樣的。但是一個3Dfilter, 在大多數深度學習的卷積中,它是包含kernel的。每個卷積核都是獨一無二的,主要在於強調輸入通道的不同方面。

 

講了概念,下面我們繼續講解多通道卷積。將每個內核應用到前一層的輸入通道上以生成一個輸出通道。這是一個卷積核過程,我們為所有Kernel重復這樣的過程生成多個通道。然后把這些通道加在一起形成單個輸出通道。下圖:

 

輸入是一個5x5x3的矩陣,有三個通道。filter是一個3x3x3的矩陣。首先,filter中的每個卷積核分別應用於輸入層的三個通道。執行三次卷積,產生3個3x3的通道。

 

 

 然后,這三個通道相加(矩陣加法),得到一個3x3x1的單通道。這個通道就是在輸入層(5x5x3矩陣)應用filter(3x3x3矩陣)的結構。

 

 

同樣的,我們可以把這個過程看作是一個3Dfilter矩陣滑過輸入層。值得注意的是,輸入層和filter有相同的深度(通道數量=卷積核數量)。3Dfilter只需要在2維方向上移動,圖像的高和寬。這也是為什么這種操作被稱為2D卷積,盡管是使用3D濾波器來處理3D數據。在每一個滑動位置,我們執行卷積,得到一個數字。就像下面的例子中體現的,滑動水平的5個位置和垂直的5個位置進行。總之,我們得到了一個單一通道輸出。

 

 

現在,我們一起來看看,如何在不同深度的層之間轉換。假設輸入層有Xin個通道,我們想得到輸出有Dout個通道。我們只需要將Dout filters應用到輸入層。每一個filter有Din個卷積核。每個filter提供一個輸出通道。完成該過程,將結果堆疊在一起形成輸出層。

 

3D Convolution

 

在上一節的最后一個插圖中,可以看出,這實際上是在完成3D卷積。但是在深度學習中,我們仍然把上述操作稱為2D卷積。3D數據,2D卷積。濾波器的深度和輸入層的深度是一樣的。3D濾波器只在兩個方向上移動(圖像的高和寬),而輸出也是一個2D的圖像(僅有一個通道)。

 

3D卷積是存在的,它們是2D卷積的推廣。在3D卷積中,濾波器的深度要小於輸入層的深度(也可以說卷積尺寸小於通道尺寸)。所以,3D濾波器需要在數據的三個維度上移動(圖像的長、寬、高)。在濾波器移動的每個位置,執行一次卷積,得到一個數字。當濾波器滑過整個3D空間,輸出的結果也是一個3D的。

 

 

和2D卷積能夠編碼2D域中的對象關系一樣,3D卷積也可以描述3D空間中的對象關系。3D關系在一些應用中是很重要的,比如3D分割/醫學圖像重構等。

 

1x1 Convolution

下面我們來看一看一種有趣的操作,1x1卷積。

我們會有疑問,這種卷積操作真的有用嗎?看起來只是一個數字乘以輸入層的每個數字?正確,也不正確。如果輸入數據只有一個通道,那這種操作就是將每個元素乘上一個數字。

但是,如果輸入數據是多通道的。那么下面的圖可以說明,1x1卷積是如何工作的。輸入的數據尺寸是HxWxD,濾波器尺寸是1x1xD,輸出通道尺寸是HxWx1。如果我們執行N次1x1卷積,並將結果連接在一起,那可以得到一個H x W x N的輸出。

 

1x1卷積在論文《Network in Network》中提出來。並且在Google發表的《Going Deeper with Convolution》中也有 用到。1x1卷積的優勢如下:

  • 降低維度以實現高效計算
  • 高效的低維嵌入,或特征池
  • 卷積后再次應用非線性

前兩個優勢可以從上圖中看出。完成1x1卷積操作后,顯著的降低了depth-wise的維度。如果原始輸入有200個通道,那么1x1卷積操作將這些通道嵌入到單一通道。第三個優勢是指,在1x1卷積后,可以添加諸如ReLU等非線性激活。非線性激活允許網絡學習更加復雜的函數。

 

Convolution ArithmeticJ(卷積算法)

現在我們知道了depth維度的卷積。我們繼續學習另外兩個方向(height&width), 同樣重要的卷積算法。一些術語:

Kernel size (卷積核尺寸):卷積核在上面的部分已有提到,卷積核大小定義了卷積的視圖。

Stride(步長):定義了卷積核在圖像中移動的每一步的大小。比如Stride=1,那么卷積核就是一個按像素大小移動。Stride=2,那么卷積核在圖像中就是按2個像素移動(即,會跳過一個像素)。我們可以用stride>=2,來對圖像進行下采樣。

 

Padding: 可以將Padding理解為在圖像外圍補充一些像素點。padding可以保持空間輸出維度等於輸入圖像,必要的話,可以在輸入外圍填充0。另一方面,unpadding卷積只對輸入圖像的像素進行卷積,沒有填充0.輸出的尺寸將小於輸入。

下圖是2D卷積, Kernel size=3, Stride=1, Padding=1:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


免責聲明!

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



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