對幾種常見卷積的簡單理解
阿新 • • 發佈:2019-01-14
看了一些關於CNN中常見卷積方法的介紹,簡單做一些筆記,詳細介紹可參考文末的連結。
深度可分離卷積(Depthwise separable convolution)
思想:先逐通道地(depthwise)對輸入資料體空間域做卷積,再沿著通道方向做1*1卷積進行通道融合
好處:
- 將通道和空間區域進行解耦分離;
- 有效降低引數量(e.g 卷積權重引數k*k*Ci*Co->k*k*Ci+1*1*Ci*Co)
分組卷積(Croup convolution)
思想:將輸入資料體沿通道維度分成多組,對每組分別進行卷積,然後再將各組卷積的輸出連線(concatenate)起來
好處
- 同樣可有效降低引數量(e.g 卷積權重引數k*k*Ci*Co->k*k*Ci*Co/g 分成g組);
- 可在通道維度學習block-diagonal結構的稀疏性,使得網路中高相關的濾波器能夠以一種更加結構化的方式被學習到,不容易過擬合,起到類似正則化的效果
擴張/空洞卷積(Dilated/Atrous convolution)
思想:將卷積核進行“擴張”(拉大間距,新擴張的地方以0值填充)
好處:在不增加捲積核引數量的前提下有效擴大感受野
轉置卷積(Transposed convolution)
思想:
思考角度1:對正向卷積的輸出(較小解析度)向量化後去乘以卷積轉置矩陣(其權重引數可學習)再將結果reshape(較大解析度)(具體可參考 一文搞懂反捲積,轉置卷積)
思考角度2:直接對輸入張量進行合適的零填充(zero-padding)然後執行普通的卷積也可達到相同的效果,見下圖。
好處:可實現引數可學習的上取樣,常用於語義分割和影象生成(DCGAN)中。
下面貼一小段PyTorch的二維卷積和轉置卷積的程式碼(注意轉置卷積的結果和卷積前的結輸入是不一樣的,說明轉置卷積並不是卷積的完全逆過程,只是恢復了卷積前的形狀),另外一般深度學習框架的卷積API都含有可設定分組卷積和擴張卷積的引數,可方便地實現分組卷積和擴張卷積乃至深度可分離卷積(分組卷積的分組數設定成輸入通道數再加1*1卷積)
參考資料: