邊緣檢測示例( Edge detection example)
在人臉識別過程中神經網絡的前幾層是如何檢測邊緣的,然后,后面的層有可能檢測到物體的部分區域,更靠后的一些層可能檢測到完整的物體。
這是一個 6×6 的灰度圖像。因為是灰度圖像,所以它是 6×6×1 的矩陣:
為了檢測圖像中的垂直邊緣,你可以構造一個 3×3矩陣。在共用習慣中,在卷積神經網絡的術語中,它被稱為過濾器。我要構造一個 3×3 的過濾器,像這樣:
在論文它有時候會被稱為核,而不是過濾器。
這個卷積運算的輸出將會是一個 4×4 的矩陣,你可以將它看成一個 4×4 的圖像。
為了計算第一個元素,在 4×4 左上角的那個元素,使用 3×3 的過濾器,將其覆蓋在輸入圖像,如下圖所示。 然后進行元素乘法(element-wise products)運算,所以:
然后將該矩陣每個元素相加得到最左上角的元素,即3 + 1 + 2 + 0 + 0 + 0 + (-1) + (-8) + (-2)= -5。接下來,為了弄明白第二個元素是什么,你要把藍色的方塊,向右移動一步,像這樣:
繼續做同樣的元素乘法,然后加起來,所以是 0 × 1 + 5 × 1 + 7 × 1 + 1 × 0 + 8 × 0 + 2 × 0 + 2 × (-1) + 9 × (-1) + 5 × (-1) = -4。同樣的方法,可以得到第一行的輸出:
接下來為了得到下一行的元素,現在把藍色塊下移:
以此類推,這樣計算完矩陣中的其他元素:
因此 6×6 矩陣和 3×3 矩陣進行卷積運算得到 4×4 矩陣。這些圖片和過濾器是不同維度的矩陣,但左邊矩陣容易被理解為一張圖片,中間的這個被理解為過濾器,右邊的圖片我們可以理解為另一張圖片。這個就是垂直邊緣檢測器。
為什么這個可以做垂直邊緣檢測呢?讓我們來看另外一個例子:
這是一個簡單的 6×6 圖像,左邊的一半是 10,右邊一般是 0。如果你把它當成一個圖片,左邊那部分看起來是白色的,像素值 10 是比較亮的像素值,右邊像素值比較暗,我使用灰色來表示 0,盡管它也可以被畫成黑的。圖片里,有一個特別明顯的垂直邊緣在圖像中間,這條垂直線是從黑到白的過渡線,或者從白色到深色,經過卷積后的結果如下圖所示:
這里的維數似乎有點不正確,檢測到的邊緣太粗了。因為在這個例子中,圖片太小了。如果你用一個 1000×1000 的圖像,而不是 6×6 的圖片,你會發現其會很好地檢測出圖像中的垂直邊緣。在這個例子中,在輸出圖像中間的亮處,表示在圖像中間有一個特別明顯的垂直邊緣。從垂直邊緣檢測中可以得到的啟發是,因為我們使用 3×3的矩陣(過濾器),所以垂直邊緣是一個 3×3 的區域,左邊是明亮的像素,中間的並不需要考慮,右邊是深色像素。在這個 6×6 圖像的中間部分,明亮的像素在左邊,深色的像素在右邊,就被視為一個垂直邊緣,卷積運算提供了一個方便的方法來發現圖像中的垂直邊緣。