吳恩達深度學習:三維卷積

2020/2/28發表於2020-11-15

考研人資訊庫

此公眾號會發表計算機考研(初複試資訊)、夏令營等資料,方便考研人對資訊的獲取,節約自身查詢資料的時間,回覆408,可獲得資料結構、作業系統、計算機網路、計算機組成原理全科資料

三維卷積 (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的,如果你想檢測影像紅色通道的邊緣,那麼你可以將第一個過濾器設為 [ 1 0 − 1 1 0 − 1 1 0 − 1 ] \left[

111000−1−1−1

\right] ⎣⎡​111​000​−1−1−1​⎦⎤​ ,和之前一樣,而綠色通道全為0, [ 0 0 0 0 0 0 0 0 0 ] \left[

000000000

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

在這裡插入圖片描述
或者如果你不關心垂直邊界在哪個顏色通道里,那麼你可以用一個這樣的過濾器, [ 1 0 − 1 1 0 − 1 1 0 − 1 ] , [ 1 0 − 1 1 0 − 1 1 0 − 1 ] , [ 1 0 − 1 1 0 − 1 1 0 − 1 ] \left[

111000−1−1−1

\right],\left[

111000−1−1−1

\right],\left[

111000−1−1−1

\right] ⎣⎡​111​000​−1−1−1​⎦⎤​,⎣⎡​111​000​−1−1−1​⎦⎤​,⎣⎡​111​000​−1−1−1​⎦⎤​ ,所有三個通道都是這樣。所以通過設定第二個過濾器引數,你就有了一個邊界檢測器,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 n*n*n_c n∗n∗nc​ (通道數)的輸入影像,在這個例子中就是6×6×3,這裡的 n c n_c nc​ 就是通道數目,然後卷積上一個 f ∗ f ∗ n c f*f*n_c f∗f∗nc​ ,這個例子中是3×3×3,按照慣例,這個(前一個 n c n_c nc​ )和這個(後一個 n c n_c nc​ )必須數值相同。然後你就得到了( n − f + 1 n-f+1 n−f+1 ) ∗ * ∗( n − f + 1 n-f+1 n−f+1 ) ∗ n c ′ * n_{c^{'}} ∗nc′​ ,這裡 n c ′ n_{c^{'}} nc′​ 其實就是下一層的通道數,它就是你用的過濾器的個數,在我們的例子中,那就是4×4×2。我寫下這個假設時,用的步幅為1,並且沒有padding。如果你用了不同的步幅或者padding,那麼這個 n − f + 1 n-f+1 n−f+1 數值會變化,正如前面的視訊演示的那樣。

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

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

所以你已經知道怎麼對立方體做卷積了,你已經準備好了實現卷積神經其中一層了,在下個視訊裡讓我們看看是怎麼做的。

相關文章