本文詳細總結CNN中各類卷積,旨在指導 domain-specific 更好的模型設計,包括標準卷積,分組卷積(Group Conv),深度可分離卷積(Depthwise Separable Conv),轉置卷積(Transposed Conv),空洞卷積(Dilated Conv),可變形卷積(Deformable Conv),和 特征重標定技術(Squeeze-and-Excitation)。
關于CNN網(wǎng)絡的總結可以去康康這篇良心博客哦:《一文總結經(jīng)典卷積神經(jīng)網(wǎng)絡CNN模型》
標準卷積
這沒什么好說的,回顧一下卷積的基本概念:
- Kernel Size: 內核大小定義了卷積的 視域 。2D的常見選擇是3,即3x3像素。
- Stride: 定義了內核在遍歷圖像時的 步長 。雖然它的默認值通常是1,但我們可以使用2的步長來對圖像進行采樣,類似于MaxPooling。
- Padding: 填充 定義了如何處理樣本的邊界。(padding=1,kernel size=3)的卷積將保持空間輸出維度等于輸入維度。
- Input & Output Channels: 輸入通道(I),輸出通道(O,就是該層有多少個卷積核,決定著下一層的輸入通道),該層所需的參數(shù)可以用IOK來計算,其中K等于單個內核中單個通道的參數(shù)個數(shù)。
記住下面這個公式就行,單個維度(例如寬度或高度):
分組卷積(Group Conv)
它將輸入特征圖(input feature map)分成多個組,然后在每個組內獨立進行卷積操作。這種方法最初是在AlexNet中提出的,以解決當時的GPU內存限制問題,后來被發(fā)現(xiàn)可以增加網(wǎng)絡的表示能力并減少計算量。
在標準卷積中,卷積核會跨越所有輸入通道(input channels)進行卷積。而在分組卷積中,假設有 G 個組,則輸入特征圖和卷積核都會被分成 G 個組。每組卷積核只在對應的輸入特征圖組內進行卷積操作,因此,每個卷積核不再跨越所有輸入通道,而只跨越部分通道,理論上計算量減少 G 倍。
不過,分組卷積也有一個潛在的問題:
雖然在理論上它可以顯著降低一計算量,但是對內存的訪問頻繁程度并未降低,且現(xiàn)有的GPU加速庫(如cuDNN)對其優(yōu)化的程度有限,因此它在效率上的提升并不如理論上顯著。
深度可分離卷積(Depthwise Separable Conv)
分組卷積的一種特例,其中每個輸入通道分配給一個組(就是 G=C,每個通道單獨一個組)。深度可分離卷積首先使用逐通道深度卷積(depthwise)提取空間特征,然后使用 1×1 逐點卷積(pointwise)合并這些特征。這種方法首次被廣泛認知是通過MobileNet架構和Xception架構,以顯著減少計算量和模型大小。
計算量分析
所以:
標準卷積的計算量(即乘法操作的數(shù)量)大約為:
深度可分離卷積的總計算量為 深度卷積 和 逐點卷積 之和:
深度可分離卷積的計算效率提升可以用如下的比例表示:
簡化后得到:
Cout一般很大,可以忽略,而Dk一般是3,所以一般至少能 節(jié)省9倍 計算量。
在MobileNet V2中,網(wǎng)絡做了一點改進:
先點卷積擴大通道數(shù),以提取更多的特征,再應用深度可分離卷積;還有加了殘差結構(圖中沒有展示)。
轉置卷積(Transposed Conv)
轉置卷積可以理解為 反卷積,可以視為標準卷積的逆過程,在 圖像生成(如生成對抗網(wǎng)絡GANs和變分自編碼器VAEs)、圖像分割 等領域中非常有用,因為這些應用通常需要從一個較小的特征表示恢復到較大的圖像尺寸。
在標準卷積中,卷積核在輸入特征圖上滑動,對局部區(qū)域進行加權求和,從而產生更小的輸出特征圖(除非特別采用零填充等手段)。
相反,轉置卷積通過給定的步長在輸入特征圖中插入零,然后應用一個卷積核,其效果是 “擴展” 了輸入特征圖。
具體地,它首先將輸入特征圖中的每個元素視為小的特征圖,并在這些特征圖之間插入由步長確定的零填充,然后對這個新的、被擴展的特征圖應用標準卷積。這樣,轉置卷積實際上是通過在原始輸入元素之間插入空白(通常是零)來“逆轉”標準卷積的壓縮效果。
普通卷積和轉置卷積所處理的基本任務是不同的:
- 前者主要用來做特征提取,傾向于壓縮特征圖尺寸;
- 后者主要用于對特征圖進行擴張或上采樣。
盡管轉置卷積是上采樣的有效手段,但它可能引入特定的偽影,如棋盤狀偽影(checkerboard artifacts)。
這是由于步長和卷積核大小不匹配時輸出特征圖中值的不均勻分布導致的。即當內核大小(輸出窗口大?。┎荒鼙徊椒敳奎c之間的間距)整除時,反卷積具有不均勻的重疊。
為了緩解這一問題,設計轉置卷積層時需要仔細選擇卷積核大小和步長,或考慮使用其他上采樣技術(如雙線性上采樣后跟一個 1×1 卷積)作為替代。
空洞卷積(Dilated Conv)
也稱為擴張卷積,旨在增加卷積層的感受野(即卷積操作覆蓋的輸入?yún)^(qū)域大?。┒辉黾宇~外的參數(shù)或計算量。這種方法通過在卷積核的元素之間插入空洞(即零填充),實現(xiàn)了在不丟失分辨率的情況下捕獲更廣泛的上下文信息,也用于做像素級的預測,解決pixel-wise輸出模型。
在標準卷積中,卷積核的元素是緊密排列的。而在空洞卷積中,卷積核被“擴張”了,卷積核中的元素之間插入了指定數(shù)量的空間(零填充),這個數(shù)量由一個參數(shù)——空洞率(dilation rate)決定。空洞率為1表示標準卷積(沒有空洞),空洞率大于1表示在卷積核元素之間插入的空洞數(shù)量。
工作原理:
假設空洞率為 d,則在卷積核的每個元素之間將插入 d?1 個零。這意味著,對于一個 3×3 的卷積核,當空洞率為2時,實際上卷積操作會在一個 5×5 的區(qū)域上進行,但只有原 3×3 卷積核對應的位置參與計算,其他位置被認為是零。這樣,卷積核覆蓋的實際區(qū)域更大,從而增大了感受野,而不需要增加更多的參數(shù)或計算成本。
應用:
- 語義分割:FCN等網(wǎng)絡就是利用空洞卷積來增加感受野,以提高分割的精確度。
- 音頻處理:在音頻生成和語音識別中,如Wavenet,空洞卷積可以幫助模型捕捉到更長的序列依賴。
雖然空洞卷積有其優(yōu)勢,但在使用時也需要注意一些問題,如:
- 感受野爆炸:隨著空洞率的增加,感受野可能迅速擴大,可能導致模型覆蓋過多的輸入?yún)^(qū)域,從而捕獲到過多的無關信息或噪聲。
- 棋盤效應(Gridding Effect):當連續(xù)使用高空洞率的卷積層時,可能會出現(xiàn)棋盤效應,即模型只能看到輸入數(shù)據(jù)的一部分,導致性能下降。為避免這一點,設計網(wǎng)絡時應仔細考慮空洞率的選擇和層次結構的安排。
可變形卷積(Deformable Conv)
傳統(tǒng)的卷積操作在進行特征提取時使用固定形狀的卷積核,這可能限制了模型處理圖像中的幾何變換(如物體的形狀變化、尺度變化和旋轉)的能力??勺冃尉矸e通過引入了可學習的偏移量,使得卷積核的形狀和位置可以動態(tài)地調整以適應輸入圖像的幾何變化。這種方法最初是在《Deformable Convolutional Networks》一文中提出的,目的是增強卷積神經(jīng)網(wǎng)絡對于尺度、旋轉和形狀變化的適應能力。
這使得卷積核能夠自適應地調整其形狀來更好地擬合圖像的局部特征。
正常卷積規(guī)律的采樣 9 個點(綠點),在正常的采樣坐標上加上一個位移量(藍色箭頭),可變形卷積可以進行尺度變換,比例變換和旋轉變換,即上面介紹的空洞卷積是它的一個特例。
具體地:
- 可變形卷積層通過額外的卷積層來預測每個采樣點的偏移量,這些偏移量是相對于卷積核中每個位置的標準固定網(wǎng)格位置的。偏移量是可以通過反向傳播算法學習和優(yōu)化的,使得網(wǎng)絡能夠在訓練過程中自動學習到如何變形卷積核以適應具體任務的需求。
- 由于偏移后的位置通常不會正好落在輸入特征圖的像素上,可變形卷積使用雙線性插值來計算偏移位置處的輸入值,確保操作的可微性,允許梯度的正常反向傳播。
簡單來說:首先通過一個小卷積層(綠色)的輸出得到可變形卷積所需要的位移量,然后將其作用在卷積核(藍色)上,達到可變形卷積的效果。
優(yōu)勢:
- 幾何變換適應性:可變形卷積能夠使卷積核適應輸入特征圖中的局部幾何變換,提高了模型處理圖像形變的能力。
- 增強的特征提取:通過動態(tài)調整卷積核,模型能夠捕捉到更加豐富和精細的特征,有助于提升諸如目標檢測、語義分割等視覺任務的性能。
同樣思路也能用在池化上,搞成可變形池化:
通過標準的興趣區(qū)域池化(綠色)獲得興趣區(qū)域對應的特征,該特征通過一個全連接層得到興趣區(qū)域每個部位的位移量。用該位移作用在可變形興趣區(qū)域池化(藍色)上,以獲得不局限于興趣區(qū)域固定網(wǎng)格的特征。
雖然可變形卷積提供了強大的幾何變換適應能力,但它也引入了額外的計算和參數(shù),這可能會增加模型的訓練難度和計算成本。因此,在實際應用中需要根據(jù)任務的具體需求和資源限制權衡其使用。
特征重標定技術(Squeeze-and-Excitation)
ImageNet 2017 競賽 Image Classification 任務的冠軍模型SENet(Squeeze-and-Excitation Networks)中的特征重標定策略,通過引入一個稱為“Squeeze-and-Excitation”(SE)模塊的結構,對卷積神經(jīng)網(wǎng)絡中的特征通道進行動態(tài)重標定。這種機制能夠顯著提高網(wǎng)絡對特征重要性的適應能力,增強了模型的學習和表達能力,進而提高網(wǎng)絡的性能。
這種卷積方法創(chuàng)新地對特征維度進行改進,通過自動學習評估每個特征通道的重要性,從而在千余個卷積核中區(qū)分并強化對當前任務有利的特征,同時抑制不太相關的信息。
Squeeze階段:
SE模塊首先通過全局平均池化(Global Average Pooling)對每個特征通道進行“壓縮”,將每個通道的空間維度(即寬度和高度)壓縮為一個單一的數(shù)值,生成一個長度為C的向量,這個向量中的每個值反映了相應特征在全局上的平均激活程度,這一步驟有助于模塊捕捉到通道級的全局信息。
Excitation階段:
緊接著,通過一個全連接層、ReLU激活、另一個全連接層和sigmoid激活來進行“激勵”操作,這兩層作為網(wǎng)絡的一部分需要額外學習其參數(shù),這個過程生成每個通道的權重系數(shù)。這些權重系數(shù)用于動態(tài)地調整每個通道的重要性,使網(wǎng)絡能夠專注于更有用的特征。
重標定:
最后,原始特征圖通過與這些學習到的通道權重相乘,進行重標定,即按通道進行加權,從而增強有用的特征并抑制不重要的特征。