CNN學習筆記-2

二 卷積過程

1 卷積過程中一些概念

(1) 過程說明

卷積過程實際就是基于一個固定的矩陣(輸入像素矩陣),在另一個矩陣(卷積核)不斷一格一格(步長為1)掃過去,得到的數(shù)值的和,產(chǎn)生一個新的矩陣。用一個式子表示:Wx+b ? ReLU ? maxpooling。

(2) 卷積后的維數(shù):

輸入大小為:W1×H1×D1

需要指定的超參數(shù):filter個數(shù)(K),filter大?。‵),步長(s),邊界填充(P)

輸出: W2 = (W1-F + 2P)/S + 1

? ? ? H2 = (H1 - F + 2P)/S + 1

深度 D2 = K

在上面兩個公式中,W2是卷積后Feature Map的寬度;W1是卷積前圖像的寬度;F是filter的寬度;P是Zero Padding數(shù)量,Zero Padding是指在原始圖像周圍補幾圈0,如果P的值是1,那么就補1圈0;S是步長;H2是卷積后Feature Map的高度;H1是卷積前圖像的高度。

(3) 池化: 把原來的維數(shù)降到1/n,n是池化矩陣的維數(shù)

(4) 步長(stride):卷積核每次移動的格子

(5) Padding :填充

輸入圖像在被卷積后,輸出的圖像會“縮小”,經(jīng)過有限的卷積操作后,輸入會變得過小,而不適合再進行卷積,從而限制整個網(wǎng)絡(luò)的深度。Padding 可以解決此類問題。它會在輸入圖像進行卷積前先在頻道周圍“填充”上若干圈0。

當Padding設(shè)置為1時,即在輸入圖像周圍填充一圈0。

(6) 激活函數(shù)

激活函數(shù)的種類也有很多,常用的是ReLU :f(x) = max{0,x}

2 卷積過程

(1) 單通道卷積

單個輸入通道的卷積操作是非常簡單的,輸入圖像像素和卷積核的對應元素相乘再相加即可。如下圖的過程:

(2) 多通道卷積

實際情況中大多為多通道卷積。多通道卷積的過程如下圖。下圖是一個7*7*3的像素矩陣,倆個大小為3*3*3的卷積核(最后的3要對應輸入像素矩陣的位深)。先看第一個卷積核W0,輸入像素矩陣的每一層與W0對應的層做卷積,然后代入到激活函數(shù)中,得到第一層feature map,然后輸入像素矩陣與卷積核W1做卷積,生成第二層feature map,其中輸入像素與卷積核每對相同位置的元素乘積的和代入激活函數(shù),就生成了 feature map 中的一個像素。不管輸入圖像有多少層,經(jīng)過一個filter,最后都通過下面的公式變成一個深度為1的特征圖。因此,卷積后feature Map的深度(層數(shù))和卷積層的filter個數(shù)是相同的。要提取多少特征就需要多少個卷積核,越往后,卷積核設(shè)定的數(shù)目越多,體現(xiàn)label的特征就越細致,提取的特征就越多,就越能完成分類,識別等功能。

下面的式子就是生成feature map中每個元素的公式

首先對圖像的每個像素進行編號,用Xi,j表示圖像的第i行第j列元素;對filter的每個權(quán)重進行編號,用Wm,n表示第m行第n列權(quán)重,用Wb表示filter的偏置項;對Feature Map的每個元素進行編號,用ad,i,j表示Feature Map的第d層第i行第j列元素;用f表示激活函數(shù)(這個例子選擇relu函數(shù)作為激活函數(shù)),D是深度(層數(shù));F是filter的大?。▽挾然蚋叨龋瑑烧呦嗤?。

不同的filter可以卷積得到不同的特征,也就是得到不同的feature map。有多少個卷積核就生成多少張?zhí)卣鲌D。

這里以典型的CNN模型AlexNet為例。AlexNet輸入為227*227*3(最后的3 就是通道數(shù)),卷積核尺寸為11*11*3(最后的3是原圖的深度3),卷積核的深度要和上一層輸出的圖像的深度一樣。

第一層:

AlexNet訓練時用倆個GPU并行訓練,故將96個卷積核分成2組,每組48個卷積核,對應生成2組55*55*48的像素層,生成的特征圖的大小是55*55,有48層(每組48層)。

這些像素層經(jīng)過pool運算(池化運算)的處理,池化運算的尺度為3*3,運算的步長為2,則池化后圖像的尺寸為(55-3)/2+1=27。,即每組像素層的維數(shù)是27*27*48。

第二層:

輸入為27*27*96的像素層,padding = 2;27*27*96的像素層分成維數(shù)為27*27*48的兩組,兩組數(shù)據(jù)分別再兩個不同的GPU中進行運算。每個GPU中有128個卷積核,大小是5*5*48,步長為1,生成倆組維數(shù)為27*27*128的像素層。經(jīng)過池化層,池化運算的尺度為3*3,運算的步長為2,池化后像素的規(guī)模為2組13*13*128的像素層。

第三層:

輸入為2組13*13*128的像素層;padding = 1;2組像素層要送至2個不同的GPU中進行運算。每個GPU中都有192個卷積核,每個卷積核的尺寸是3*3*128;步長為1。因此,每組運算后生成的特征圖是13*13*192的像素層。

第四層:

輸入為2組13*13*192的像素層;padding = 1;2組像素層數(shù)據(jù)都被送至2個不同的GPU中進行運算。每個GPU中都有192個卷積核,每個卷積核的尺寸是3*3*192;步長為1。因此,生成2組13*13*192像素層,

第五層:

輸入是2組13*13*192的像素層;padding = 1;2組像素層都被送至2個不同的GPU中進行運算。每個GPU中都有128個卷積核,每個卷積核的尺寸是3*3*192;步長是1。因此,運算后的每組特征圖的是13*13*128的像素層。

2組13*13*128像素層分別在2個不同GPU中進行池化(pool)運算處理。池化運算的尺度為3*3,運算的步長為2,則池化后每組圖像的尺寸為6*6*128。

第六層(fc6):

第五層輸出的6*6*256的像素層與第六層的4096個神經(jīng)元全連接,然后經(jīng)relu6處理生成4096個數(shù)據(jù),再經(jīng)過drop6處理輸出4096個數(shù)據(jù)。

第七層(fc7):

第六層輸出的4096個數(shù)據(jù)與第七層的4096個神經(jīng)元進行全連接,然后經(jīng)由relu7進行處理后生成4096個數(shù)據(jù),再經(jīng)過dropout7處理后輸出4096個數(shù)據(jù)。

第八層(fc8):

第七層輸出的4096個數(shù)據(jù)與第八層的1000個神經(jīng)元進行全連接,經(jīng)過訓練后輸出被訓練的數(shù)值。最后輸出的結(jié)果,結(jié)合softmax做出分類。有幾類,就輸出幾個結(jié)點,每個結(jié)點保存的是屬于該類別的概率值。

以上圖文大部分摘抄自他人筆記

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容