14 KiB
14 KiB
Backbone到BEV特征图的多尺度架构分析
分析日期: 2025-10-31
项目: BEVFusion Phase 4A Stage 1
✅ 核心答案
是的!从Backbone到BEV特征图有完整的多尺度支持。
整个流程采用3个不同尺度的特征进行融合,然后通过视角变换生成统一的BEV特征图。
📐 完整多尺度流程
6个相机图像 (1600×900)
↓
┌──────────────────────────────────────────┐
│ Swin Transformer Backbone (多尺度) │
├──────────────────────────────────────────┤
│ Stage 1 (depth=2): 输出 H/4 × W/4 │ ← 192通道
│ Stage 2 (depth=2): 输出 H/8 × W/8 │ ← 384通道
│ Stage 3 (depth=6): 输出 H/16 × W/16 │ ← 768通道
└──────────────────────────────────────────┘
↓
[输出3个尺度]
out_indices: [1, 2, 3]
↓
┌──────────────────────────────────────────┐
│ GeneralizedLSSFPN (特征金字塔网络) │
├──────────────────────────────────────────┤
│ 输入: [192ch, 384ch, 768ch] │
│ 功能: 融合3个尺度的特征 │
│ 输出: 256通道 统一特征 │
└──────────────────────────────────────────┘
↓
256通道特征图
↓
┌──────────────────────────────────────────┐
│ DepthLSSTransform (视角变换) │
├──────────────────────────────────────────┤
│ 输入: 256通道 图像特征 │
│ 功能: 2D→3D→BEV投影 │
│ 输出: 80通道 BEV特征 │
└──────────────────────────────────────────┘
↓
80通道 BEV特征 (Camera)
↓
┌──────────────────────────────────────────┐
│ ConvFuser (多模态融合) │
├──────────────────────────────────────────┤
│ 输入: Camera(80ch) + LiDAR(256ch) │
│ 输出: 256通道 融合BEV特征 │
└──────────────────────────────────────────┘
↓
最终BEV特征图 (256通道, 540×540)
🎯 1. Swin Transformer - 层次化多尺度Backbone
架构配置
type: SwinTransformer
embed_dim: 96
depths: [2, 2, 6, 2] # 4个Stage的深度
window_size: 7
out_indices: [1, 2, 3] # 输出第2、3、4个Stage
多尺度输出详解
Stage 1 (不输出)
深度: 2层
输入: H/4 × W/4 (400×225)
通道: 96
功能: 初始特征提取
Stage 2 → 输出索引1
深度: 2层
分辨率: H/8 × W/8 (200×112)
通道: 192 (96×2)
特点: 浅层特征,细节丰富
用途: 捕获精细纹理和边缘
Stage 3 → 输出索引2
深度: 6层 (最深!)
分辨率: H/16 × W/16 (100×56)
通道: 384 (96×4)
特点: 中层特征,语义+细节平衡
用途: 关键的特征表示层
Stage 4 → 输出索引3
深度: 2层
分辨率: H/32 × W/32 (50×28)
通道: 768 (96×8)
特点: 深层特征,语义丰富
用途: 全局上下文理解
Swin Transformer的优势
-
层次化设计
- 类似CNN的金字塔结构
- 逐层降低分辨率,增加通道
- 保留多尺度信息
-
Shifted Window Attention
- 局部窗口内自注意力
- 跨窗口连接(Shifted)
- 计算效率高
-
强大的特征提取
- Transformer的全局建模能力
- CNN的层次化归纳偏置
- 在nuImages数据集预训练
🔗 2. GeneralizedLSSFPN - 多尺度特征融合
架构
type: GeneralizedLSSFPN
in_channels: [192, 384, 768] # 3个输入尺度
out_channels: 256 # 统一输出通道
工作原理
Top-Down路径
高层特征 (768ch, H/32×W/32)
↓ 上采样 2×
+ 横向连接 ← 中层特征 (384ch, H/16×W/16)
↓ 融合
中间特征 (256ch, H/16×W/16)
↓ 上采样 2×
+ 横向连接 ← 浅层特征 (192ch, H/8×W/8)
↓ 融合
输出特征 (256ch, H/8×W/8)
关键操作
-
横向连接 (Lateral Connections)
lateral_conv = Conv2d(in_ch, 256, 1×1) # 作用: 降维到统一通道数 -
上采样
upsample = interpolate(x, scale_factor=2, mode='nearest') # 作用: 将高层特征上采样到低层分辨率 -
特征融合
fused = lateral(low_level) + upsample(high_level) # 作用: 结合语义和细节 -
输出平滑
output_conv = Conv2d(256, 256, 3×3) # 作用: 消除上采样伪影
多尺度融合的优势
浅层特征 (192ch):
✓ 分辨率高 (H/8)
✓ 细节丰富
✓ 空间位置准确
✗ 语义信息弱
中层特征 (384ch):
✓ 平衡语义和细节
✓ Stage 3最深(6层)
✓ 表达能力强
深层特征 (768ch):
✓ 语义信息强
✓ 全局上下文
✓ 抽象表示
✗ 分辨率低 (H/32)
融合结果 (256ch):
✅ 结合所有优势
✅ 细节+语义+全局
✅ 统一的特征表示
👁️ 3. DepthLSSTransform - 视角变换
核心思想: Lift-Splat-Shoot
Lift (提升到3D)
输入: 2D图像特征 (256ch, H/8×W/8)
+ 深度估计
↓
操作: 为每个像素生成深度分布
概率化的3D frustum
↓
输出: 3D视锥特征 (256ch, H/8×W/8×D)
D = 深度bins数量
Splat (投影到BEV)
输入: 3D视锥特征
+ 相机内外参
↓
操作: 将3D点投影到BEV平面
cumsum操作聚合深度维度
↓
输出: BEV特征 (80ch, 540×540)
XY平面的俯视图
Shoot (6个视角融合)
输入: 6个相机的BEV特征
↓
操作: 在BEV空间直接相加/concatenate
↓
输出: 融合的BEV特征 (80ch, 540×540)
配置参数
in_channels: 256 # FPN输出
out_channels: 80 # BEV特征通道
feat_dim: (未指定) # 中间特征维度
downsample: 2 # 深度下采样
xbound: [-54, 54, 0.2] # X轴范围和分辨率
ybound: [-54, 54, 0.2] # Y轴范围和分辨率
zbound: [-10, 10, 20.0] # Z轴范围和bins
为什么需要多尺度?
LSS在进行2D→3D提升时:
- 浅层特征: 提供精确的像素对应关系
- 中层特征: 平衡空间精度和语义理解
- 深层特征: 提供场景理解和上下文
多尺度融合让深度估计更准确,3D投影更可靠!
🔀 4. ConvFuser - 多模态融合
架构
type: ConvFuser
in_channels: [80, 256] # [Camera, LiDAR]
out_channels: 256 # 最终BEV特征
融合流程
Camera BEV (80ch, 540×540)
↓ Conv 80→256
+
LiDAR BEV (256ch, 540×540)
↓ Conv 256→256
=
融合BEV (256ch, 540×540)
↓
输出到检测头和分割头
📊 5. 多尺度设计的完整视图
尺度金字塔
Backbone输出:
┌──────────────────────────────────────────┐
│ Stage 2: 192ch @ H/8 × W/8 (细节) │
│ Stage 3: 384ch @ H/16 × W/16 (平衡) │
│ Stage 4: 768ch @ H/32 × W/32 (语义) │
└──────────────────────────────────────────┘
↓ FPN融合
┌──────────────────────────────────────────┐
│ 融合特征: 256ch @ H/8 × W/8 │
└──────────────────────────────────────────┘
↓ LSS视角变换
┌──────────────────────────────────────────┐
│ BEV特征: 80ch @ 540×540 │
└──────────────────────────────────────────┘
↓ 多模态融合
┌──────────────────────────────────────────┐
│ 最终BEV: 256ch @ 540×540 │
└──────────────────────────────────────────┘
信息流
细节信息流:
Stage 2 (H/8) → FPN → LSS → BEV
提供: 精确的空间位置,边缘,纹理
语义信息流:
Stage 4 (H/32) → FPN → LSS → BEV
提供: 物体类别,场景理解,全局上下文
平衡信息流:
Stage 3 (H/16) → FPN → LSS → BEV
提供: 中层语义特征,是主要贡献者
🎯 6. 多尺度的优势
对不同尺寸目标的适应性
大目标 (如Drivable Area)
主要依赖: Stage 4深层特征
原因: 需要全局上下文理解
整体的区域划分
语义分割能力
中等目标 (如Walkway, Ped Crossing)
主要依赖: Stage 3中层特征
原因: 平衡细节和语义
既需要精确边界
也需要语义理解
小目标 (如Stop Line, Divider) ⭐
主要依赖: Stage 2浅层特征
原因: 需要精确的空间定位
保留细节信息
高分辨率特征
这正是Phase 4A重点优化的目标!
vs 单一尺度的对比
| 特性 | 单一尺度 | 多尺度FPN |
|---|---|---|
| 小目标检测 | 差 (分辨率低) | ✅ 优秀 (保留浅层) |
| 大目标理解 | 一般 | ✅ 优秀 (深层语义) |
| 边界精度 | 中等 | ✅ 高 (细节保留) |
| 计算开销 | 低 | 中等 |
| 参数量 | 低 | 中等 |
| 泛化能力 | 一般 | ✅ 强 |
🔬 7. 实际效果分析
多尺度对Phase 4A的贡献
Stop Line检测 (最小目标)
挑战: 通常只有几个像素宽
解决方案:
1. Stage 2浅层特征 (H/8) 保留细节
2. FPN横向连接传递精确位置
3. 高分辨率BEV (600×600) 提供足够采样
预期提升: 26.57% → 35%+ (基于多尺度)
Divider检测 (线性特征)
挑战: 长而细的线性结构
解决方案:
1. 浅层特征捕获线条边缘
2. 深层特征理解车道语义
3. 中层特征连接断裂的线段
预期提升: 19.03% → 28%+ (基于多尺度)
Drivable Area (大目标)
优势: 本身已经表现良好
多尺度贡献:
1. 深层特征提供场景理解
2. 浅层特征精确边界
3. 整体准确度进一步提升
📐 8. 分辨率变化路径
原始图像 (1600×900)
↓
Swin Patch Embedding (↓4×)
↓
Stage 1: 400×225 (96ch)
↓
Stage 2: 200×112 (192ch) ← 输出1
↓
Stage 3: 100×56 (384ch) ← 输出2
↓
Stage 4: 50×28 (768ch) ← 输出3
↓
FPN融合: 200×112 (256ch) ← 使用最大分辨率
↓
LSS Lift: 200×112×D (256ch)
↓
LSS Splat: 540×540 (80ch) ← BEV空间
↓
Fuser: 540×540 (256ch)
↓
Grid Transform: 600×600 (256ch)
↓
最终输出: 600×600 (6 classes)
💡 9. 设计洞察
为什么选择[1, 2, 3]作为输出索引?
跳过Stage 0 (Patch Embedding输出):
原因: 过于低层,没有语义信息
直接像素级特征
选择Stage 2 (索引1):
原因: 最浅的有意义的语义层
分辨率足够高 (H/8)
细节丰富
选择Stage 3 (索引2):
原因: 最深的Stage (6层)
特征表达能力最强
是主干特征
选择Stage 4 (索引3):
原因: 最深层语义
全局上下文
场景理解
FPN为什么有效?
-
Top-Down路径
- 高层语义逐步传递到低层
- 保持语义一致性
-
横向连接
- 低层特征补充空间细节
- 避免上采样导致的信息丢失
-
多尺度融合
- 每个尺度都有完整的语义+细节
- 适应不同大小的目标
📊 10. 参数和计算量
Swin Transformer Backbone
总参数: ~88M
主要来源:
- Patch Embedding
- 4个Stage的Transformer blocks
- LayerNorm层
GeneralizedLSSFPN
参数量: ~5M
主要来源:
- 横向连接卷积 (降维到256ch)
- 上采样层
- 输出平滑卷积
计算复杂度
Backbone: O(N × H × W)
N = 总的Transformer层数 = 2+2+6+2 = 12
FPN: O(3 × H × W)
3个尺度的特征处理
LSS: O(H × W × D)
D = 深度bins数量
🎯 总结
多尺度支持的完整链路
✅ Swin Transformer: 3个尺度输出 (H/8, H/16, H/32)
✅ GeneralizedLSSFPN: 融合3个尺度
✅ DepthLSSTransform: 保留多尺度信息到BEV
✅ ConvFuser: 多模态融合
✅ 分割头ASPP: 再次进行多尺度处理
对Phase 4A Stage 1的意义
-
小目标优化的基础
- Stop Line和Divider受益于浅层高分辨率特征
- FPN确保细节不丢失
-
分辨率提升的支撑
- 600×600分辨率需要足够的特征表达
- 多尺度提供丰富的特征金字塔
-
性能提升的保证
- 不同尺寸目标都有对应的特征尺度
- 预期mIoU提升17%的技术基础
结论: BEVFusion采用完整的多尺度架构,从Backbone的3层输出,到FPN融合,再到BEV投影,整个流程都保持了多尺度信息,这是小目标检测性能提升的关键技术保障! ✅