二 卷積過程
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é)點保存的是屬于該類別的概率值。
以上圖文大部分摘抄自他人筆記