我們來看看在圖像處理領域如何使用捲積神經網路來對圖片進行分類。 1 讓電腦做圖片分類: 圖片分類就是輸入一張圖片,輸出該圖片對應的類別(狗,貓,船,鳥),或者說輸出該圖片屬於哪種分類的可能性最大。 人類看到一張圖片馬上就能分辨出裡面的內容,但是電腦分辨一張圖片就完全不一樣了。同一張圖片, 人類看 ...
我們來看看在圖像處理領域如何使用捲積神經網路來對圖片進行分類。
1 讓電腦做圖片分類:
圖片分類就是輸入一張圖片,輸出該圖片對應的類別(狗,貓,船,鳥),或者說輸出該圖片屬於哪種分類的可能性最大。
人類看到一張圖片馬上就能分辨出裡面的內容,但是電腦分辨一張圖片就完全不一樣了。同一張圖片,
人類看到的是這樣:
電腦看到的是這樣:
一個充滿像素值的數組。
所以給電腦一張圖片讓它對圖片進行分類,就是向電腦輸入一個充滿像素值的數組如上圖所示,數組裡的每一個數字範圍都是0-255,代表該點上的像素值。讓它返回這個數組對應的可能分類概率(狗0.01,貓0.04,船0.94,鳥0.02)。
人類分辨一張船的圖片可能是通過圖片里船的邊緣,線條等等特征。類似的電腦分辨一張船的圖片也是通過這些底層特征來進行判斷,比如圖片里的圖像邊緣和圖像輪廓,然後通過捲積神經網路建立更抽象的概念。
2 捲積神經網路結構
你有一張圖片(28X28),把它丟給捲積神經網路裡面一系列處理層,捲積層(convolutional layer),池層(pooling),全連接層(Fully connected layer也就是上圖的sigmoid neurons),最後在輸出層得到結果(neuron output layer)。正如之前所說,輸出可能是一個分類或者可能的分類對應的概率。接著我們需要理解每個一層具體做了什麼事情。
3 第一層捲積層(convolutional layer)
捲積神經網路里第一層總是捲積層。正如前面所說,我們輸入到捲積層里的是一個充滿像素值的數組 ,假如是一個28X28X3的數組(3是RGB值)。你可以把捲積層想象成一道光束,照在一張圖片上面。這道光束叫做過濾器,被光束照耀的地方叫做感受區。假設這道光束照亮的範圍是一個5X5的方形區域。現在讓這道光束從左到右,從上到下掃過圖片的每一個區域。
當所有移動完畢時,你會發現得到了一個24X24X3的數組。我們叫這個數組為特征圖像。
這個過濾器是一個數字類型的數組(裡面的數字就是一些權重值)。過濾器的深度和輸入的深度一樣。所以過濾器的維度就是5X5X3。我們使用5X5X3過濾器,就可以得到輸出數組24X24X3。如果使用更多的過濾器,我們就可以得到更多的特征圖像。這就是捲積層里發生的事情。
4 具體如何捲積
假設我們有一張老鼠的圖片:
還有一個7X7X3的過濾器,它有一些權重值, 是一個曲線過濾器:
現在我們讓過濾器在圖片的左上角:
當過濾器掃或者捲積整個圖片時,把過濾器裡面的權重值和真實圖片裡面對應的像素值相乘,最後把所有結果加和,得到一個加和值。然後重覆這個過程,掃描整個輸入圖片,(下一步把過濾器向右移動一個單元,然後在向右移動一步,如此),每一步都可以得到一個值。
下麵是過濾器在圖片左上角所得到的值:
Multiplication and Summation = (50 * 30)+(50 * 30)+(50 * 30)+(20 * 30) + (50 * 30) = 6600
可以發現捲積的過程中,如果圖片里有一個形狀與該過濾器表示的形狀相似,就會與過濾器產生激勵效果,那麼所得到的乘積結果加和值將就會是一個很大的數,接著讓我們把過濾器移到圖片的右上角看看結果是什麼。
Multiplication and Summation = 0
可以看到這個值很小是0,這是因為一點都不像,沒有與過濾器產生任何激勵效果。這裡我們只使用了一個過濾器,你也可以增加其他的過濾器來檢測圖片的邊緣和顏色等等。過濾器越多,特征圖就越多,從輸入數據里獲取到的信息就越豐富。
(未完待續)
參考:
http://neuralnetworksanddeeplearning.com/chap6.html#convolutional_neural_networks_in_practice
https://adeshpande3.github.io/adeshpande3.github.io/A-Beginner's-Guide-To-Understanding-Convolutional-Neural-Networks/
關註大數據尖端技術發展,關註奇點大數據