卷積現(xiàn)在可能是深度學(xué)習中最重要的概念,。正是靠著卷積和卷積神經(jīng)網(wǎng)絡(luò),,深度學(xué)習才超越了幾乎其他所有的機器學(xué)習手段。這期我們一起學(xué)習下深度學(xué)習中常見的卷積有哪些,?1. 一般卷積卷積在數(shù)學(xué)上用通俗的話來說就是輸入矩陣與卷積核(卷積核也是矩陣)進行對應(yīng)元素相乘并求和,,所以一次卷積的結(jié)果的輸出是一個數(shù),最后對整個輸入輸入矩陣進行遍歷,,最終得到一個結(jié)果矩陣,,說白了就是一個卷積核在圖像上滑動,并求取對應(yīng)元素相乘求和的過程,,如下圖: 首先,一般情況下卷積層的作用都是用來自動提取圖像的一些視覺特征,,代替?zhèn)鹘y(tǒng)的手動方法提取特征不精確,,不全面等缺點。常見的一般卷積操作都包括以下四個參數(shù):- 卷積核大小(Kernel Size):卷積核定義了卷積的大小范圍,,在網(wǎng)絡(luò)中代表感受野的大小,,二維卷積核最常見的就是 3*3 的卷積核,也可以根據(jù)網(wǎng)絡(luò)設(shè)計5*5或者7*7,,甚至1*1等不同size的卷積核,,來提取不同尺度的特征。
在卷積神經(jīng)網(wǎng)絡(luò)中,,一般情況下,,卷積核越大,感受野(receptive field)越大,,看到的圖片信息越多,,所獲得的全局特征越好。雖說如此,,但是大的卷積核會導(dǎo)致計算量的暴增,,不利于模型深度的增加,計算性能也會降低,。如上圖中卷積核的size為3*3. - 步長(Stride):卷積核的步長度代表提取的精度, 步長定義了當卷積核在圖像上面進行卷積操作的時候,,每次卷積跨越的長度。在默認情況下,,步長通常為 1,,但我們也可以采用步長是 2 的下采樣過程,類似于 MaxPooling 操作,。
對于size為3的卷積核,,如果step為1,,那么相鄰步感受野之間就會有重復(fù)區(qū)域;如果step為2,,那么相鄰感受野不會重復(fù),,也不會有覆蓋不到的地方;如果step為3,,那么相鄰步感受野之間會有一道大小為1顆像素的縫隙,,從某種程度來說,這樣就遺漏了原圖的信息,。 - 填充(Padding):卷積核與圖像尺寸不匹配,,往往填充圖像缺失區(qū)域,如上圖,,原始圖片尺寸為5*5,,卷積核的大小為3*3,如果不進行填充,,步長為1的話,,當卷積核沿著圖片滑動后只能滑動出一個3*3的圖片出來,這就造成了卷積后的圖片和卷積前的圖片尺寸不一致,,這顯然不是我們想要的結(jié)果,,所以為了避免這種情況,需要先對原始圖片做邊界填充處理,。
- 輸入和輸出通道數(shù)(Input & Output Channels):卷積核的輸入通道數(shù)(in depth)由輸入矩陣的通道數(shù)所決定,;輸出矩陣的通道數(shù)(out depth)由卷積核的輸出通道數(shù)所決定。每一層卷積有多少channel數(shù),,以及一共有多少層卷積,,這些暫時沒有理論支撐,一般都是靠感覺去設(shè)置幾組候選值,,然后通過實驗挑選出其中的最佳值,。這也是現(xiàn)在深度卷積神經(jīng)網(wǎng)絡(luò)雖然效果拔群,但是一直為人詬病的原因之一,。
2. 擴張卷積使用3內(nèi)核進行2D卷積,,擴展率為2且無填充擴張卷積(Dilated Convolution)也被稱為空洞卷積或者膨脹卷積,是在標準的卷積核中注入空洞,,以此來增加模型的感受野(reception field),。相比原來的正常卷積操作,,除了卷積核大小,,步長和填充外,擴張卷積多了一個參數(shù):dilation rate,,指的是卷積核的點的間隔數(shù)量,,比如常規(guī)的卷積操作dilatation rate為1,。擴張的卷積為卷積層引入另一個參數(shù),稱為擴張率,。這定義了卷積核中值之間的間距,。擴張率為2的3x3內(nèi)核與5x5內(nèi)核具有相同的視野,而僅使用9個參數(shù),。想象一下,,獲取一個5x5內(nèi)核并刪除每一個第二列和第二行(間隔刪除)。如之前的一篇文章: 為什么要用空洞卷積,? 上圖左側(cè)為對0-9共10顆像素的正常3x3卷積,,padding為same,stride=1的情況下,,我們知道其卷積后共得到10個特征,,每個特征的感受野均為3x3,如左側(cè)紅色的那個特征覆蓋3,4,5三顆像素(想象二維情況下應(yīng)該是3x3),。 上圖右側(cè)為對0-9共10顆像素的空洞3x3卷積,,這里的3x3是指有效區(qū)域,在padding為same,,stride=1的情況下,,也得到了10個特征,但是每個特征的感受野為5x5,,如右側(cè)藍色的那個特征覆蓋2,3,4,5,6五顆像素(想象二維情況下應(yīng)該是5x5),。這就在不丟失特征分辨率的情況下擴大了感受野,進而對檢測大物體有比較好的效果,。所以總的來說,,空洞卷積主要作用:不丟失分辨率的情況下擴大感受野;調(diào)整擴張率獲得多尺度信息,。但是對于一些很小的物體,,本身就不要那么大的感受野來說,這就不那么友好了,。3. 轉(zhuǎn)置卷積轉(zhuǎn)置卷積又叫反卷積,、逆卷積。不過轉(zhuǎn)置卷積是目前最為正規(guī)和主流的名稱,,因為這個名稱更加貼切的描述了卷積的計算過程,,而其他的名字容易造成誤導(dǎo)。在主流的深度學(xué)習框架中,,如TensorFlow,,Pytorch,Keras中的函數(shù)名都是conv_transpose,。所以學(xué)習轉(zhuǎn)置卷積之前,,我們一定要弄清楚標準名稱,,遇到他人說反卷積、逆卷積也要幫其糾正,,讓不正確的命名盡早的淹沒在歷史的長河中,。 有大佬一句話總結(jié):轉(zhuǎn)置卷積相對于卷積在神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)的正向和反向傳播中做相反的運算。其實還是不是很理解,。我們先從轉(zhuǎn)置卷積的用途來理解下,,轉(zhuǎn)置卷積通常用于幾個方面:- CNN可視化,通過反卷積將卷積得到的feature map還原到像素空間,,來觀察feature map對哪些pattern相應(yīng)最大,,即可視化哪些特征是卷積操作提取出來的;
- FCN全卷積網(wǎng)絡(luò)中,,由于要對圖像進行像素級的分割,,需要將圖像尺寸還原到原來的大小,類似upsampling的操作,,所以需要采用反卷積,;
- GAN對抗式生成網(wǎng)絡(luò)中,由于需要從輸入圖像到生成圖像,,自然需要將提取的特征圖還原到和原圖同樣尺寸的大小,,即也需要反卷積操作。
我們先來看看卷積和反卷積的圖,,簡直不要太形象,。 如下圖正常卷積(convolution): 卷積核為 3x3;no padding , strides=1
轉(zhuǎn)置卷積可以理解為upsample conv.如下圖: 卷積核為:3x3; no padding , strides=1從上面兩個圖可以看到,,轉(zhuǎn)置卷積和卷積有點類似,,因為它產(chǎn)生與假設(shè)的反卷積層相同的空間分辨率。但是,,對值執(zhí)行的實際數(shù)學(xué)運算是不同的,。轉(zhuǎn)置卷積層執(zhí)行常規(guī)卷積,但恢復(fù)其空間變換,。 需要注意的是:反卷積只能恢復(fù)尺寸,,不能恢復(fù)數(shù)值。4. 可分離卷積任何看過MobileNet架構(gòu)的人都會遇到可分離卷積(separable convolutions)這個概念,。但什么是“可分離卷積”,,它與標準的卷積又有什么區(qū)別?可分離卷積主要有兩種類型:空間可分離卷積和深度可分離卷積,。空間可分離卷積在可分離的卷積中,,我們可以將內(nèi)核操作分成多個步驟。讓我們將卷積表示為y = conv(x,,k),,其中y是輸出圖像,x是輸入圖像,,k是核,。簡單。接下來,,假設(shè)k可以通過以下公式計算:k = k1.dot(k2),。這將使它成為可分離的卷積,因為我們可以通過用k1和k2進行2個1D卷積來得到相同的結(jié)果,,而不是用k進行2D卷積,。 以Sobel內(nèi)核為例,它通常用于圖像處理,。你可以通過乘以向量[1,0,,-1]和[1,2,1] .T得到相同的內(nèi)核。在執(zhí)行相同操作時,,這將需要6個而不是9個參數(shù),。上面的例子顯示了所謂的空間可分卷積。 空間可分卷積的主要問題是并非所有卷積核都可以“分離”成兩個較小的卷積核,。這在訓(xùn)練期間變得特別麻煩,,因為網(wǎng)絡(luò)可能采用所有可能的卷積核,它最終只能使用可以分成兩個較小卷積核的一小部分,。實際上,,通過堆疊1xN和Nx1內(nèi)核層,可以創(chuàng)建與空間可分離卷積非常相似的東西,。這最近在一個名為EffNet的架構(gòu)中使用,,顯示了有希望的結(jié)果。深度可分離卷積在神經(jīng)網(wǎng)絡(luò)中,,我們通常使用稱為深度可分離卷積的東西,。這將執(zhí)行空間卷積,同時保持通道分離,,然后進行深度卷積,。這里,通過一個例子可以最好地理解它(以下參考文獻2): 以輸入圖像為12x12x3的RGB圖像為例,,正常卷積是卷積核對3個通道同時做卷積,。也就是說,3個通道,,在一次卷積后,,輸出一個數(shù)。而深度可分離卷積分為兩步:- 第一步用三個卷積對三個通道分別做卷積,,這樣在一次卷積后,,輸出3個數(shù),。
- 這輸出的三個數(shù),再通過一個1x1x3的卷積核(pointwise核),,得到一個數(shù),。
所以深度可分離卷積其實是通過兩次卷積實現(xiàn)的。第一步,,對三個通道分別做卷積,,輸出三個通道的屬性,如下圖:
第二步,,用卷積核1x1x3對三個通道再次做卷積,,這個時候的輸出就和正常卷積一樣,是8x8x1:
如果要提取更多的屬性,,則需要設(shè)計更多的1x1x3卷積核心就可以(圖片引用自原網(wǎng)站,。感覺應(yīng)該將8x8x256那個立方體繪制成256個8x8x1,因為他們不是一體的,,代表了256個屬性):
可以看到,,如果僅僅是提取一個屬性,深度可分離卷積的方法,,不如正常卷積,。隨著要提取的屬性越來越多,深度可分離卷積就能夠節(jié)省更多的參數(shù),。文獻1: https://zhuanlan.zhihu.com/p/28186857 文獻2: https://blog.csdn.net/makefish/article/details/88716534
|