卷積核filter和kernal的區別


在一堆介紹卷積的帖子中,這篇特別之處在於很萌的示例配色,令人眼前一亮,當然直觀也是很直觀滴,保證了能在昏昏欲睡見周公子前看完。

 

直觀介紹各種迷人的CNN層

一個簡短的介紹

卷積使用“kernel”從輸入圖像中提取某些“特征”。kernel是一個矩陣,可在圖像上滑動並與輸入相乘,從而以某種我們期望的方式增強輸出。看下面的GIF。

上面的kernel可用於銳化圖像。但是這個kernel有什么特別之處呢?考慮下圖所示的兩個輸入圖像。第一個圖像,中心值為3 * 5 + 2 * -1 + 2 * -1 + 2 * -1 + 2 * -1 =7,值3增加到7。第二個圖像,輸出是1 * 5 + 2 * -1 + 2 * -1 + 2 * -1 + 2 * -1 = -3,值1減少到-3。顯然,3和1之間的對比度增加到了7和-3,圖像將更清晰銳利。

通過深層 CNN,我們無需再用手工設計的kernel來提取特征,而是可以直接學習這些可提取潛在特征的kernel值。

 

Kernel與Filter

在深入探討之前,我想先明確區分“kernel”和“filter”這兩個術語,因為我已經看到很多人把它們混為一談。如前所述,kernel是權重矩陣,將權重矩陣與輸入相乘以提取相關特征。卷積名稱就是kernel矩陣的維數。例如,2D卷積的kernel矩陣就是2D矩陣。

但是,filter是多個kernel的串聯,每個kernel分配給輸入的特定通道。filter總是比kernel大一維。例如,在2D卷積中,filter是3D矩陣(本質上是2D矩陣(即kernel)的串聯)。因此,對於具有kernel尺寸h * w和輸入通道k的CNN層,filter尺寸為k * h * w。

一個普通的卷積層實際上由多個這樣的filter組成。為了簡化下面的討論,除非另有說明,否則假定僅存在一個filter,因為所有filter都會重復相同的操作。

 

1D,2D和3D卷積

一維卷積通常用於時間序列數據分析(因為這種情況下的輸入為一維)。如前所述,一維數據輸入可以具有多個通道。濾波器只能沿一個方向移動,因此輸出為1D。參見下面的單通道一維卷積示例。

我們已經在帖子的開頭看到了一個單通道2D卷積的示例,因此讓我們可視化一個多通道2D卷積,並嘗試理解它。在下圖中,kernel尺寸為3 * 3,並且filter中有多個這樣的kernel(標記為黃色)。這是因為輸入中有多個通道(標記為藍色),並且我們有一個kernel對應於輸入中的每個通道。顯然,這里的filter可以在兩個方向上移動,因此最終輸出是2D。2D卷積是最常見的卷積,在計算機視覺中大量使用。

很難可視化3D filter(因為它是4D矩陣),因此我們在這里只討論單通道3D卷積。如下圖所示,在3D卷積中,kernel可以在3個方向上移動,因此獲得的輸出也是3D。

在修改和自定義CNN層方面所做的大多數工作都只集中在2D卷積上,因此從現在開始,我只討論2D卷積的變種。

 

轉置(Transposed)卷積

下面的GIF很好的記錄了2D卷積如何減小輸入的尺寸。但是有時我們需要對輸入進行如增加尺寸(也稱為“上采樣”)等處理。

為了使用卷積實現此目標,我們使用了稱為轉置卷積或反卷積(它並不是真正的“逆轉”卷積運算,所以很多人不喜歡使用反卷積這個術語)的卷積修改版。下面的GIF中的虛線塊表示padding。

這些動畫很直觀的展示了如何基於不同的padding模式從同一輸入產生不同的上采樣輸出。這種卷積在現代CNN網絡中非常常用,主要是因為它們具有增加圖像尺寸的能力。

可分離卷積

可分離卷積是指將卷積kernel分解為低維kernel。可分離卷積有兩種主要類型。首先是空間上可分離的卷積,如下

標准的2D卷積核

 

空間可分離的2D卷積

空間可分離的卷積在深度學習中並不常見。但是深度可分離卷積被廣泛用於輕量級CNN模型中,並提供了非常好的性能。參見以下示例。

具有2個輸入通道和128個filter的標准2D卷積

 

深度可分離的2D卷積,它首先分別處理每個通道,然后進行通道間卷積

但是為什么用可分離的卷積呢?效率!!使用可分離卷積可以顯著減少所需參數的數量。隨着當今我們的深度學習網絡的復雜性不斷提高和規模越來越大,迫切需要以更少的參數提供相似的性能。

擴張/空洞(Dilated/Atrous)卷積

如你在以上所有卷積層中所見,無一例外,它們將一起處理所有相鄰值。但是,有時跳過某些輸入值可能更好,這就是為什么引入擴張卷積(也稱為空洞卷積)的原因。這樣的修改允許kernel在不增加參數數量的情況下增加其感受野

顯然,可以從上面的動畫中注意到,kernel能夠使用與之前相同的9個參數來處理更廣闊的鄰域。這也意味着由於無法處理細粒度的信息(因為它跳過某些值)而導致信息丟失。但是,在某些應用中,總體效果是正面的。

 

可變形(Deformable)卷積

就特征提取的形狀而言,卷積非常嚴格。也就是說,kernel形狀僅為正方形/矩形(或其他一些需要手動確定的形狀),因此它們只能在這種模式下使用。如果卷積的形狀本身是可學習的呢?這是引入可變形卷積背后的核心思想。

實際上,可變形卷積的實現非常簡單。每個kernel都用兩個不同的矩陣表示。第一分支學習從原點預測“偏移”。此偏移量表示要處理原點周圍的哪些輸入。由於每個偏移量都是獨立預測的,它們之間無需形成任何剛性形狀,因此具有可變形的特性。第二個分支只是卷積分支,其輸入是這些偏移量處的值。

What's next?

CNN層有多種變體,可以單獨使用或彼此結合使用以創建成功且復雜的體系結構。每個變化都是基於特征提取應如何工作的直覺而產生的。因此,盡管這些深層CNN網絡學到了我們無法解釋的權重,但我相信產生它們的直覺對於它們的性能非常重要,朝着這個方向進行進一步的研究工作對於高度復雜的CNN的成功至關重要。


免責聲明!

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



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