有趣的是,通過應用各種填充和步長,我們可以將同樣的 2×2 輸入圖像映射到不同的圖像尺寸。 下面,轉置卷積被用在了同一張 2×2 輸入上(輸入之間插入了一個零,並且周圍加了 2×2 的單位步長的零填充),所得輸出的大小是 5×
觀察上述例子中的轉置卷積能幫助我們構建起一些直觀認識。 但為了泛化其應用,瞭解其可以如何通過計算機的矩陣乘法實現是有益的。 從這一點上我們也可以看到為何「轉置卷積」才是合適的名稱。
在卷積中,我們定義 C 為卷積核,Large 為輸入圖像,Small 為輸出圖像。 經過卷積(矩陣乘法)后,我們將大圖像下採樣為小圖像。 這種矩陣乘法的捲積的實現遵照:C x Large = Small。
下面的例子展示了這種運算的工作方式。 它將輸入平展為 16×1 的矩陣,並將卷積核轉換為一個稀疏矩陣(4×16)。 然後,在稀疏矩陣和平展的輸入之間使用矩陣乘法。 之後,再將所得到的矩陣(4×1)轉換為 2×2 的輸出
現在,如果我們在等式的兩邊都乘上矩陣的轉置 CT,並藉助「一個矩陣與其轉置矩陣的乘法得到一個單位矩陣」這一性質,那麼我們就能得到公式 CT x Small = Large,如下圖所
這裡可以看到,我們執行了從小圖像到大圖像的上採樣。 這正是我們想要實現的目標。 現在。 你就知道「轉置卷積」這個名字的由來了。
直觀而言,擴張卷積就是通過在核元素之間插入空格來使核「膨脹」。 新增的參數 l(擴張率)表示我們希望將核加寬的程度。 具體實現可能各不相同,但通常是在核元素之間插入 l-1 個空格。 下面展示了 l = 1, 2, 4 時的核大
在這張圖像中,3×3 的紅點表示經過卷積后,輸出圖像是3×3圖元。 儘管所有這三個擴張卷積的輸出都是同一尺寸,但模型觀察到的感受野有很大的不同。 l=1 時感受野為 3×3,l=2 時為 7×7。 l=3 時,感受 假設我們這裡有128個篩檢程式。 在應用了這 128 個 2D 捲積之後,我們有 128 個 5×5×1 的輸出映射圖(map)。 然後我們將這些映射圖堆疊成大小為5×5×128的單層。 通過這種操作,我們可將輸入層(7×7×3)轉換成輸出層(5×5×128)。 空間維度(即高度和寬度)會變小,而深度會增大式
現在使用深度可分卷積,看看我們如何實現同樣的變換。
首先,我們將深度卷積應用於輸入層。 但我們不使用 2D 卷積中大小為 3×3×3 的單個篩檢程式,而是分開使用 3 個核。 每個過濾器的大小為 3×3×1。 每個核與輸入層的一個通道卷積(僅一個通道,而非所有通道! )。 每個這樣的捲積都能提供大小為 5×5×1 的映射圖。 然後我們將這些映射圖堆疊在一起,創建一個 5×5×3 的圖像。 經過這個操作之後,我們得到大小為 5×5×3 的輸出。 現在我們可以降低空間維度了,但深度還是和之前一樣。
深度可分卷積——第一步:我們不使用 2D 卷積中大小為 3×3×3 的單個篩檢程式,而是分開使用 3 個核。 每個過濾器的大小為 3×3×1。 每個核與輸入層的一個通道卷積(僅一個通道,而非所有通道! )。 每個這樣的捲積都能提供大小為 5×5×1 的映射圖。 然後我們將這些映射圖堆疊在一起,創建一個 5×5×3 的圖像。 經過這個操作之後,我們得到大小為 5×5×3 的輸出。
在深度可分卷積的第二步,為了擴展深度,我們應用一個核大小為 1×1×3 的 1×1 卷積。 將 5×5×3 的輸入圖像與每個 1×1×3 的核卷積,可得到大小為 5×5×1 的映射圖。
|