【34】三維卷積


三維卷積(Convolutions over volumes)

在上面筆記中你已經知道如何對二維圖像做卷積了,現在看看如何執行卷積不僅僅在二維圖像上,而是三維立體上。

 

我們從一個例子開始,假如說你不僅想檢測灰度圖像的特征,也想檢測RGB彩色圖像的特征。彩色圖像如果是6×6×3,這里的3指的是三個顏色通道,你可以把它想象成三個6×6圖像的堆疊。為了檢測圖像的邊緣或者其他的特征,不是把它跟原來的3×3的過濾器做卷積,而是跟一個三維的過濾器,它的維度是3×3×3,這樣這個過濾器也有三層,對應紅綠、藍三個通道。

給這些起個名字(原圖像),這里的第一個6代表圖像高度,第二個6代表寬度,這個3代表通道的數目。同樣你的過濾器也有高,寬和通道數,並且圖像的通道數必須和過濾器的通道數匹配,所以這兩個數(紫色方框標記的兩個數)必須相等。下個幻燈片里,我們就會知道這個卷積操作是如何進行的了,這個的輸出會是一個4×4的圖像,注意是4×4×1,最后一個數不是3了。

我們研究下這背后的細節,首先先換一張好看的圖片。這個是6×6×3的圖像,這個是3×3×3的過濾器,最后一個數字通道數必須和過濾器中的通道數相匹配。為了簡化這個3×3×3過濾器的圖像,我們不把它畫成3個矩陣的堆疊,而畫成這樣,一個三維的立方體。

為了計算這個卷積操作的輸出,你要做的就是把這個3×3×3的過濾器先放到最左上角的位置,這個3×3×3的過濾器有27個數,27個參數就是3的立方。依次取這27個數,然后乘以相應的紅綠藍通道中的數字。先取紅色通道的前9個數字,然后是綠色通道,然后再是藍色通道,乘以左邊黃色立方體覆蓋的對應的27個數,然后把這些數都加起來,就得到了輸出的第一個數字。

如果要計算下一個輸出,你把這個立方體滑動一個單位,再與這27個數相乘,把它們都加起來,就得到了下一個輸出,以此類推。

那么,這個能干什么呢?舉個例子,這個過濾器是3×3×3的,如果你想檢測圖像紅色通道的邊緣,那么你可以將第一個過濾器設為

和之前一樣,而綠色通道全為0,

,藍色也全為0。如果你把這三個堆疊在一起形成一個3×3×3的過濾器,那么這就是一個檢測垂直邊界的過濾器,但只對紅色通道有用。

或者如果你不關心垂直邊界在哪個顏色通道里,那么你可以用一個這樣的過濾器,

,所有三個通道都是這樣。所以通過設置第二個過濾器參數,你就有了一個邊界檢測器,3×3×3的邊界檢測器,用來檢測任意顏色通道里的邊界。參數的選擇不同,你就可以得到不同的特征檢測器,所有的都是3×3×3的過濾器。

按照計算機視覺的慣例,當你的輸入有特定的高寬和通道數時,你的過濾器可以有不同的高,不同的寬,但是必須一樣的通道數。理論上,我們的過濾器只關注紅色通道,或者只關注綠色或者藍色通道也是可行的。

再注意一下這個卷積立方體,一個6×6×6的輸入圖像卷積上一個3×3×3的過濾器,得到一個4×4的二維輸出。

現在你已經了解了如何對立方體卷積,還有最后一個概念,對建立卷積神經網絡至關重要。就是,如果我們不僅僅想要檢測垂直邊緣怎么辦?如果我們同時檢測垂直邊緣和水平邊緣,還有45°傾斜的邊緣,還有70°傾斜的邊緣怎么做?換句話說,如果你想同時用多個過濾器怎么辦?

這是我們上一張幻燈片的圖片,我們讓這個6×6×3的圖像和這個3×3×3的過濾器卷積,得到4×4的輸出。(第一個)這可能是一個垂直邊界檢測器或者是學習檢測其他的特征。第二個過濾器可以用橘色來表示,它可以是一個水平邊緣檢測器。

所以和第一個過濾器卷積,可以得到第一個4×4的輸出,然后卷積第二個過濾器,得到一個不同的4×4的輸出。我們做完卷積,然后把這兩個4×4的輸出,取第一個把它放到前面,然后取第二個過濾器輸出,我把它畫在這,放到后面。所以把這兩個輸出堆疊在一起,這樣你就都得到了一個4×4×2的輸出立方體,你可以把這個立方體當成,重新畫在這,就是一個這樣的盒子,所以這就是一個4×4×2的輸出立方體。它用6×6×3的圖像,然后卷積上這兩個不同的3×3的過濾器,得到兩個4×4的輸出,它們堆疊在一起,形成一個4×4×2的立方體,這里的2的來源於我們用了兩個不同的過濾器。

我們總結一下維度,如果你有一個n×n×n_c(通道數)的輸入圖像,在這個例子中就是6×6×3,這里的n_c就是通道數目,然后卷積上一個f×f×n_c,這個例子中是3×3×3,按照慣例,這個(前一個n_c)和這個(后一個n_c)必須數值相同。然后你就得到了(n-f+1)×(n-f+1)×n_(c^' ),這里n_(c^' )其實就是下一層的通道數,它就是你用的過濾器的個數,在我們的例子中,那就是4×4×2。我寫下這個假設時,用的步幅為1,並且沒有padding。如果你用了不同的步幅或者padding,那么這個n-f+1數值會變化,正如前面的視頻演示的那樣。

這個對立方體卷積的概念真的很有用,你現在可以用它的一小部分直接在三個通道的RGB圖像上進行操作。更重要的是,你可以檢測兩個特征,比如垂直和水平邊緣或者10個或者128個或者幾百個不同的特征,並且輸出的通道數會等於你要檢測的特征數。

對於這里的符號,我一直用通道數(n_c)來表示最后一個維度,在文獻里大家也把它叫做3維立方體的深度。這兩個術語,即通道或者深度,經常被用在文獻中。但我覺得深度容易讓人混淆,因為你通常也會說神經網絡的深度。所以,在這些筆記里我會用通道這個術語來表示過濾器的第三個維度的大小。

所以你已經知道怎么對立方體做卷積了,你已經准備好了實現卷積神經其中一層了,在下個筆記里讓我們看看是怎么做的


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM