549 lines
14 KiB
Markdown
549 lines
14 KiB
Markdown
# 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
|
||
|
||
### 架构配置
|
||
```python
|
||
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的优势
|
||
|
||
1. **层次化设计**
|
||
- 类似CNN的金字塔结构
|
||
- 逐层降低分辨率,增加通道
|
||
- 保留多尺度信息
|
||
|
||
2. **Shifted Window Attention**
|
||
- 局部窗口内自注意力
|
||
- 跨窗口连接(Shifted)
|
||
- 计算效率高
|
||
|
||
3. **强大的特征提取**
|
||
- Transformer的全局建模能力
|
||
- CNN的层次化归纳偏置
|
||
- 在nuImages数据集预训练
|
||
|
||
---
|
||
|
||
## 🔗 2. GeneralizedLSSFPN - 多尺度特征融合
|
||
|
||
### 架构
|
||
```python
|
||
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)
|
||
```
|
||
|
||
#### 关键操作
|
||
|
||
1. **横向连接 (Lateral Connections)**
|
||
```python
|
||
lateral_conv = Conv2d(in_ch, 256, 1×1)
|
||
# 作用: 降维到统一通道数
|
||
```
|
||
|
||
2. **上采样**
|
||
```python
|
||
upsample = interpolate(x, scale_factor=2, mode='nearest')
|
||
# 作用: 将高层特征上采样到低层分辨率
|
||
```
|
||
|
||
3. **特征融合**
|
||
```python
|
||
fused = lateral(low_level) + upsample(high_level)
|
||
# 作用: 结合语义和细节
|
||
```
|
||
|
||
4. **输出平滑**
|
||
```python
|
||
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)
|
||
```
|
||
|
||
### 配置参数
|
||
```python
|
||
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 - 多模态融合
|
||
|
||
### 架构
|
||
```python
|
||
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为什么有效?
|
||
|
||
1. **Top-Down路径**
|
||
- 高层语义逐步传递到低层
|
||
- 保持语义一致性
|
||
|
||
2. **横向连接**
|
||
- 低层特征补充空间细节
|
||
- 避免上采样导致的信息丢失
|
||
|
||
3. **多尺度融合**
|
||
- 每个尺度都有完整的语义+细节
|
||
- 适应不同大小的目标
|
||
|
||
---
|
||
|
||
## 📊 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的意义
|
||
|
||
1. **小目标优化的基础**
|
||
- Stop Line和Divider受益于浅层高分辨率特征
|
||
- FPN确保细节不丢失
|
||
|
||
2. **分辨率提升的支撑**
|
||
- 600×600分辨率需要足够的特征表达
|
||
- 多尺度提供丰富的特征金字塔
|
||
|
||
3. **性能提升的保证**
|
||
- 不同尺寸目标都有对应的特征尺度
|
||
- 预期mIoU提升17%的技术基础
|
||
|
||
---
|
||
|
||
**结论**: BEVFusion采用完整的多尺度架构,从Backbone的3层输出,到FPN融合,再到BEV投影,整个流程都保持了多尺度信息,这是小目标检测性能提升的关键技术保障! ✅
|
||
|