3D 卷积在高度、宽度、深度三个维度上滑动提取特征,适用于视频分析和医学影像等三维数据。
基本概念
数学定义:
$$\text{Output}(x, y, z) = \sum_{i,j,k} W(i, j, k) \cdot X(x+i, y+j, z+k)$$
- 输入 $X$:$(C_{\text{in}}, H, W, D)$
- 卷积核 $W$:$(C_{\text{out}}, C_{\text{in}}, K_H, K_W, K_D)$
- 输出:三维特征图,保留空间和时间信息
应用场景
| 场景 | 应用 |
|---|---|
| 视频分析 | 动作识别、视频分割、运动检测 |
| 医学影像 | MRI/CT 分析、3D 分割、病变检测 |
| 3D 物体识别 | 点云处理、自动驾驶 LiDAR 数据 |
2D vs 3D 卷积
| 对比项 | 2D 卷积 | 3D 卷积 |
|---|---|---|
| 适用数据 | 单张图片 | 视频、医学影像 |
| 输入形状 | $(C, H, W)$ | $(C, H, W, D)$ |
| 计算复杂度 | 低 | 高 |
| 特征提取 | 空间信息 | 空间+时间信息 |
输出尺寸计算
$$\text{Output Size} = \frac{\text{Input Size} - \text{Kernel Size} + 2 \times \text{Padding}}{\text{Stride}} + 1$$
示例:输入 $(3, 32, 32, 16)$,卷积核 $(64, 3, 3, 3, 3)$,stride=1,padding=1
- 空间输出:$(32-3+2)/1+1 = 32$
- 时间输出:$(16-3+2)/1+1 = 16$
- 最终输出:$(64, 32, 32, 16)$
PyTorch 实现
| |
改进版本
| 方法 | 说明 |
|---|---|
| (2+1)D 卷积 | 分解为 2D 空间 + 1D 时间卷积,减少计算 |
| 3D 深度可分离卷积 | 减少参数,提高效率 |
| 注意力结合 | SE3D、CBAM3D 增强特征提取 |
张芷铭的个人博客
Comments