在深度計算機視覺領域中,有幾種類型的卷積層與我們經常使用的原始卷積層不同。在計算機視覺的深度學習研究方面,許多流行的高級卷積神經網絡實現都使用了這些層。這些層中的每一層都有不同於原始卷積層的機制,這使得每種類型的層都有一個特別特殊的功能。
在進入這些高級的卷積層之前,讓我們先快速回顧一下原始的卷積層是如何工作的。
原始卷積層
在原始的卷積層中,我們有一個形狀為WxHxC的輸入,其中W和H是每個feature map的寬度和高度,C是channel的數量,基本上就是feature map的總數。卷積層會有一定數量的核,核會對這個輸入進行卷積操作。內核的數量將等於輸出feature map中所需通道的數量。基本上,每個內核都對應於輸出中的一個特定的feature map,並且每個feature map都是一個通道。
核的高度和寬度是由我們決定的,通常,我們保持3x3。每個內核的深度將等於輸入的通道數。因此,對於下面的例子,每個內核的形狀將是(wxhx3),其中w和h是內核的寬度和高度,深度是3,因為在這種情況下,輸入有3個通道。
在本例中,輸入有3個通道,輸出有16個通道。因此在這一層共有16個內核,每個內核的形狀是(wxhx3)。
高級的卷積層
我們將在本教程中涵蓋的高級卷積層的列表如下:
深度可分離的卷積反卷積空洞卷積分組卷積深度可分離的卷積層
在深度可分離卷積層中,我們試圖極大地減少在每個卷積層中執行的計算數量。這一整層實際上被分為兩部分:
i)深度卷積
ii)逐點卷積
深度卷積
深度卷積的關鍵點在於,每個核函數都是應用在單個輸入通道上,而不是同時應用所有的輸入通道。因此,每個內核都是形狀(w*h*1)的,因為它將應用於單個通道。內核的數量將等於輸入通道的數量,因此,如果我們有W*H*3大小的輸入,我們將有3個單獨的W*H* 1內核,每個內核將應用於輸入的單個通道。因此,輸出也將具有與輸入相同數量的通道,因為每個內核將輸出單個feature map。讓我們看看深度卷積部分是如何工作的:
如果我們有一個C通道的輸入,那麼這一層的深度卷積部分的輸出也會有C通道。接下來是下一部分。這一部分的目的是改變頻道的數量,因為隨著我們深入了解CNN,我們經常希望增加每一層輸出的頻道數量。
逐點卷積
逐點卷積將把深度卷積的中間C通道輸出轉換為具有不同數量通道的feature map。為了做到這一點,我們有幾個1\s1的內核,它們在這個中間feature map塊的所有通道上進行卷積。因此,每個1\1內核也將有C通道。每個內核將輸出一個單獨的feature map,因此我們將得到的內核數量與我們希望輸出的通道數量相等。讓我們看看這是如何工作的。
這就是深度可分離卷積層的整個過程。基本上,在深度卷積的第一步,每個輸入通道都有一個核函數然後將它們與輸入進行卷積。這樣的結果輸出將是一個feature map塊,它具有與輸入相同數量的通道。在逐點卷積的第二步中,我們有幾個1*1的核,並將它們與中間特徵映射塊進行卷積。我們將根據我們希望輸出的通道數量來選擇內核的數量。
這一層比原來的卷積層要輕量得多。這是因為,在第一步中,我們沒有使用巨大的卷積在所有輸入通道上的內核,而是使用單通道的內核,這將會小得多。然後在下一步,當我們試圖改變通道的數量時,我們使用了對所有通道進行卷積的內核,但是這些內核是1*1的,因此它們也要小得多。本質上,我們可以把深度可分離卷積看作是把原來的卷積層分成兩部分。第一部分使用具有較大空間區域(寬度和高度)但只有一個通道的內核,第二部分使用跨越所有通道的內核,但它們有較小的空間區域。
深度可分離的卷積層在行動網路中使用,因為這樣CNN有更少的參數,以便他們可以在行動裝置上使用。它們也被用於Xception CNN架構中。
反卷積層
通常在卷積層中,feature maps的空間面積(width and height)在每層之後會減小或保持不變。但有時我們想增加空間面積。這些增加空間面積而不是減少空間面積的特殊層稱為反卷積層。有兩種主要類型的反卷積層:
轉置卷積
上採樣
兩者在某些方面是相似的,但也有一些差異。本質上,其目的是在應用卷積之前,通過在feature map中引入更多的像素來增加空間面積。填充這些新像素值的方式形成了轉置卷積和上採樣之間的主要區別。添加新像素的方式如下:
在調整feature map的大小時,我們可以改變擴充比例,但通常情況下,我們做的是2倍的擴充。這樣,feature map的高度和寬度會翻倍,因此像素的總數是原始feature map的4倍。
轉置卷積
在轉置卷積中,我們只是用0的值填充所有增加的像素。這有點像在feature map的原始像素之間添加填充。
將所有添加的像素用0代入後,再對放大後的feature map進行普通卷積。這就是我們如何在對feature map執行卷積操作的同時增加它的大小。
上採樣
對於上採樣層,我們在添加像素的位置複製原始像素值。因此每個像素將被複製4次如果我們做的是一個2倍擴充。從技術上講,如果我們只考慮上採樣層,在對feature map進行放大後就不存在卷積。但是我們通常在上採樣層之後加上卷積層這樣網絡就有了一些學習能力因為上採樣層本身沒有任何參數。
這兩層在網絡神經網絡中被廣泛使用,網絡神經網絡試圖輸出與原始輸入相同大小的feature map。一般情況下,會有一些普通的卷積和池化層,這會減小feature map的大小。在這之後,我們將引入反卷積層,將大小增加回原來的大小。語義分割CNNs、U-Net、GANs等使用反卷積層。
空洞卷積Dilated (Atrous) Convolution
在研究界中,空洞卷積也被稱為伸縮卷積。在空洞卷積中,我們本質上試圖增加每個核的面積,同時保持每個核的元素數量完全相同。
對於擴張卷積,我們基本上取核函數在進行卷積運算之前在核函數的元素之間加上間隔。通過這樣做,內核的接受區域會增加,而參數的數量會相同。
與普通卷積層相比,它看起來是這樣的:
可以看到,內核中的元素數量保持不變,但是應用內核的有效面積從3*3增加到5*5。我們還可以改變核的膨脹率,這本質上意味著核元素之間的間隙將有多寬。對於上面例子中的膨脹核,膨脹率為2。默認的卷積核的膨脹率為1,基本上意味著核元素之間沒有間隙。
當我們想讓卷積應用於更大的區域,同時又能節省計算成本時,我們就使用了擴張卷積。如果我們想用一個普通的卷積層覆蓋5*5的面積,那麼我們需要一個5*5面積的核,也就是25個元素。然而,如果我們使用擴張率為2的擴張卷積,我們可以用9個元素覆蓋相同的區域。除此之外,內核的接受區域也增加了,使得它們能夠捕捉到在輸入特徵圖中出現的更細的細節。
分組卷積
在分組卷積中,基本的概念是我們將輸入中的信道分成相等的組。然後,我們將分配相同數量的內核給每一組。每個內核將只應用於其各自組中的通道,而不是應用於輸入的所有通道。
例如,如果我們有一個有4個通道的輸入特徵圖,並且我們希望總共有2組,那麼每組都將有2個通道。假設每一組有4個內核。每個內核的深度將為2,因為它們將只應用於每個組,而不是整個輸入。將兩組的輸出特徵圖連接在一起,形成最終的輸出特徵圖。因此,在本例中,每組將輸出4個feature map,因此輸出的channel總數為8。讓我們看看這個例子的可視化解釋:
對於分組卷積,我們本質上是在每一層並行地執行卷積。這增加了模型在通過網絡進行反向傳播時可以採取的路徑數量。除此之外,它還減少了該層的計算成本,因為每個內核將擁有更少的參數,並且將應用於輸入中的更少的通道。這就是我們使用組合卷積的原因。這些在ResNext架構中使用。
作者:Harsha Bommana
deephub翻譯組