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