各種卷積型別Convolution

2022-08-04 17:57:15 字數 2892 閱讀 3901

從最開始的卷積層,發展至今,卷積已不再是當初的卷積,而是乙個研究方向。在反卷積這篇部落格中,介紹了一些常見的卷積的關係,本篇部落格就是要梳理這些有趣的卷積結構。

閱讀本篇部落格之前,建議將這篇部落格結合在一起閱讀,想必會有更深的理解。另外,不管是什麼型別的卷積,我們都把它理解成一種運算操作。

group convolution

group convolution是最早應用在2023年alexnet的雙gpu架構模型中,相當於把channel這一維度均分到兩個gpu,進行分組卷積。如圖所示:

這篇**是:imagenet classification with deep convolutional neural networks。由圖可見,上下兩個並行的網路結構只有在部分層中才有資訊互動,而且網路結構一模一樣,這就是group convolution最早的應用,但是在caffe中經常使用的單機多gpu並行訓練和上述問題存在本質區別,因為group convolution是指將channel維度細分成多個group,然後再分組進行convolution,而多gpu的訓練只是乙個資料並行分組的方式,其中minibatch和batch之間的關係就是batch=minibatch*gpu_num,這並不存在對channel的分組。

總之,group convolution是一種卷積操作,想要切分channel,然後分組卷積,運算上沒有什麼特別的地方。

2.pointwise convolution

點積,就是卷積核大小是1*1的,那為啥起名點積呢?就是因為這和向量中的點積運算很類似,舉個例子,一張3通道的feature map,卷積核大小是1*1*3,那它的運算其實就是:σ卷積核*單通道feature map。

總之,pointwise convolution是一種卷積操作,而且是一種特殊的卷積運算,代表著卷積核的大小是1*1。

3.separable convolution

可分離卷積,這種思路其實就是起了個高深的名字,也很常見。也是想在channel維度上改變經典的卷積運算,咋辦呢?經典的卷積核都是k*k*channel大小的,其中channel是上一層的輸出即本層的輸入,這不太好,我們想任意指定乙個channel,作為卷積核的大小,這樣並不影響輸入輸出的特徵圖的長寬尺寸,僅僅改變了channel這一維度。這就變得很有意思了,同group convolution不一樣的是,可分離卷積可增加channel維度,而並沒有依賴gpu。

舉個例子,對於經典的卷積運算,如果說所需的參數量為256*3*3*256=589824。而對於可分離卷積,假設我們指定的卷積核是3*3*4,那首先是256*3*3*4=9216,接下來我們得到了4*256=1024個通道數,但是呢?這並沒有完成,因為還需要下乙個過程將channel重新壓縮回256,接著有1024*1*1*256=262144,整個過程就是9216+262144=271360,看看,589824是271360的兩倍多。雖然,這在很多框架上也許未能比較出效果的顯著差異,那是多方面的原因。

值得一提的是,上面舉的例子可以認為是separable convolution 和pointwise convolution結合在一起,事實上就是配套使用的。

最早的separable convolution**於**:simplifying convnets for fast learning,作者用的是k*1和1*k的卷積核,起名為可分離卷積,而本處的可分離卷積**於另一篇**:xception: deep learning with depthwise separable convolutions。

總之,separable convolution是一種卷積操作,而且是一種特殊的卷積運算,代表著卷積核的channel維度可以自己任意選取。

4.depthwise convolution

深度卷積,這名字又開始很高深了,其實它的意思就是拓展separable convolution而來,我們可以讓卷積核的channel維度等於1啊,這樣就是深度卷積,意為在每乙個channel上做卷積。值得注意的是,往往separable convolution和depthwise convolution是統稱為depthwise convolution。假設卷積核的shape是[filter_height, filter_width, in_channels, channel_multiplier],區別僅在於channel_multiplier,由於參考同一篇**,此處將其統一。

這樣說來,前面的例子中其實就是depthwise separable convolution = depthwise convolution + pointwise convolution,這就是深度可分離卷積的真正內涵。這也就是以下**的工作:xception: deep learning with depthwise separable convolutions

總之,depthwise convolution是一種卷積操作,和separable convolution一樣,表示對channel維度進行卷積的一種方式。

5.dilated convolution

空洞卷積是解決pixel-wise輸出模型的一種常用的卷積方式。一種普遍的認識是,pooling下取樣操作導致的資訊丟失是不可逆的,通常的分類識別模型,只需要**每一類的概率,所以我們不需要考慮pooling會導致損失影象細節資訊的問題,但是做畫素級的**時(譬如語義分割),就要考慮到這個問題了。那麼空洞卷積可以用下圖來說明:

(a)圖對應3x3的1-dilated convolution,就是典型的卷積(b)圖對應3x3的2-dilated convolution,實際的卷積kernel size還是3x3,但是空洞為1,相當於kernel的size為7x7,圖中只有紅色點的權重不為0,其餘都為0,把3*3的感受野增大到了7*7。(c)圖是4-dilated convolution,能達到15x15的感受野。

也就是以下**:multi-scale context aggregation by dilated convolutions

總之,空洞卷積是卷積運算的一種方式,在於增大了感受野卻不丟失語義資訊。

詳述Deep Learning中的各種卷積(四)

首次在大規模影象資料集 imagenet 實現了深層卷積神經網路結構,引發深度學習熱潮的alexnet 在 2012 年引入了分組卷積。實現分組卷積的主要原因是讓網路訓練可在 2 個記憶體有限 每個 gpu 有 1.5 gb 記憶體 的 gpu 上進行。下面的 alexnet 表明在大多數層中都有兩...

各種耦合型別

耦合型別 1 內容耦合 如果發生下列情形,兩個模組之間就發生了內容耦合 1.乙個模組直接訪問另乙個模組的內部資料 2.乙個模組不通過正常入口轉到另一模組內部 3.兩個模組有一部分程式 重迭 只可能出現在組合語言中 4.乙個模組有多個入口。2 公共耦合 若一組模組都訪問同乙個公共資料環境,則它們之間的...

關於深度學習中的各種卷積

在訊號 影象處理領域,卷積的定義是 其定義是兩個函式中乙個函式經過反轉和位移後再相乘得到的積的積分。訊號處理中的卷積。過濾器 g 經過反轉,然後再沿水平軸滑動。在每乙個位置,我們都計算 f 和反轉後的 g 之間相交區域的面積。這個相交區域的面積就是特定位置出的卷積值。互相關是兩個函式之間的滑動點積或...