在計算機視覺一個主要問題是輸入數據可能變得很大。假設圖像的尺寸為68 X 68 X3。輸入要素尺寸將變為12,288。如果我們有更大的圖像(例如,尺寸為720 X 720 X 3),則尺寸會更大。現在,如果我們將如此大的輸入傳遞給神經網絡,則參數的數量將激增至HUGE數量(取決於隱藏層和隱藏單位的數量)。這將導致更多的計算和內存需求,這是我們大多數人無法應付的。
以下介紹CNN的專有名詞與基本動作,這些的目的在於,將圖片變成計算機可以接受的方式進行輸入,進而做運算與識別圖片。
邊緣檢測示例
我們將重點介紹如何從圖像中檢測邊緣。假設我們得到下圖。
圖1 一般image
圖像中有許多垂直和水平邊緣。首先要做的是檢測這些邊緣:
圖2 垂直和水平邊緣
但是我們如何檢測這些邊緣?為了說明這一點,讓我們拍攝一張6 X 6灰度圖像(即僅一個通道):
圖3 6x6 灰度矩陣
接下來,我們將這個6 X 6矩陣與3 X 3濾鏡進行卷積:
圖4 image 與 filter進行卷積
卷積後,我們將得到一個4 X 4的圖像。 4 X 4矩陣的第一個元素將計算為:
圖5卷積後的結果
因此,我們從6 X 6圖像中獲取第一個3 X 3矩陣,並將其與濾波器相乘。現在,4 X 4輸出的第一個元素將是這些值的按元素乘積的總和,即3 * 1 + 0 + 1 * -1 + 1 * 1 + 5 * 0 + 8 * -1 + 2 * 1 + 7 * 0 + 2 * -1 = -5。要計算4 X 4輸出的第二個元素,我們將過濾器向右移動一級,然後再次獲得按元素乘積的總和:
圖6 卷積的結果
同樣,我們將對整個圖像進行卷積,並得到4 X 4的輸出:
圖7 卷積後最終結果
因此,將6 X 6輸入與3 X 3濾波器進行卷積得到的輸出為4 X4。再考慮一個示例:
圖8 例子
更多邊緣檢測
我們選擇的過濾器類型有助於檢測垂直或水平邊緣。 我們可以使用以下過濾器來檢測不同的邊緣:
圖 9 垂直或水平過濾器
一些常用的過濾器是:
圖10 常用過濾器
Sobel濾鏡將更多的權重放在中央像素上。
Padding(填充):
將6 X 6維的輸入與3 X 3濾波器進行卷積會得到4 X 4輸出。可以概括一下,說如果輸入為n X n且過濾器大小為f X f,則輸出大小將為(n-f + 1)X(n-f + 1):
輸入:n X n
過濾器尺寸:f X f
輸出:(n-f + 1)X(n-f + 1)
這裡主要有兩個缺點:
- 每次我們進行卷積運算時,圖像的大小都會縮小
- 與中心像素相比,卷積期間在圖像角落出現的像素僅使用了幾次。因此,我們不會過分關注角落,因為這可能導致信息丟失
為了克服這些問題,我們可以在圖像上附加邊框,即在邊緣周圍添加一個像素。這意味著輸入將是8 X 8矩陣(而不是6 X 6矩陣)。在其上應用3 X 3的捲積將得到6 X 6矩陣,該矩陣是圖像的原始形狀。這是填充最重要的地方:
輸入:n X n
填充:p
過濾器尺寸:f X f
輸出:(n + 2p-f + 1)X(n + 2p-f + 1)
有兩種常見的填充選項:
Valid:
這意味著沒有填充。如果我們使用有效的填充,則輸出為(n-f + 1)X(n-f + 1)
Same:
在這裡,我們應用填充,以便輸出大小與輸入大小相同,即
n + 2p-f + 1 = n因此,p =(f-1)/ 2
現在我們知道瞭如何使用填充卷積。這樣我們就不會丟失很多信息,圖像也不會縮小。接下來,我們將研究如何實現跨步卷積。
Strided Convolutions:
假設我們選擇strided為2。因此,在對圖像進行卷積時,我們將採取兩個步驟-分別在水平和垂直方向上。 步幅s的尺寸為:
- 輸入:n X n
- 填充:p
- 步幅:s
- 過濾器尺寸:f X f
- 輸出:[(n + 2p-f)/ s + 1] X [(n + 2p-f)/ s + 1]
步幅有助於減小圖像的大小,這是一項特別有用的功能。
以上是CNN 主要會用的步驟,與這些步驟所要進行的行為,希望對大家有些幫助。
評論