3D 卷积在高度、宽度、深度三个维度上滑动提取特征,适用于视频分析和医学影像等三维数据。
基本概念
数学定义:
- 输入 :
- 卷积核 :
- 输出:三维特征图,保留空间和时间信息
应用场景
| 场景 | 应用 |
|---|---|
| 视频分析 | 动作识别、视频分割、运动检测 |
| 医学影像 | MRI/CT 分析、3D 分割、病变检测 |
| 3D 物体识别 | 点云处理、自动驾驶 LiDAR 数据 |
2D vs 3D 卷积
| 对比项 | 2D 卷积 | 3D 卷积 |
|---|---|---|
| 适用数据 | 单张图片 | 视频、医学影像 |
| 输入形状 | ||
| 计算复杂度 | 低 | 高 |
| 特征提取 | 空间信息 | 空间+时间信息 |
输出尺寸计算
示例:输入 ,卷积核 ,stride=1,padding=1
- 空间输出:
- 时间输出:
- 最终输出:
PyTorch 实现
import torch.nn as nn
class Simple3DConvNet(nn.Module):
def __init__(self, in_channels=3, out_channels=64):
super().__init__()
self.conv3d = nn.Conv3d(in_channels, out_channels, 3, padding=1)
self.pool3d = nn.MaxPool3d(2, stride=2)
def forward(self, x):
return self.pool3d(self.conv3d(x).relu())
# 输入: [batch, channels, depth, height, width]
x = torch.randn(1, 3, 16, 32, 32)
model = Simple3DConvNet()
output = model(x) # [1, 64, 8, 16, 16]改进版本
| 方法 | 说明 |
|---|---|
| (2+1)D 卷积 | 分解为 2D 空间 + 1D 时间卷积,减少计算 |
| 3D 深度可分离卷积 | 减少参数,提高效率 |
| 注意力结合 | SE3D、CBAM3D 增强特征提取 |