這是一篇關於CNN入門知識的博客,基本手法是抄、刪、改、查,就算是自己的一個筆記吧,以后忘了多看看。
1.邊界檢測示例
假如你有一張如下的圖像,你想讓計算機搞清楚圖像上有什么物體,你可以做的事情是檢測圖像的垂直邊緣和水平邊緣。
假如你有一張如下的圖像,你想讓計算機搞清楚圖像上有什么物體,你可以做的事情是檢測圖像的垂直邊緣和水平邊緣。

如下是一個6*6的灰度圖像,構造一個3*3的矩陣,在卷積神經網絡中通常稱之為filter,對這個6*6的圖像進行卷積運算,以左上角的-5計算為例
3*1+0*0+1*-1+1*1+5*0+8*-1+2*1+7*0+2*-1 = -5
其它的以此類推,讓過濾器在圖像上逐步滑動,對整個圖像進行卷積計算得到一幅4*4的圖像。

卷積計算可以得到圖像的邊緣,下圖0表示圖像暗色區域,10為圖像比較亮的區域,同樣用一個3*3過濾器,對圖像進行卷積,得到的圖像中間亮,兩邊暗,亮色區域就對應圖像邊緣。

通過以下的水平過濾器和垂直過濾器,可以實現圖像水平和垂直邊緣檢測:

在卷積神經網絡中把這些過濾器當成我們要學習的參數,卷積神經網絡訓練的目標就是去理解過濾器的參數。 常用的過濾器:

2. padding
在上部分中,通過一個3*3的過濾器來對6*6的圖像進行卷積,得到了一幅4*4的圖像,假設輸出圖像大小為n*n與過濾器大小為f*f,輸出圖像大小則為(n−f+1)∗(n−f+1)
這樣做卷積運算的缺點是,卷積圖像的大小會不斷縮小; 另外圖像的左上角的元素只被一個輸出所使用,所以在圖像邊緣的像素在輸出中采用較少,也就意味着你丟掉了很多圖像邊緣的信息。為了解決這兩個問題,就引入了padding操作,也就是在圖像卷積操作之前,沿着圖像邊緣用0進行圖像填充。
對於3*3的過濾器,我們填充寬度為1時(加了一圈),就可以保證輸出圖像和輸入圖像一樣大。6+1+1-3+1=6:

padding的兩種模式:
- same padding 在平面外部補0 ,若且步長是1的話圖片大小與原來相同。
- valid padding 不會超出平面外部,所以輸出圖像比原來圖片要小:(n-f+1)*(n-f+1)
3.卷積步長
卷積步長是指過濾器在圖像上滑動的距離,上兩部分步長都默認為1,如果卷積步長為2,卷積運算過程為:
卷積步長是指過濾器在圖像上滑動的距離,上兩部分步長都默認為1,如果卷積步長為2,卷積運算過程為:




4.彩色圖像的卷積
以上講述的卷積都是灰度圖像的,如果想要在RGB(彩色)圖像上進行卷積,過濾器的大小不再是3*3而是有3*3*3,最后的3對應為通道數(channels),卷積生成圖像中每個像素值為3*3*3過濾器對應位置 和 圖像對應位置 相乘累加,過濾器依次在RGB圖像上滑動,最終生成圖像大小為4*4。注意輸出的通道數為1

另外一個問題是,如果我們在不僅僅在圖像總檢測一種類型的特征,而是要同時檢測垂直邊緣、水平邊緣、45度邊緣等等,也就是多個過濾器(多個卷集核)的問題。
如果有兩個過濾器,最終生成圖像為4*4*2的立方體,這里的2來源於我們采用了兩個過濾器。如果有10個過濾器那么輸出圖像就是4*4*10的立方體。
幾個過濾器(卷積核),輸出的圖像通道數就是幾。

5.單層卷積網絡
上一節中,圖像通過兩個過濾器得到了兩個4*4的矩陣,在兩個矩陣上分別加入偏差b1和b2,然后對加入偏差的矩陣做非線性的Relu變換,得到一個新的4*4矩陣,這就是單層卷積網絡的完整計算過程。用公式表示:
上一節中,圖像通過兩個過濾器得到了兩個4*4的矩陣,在兩個矩陣上分別加入偏差b1和b2,然后對加入偏差的矩陣做非線性的Relu變換,得到一個新的4*4矩陣,這就是單層卷積網絡的完整計算過程。用公式表示:


如果有10個過濾器參數個數有多少個呢?
--每個過濾器都有3*3*3+1=28個參數,3*3*3為過濾器大小,1是偏差系數,10個過濾器參數個數就是28*10=280個。不論輸入圖像大小參數個數是不會發生改變的


第L-1層:輸入圖形通道數=輸入圖像的層數=過濾器層數
第L層:輸出圖像通道數=過濾器個數=第L+1層輸入圖像層數...(再次強調:不管輸入和過濾器多少層,輸入圖像與每個過濾器卷積過后都是一層矩陣,影響輸出層數的只有過濾器的個數)
第L層:輸出圖像通道數=過濾器個數=第L+1層輸入圖像層數...(再次強調:不管輸入和過濾器多少層,輸入圖像與每個過濾器卷積過后都是一層矩陣,影響輸出層數的只有過濾器的個數)
6.簡單卷積網絡示例


卷積神經網絡層的類型:
⦁ 卷積層(convolution,conv)
⦁ 池化層(pooling,pool)
⦁ 全連接層(Fully connected,FC)
⦁ 卷積層(convolution,conv)
⦁ 池化層(pooling,pool)
⦁ 全連接層(Fully connected,FC)
7.池化層
以下是一個過濾器大小為3*3,步長為1的池化過程,具體計算和上面相同,最大池化中輸出圖像的大小計算方式和卷積網絡中計算方法一致,如果有多個通道需要做池化操作,那么就分通道計算池化操作。
- 最大池化(Max pooling)

以下是一個過濾器大小為3*3,步長為1的池化過程,具體計算和上面相同,最大池化中輸出圖像的大小計算方式和卷積網絡中計算方法一致,如果有多個通道需要做池化操作,那么就分通道計算池化操作。

- 平均池化和最大池化唯一的不同是,它計算的是區域內的平均值而最大池化計算的是最大值。在日常應用使用最多的還是最大池化。
步長、過濾器大小、池化類型(最大池化or平均池化)
8.卷積神經網絡示例
以下是一個完整的卷積神經網絡,用於手寫字識別,這並不是一個LeNet-5網絡,但是設計令該來自於LeNet-5。

網絡各層參數個數表:

博文借鑒:https://blog.csdn.net/ice_actor/article/details/78648780