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等的基础。
- 空洞卷积: 扩大感受野的利器,不损失分辨率/不增参,常用于密集预测任务。
- 深度扩张卷积: 结合了轻量化 (可分离) 和大感受野 (空洞) 的双重优势,是构建高效高性能模型(尤其在移动端和边缘设备上)的重要组件。
通过结合使用这些不同类型的卷积操作,可以设计出适应各种需求(精度、速度、模型大小、感受野)的卷积神经网络架构。