1. 程式人生 > >對幾種常見卷積的簡單理解

對幾種常見卷積的簡單理解

看了一些關於CNN中常見卷積方法的介紹,簡單做一些筆記,詳細介紹可參考文末的連結。

深度可分離卷積(Depthwise separable convolution)

在這裡插入圖片描述
思想:先逐通道地(depthwise)對輸入資料體空間域做卷積,再沿著通道方向做1*1卷積進行通道融合
好處

  • 將通道和空間區域進行解耦分離;
  • 有效降低引數量(e.g 卷積權重引數k*k*Ci*Co->k*k*Ci+1*1*Ci*Co)

分組卷積(Croup convolution)

在這裡插入圖片描述
思想:將輸入資料體沿通道維度分成多組,對每組分別進行卷積,然後再將各組卷積的輸出連線(concatenate)起來
好處

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

在這裡插入圖片描述
思想:將卷積核進行“擴張”(拉大間距,新擴張的地方以0值填充)
好處:在不增加捲積核引數量的前提下有效擴大感受野

轉置卷積(Transposed convolution)

思想
思考角度1:對正向卷積的輸出(較小解析度)向量化後去乘以卷積轉置矩陣(其權重引數可學習)再將結果reshape(較大解析度)(具體可參考

一文搞懂反捲積,轉置卷積
思考角度2:直接對輸入張量進行合適的零填充(zero-padding)然後執行普通的卷積也可達到相同的效果,見下圖。
在這裡插入圖片描述
好處:可實現引數可學習的上取樣,常用於語義分割和影象生成(DCGAN)中。

下面貼一小段PyTorch的二維卷積和轉置卷積的程式碼(注意轉置卷積的結果和卷積前的結輸入是不一樣的,說明轉置卷積並不是卷積的完全逆過程,只是恢復了卷積前的形狀),另外一般深度學習框架的卷積API都含有可設定分組卷積和擴張卷積的引數,可方便地實現分組卷積和擴張卷積乃至深度可分離卷積(分組卷積的分組數設定成輸入通道數再加1*1卷積)
在這裡插入圖片描述

參考資料:

  1. 轉置卷積
  2. 一文搞懂反捲積,轉置卷積
  3. 對深度可分離卷積、分組卷積、擴張卷積、轉置卷積(反捲積)的理解