有趣的是,通過應用各種填充和步長,我們可以將同樣的 2×2 輸入圖像映射到不同的圖像尺寸。 下面,轉置卷積被用在了同一張 2×2 輸入上(輸入之間插入了一個零,並且周圍加了 2×2 的單位步長的零填充),所得輸出的大小是 5×
觀察上述例子中的轉置卷積能幫助我們構建起一些直觀認識。 但為了泛化其應用,瞭解其可以如何通過計算機的矩陣乘法實現是有益的。 從這一點上我們也可以看到為何「轉置卷積」才是合適的名稱。tadarise tadarise-5 tadarise5mg tadarise20mg Supertadarise
在卷積中,我們定義 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 時,感受野的大小就增加到了 15×15。 有趣的是,與這些操作相關的參數的數量是相等的。 我們「觀察」更大的感受野不會有額外的成本。 因此,擴張卷積可用於廉價地增大輸出單元的感受野,而不會增大其核大小,這在多個擴張卷積彼此堆疊時尤其有效。
論文《Multi-scale context aggregation by dilated convolutions》的作者用多個擴張卷積層構建了一個網路,其中擴張率 l 每層都按指數增大。 由此,有效的感受野大小隨層而指數增長,而參數的數量僅線性增長。
這篇論文中擴張卷積的作用是系統性地聚合多個比例的形境資訊,而不丟失解析度。 這篇論文表明其提出的模組能夠提升那時候(2016 年)的當前最佳形義分割系統的準確度。 請參閱那篇論文瞭解更多資訊
某些神經網路架構使用了可分卷積,比如MobileNets。 可分卷積有空間可分卷積和深度可分卷
空間可分卷積操作的是圖像的 2D 空間維度,即高和寬。 從概念上看,空間可分卷積是將一個卷積分解為兩個單獨的運算。 對於下面的示例,3×3 的 Sobel 核被分成了一個 3×1 核和一個 1×3 核。
Sobel 核可分為一個 3x1 和一個 1x3 核
在卷積中,3×3 核直接與圖像卷積。 在空間可分卷積中,3×1核首先與圖像卷積,然後再應用 1×3 核。 這樣,執行同樣的操作時僅需 6 個參數,而不是 9 個。
此外,使用空間可分卷積時所需的矩陣乘法也更少。 給一個具體的例子,5×5 圖像與3×3核的卷積(步幅=1,填充=0)要求在3個位置水準地掃描核(還有3個垂直的位置)。 總共就是9個位置,表示為下圖中的點。 在每個位置,會應用9次逐元素乘法。 總共就是 9×9=81 次乘
另一方面,對於空間可分卷積,我們首先在 5×5 的圖像上應用一個 3×1 的篩檢程式。 我們可以在水準 5 個位置和垂直 3 個位置掃描這樣的核。 總共就是 5×3=15 個位置,表示為下圖中的點。 在每個位置,會應用 3 次逐元素乘法。 總共就是 15×3=45 次乘法。 現在我們得到了一個 3×5 的矩陣。 這個矩陣再與一個 1×3 核卷積,即在水準 3 個位置和垂直 3 個位置掃描這個矩陣。 對於這9個位置中的每一個,應用3次逐元素乘法。 這一步需要 9×3=27 次乘法。 因此,總體而言,空間可分卷積需要 45+27=72 次乘法,少於普通捲
我們稍微推廣一下上面的例子。 假設我們現在將卷積應用於一張 N×N 的圖像上,卷積核為 m×m,步幅為 1,填充為 0。 傳統卷積需要 (N-2) x (N-2) x m x m 次乘法,空間可分卷積需要 N x (N-2) x m + (N-2) x (N-2) x m = (2N-2) x (N-2) x m 次乘法。 空間可分卷積與標準卷積的計算成本比為
因為圖像尺寸 N 遠大於篩檢程式大小(N>>m),所以這個比就變成了 2/m。 也就是說,在這種漸進情況(N>>m)下,當篩檢程式大小為 3×3 時,空間可分卷積的計算成本是標準卷積的 2/3。 過濾器大小為 5×5 時這一數值是 2/5;過濾器大小為 7×7 時則為 2/7。
儘管空間可分卷積能節省成本,但深度學習卻很少使用它。 一大主要原因是並非所有的核都能分成兩個更小的核。 如果我們用空間可分卷積替代所有的傳統卷積,那麼我們就限制了自己在訓練過程中搜索所有可能的核。 這樣得到的訓練結果可能是次優的。
2、深度可分卷積
現在來看深度可分卷積,這在深度學習領域要常用得多(比如MobileNet和 Xception)。 深度可分卷積包含兩個步驟:深度卷積核 1×1 卷積。
在描述這些步驟之前,有必要回顧一下我們之前介紹的 2D 卷積核 1×1 卷積。 首先快速回顧標準的 2D 卷積。 舉一個具體例子,假設輸入層的大小是 7×7×3(高×寬×通道),而篩檢程式的大小是 3×3×3。 經過與一個篩檢程式的 2D 卷積之後,輸出層的大小是 5×5×1(僅有一個通道)。
用於創建僅有 1 層的輸出的標準 2D 卷積,使用 1 個篩檢程式
一般來說,兩個神經網路層之間會應用多個篩檢程式。 假設我們這裡有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 的映射圖。