卷積神經(jīng)網(wǎng)絡(luò)作為深度學(xué)習(xí)的典型網(wǎng)絡(luò),在圖像處理和計(jì)算機(jī)視覺(jué)等多個(gè)領(lǐng)域都取得了很好的效果。
Paul-Louis Pr?ve在Medium上通過(guò)這篇文章快速地介紹了不同類型的卷積結(jié)構(gòu)(Convolution)及優(yōu)勢(shì)。為了簡(jiǎn)單起見(jiàn),本文僅探討二維卷積結(jié)構(gòu)。
卷積
首先,定義下卷積層的結(jié)構(gòu)參數(shù)。
△ 卷積核為3、步幅為1和帶有邊界擴(kuò)充的二維卷積結(jié)構(gòu)
卷積核大小(Kernel Size):定義了卷積操作的感受野。在二維卷積中,通常設(shè)置為3,即卷積核大小為3×3。
步幅(Stride):定義了卷積核遍歷圖像時(shí)的步幅大小。其默認(rèn)值通常設(shè)置為1,也可將步幅設(shè)置為2后對(duì)圖像進(jìn)行下采樣,這種方式與最大池化類似。
邊界擴(kuò)充(Padding):定義了網(wǎng)絡(luò)層處理樣本邊界的方式。當(dāng)卷積核大于1且不進(jìn)行邊界擴(kuò)充,輸出尺寸將相應(yīng)縮小;當(dāng)卷積核以標(biāo)準(zhǔn)方式進(jìn)行邊界擴(kuò)充,則輸出數(shù)據(jù)的空間尺寸將與輸入相等。
輸入與輸出通道(Channels):構(gòu)建卷積層時(shí)需定義輸入通道I,并由此確定輸出通道O。這樣,可算出每個(gè)網(wǎng)絡(luò)層的參數(shù)量為I×O×K,其中K為卷積核的參數(shù)個(gè)數(shù)。例,某個(gè)網(wǎng)絡(luò)層有64個(gè)大小為3×3的卷積核,則對(duì)應(yīng)K值為 3×3 =9。
空洞卷積
空洞卷積(atrous convolutions)又名擴(kuò)張卷積(dilated convolutions),向卷積層引入了一個(gè)稱為“擴(kuò)張率(dilation rate)”的新參數(shù),該參數(shù)定義了卷積核處理數(shù)據(jù)時(shí)各值的間距。
△ 卷積核為3、擴(kuò)張率為2和無(wú)邊界擴(kuò)充的二維空洞卷積
一個(gè)擴(kuò)張率為2的3×3卷積核,感受野與5×5的卷積核相同,而且僅需要9個(gè)參數(shù)。你可以把它想象成一個(gè)5×5的卷積核,每隔一行或一列刪除一行或一列。
在相同的計(jì)算條件下,空洞卷積提供了更大的感受野??斩淳矸e經(jīng)常用在實(shí)時(shí)圖像分割中。當(dāng)網(wǎng)絡(luò)層需要較大的感受野,但計(jì)算資源有限而無(wú)法提高卷積核數(shù)量或大小時(shí),可以考慮空洞卷積。
轉(zhuǎn)置卷積
轉(zhuǎn)置卷積(transposed Convolutions)又名反卷積(deconvolution)或是分?jǐn)?shù)步長(zhǎng)卷積(fractially straced convolutions)。
反卷積(deconvolutions)這種叫法是不合適的,因?yàn)樗环戏淳矸e的概念。在深度學(xué)習(xí)中,反卷積確實(shí)存在,但是并不常用。實(shí)際上,反卷積是卷積操作的逆過(guò)程。你可以這么理解這個(gè)過(guò)程,將某個(gè)圖像輸入到單個(gè)卷積層,取卷積層的輸出傳遞到一個(gè)黑盒子中,這個(gè)黑盒子輸出了原始圖像。那么可以說(shuō),這個(gè)黑盒子完成了一個(gè)反卷積操作,也就是卷積操作的數(shù)學(xué)逆過(guò)程。
轉(zhuǎn)置卷積與真正的反卷積有點(diǎn)相似,因?yàn)閮烧弋a(chǎn)生了相同的空間分辨率。然而,這兩種卷積對(duì)輸入數(shù)據(jù)執(zhí)行的實(shí)際數(shù)學(xué)運(yùn)算是不同的。轉(zhuǎn)置卷積層只執(zhí)行了常規(guī)的卷積操作,但是恢復(fù)了其空間分辨率。
△ 卷積核為3、步幅為2和無(wú)邊界擴(kuò)充的二維卷積結(jié)構(gòu)
舉個(gè)例子,假如將一張5×5大小的圖像輸入到卷積層,其中步幅為2,卷積核為3×3,無(wú)邊界擴(kuò)充。則卷積層會(huì)輸出2×2的圖像。
若要實(shí)現(xiàn)其逆過(guò)程,需要相應(yīng)的數(shù)學(xué)逆運(yùn)算,能根據(jù)每個(gè)輸入像素來(lái)生成對(duì)應(yīng)的9個(gè)值。然后,將步幅設(shè)為2,遍歷輸出圖像,這就是反卷積操作。
△ 卷積核為3×3、步幅為2和無(wú)邊界擴(kuò)充的二維轉(zhuǎn)置卷積
轉(zhuǎn)置卷積和反卷積的唯一共同點(diǎn)在于兩者輸出都為5×5大小的圖像,不過(guò)轉(zhuǎn)置卷積執(zhí)行的仍是常規(guī)的卷積操作。為了實(shí)現(xiàn)擴(kuò)充目的,需要對(duì)輸入以某種方式進(jìn)行填充。
你可以理解成,至少在數(shù)值方面上,轉(zhuǎn)置卷積不能實(shí)現(xiàn)卷積操作的逆過(guò)程。
轉(zhuǎn)置卷積只是為了重建先前的空間分辨率,執(zhí)行了卷積操作。這不是卷積的數(shù)學(xué)逆過(guò)程,但是用于編碼器-解碼器結(jié)構(gòu)中,效果仍然很好。這樣,轉(zhuǎn)置卷積可以同時(shí)實(shí)現(xiàn)圖像的粗?;途矸e操作,而不是通過(guò)兩個(gè)單獨(dú)過(guò)程來(lái)完成。
可分離卷積
在可分離卷積(separable convolution)中,可將卷積核操作拆分成多個(gè)步驟。卷積操作用y=conv(x, k)來(lái)表示,其中輸出圖像為y,輸入圖像為x,卷積核為k。接著,假設(shè)k可以由下式計(jì)算得出:k=k1.dot(k2)。這就實(shí)現(xiàn)了一個(gè)可分離卷積操作,因?yàn)椴挥胟執(zhí)行二維卷積操作,而是通過(guò)k1和k2分別實(shí)現(xiàn)兩次一維卷積來(lái)取得相同效果。
△ X、Y方向上的Sobel濾波器
Sobel算子通常被用于圖像處理中,這里以它為例。你可以分別乘以矢量[1,0,-1]和[1,2,1]的轉(zhuǎn)置矢量后得到相同的濾波器。完成這個(gè)操作,只需要6個(gè)參數(shù),而不是二維卷積中的9個(gè)參數(shù)。
這個(gè)例子說(shuō)明了什么叫做空間可分離卷積,這種方法并不應(yīng)用在深度學(xué)習(xí)中,只是用來(lái)幫你理解這種結(jié)構(gòu)。
在神經(jīng)網(wǎng)絡(luò)中,我們通常會(huì)使用深度可分離卷積結(jié)構(gòu)(depthwise separable convolution)。
這種方法在保持通道分離的前提下,接上一個(gè)深度卷積結(jié)構(gòu),即可實(shí)現(xiàn)空間卷積。接下來(lái)通過(guò)一個(gè)例子讓大家更好地理解。
假設(shè)有一個(gè)3×3大小的卷積層,其輸入通道為16、輸出通道為32。具體為,32個(gè)3×3大小的卷積核會(huì)遍歷16個(gè)通道中的每個(gè)數(shù)據(jù),從而產(chǎn)生16×32=512個(gè)特征圖譜。進(jìn)而通過(guò)疊加每個(gè)輸入通道對(duì)應(yīng)的特征圖譜后融合得到1個(gè)特征圖譜。最后可得到所需的32個(gè)輸出通道。
針對(duì)這個(gè)例子應(yīng)用深度可分離卷積,用1個(gè)3×3大小的卷積核遍歷16通道的數(shù)據(jù),得到了16個(gè)特征圖譜。在融合操作之前,接著用32個(gè)1×1大小的卷積核遍歷這16個(gè)特征圖譜,進(jìn)行相加融合。這個(gè)過(guò)程使用了16×3×3+16×32×1×1=656個(gè)參數(shù),遠(yuǎn)少于上面的16×32×3×3=4608個(gè)參數(shù)。
這個(gè)例子就是深度可分離卷積的具體操作,其中上面的深度乘數(shù)(depth multiplier)設(shè)為1,這也是目前這類網(wǎng)絡(luò)層的通用參數(shù)。
這么做是為了對(duì)空間信息和深度信息進(jìn)行去耦。從Xception模型的效果可以看出,這種方法是比較有效的。由于能夠有效利用參數(shù),因此深度可分離卷積也可以用于移動(dòng)設(shè)備中。
-
深度學(xué)習(xí)
+關(guān)注
關(guān)注
73文章
5511瀏覽量
121362 -
卷積神經(jīng)網(wǎng)絡(luò)
+關(guān)注
關(guān)注
4文章
367瀏覽量
11887
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論