1. 標準卷積 (Convolution)
- 原理: 一個包含
K
個濾波器的卷積層(每個濾波器大小為FxF x C_in
)在輸入特征圖上滑動。在每個位置,濾波器與輸入圖像的局部區域進行逐元素相乘再求和(點積運算),得到一個輸出值。滑動完整個輸入后,每個濾波器生成一個二維特征圖(或稱激活圖)。K
個濾波器就產生K
個特征圖,即輸出通道數為C_out = K
。 - 關鍵參數:
- 核大小 (Kernel Size - F): 感受野大小,決定了看到輸入中多大區域(如
3x3
,5x5
)。 - 步長 (Stride - S): 卷積核每次滑動的像素數。
S=1
每次移動 1 像素,輸出較大;S=2
每次移動 2 像素,輸出縮小約一半。 - 填充 (Padding - P): 在輸入特征圖邊界外圍填充像素(通常為 0)。
"valid"
表示不填充;"same"
表示填充使得輸出空間尺寸(寬/高)與輸入相同(當S=1
時)。 - 輸入通道數 (C_in): 輸入數據的通道數(如 RGB 圖像
C_in=3
)。 - 輸出通道數 (C_out / K): 使用的濾波器數量,決定輸出特征圖的深度。
- 核大小 (Kernel Size - F): 感受野大小,決定了看到輸入中多大區域(如
- 輸出尺寸計算 (每個空間維度):
W_out = (W_in - F + 2P) / S + 1
(結果向下取整) - 計算量: 高。每個輸出像素需要
F * F * C_in
次乘加操作。總計算量 ≈W_out * H_out * C_out * F * F * C_in
。 - 例子 (輸入
8x8x3
):- 使用
K=4
個3x3
卷積核 (F=3
)。 - 步長
S=1
,填充P=0
(valid)。 - 輸出形狀:
6x6x4
。
- 使用
特征圖和卷積核通道大小一樣;通道一一對應進行卷積操作,再相加得到最后一張特征圖。
2. 步長卷積 (Strided Convolution)
- 原理: 是標準卷積的一個特例,其步長
S > 1
。主要目的是對特征圖進行下采樣(Downsampling),顯著減少特征圖的空間尺寸(寬/高)和后續計算量。步長S=2
是最常用的下采樣方式。 - 效果: 實現了空間維度的降維,同時(通常)增加通道維度以捕獲更抽象的特征。
- 輸出尺寸計算: 同標準卷積公式
W_out = (W_in - F + 2P) / S + 1
。 - 例子 (輸入
8x8x3
):- 使用
K=6
個3x3
卷積核 (F=3
)。 - 步長
S=2
,填充P=1
(常用"same"
填充策略,這里P=1
使得(8-3+2)/2+1=4
,是整數)。 - 輸出形狀:
4x4x6
。空間尺寸減半 (8->4),通道數增加 (3->6)。
- 使用
3. 反卷積 / 轉置卷積 (Deconvolution / Transposed Convolution)
- 原理: 不是真正的卷積逆運算。它的目的是上采樣(Upsampling),即增大特征圖的空間尺寸(寬/高)。可以理解為一種“逆向”的、帶步長的卷積過程:
- 在輸入特征圖的像素之間插入
(S-1)
個零 (S
是設定的上采樣步長,通常為2
)。 - 在擴展后的特征圖上進行一個標準的卷積操作(通常
F=3
或4
,S=1
, 并配合適當的填充P
)。
- 在輸入特征圖的像素之間插入
- 效果: 將低分辨率、高通道數的特征圖,上采樣為高分辨率、低通道數(或保持通道數)的特征圖。常用于圖像分割(U-Net)、生成模型(GANs)中的解碼器部分。
- 輸出尺寸計算 (常見公式):
W_out = S * (W_in - 1) + F - 2P
(另一種理解:可以看作是步長為S
的標準卷積的梯度計算過程,導致輸出尺寸放大)。 - 例子 (輸入
4x4x6
,上采樣回接近8x8
):- 輸入形狀:
4x4x6
(例如步長卷積的輸出)。 - 使用
K=3
個3x3
卷積核 (F=3
) 進行轉置卷積。 - 上采樣步長
S=2
。 - 填充
P=1
(常用設置,確保輸出尺寸計算為整數)。 - 計算過程:
- 在
4x4
輸入的空間維度上,每個像素之間插入(2-1)=1
個零。行間、列間都插零。 - 插入零后,特征圖尺寸變為
(4 + (4-1)*1) = 7
->7x7x6
(更準確:原4x4
,行間插 1 行零 -> 變成7x4
,再在列間插 1 列零 -> 變成7x7
)。 - 在
7x7x6
的特征圖上,進行標準的3x3
卷積 (S=1
,P=1
)。 - 標準卷積輸出尺寸:
(7 - 3 + 2*1) / 1 + 1 = (6) + 1 = 7
->7x7x3
。
- 在
- 輸出形狀:
7x7x3
(接近原始的8x8x3
)。可以看到空間尺寸從4x4
增大到了7x7
,通道數從6
減少回3
。
- 輸入形狀:
反卷積(轉置卷積)卷積是對輸入圖像提取出特征(可能尺寸會變小),而所謂的“反卷積”便是進行相反的操作。但這里說是“反卷積”并不嚴謹,因為并不會完全還原到跟輸入圖像一樣,一般是還原后的尺寸與輸入圖像一致,主要用于向上采樣。從數學計算上看,“反卷積”相當于是將卷積核轉換為稀疏矩陣后進行轉置計算,因此,也被稱為“轉置卷積”。如上圖,在2x2的輸入圖像上應用步長為1、邊界全0填充的3x3卷積核,進行轉置卷積(反卷積)計算,向上采樣后輸出的圖像大小為4x4。
4. 可分離卷積 (Separable Convolution)
- 原理: 將一個標準的
F x F
卷積分解為兩個連續的、計算量更小的操作:- 深度卷積 (Depthwise Convolution - DWConv): 對輸入的每個通道單獨使用一個
F x F
卷積核進行空間卷積。輸入有C_in
個通道,就使用C_in
個F x F x 1
的濾波器。通道之間不混合。 輸出還是C_in
個通道。 - 逐點卷積 (Pointwise Convolution - PWConv / 1x1 Convolution): 使用
K
個1x1 x C_in
的卷積核。它只關注通道維度的混合,將深度卷積輸出的C_in
個通道的信息線性組合成C_out
(即K
) 個通道。不改變空間尺寸。
- 深度卷積 (Depthwise Convolution - DWConv): 對輸入的每個通道單獨使用一個
- 效果: 大幅降低計算量和參數量,同時基本保持了標準卷積的表達能力(尤其當空間相關性和通道相關性可以解耦時)。是輕量化網絡的基礎。
- 計算量對比 (標準 vs 可分離):
- 標準
FxF
Conv:W_out * H_out * C_out * F * F * C_in
- 可分離 Conv (DW+PW):
DWConv: W_out * H_out * C_in * F * F * 1
(每個通道獨立計算)PWConv: W_out * H_out * C_out * 1 * 1 * C_in
- 總計:
W_out * H_out * C_in * (F*F + C_out)
- 計算量減少比例:
(F*F + C_out) / (F*F * C_out)
。例如F=3
,C_in=C_out=32
,比例約為(9+32)/(9*32) = 41/288 ≈ 1/7
。
- 標準
- 例子 (輸入
8x8x3
):- 目標輸出通道數
C_out=4
。 - 步驟1: 深度卷積 (DWConv)
- 使用
3
個3x3x1
的濾波器 (因為輸入有3
個通道)。 - 每個濾波器只在對應的一個輸入通道上滑動卷積 (
S=1
,P=0
)。輸出3
個6x6
的特征圖 ((8-3+0)/1+1=6
)。 - DW 輸出形狀:
6x6x3
。
- 使用
- 步驟2: 逐點卷積 (PWConv / 1x1 Conv)
- 使用
4
個1x1x3
的濾波器。 - 在
6x6x3
的輸入上滑動 (S=1
,P=0
)。每個1x1
核與所有3
個通道的同一位置像素做點積,輸出1
個像素值。4
個濾波器產生4
個通道。 - 最終輸出形狀:
6x6x4
(與標準3x3
卷積S=1, P=0
的結果相同)。
- 使用
- 關鍵: 可分離卷積
(3x3 DW + 1x1 PW)
達到了和標準3x3
卷積相同的空間變換 (8x8->6x6
) 和通道變換 (3->4
),但計算量和參數大大減少。
- 目標輸出通道數
5. 深度可分離卷積 (Depthwise Separable Convolution)
- 原理: 就是上面描述的可分離卷積 (Depthwise Conv + Pointwise Conv)! 這兩個術語在絕大多數現代深度學習文獻和框架(如 TensorFlow, PyTorch)中被視為同義詞。它是 MobileNet 等高效架構的核心組件。
- 強調點: 它明確包含了兩個步驟:1) 按通道分離的空間卷積 (Depthwise),2) 通道混合卷積 (Pointwise/1x1)。
- 例子: 同上 可分離卷積的例子。輸入
8x8x3
-> DWConv (3x3
,S=1
,P=0
) ->6x6x3
-> PWConv (1x1
,C_out=4
) ->6x6x4
。
深度可分離卷積由兩步組成:深度卷積和1x1卷積。首先,在輸入層上應用深度卷積。如下圖,使用3個卷積核分別對輸入層的3個通道作卷積計算,再堆疊在一起。
6. 空洞卷積 / 擴張卷積 (Dilated / Atrous Convolution)
- 原理: 在標準卷積核的權重元素之間注入空洞(Dilation Rate - D)。
D=1
是標準卷積。D=2
表示核元素之間間隔1
個像素(實際感受野等效于(F + (F-1)*(D-1)) x (F + (F-1)*(D-1))
,但參數數量不變)。卷積核在輸入上滑動時,只計算有實心權重的位置。 - 目的: 在不增加參數數量、不減小特征圖尺寸(通常
S=1
,P
適當)的前提下,顯著增大感受野 (Receptive Field)。這對于捕獲圖像中更大范圍的上下文信息(如語義分割、目標檢測中大物體)非常關鍵,避免了頻繁下采樣帶來的信息損失。 - 輸出尺寸計算: 同標準卷積公式
W_out = (W_in + 2P - [ (F-1)*D + 1 ]) / S + 1
。等效核大小F_eff = F + (F-1)*(D-1)
。 - 例子 (輸入
8x8x3
):- 使用
K=2
個3x3
卷積核 (F=3
)。 - 擴張率
D=2
。 - 步長
S=1
,填充P=2
(常用"same"
填充策略,這里P=2
使得(8 - [ (3-1)*2 + 1 ] + 2*2) /1 +1 = (8 - [5] +4) +1 = 8
,保持尺寸)。 - 等效感受野:
3 + (3-1)*(2-1) = 3 + 2*1 = 5x5
。這個3x3
空洞卷積核實際“看到”的區域相當于一個標準的5x5
區域,但只用了3x3=9
個參數。 - 輸出尺寸:
(8 - [ (3-1)*2 + 1 ] + 2*2) / 1 + 1 = (8 - 5 + 4) + 1 = 8
。輸出通道C_out=2
。 - 輸出形狀:
8x8x2
。空間尺寸不變 (8x8
),感受野增大到5x5
(相比標準3x3
的3x3
感受野)。
- 使用
為擴大感受野,在卷積核里面的元素之間插入空格來“膨脹”內核,形成“空洞卷積”(或稱膨脹卷積),并用膨脹率參數L表示要擴大內核的范圍,即在內核元素之間插入L-1個空格。當L=1時,則內核元素之間沒有插入空格,變為標準卷積。
7. 深度擴張卷積 / 擴張深度卷積 (Dilated Depthwise Convolution)
- 原理: 將空洞卷積 (Dilated Conv) 的思想應用于深度卷積 (Depthwise Conv) 步驟。即在深度可分離卷積中,深度卷積部分使用帶有空洞率
D
的卷積核。 - 結構:
- 擴張深度卷積 (Dilated Depthwise Conv): 對輸入的每個通道單獨使用一個
F x F
且擴張率為D
的卷積核進行空間卷積。輸出通道數仍為C_in
。 - 逐點卷積 (Pointwise Conv / 1x1 Conv): 不變,使用
K
個1x1 x C_in
的卷積核混合通道,輸出C_out
個通道。
- 擴張深度卷積 (Dilated Depthwise Conv): 對輸入的每個通道單獨使用一個
- 目的: 在保持深度可分離卷積低計算量、低參數量優點的同時,利用空洞卷積增大感受野的優點。這對于構建高效的、能捕獲大范圍上下文的模型(如實時語義分割)至關重要。
- 計算量: 與標準深度可分離卷積類似,但深度卷積步驟的感受野更大。
Dilated DWConv: W_out * H_out * C_in * F * F * 1
(計算量不變,因為參數數量和計算位置數量沒變,只是采樣位置間隔變大了)PWConv: W_out * H_out * C_out * 1 * 1 * C_in
(不變)
- 例子 (輸入
8x8x3
):- 目標輸出通道數
C_out=4
。 - 步驟1: 擴張深度卷積 (Dilated DWConv)
- 使用
3
個3x3x1
且D=2
的濾波器。 - 步長
S=1
,填充P=2
(為了保持輸出空間尺寸為8x8
,需要計算P
。等效核大小F_eff=5
,要維持8x8
輸出,P
需滿足(8 - 5 + 2P)/1 +1 = 8
->(3 + 2P) = 7
->2P=4
->P=2
)。 - 每個擴張卷積核在其對應的輸入通道上進行空洞卷積。感受野等效
5x5
。 - Dilated DW 輸出形狀:
8x8x3
。
- 使用
- 步驟2: 逐點卷積 (PWConv / 1x1 Conv)
- 使用
4
個1x1x3
的濾波器 (S=1
,P=0
)。 - 在
8x8x3
的輸入上操作,輸出8x8
的空間圖,每個位置混合3
個通道成1
個值(共4
個通道)。 - 最終輸出形狀:
8x8x4
。
- 使用
- 關鍵: 最終輸出保持了輸入的
8x8
空間分辨率(得益于S=1
,P=2
),同時每個位置在深度卷積階段就具有了5x5
的感受野(比標準3x3
深度卷積的3x3
感受野大),而計算量和參數仍然遠小于一個標準的5x5
卷積或一個帶空洞的標準卷積。
- 目標輸出通道數
總結對比表 (以 8x8x3
輸入為例)
卷積類型 | 主要參數/操作 | 輸出形狀 (示例) | 核心目的/特點 | 計算量/參數量特點 |
---|---|---|---|---|
標準卷積 | F=3, K=4, S=1, P=0 | 6x6x4 | 基礎特征提取 | 高 |
步長卷積 | F=3, K=6, S=2, P=1 | 4x4x6 | 下采樣 (減小尺寸,增加通道/抽象) | 低于標準卷積 (尺寸減小) |
反卷積/轉置卷積 | F=3, K=3, S=2, P=1 (上采樣) | 7x7x3 | 上采樣 (增大尺寸) | 中高 |
可分離卷積 (深度可分離) | F_dw=3, K_pw=4, S=1, P_dw=0 (DW->PW) | 6x6x4 | 極大降低計算量/參數,保持表達能力 (空間分離+通道混合) | 極低 (約標準 FxF 的 1/(F*F) ) |
空洞/擴張卷積 | F=3, K=2, S=1, P=2, D=2 | 8x8x2 | 增大感受野 (5x5 等效),不減小尺寸/不增參 | 同標準 FxF 卷積 (參數/計算量不變) |
深度擴張卷積 | F_dw=3, D_dw=2, P_dw=2, K_pw=4, S_dw=1, S_pw=1 (Dilated DW -> PW) | 8x8x4 | 低計算量/參數 + 大感受野 (DW感受野5x5 ,輸出尺寸不變) | 極低 (同標準深度可分離) |
關鍵點回顧:
- 標準卷積: 基石,計算量大。
- 步長卷積: 高效下采樣。
- 反卷積: 上采樣工具。
- (深度)可分離卷積: 輕量化的核心手段,MobileNet等的基礎。
- 空洞卷積: 擴大感受野的利器,不損失分辨率/不增參,常用于密集預測任務。
- 深度擴張卷積: 結合了輕量化 (可分離) 和大感受野 (空洞) 的雙重優勢,是構建高效高性能模型(尤其在移動端和邊緣設備上)的重要組件。
通過結合使用這些不同類型的卷積操作,可以設計出適應各種需求(精度、速度、模型大小、感受野)的卷積神經網絡架構。