近幾年來,在深度學習領域,”卷積神經網絡“一度成為大傢的”寵兒“,深受大眾青睞(其實就是使用頻繁,這沒辦法啊,效果是真的好,一用就停不下來)那卷積神經網絡到底是個什麼東西啊?我們今天就來看一下。
卷積神經網絡(convolutional neural network,CNN)是指至少在網絡的一層中使用卷積運算來代替一般的矩陣乘法運算的神經網絡,因此命名為卷積神經網絡。那什麼是卷積運算啊?接下來我們一起來揭開它神秘的面紗。
【卷積(Convolution)】
我們以灰度圖像為例進行講解:從一個小小的權重矩陣,也就是卷積核(kernel)開始,讓它逐步在二維輸入數據上“掃描”。卷積核“滑動”的同時,計算權重矩陣和掃描所得的數據矩陣的乘積,然後把結果匯總成一個輸出像素。
91a9f530acb78f50d0f69f034162893a
深度學習裡面所謂的卷積運算,其實它被稱為互相關(cross-correlation)運算:將圖像矩陣中,從左到右,由上到下,取與濾波器同等大小的一部分,每一部分中的值與濾波器中的值對應相乘後求和,最後的結果組成一個矩陣,其中沒有對核進行翻轉。
【填充(Padding)】
前面可以發現,輸入圖像與卷積核進行卷積後的結果中損失瞭部分值,輸入圖像的邊緣被“修剪”掉瞭(邊緣處隻檢測瞭部分像素點,丟失瞭圖片邊界處的眾多信息)。這是因為邊緣上的像素永遠不會位於卷積核中心,而卷積核也沒法擴展到邊緣區域以外。
這個結果我們是不能接受的,有時我們還希望輸入和輸出的大小應該保持一致。為解決這個問題,可以在進行卷積操作前,對原矩陣進行邊界填充(Padding),也就是在矩陣的邊界上填充一些值,以增加矩陣的大小,通常都用“0”來進行填充的。
d1411ebb87af13105486522e1915882b
通過填充的方法,當卷積核掃描輸入數據時,它能延伸到邊緣以外的偽像素,從而使輸出和輸入size相同。
常用的兩種padding:
(1)valid padding:不進行任何處理,隻使用原始圖像,不允許卷積核超出原始圖像邊界
(2)same padding:進行填充,允許卷積核超出原始圖像邊界,並使得卷積後結果的大小與原來的一致
【步長(Stride)】
滑動卷積核時,我們會先從輸入的左上角開始,每次往左滑動一列或者往下滑動一行逐一計算輸出,我們將每次滑動的行數和列數稱為Stride,在之前的圖片中,Stride=1;在下圖中,Stride=2。
0191785761bb6a126431a1ab521bc82f
卷積過程中,有時需要通過padding來避免信息損失,有時也要在卷積時通過設置的步長(Stride)來壓縮一部分信息,或者使輸出的尺寸小於輸入的尺寸。
Stride的作用:是成倍縮小尺寸,而這個參數的值就是縮小的具體倍數,比如步幅為2,輸出就是輸入的1/2;步幅為3,輸出就是輸入的1/3。以此類推。
【卷積核的大小一般為奇數*奇數】 1*1,3*3,5*5,7*7都是最常見的。這是為什麼呢?為什麼沒有偶數*偶數?
(1)更容易padding
在卷積時,我們有時候需要卷積前後的尺寸不變。這時候我們就需要用到padding。假設圖像的大小,也就是被卷積對象的大小為n*n,卷積核大小為k*k,padding的幅度設為(k-1)/2時,卷積後的輸出就為(n-k+2*((k-1)/2))/1+1=n,即卷積輸出為n*n,保證瞭卷積前後尺寸不變。但是如果k是偶數的話,(k-1)/2就不是整數瞭。
(2)更容易找到卷積錨點
在CNN中,進行卷積操作時一般會以卷積核模塊的一個位置為基準進行滑動,這個基準通常就是卷積核模塊的中心。若卷積核為奇數,卷積錨點很好找,自然就是卷積模塊中心,但如果卷積核是偶數,這時候就沒有辦法確定瞭,讓誰是錨點似乎都不怎麼好。
【卷積的計算公式】
輸入圖片的尺寸:一般用 ntimes n 表示輸入的image大小。
卷積核的大小:一般用 ftimes f 表示卷積核的大小。
填充(Padding):一般用 p 來表示填充大小。
步長(Stride):一般用 s 來表示步長大小。
輸出圖片的尺寸:一般用 o 來表示。
如果已知 n 、 f 、 p 、 s 可以求得 o ,計算公式如下:o=lfloor frac{n + 2p - f}{s} rfloor + 1
其中"lfloor rfloor"是向下取整符號,用於結果不是整數時進行向下取整。
【多通道卷積】
上述例子都隻包含一個輸入通道。實際上,大多數輸入圖像都有 RGB 3個通道。
這裡就要涉及到“卷積核”和“filter”這兩個術語的區別。在隻有一個通道的情況下,“卷積核”就相當於“filter”,這兩個概念是可以互換的。但在一般情況下,它們是兩個完全不同的概念。每個“filter”實際上恰好是“卷積核”的一個集合,在當前層,每個通道都對應一個卷積核,且這個卷積核是獨一無二的。
多通道卷積的計算過程:將矩陣與濾波器對應的每一個通道進行卷積運算,最後相加,形成一個單通道輸出,加上偏置項後,我們得到瞭一個最終的單通道輸出。如果存在多個filter,這時我們可以把這些最終的單通道輸出組合成一個總輸出。
這裡我們還需要註意一些問題——濾波器的通道數、輸出特征圖的通道數。
某一層濾波器的通道數 = 上一層特征圖的通道數。如上圖所示,我們輸入一張 6times6times3 的RGB圖片,那麼濾波器( 3times3times3 )也要有三個通道。
某一層輸出特征圖的通道數 = 當前層濾波器的個數。如上圖所示,當隻有一個filter時,輸出特征圖( 4times4 )的通道數為1;當有2個filter時,輸出特征圖(4times4times2 )的通道數為2。
上一篇
下一篇