網課-cnn

透明的胡蘿蔔發表於2019-03-05

影象識別中遇到的問題可能有圖片特徵的緯度過高,1000*1000畫素的圖片,特徵維度是1000*1000*3,如果你要輸入3百萬的資料量就意味著特徵向量的維度高達三百萬,也許有1000個隱藏單元,而所有的權值組成的矩陣W[1],如果使用標準的全連線網路,這個矩陣的大小將是1000*3百萬,也就是30億個引數。帶來的問題:巨大的記憶體需求+很容易會過擬合,除非你可以提供非常多的樣本資料。為了能處理大圖,我們引出卷積運算。

使用邊緣檢測作為入門,看到卷積是如何運算的

Padding(填充)

卷積過程,影象是n*n,過濾器是f*f,那最後的輸出結果是(n-f+1)*(n-f+1),可以發現,影象在越來越小可能會縮小到1*1,為了讓你的影象不會在每次邊緣檢測

影象角落或者邊緣的畫素點在輸出中採用較,相當於丟掉了影象邊緣的位置的許多資訊

為了解決上述問題,一是輸出減小,影象每過一層就會縮小;二是影象邊緣資訊丟失

解決:在影象邊緣填充一層,預設值是0,如果p是填充的數量,當週圍填充一層,那麼,p=1,因為我們只填充了一個畫素點,輸出就變成了(n+2p-f+1)*(n+2p-f+1)

至於填充多少畫素,通常有兩個選擇,分別叫做valid卷積,和 same卷積

valid卷積:no padding 不填充

same卷積:意味著填充後,你的輸出大小與輸入大小是一樣的。n+2p-f+1=n 用這個公式求解p,p是填充p個畫素點
p=(f-1)/2, 在計算機視覺中,通常,甚至一般都是f是奇數,(奇數維的過濾器)

為什麼要奇數維的過濾器:一是可以對稱填充影象,二是可以找到中心畫素點,便於指出過濾器的位置

卷積步長(strided convolutions)

卷積中的步長是另一個構建卷積神經網路的基本操作

f*f的卷積核,卷積n*n的影象,padding填充是p個畫素點,步長是s。

最後的輸出是(n+2p-f)/s+1 * (n+2p-f)/s+1 ,如果商不是整數,就向下取整

池化層

除了卷積層,卷積網路也經常使用池化層來縮減模型的大小,提高計算速度,同時提高所提取特徵的魯棒性,我們來看一下。

先舉一個池化層的例子,然後我們再討論池化層的必要性。假如輸入是一個4×4矩陣,用到的池化型別是最大池化(max pooling)。執行最大池化的樹池是一個2×2矩陣。執行過程非常簡單,把4×4的輸入拆分成不同的區域,我把這個區域用不同顏色來標記。對於2×2的輸出,輸出的每個元素都是其對應顏色區域中的最大元素值。

CNN卷積後輸出size的計算

相關文章