詳述Deep Learning中的各種卷積(三)
本文梳理舉例總結(jié)深度學(xué)習(xí)中所遇到的各種卷積,幫助大家更為深刻理解和構(gòu)建卷積神經(jīng)網(wǎng)絡(luò)。
本文將詳細(xì)介紹以下卷積概念:
2D卷積(2D Convolution) 3D卷積(3D Convolution) 卷積( Convolution) 反卷積(轉(zhuǎn)置卷積)(Transposed Convolution) 擴(kuò)張卷積(Dilated Convolution / Atrous Convolution) 空間可分卷積(Spatially Separable Convolution) 深度可分卷積(Depthwise Separable Convolution) 平展卷積(Flattened Convolution) 分組卷積(Grouped Convolution) 混洗分組卷積(Shuffled Grouped Convolution) 逐點(diǎn)分組卷積(Pointwise Grouped Convolution)
7. 可分卷積(Separable Convolution)
在一些經(jīng)典網(wǎng)絡(luò)架構(gòu)中可分卷積發(fā)揮了重要的作用,比如MobileNets??煞志矸e又可分為空間可分卷積核深度可分卷積。
7.1. 空間可分卷積(Spatially Separable Convolution)
空間可分卷積根據(jù)圖像寬核高的2D空間尺寸進(jìn)行操作。從概念上來講,空間可分卷積將卷積分解為兩個獨(dú)立的操作。我們拿數(shù)字圖像處理中常見的索貝爾算子(Sobel operator,主要用于邊緣檢測)分解為和卷積核。
在卷積中,卷積核直接與圖像卷積進(jìn)行卷積運(yùn)算(具體過程可參考轉(zhuǎn)置卷積中計算機(jī)中如何處理卷積運(yùn)算)。在空間可分卷積中,卷積核先于圖像進(jìn)行卷積再應(yīng)用卷積核。執(zhí)行相同的操作時,相比于直接卷積運(yùn)算需要9個參數(shù)這樣僅需要6個參數(shù)。
此外,在空間可分卷積中相比于正常卷積所進(jìn)行的矩陣乘法次數(shù)也更少。下面給出一個具體的例子,圖像經(jīng)過卷積核(步長為1,填充為0),水平滑動3個位置,垂直滑動3個位置。一共滑動9個位置,在每個位置9個元素進(jìn)行逐個乘法。所以總共要執(zhí)行乘法運(yùn)算。
另一方面,對于空間可分卷積,我們首先對的圖像應(yīng)用卷積核。在水平滑動5個位置以及垂直滑動3個位置即個位置,在每個位置完成3次乘法運(yùn)算,總共是次乘法運(yùn)算。再將得到的的輸出應(yīng)用卷積核。那么需要水平滑動3個位置和垂直掃描3個位置,總共9個位置,每個位置完成3次乘法運(yùn)算,那么總共要執(zhí)行次乘法運(yùn)算,所以上述空間可分卷積一共完成次乘法運(yùn)算,相比于正常卷積乘法運(yùn)算減少了。
這里我們來歸納一下上面的例子?,F(xiàn)在我們應(yīng)用卷積在一共圖像上,卷積核為,步長為1,填充為0。
標(biāo)準(zhǔn)卷積計算成本:
空間可分卷積計算成本:
空間可分卷積與標(biāo)準(zhǔn)卷積的計算成本之比為:
對于圖像大小大于卷積核大小的情況(),此時比值變?yōu)?span style="cursor:pointer;">。這意味著在這種漸進(jìn)的情況下,當(dāng)卷積核為,空間可分卷積的卷積計算成本是標(biāo)準(zhǔn)卷積的。如果為卷積其值為,如果為卷積其值為等等。
雖然空間可分卷積可節(jié)省成本,但很少用于深度學(xué)習(xí)。其中一個主要的原因是:并非所有卷積核都可以分成兩個較小的卷積核。如果我們用空間可分卷積取代所有傳統(tǒng)的卷積,則有可能我們限制自己在訓(xùn)練期間搜索所有可能的內(nèi)核,導(dǎo)致模型訓(xùn)練結(jié)果不盡如人意。
7.2. 深度可分卷積
相比于空間可分卷積,深度可分卷積在深度學(xué)習(xí)中要常用得多(比如MobileNet和Xception)。深度可分卷積包含兩個步驟:深度卷積和卷積。
在描述這些步驟前,值得再復(fù)習(xí)2D卷積和卷積?,F(xiàn)在快速回顧一下標(biāo)準(zhǔn)2D卷積。這里舉一個具體示例,假設(shè)輸入為,濾波器為。使用一個濾波器進(jìn)行2D卷積后,輸出層的大小為(只有1個通道)。

通常,在兩個神經(jīng)網(wǎng)絡(luò)層之間應(yīng)用多個過濾器。假設(shè)我們這里有128個過濾器。在應(yīng)用這128個過濾器后得到輸出為128個矩陣。堆疊成。這樣做,我們將輸入層()轉(zhuǎn)換為輸出層()??臻g尺寸(即高度和寬度)收縮,而深度則擴(kuò)展。

現(xiàn)在,通過深度可分卷積實現(xiàn)相同的轉(zhuǎn)換。
首先,我們將深度卷積應(yīng)用于輸入層。但不是使用大小的2D卷積單個濾波器,我們將單其中3個卷積核分別單獨(dú)使用。每個卷積核與對應(yīng)輸入層的單個通道進(jìn)行卷積操作(即省略單個濾波器將輸入處理當(dāng)中的多通道對應(yīng)位置相加為單通道的過程),則得到一個的輸出。
接下來,使用大小為的卷積核,完成卷積。最后得到的輸出。
于是我們可以應(yīng)用128個卷積核,這樣我們同樣得到一個的輸出。
深度可分卷積的操作流程可如下圖所示:
那么深度可分卷積相比于普通2D卷積的優(yōu)勢是什么?
深度可分卷積和空間可分卷積的優(yōu)勢一樣也是減少了計算成本。與2D卷積相比,深度可分卷積所需的操作要少得多。這里我們以上面的例子來計算。有128個卷積核滑動個位置。即次乘法運(yùn)算。而在可分離卷積中,在步驟一中,有3個卷積核滑動個位置一共進(jìn)行了次乘法運(yùn)算。在步驟二中,有128個卷積核滑動次一共次乘法運(yùn)算,總體而言深度可分卷積僅需要次乘法運(yùn)算。其計算成本僅僅是2D卷積的左右。
同樣,我們對深度可分卷積進(jìn)行歸納。假設(shè)輸入為,應(yīng)用個的濾波器(步長為1,填充為0,為偶數(shù)),同時輸出層為。
2D卷積的計算成本:
深度可分卷積的計算成本:
深度可分卷積和2D卷積所需的計算成本比值為:
目前大多數(shù)網(wǎng)絡(luò)結(jié)構(gòu)的輸出層通常都有很多通道,可達(dá)數(shù)百個甚至上千個。該情況下(),則上式可簡寫為?;诖耍绻褂?span style="cursor:pointer;">的濾波器,則2D卷積的乘法計算次數(shù)比深度可分卷積多9倍。對于的濾波器,2D卷積的乘法次數(shù)可能是其25倍。
**使用深度可分卷積有什么缺點(diǎn)嗎?**當(dāng)然有。深度可分卷積可大幅度減少卷積的參數(shù)。因此對于規(guī)模較小的模型,如果將2D卷積替換為深度可分卷積,其模型大小可能會顯著降低,模型的能力可能會變得不太理想,因此得到的模型可能是次優(yōu)的。但如果使用得當(dāng),深度可分卷積能在不犧牲模型性能的前提下顯著提高效率。
8.平展卷積(Flattened convolutions)
在論文《Flattened convolutional neural networks for feedforward acceleration》中介紹了平展卷積。從直覺上看,平展卷積的理念是濾波器分離。我們不應(yīng)用一個標(biāo)準(zhǔn)的濾波器將輸入映射到輸出,而是將此標(biāo)準(zhǔn)的濾波器分解為3個1D濾波器。這種想法與上述空間可分卷積類似,其中的一個空間濾波器近似于兩個 rank-1 過濾器(秩1矩陣),而秩1矩陣可表示為一列基乘以一行基的形式,最后分解得到3個1D濾波器。

應(yīng)該注意的是,如果標(biāo)準(zhǔn)濾波器是rank-1濾波器,則此類濾波器就可分為3個1D濾波器的向量積。實際情況中標(biāo)準(zhǔn)濾波器的秩通常大于1。論文中也提到,隨著分類問題難度的增加,將平展卷積直接應(yīng)用于濾波器會導(dǎo)致顯著的信息丟失。
為了緩解此類問題,論文對感受野的連接進(jìn)行限制,以便模型在訓(xùn)練時可以學(xué)習(xí)分解后的1D濾波器。這篇論文提到,通過使用由連續(xù)的 1D 過濾器組成的扁平化網(wǎng)絡(luò)在 3D 空間的所有方向上訓(xùn)練模型,能夠提供的性能與標(biāo)準(zhǔn)卷積網(wǎng)絡(luò)相當(dāng),不過由于學(xué)習(xí)參數(shù)的顯著減少,其計算成本要更低得多。
參考資料
A Comprehensive Introduction to Different Types of Convolutions in Deep Learning | by Kunlun Bai | Towards Data Science
Convolutional neural network - Wikipedia
Convolution - Wikipedia
一文讀懂卷積神經(jīng)網(wǎng)絡(luò)中的1x1卷積核 - 知乎 (zhihu.com)
[1312.4400] Network In Network (arxiv.org)
Inception網(wǎng)絡(luò)模型 - 啊順 - 博客園 (cnblogs.com)
ResNet解析_lanran2的博客-CSDN博客
一文帶你了解深度學(xué)習(xí)中的各種卷積(上) | 機(jī)器之心 (jiqizhixin.com)
Intuitively Understanding Convolutions for Deep Learning | by Irhum Shafkat | Towards Data Science
An Introduction to different Types of Convolutions in Deep Learning
Review: DilatedNet — Dilated Convolution (Semantic Segmentation)
ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices
Separable convolutions “A Basic Introduction to Separable Convolutions
Inception network “A Simple Guide to the Versions of the Inception Network”
A Tutorial on Filter Groups (Grouped Convolution)
Convolution arithmetic animation
Up-sampling with Transposed Convolution
Intuitively Understanding Convolutions for Deep Learning
