一文看盡深度學(xué)習(xí)中的20種卷積(1)
以下文章來源于CVHub ,作者派派星
引言
卷積,是卷積神經(jīng)網(wǎng)絡(luò)中最重要的組件之一。不同的卷積結(jié)構(gòu)有著不一樣的功能,但本質(zhì)上都是用于提取特征。比如,在傳統(tǒng)圖像處理中,人們通過設(shè)定不同的算子來提取諸如邊緣、水平、垂直等固定的特征。而在卷積神經(jīng)網(wǎng)絡(luò)中,僅需要隨機初始化一個固定卷積核大小的濾波器,并通過諸如反向傳播的技術(shù)來實現(xiàn)卷積核參數(shù)的自動更新即可。其中,淺層的濾波器對諸如點、線、面等底層特征比較敏感,深層的濾波器則可以用于提取更加抽象的高級語義特征,以完成從低級特征到高級特征的映射。本文將從背景、原理、特性及改進四個維度分別梳理10篇影響力深遠(yuǎn)的經(jīng)典卷積模塊以及10篇具有代表性的卷積變體,使讀者對卷積的發(fā)展脈絡(luò)有一個更加清晰的認(rèn)知。
【經(jīng)典卷積系列】
原始卷積 (Vanilla Convolution)
組卷積 (Group convolution)
轉(zhuǎn)置卷積 (Transposed Convolution)
1×1卷積 (1×1 Convolution)
空洞卷積 (Atrous convolution)
深度可分離卷積 (Depthwise Separable Convolution)
可變形卷積 (Deformable convolution)
空間可分離卷積 (Spatially Separable Convolution)
圖卷積 (Graph Convolution)
植入塊 (Inception Block)
【卷積變體系列】
非對稱卷積(Asymmetric Convolution)
八度卷積(Octave Convolution)
異構(gòu)卷積(Heterogeneous Convolution)
條件參數(shù)化卷積(Conditionally Parameterized Convolutions)
動態(tài)卷積(Dynamic Convolution)
幻影卷積(Ghost Convolution)
自校正卷積(Self-Calibrated Convolution)
逐深度過參數(shù)化卷積(Depthwise Over-parameterized Convolution)
分離注意力模塊(ResNeSt Block)
內(nèi)卷(Involution)
VanillaConv
講解:https://mp.weixin.qq.com/s/LOQLOF67Z9r0UOXCPes9_Q
背景
CNNs中的卷積,也稱為濾波器,是由一組具有固定窗口大小且?guī)Э蓪W(xué)習(xí)參數(shù)(learnable paramerters)的卷積核所組成,可用于提取特征。
原理
如下圖所示,卷積的過程是通過滑動窗口從上到下,從左到右對輸入特征圖進行遍歷,每次遍歷的結(jié)果為相應(yīng)位置元素的加權(quán)求和:
Vanilla Convolution
特性
稀疏連接(sparse connectivity)
傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)層使用矩陣乘法,由一個參數(shù)矩陣和一個單獨的參數(shù)描述每個輸入和每個輸出之間的交互,即每個輸出單元與每個輸入單元進行密集交互。
然而,卷積網(wǎng)絡(luò)具有稀疏交互作用,有時也稱為稀疏連接或稀疏權(quán)值。
總的來說,使用稀疏連接方式可以使網(wǎng)絡(luò)儲存更少的參數(shù),降低模型的內(nèi)存要求,同時提高計算效率。
權(quán)值共享(shared weights)
在傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)中,每個元素都使用一個對應(yīng)的參數(shù)(權(quán)重)進行學(xué)習(xí)。但是,在CNNs中卷積核參數(shù)是共享的。權(quán)值共享,也稱為參數(shù)共享,是指在計算圖層的輸出時多次使用相同的參數(shù)進行卷積運算。
平移不變性(translation invariant)
CNNs中的平移不變性指的是當(dāng)圖像中的目標(biāo)發(fā)生偏移時網(wǎng)絡(luò)仍然能夠輸出同源圖像一致的結(jié)果。對于圖像分類任務(wù)來說,我們希望CNNs具備平移不變性,因為當(dāng)圖像中目標(biāo)發(fā)生位置偏移時其輸出結(jié)果應(yīng)該保持一致。然而,CNNs結(jié)構(gòu)本身所帶來的平移不變性是非常脆弱的,大多數(shù)時候還是需要從大量數(shù)據(jù)中學(xué)習(xí)出來。
平移等變性(translation equivalence)
CNNs中的平移等變性指的是當(dāng)輸入發(fā)生偏移時網(wǎng)絡(luò)的輸出結(jié)果也應(yīng)該發(fā)生相應(yīng)的偏移。這種特性比較適用于目標(biāo)檢測和語義分割等任務(wù)。CNNs中卷積操作的參數(shù)共享使得它對平移操作具有等變性,而一些池化操作對平移有近似不變性。
GroupConv
論文:AlexNet[1] (Accepted by NIPS 2012)
背景
受單個GPU算力的瓶頸限制,組卷積在早期階段是被應(yīng)用于切分網(wǎng)絡(luò)使其能夠在多個GPU上進行并行計算,之后被廣泛應(yīng)用到ResNeXt[2]網(wǎng)絡(luò)中。
原理
原始卷積操作中每一個輸出通道都與輸入的每一個通道相連接,通道之間是以稠密方式進行連接。而組卷積中輸入和輸出的通道會被劃分為多個組,每個組的輸出通道只和對應(yīng)組內(nèi)的輸入通道相連接,而與其它組的通道無關(guān)。這種分組(split)的思想隨后被絕大多數(shù)的新晉卷積所應(yīng)用。
Group Convolution
特性
降低參數(shù)量
參數(shù)量為原始卷積的1/g,其中g(shù)為分組數(shù)。
提高訓(xùn)練效率
通過將卷積運算按通道劃分為多個路徑,可以盡可能地利用分布式的計算資源進行并行運算,有利于大規(guī)模深度神經(jīng)網(wǎng)絡(luò)的訓(xùn)練。
提高泛化性能
組卷積可以看成是對原始卷積操作的一種解耦,改善原始卷積操作中濾波器之間的稀疏性,在一定程度上起到正則化的作用。
改進
原始的組卷積實現(xiàn)中,不同通道的特征會被劃分到不同的組里面,直到網(wǎng)絡(luò)的末端才將其融合起來,中間過程顯然缺乏信息的交互(考慮到不同濾波器可提取到不同的特征)。
AlexNet
為了解決此問題,ShuffleNet[3]結(jié)合了逐點組卷積(Pointwise Group Convolution, PGC)和通道混洗(channel shuffle),來實現(xiàn)一個高效輕量化的移動端網(wǎng)絡(luò)設(shè)計。
Channel shuffle with two stacked group convolutions.
單純地應(yīng)用PGC雖然可以有效的降低計算復(fù)雜度,但同時也會引入副作用(組與組之間的信息無交互)。因此,作者進一步地應(yīng)用通道混洗操作來促使信息更好的流通。最后,論文中也提出了一種Shuffle單元。
ShuffleNet Units. a) bottleneck unit with depthwise convolution(DWConv); b) ShuffleNet unit with pointwise groupconvolution(GConv) and channel shuffle; c) ShuffleNet unit with stride = 2.
TransposedConv
論文:《A guide to convolution arithmetic for deeplearning》[4]
背景
轉(zhuǎn)置卷積,也稱為反卷積(Deconvolution)或微步卷積(Fractionally-strided Convolution),一般應(yīng)用在編解碼結(jié)構(gòu)中的****部分或者DCGAN中的生成器中等。但由于數(shù)字信號處理中也有反卷積的概念,所以一般為了不造成歧義,大多數(shù)框架的API都會定義為轉(zhuǎn)置卷積。
Transposed Convolution
原理
與常規(guī)的卷積操作不同,轉(zhuǎn)置卷積是一種一對多的映射關(guān)系,即輸入矩陣中的一個值映射到輸出矩陣的K×K(i.e., kernel size)個值。在具體的實現(xiàn)當(dāng)中,需要維護一個轉(zhuǎn)置矩陣,這個矩陣參數(shù)是可學(xué)習(xí)的。
特性
特征上采樣
利用轉(zhuǎn)置卷積,可以引入?yún)?shù)讓網(wǎng)絡(luò)自動學(xué)習(xí)卷積核的權(quán)重以更好地恢復(fù)空間分辨率。一般來說,利用轉(zhuǎn)置卷積來替代常規(guī)的上采樣操作(最近鄰插值、雙線性插值即雙立方插值)會取得更好的效果(在沒有過擬合的情況下),弊端是增大了參數(shù)量,且容易出現(xiàn)網(wǎng)格效應(yīng)[5]。
特征可視化
利用轉(zhuǎn)置卷積還可以對特征圖進行可視化。有時間的強烈推薦大家去閱讀原論文《Visualizing and Understanding Convolutional Networks》[6],有助于幫助大家理解不同深度的各個特征圖究竟學(xué)到了什么特征。比如,增加網(wǎng)絡(luò)的深度有利于提取更加抽象的高級語義特征,而增加網(wǎng)絡(luò)的寬度有利于增強特征多樣性的表達(dá)?;蛘呤切〉木矸e核有利于特征的學(xué)習(xí),而小的步長則有利于保留更多的空間細(xì)節(jié)信息。
1×1Conv
論文:《Network In Network》[7] (Accepted by ICLR 2014)
背景
1×1卷積最初提出的目的是用于增強模型對特定感受野下的局部區(qū)域的判定能力。后續(xù)也被GoogleNet[8]和ResNet[9]進一步的應(yīng)用。
1×1 Convolution
特性
增強特征表達(dá)能力
1×1卷積本質(zhì)上也是一個帶參數(shù)的濾波器,在不改變特征圖本身尺寸的情況下,能夠增加網(wǎng)絡(luò)深度。通過在卷積后通過非線性激活函數(shù)可以有效的增強網(wǎng)絡(luò)的表達(dá)能力。
升維和降維
1×1卷積可以通過增加或減少濾波器的數(shù)量來實現(xiàn)升維或降維的目的。與全連接層不同,由于卷積是基于權(quán)值共享,因此能夠有效的降低網(wǎng)絡(luò)的參數(shù)量和計算量。另一方面,降低維度可以認(rèn)為是通過減少冗余的特征圖來降低模型中間層權(quán)重的稀疏性,從而得到一個更加緊湊的網(wǎng)絡(luò)結(jié)構(gòu)。
跨通道的信息交互
類似于多層感知機,1×1卷積本質(zhì)上就是多個特征圖之間的線性組合。因此,通過1×1卷積操作可以輕松實現(xiàn)跨通道的信息交互和整合。
AtrousConv
論文:《Multi-Scale Context Aggregation by Dilated Convolutions》[10] (Accepted by ICLR 2016)
講解:https://mp.weixin.qq.com/s/DWGqjMruicwIDKhsmossmg
背景
空洞卷積,也稱為擴張卷積(Dilated Convolution),最早是針對語義分割任務(wù)所提出來的。由于語義分割是一種像素級的分類,經(jīng)過編碼器所提取出的高級特征圖最終需要上采樣到原始輸入特征圖的空間分辨率。因此,為了限制網(wǎng)絡(luò)整體的計算效率,通常會采用池化和插值等上/下采樣操作,但這對語義分割這種稠密預(yù)測任務(wù)來說是非常致命的,主要體現(xiàn)在以下三方面:
不可學(xué)習(xí):由于上采樣操作(如雙線性插值法)是固定的即不可學(xué)習(xí)的,所以并不能重建回原始的空間信息。
損失空間信息:引入池化操作不可避免的會導(dǎo)致內(nèi)部數(shù)據(jù)結(jié)構(gòu)丟失,導(dǎo)致空間細(xì)節(jié)信息嚴(yán)重丟失。
丟失小目標(biāo):經(jīng)過N次池化(每次下采樣2倍),原則上小于個像素點的目標(biāo)信息將不可重建,這對于語義分割這種密集型預(yù)測任務(wù)來說是致命的。
Atrous convolution
原理
空洞卷積可看成是原始卷積更進一步的擴展,通過在原始卷積的基礎(chǔ)上引入空洞率這個超參數(shù),用于調(diào)節(jié)卷積核的間隔數(shù)量。比如,原始卷積核其空洞率為1,而對于空洞率為k的卷積則用0去填充空白的區(qū)域。
特性
增大感受野
空洞卷積可以在同等卷積核參數(shù)下獲得更大的感受野。所以,對于需要較為全局的語義信息或類似于語音文本需要較長的序列信息依賴的任務(wù)中,都可以嘗試應(yīng)用空洞卷積。
表征多尺度信息
利用帶有不同空洞率的卷積,還可以捕捉到多尺度的上下文語義信息。不同的空洞率代表著不同的感受野,意味著網(wǎng)絡(luò)能夠感知到不同尺寸的目標(biāo)。
局限性
不好優(yōu)化
雖然引入空洞卷積可以在參數(shù)不變的情況增大感受野,但是由于空間分辨率的增大,所以在實際中常常會不好優(yōu)化,速度方面是一個詬病,因此在工業(yè)上對實時性有要求的應(yīng)用更多的還是類FCN結(jié)構(gòu)。
引入網(wǎng)格/棋盤效應(yīng)
應(yīng)用空洞卷積也引入網(wǎng)格效應(yīng)。由圖森和谷歌大腦合作研究的《Understanding Convolution for Semantic Segmentation》[11]文章指出了如果多次使用空洞率相同的卷積去提取特征時會損失掉信息的連續(xù)性。這是因為卷積核并不連續(xù),導(dǎo)致許多的像素從頭到尾都沒有參與到運算當(dāng)中,相當(dāng)于失效了,這對于語義分割這類的密集型預(yù)測任務(wù)來說是十分不友好的,特別是針對小目標(biāo)來說。一個解決方案便是令所疊加的卷積其空洞率不能出現(xiàn)大于1的公約數(shù),如令其等于[1, 2, 5],使其呈現(xiàn)鋸齒結(jié)構(gòu)。
*博客內(nèi)容為網(wǎng)友個人發(fā)布,僅代表博主個人觀點,如有侵權(quán)請聯(lián)系工作人員刪除。