bev-project/project/docs/Phase4A_模型结构分析.md

9.5 KiB
Raw Blame History

Phase 4A Stage 1 模型结构分析

生成时间: 2025-10-31
配置文件: multitask_BEV2X_phase4a_stage1.yaml


📐 整体架构

相机图像 (6视图)
      ↓
Swin Transformer Backbone
      ↓
BEV Encoder (LSS)
      ↓
BEV特征图 (256通道, 540×540)
      ↓
  ┌─────┴─────┐
  ↓           ↓
3D检测头    BEV分割头
(TransFusion) (Enhanced)
  ↓           ↓
BBox输出    分割掩码

🎯 1. BEV Encoder

视角变换 (View Transformer)

类型: Lift-Splat-Shoot (LSS)
输入: 6个相机图像
空间范围:
  - X: [-50m, 50m], 分辨率 0.2m → 500像素
  - Y: [-50m, 50m], 分辨率 0.2m → 500像素  
  - Z: [-10m, 10m], 20个高度bins
  
BEV特征图:
  - 尺寸: 540×540 (稍大于500包含padding)
  - 通道数: 256
  - 覆盖范围: 100m × 100m
  - 分辨率: ~0.185m/pixel

Backbone

类型: Swin Transformer v2
预训练: nuImages数据集
特点: 
  - 层次化视觉Transformer
  - Shifted Window Attention
  - 强大的特征提取能力

🎨 2. BEV分割头 (EnhancedBEVSegmentationHead)

核心架构

输入: BEV特征 (256通道, 540×540)
     ↓
【ASPP模块】- 多尺度特征提取
     ├── 1×1卷积分支
     ├── 3×3膨胀卷积 (rate=6)
     ├── 3×3膨胀卷积 (rate=12)
     ├── 3×3膨胀卷积 (rate=18)
     └── 全局平均池化分支
     → 融合 → 256通道
     ↓
【空间注意力】- 特征增强
     ↓
【深度Decoder】- 4层渐进式上采样
     ├── Layer 1: 256→256通道
     ├── Layer 2: 256→256通道
     ├── Layer 3: 256→128通道
     └── Layer 4: 128→128通道
     ↓
【Grid Transform】- 分辨率调整
  输入: 540×540
  输出: 600×600 (匹配GT标签)
     ↓
【分类器】- 每类独立
  6个并行分类头:
    ├── Drivable Area
    ├── Ped Crossing
    ├── Walkway
    ├── Stop Line
    ├── Carpark Area
    └── Divider
     ↓
输出: 6×600×600 分割掩码

详细配置

ASPP (Atrous Spatial Pyramid Pooling)

输入通道: 256
输出通道: 256
膨胀率: [6, 12, 18]
分支数: 5
  - 1×1卷积 (捕获点特征)
  - 3×3 dilation=6 (小感受野)
  - 3×3 dilation=12 (中感受野)
  - 3×3 dilation=18 (大感受野)
  - 全局池化 (全局上下文)

归一化: GroupNorm (32)

空间注意力模块

功能: 强调重要空间位置
实现: 卷积  Sigmoid
作用: element-wise乘法增强特征

Decoder结构

Layer 1 (256  256):
  Conv2d(256, 256, 3×3, padding=1)
  GroupNorm(32, 256)
  ReLU
  Dropout(0.1)

Layer 2 (256  256):
  Conv2d(256, 256, 3×3, padding=1)
  GroupNorm(32, 256)
  ReLU
  Dropout(0.1)

Layer 3 (256  128):
  Conv2d(256, 128, 3×3, padding=1)
  GroupNorm(32, 128)
  ReLU
  Dropout(0.1)

Layer 4 (128  128):
  Conv2d(128, 128, 3×3, padding=1)
  GroupNorm(32, 128)
  ReLU
  Dropout(0.1)

特点:
  - 使用GroupNorm而非BatchNorm (解决分布式训练死锁)
  - 每层都有Dropout防止过拟合
  - 逐层降维减少计算量

分类器 (Per-Class)

每个类别独立的分类头:
  Conv2d(128, 64, 3×3, padding=1)  # 降维
  GroupNorm(32, 64)
  ReLU
  Conv2d(64, 1, 1×1)              # 输出1通道

优势:
  - 每类独立学习互不干扰
  - 可以针对不同类别调整
  - 便于类别权重平衡

Deep Supervision

辅助分类器:
  位置: ASPP输出后
  结构: Conv2d(256, 6, 1×1)
  作用: 在decoder早期监督加速收敛
  
训练时:
  - 主Loss: 最终输出
  - 辅助Loss: ASPP输出
  - 总Loss = 主Loss + α * 辅助Loss

📏 3. 分辨率配置

BEV特征图

源分辨率: 540×540
空间范围: [-50m, 50m] × [-50m, 50m]
分辨率: 0.2m/pixel (xbound/ybound)
实际尺寸: ~100m × 100m

GT标签

目标分辨率: 600×600
空间范围: [-50m, 50m] × [-50m, 50m]  
分辨率: 0.167m/pixel
实际尺寸: 100m × 100m

配置: LoadBEVSegmentation
  xbound: [-50.0, 50.0, 0.167]
  ybound: [-50.0, 50.0, 0.167]

Grid Transform

输入: 540×540 (BEV特征)
输出: 600×600 (匹配GT)
方法: 双线性插值
对齐: align_corners=False

🎓 4. 损失函数

主Loss (Per-Class)

Focal Loss

公式: FL = -α(1-p_t)^γ * log(p_t)
参数:
  α (alpha): 0.25 (类别平衡)
  γ (gamma): 2.0 (难例挖掘)

作用:
  - 降低易分类样本权重
  - 关注难分类样本
  - 解决类别不平衡

Dice Loss

公式: Dice = 1 - 2*|XY| / (|X|+|Y|)
权重: 0.5 (与Focal Loss混合)

作用:
  - 直接优化IoU
  - 对类别不平衡鲁棒
  - 提升分割边界质量

类别权重

loss_weight:
  'drivable_area': 1.0   # 大类别,基础权重
  'ped_crossing':  3.0   # 小类别,增加权重
  'walkway':       1.5   # 中等类别
  'stop_line':     4.0   # 最小类别,最高权重 ⭐
  'carpark_area':  2.0   # 小类别
  'divider':       3.0   # 小类别(线性特征)⭐

总Loss计算

对于每个类别c:
  focal_loss_c = FocalLoss(pred_c, gt_c)
  dice_loss_c = DiceLoss(pred_c, gt_c)
  loss_c = (1-dice_weight) * focal_loss_c + dice_weight * dice_loss_c
  weighted_loss_c = loss_weight[c] * loss_c

总Loss = Σ weighted_loss_c

如果使用Deep Supervision:
  aux_loss = 同样计算方式,但使用辅助输出
  总Loss += aux_loss_weight * aux_loss

🔢 5. 参数量估算

BEV分割头参数

ASPP模块:
  - 5个分支卷积: ~1.2M 参数
  - 融合层: ~0.3M 参数
  小计: ~1.5M

Decoder (4层):
  - Layer 1 (256→256): ~0.6M
  - Layer 2 (256→256): ~0.6M
  - Layer 3 (256→128): ~0.3M
  - Layer 4 (128→128): ~0.15M
  小计: ~1.65M

分类器 (6个类别):
  - 每类: ~50K
  - 总计: ~0.3M

辅助分类器:
  - ~1.5K参数

总计: ~3.5M 参数 (仅BEV分割头)

完整模型

Swin Transformer Backbone: ~88M
BEV Encoder: ~15M
3D检测头 (TransFusion): ~5M
BEV分割头 (Enhanced): ~3.5M

总参数量: ~110M

💾 6. 显存使用分析

特征图显存 (单样本)

BEV特征 (540×540×256):      ~280 MB
ASPP输出 (540×540×256):     ~280 MB
Decoder中间 (各层):          ~350 MB
最终输出 (600×600×6):        ~9 MB
梯度 (反向传播):             ~1.2 GB

小计: ~2.1 GB/样本

4-GPU分布式 (Batch=1/GPU)

特征图: 2.1 GB × 4 = 8.4 GB
模型参数: ~440 MB (FP32)
优化器状态: ~880 MB (Adam, 2倍参数)
梯度缓存: ~440 MB

每GPU总显存: ~2.9 GB (训练数据)
            + 模型共享: ~1.8 GB
            ≈ 4.7 GB 基础

实际观测: ~29 GB/GPU
额外显存: ~24 GB (包括框架开销、临时缓存等)

⚙️ 7. 训练配置

优化器

类型: AdamW
学习率: 2e-4
权重衰减: 0.01
Beta: (0.9, 0.999)

学习率策略

策略: OneCycleLR
周期: 完整训练周期
最大学习率: 2e-4
最小学习率: 1e-6
预热: 500 iterations

训练参数

总Epochs: 10 (Stage 1)
Batch size: 1/GPU
GPUs: 4
有效Batch: 4
Workers: 0 (避免DataLoader问题)

Checkpoint保存: 每个epoch结束

🚀 8. Phase 4A vs Phase 3 对比

项目 Phase 3 (Epoch 23) Phase 4A Stage 1 提升
BEV分辨率 400×400 600×600 +50%
GT分辨率 400×400 600×600 +50%
空间分辨率 0.25m 0.167m +33%
Decoder层数 2层 4层 2倍
Decoder通道 [128, 128] [256, 256, 128, 128] 扩展
ASPP 有 (5分支)
注意力 保留
Deep Supervision
Dice Loss 有 (权重0.5)
GroupNorm 保留
参数量 ~2.5M ~3.5M +40%
显存使用 ~18GB ~29GB +61%
GPU数量 8 4 -50%

🎯 9. 设计亮点

多尺度特征提取 (ASPP)

  • 捕获不同尺度的上下文信息
  • 对于不同大小的目标如Stop Line vs Drivable Area都有效

深度Decoder

  • 4层逐步上采样保留细节
  • 每层都有归一化和正则化

Deep Supervision

  • 中间层也参与监督
  • 加速收敛,提升梯度流动

Mixed Loss (Focal + Dice)

  • Focal处理类别不平衡
  • Dice直接优化IoU指标
  • 互补优势

类别独立分类器

  • 每类独立学习
  • 避免类间干扰
  • 便于调优

GroupNorm

  • 解决小batch size下BatchNorm不稳定
  • 避免分布式训练死锁
  • 每组32个通道

📊 10. 性能目标

基线 (Phase 3 Epoch 23)

mIoU:      0.4130
Stop Line: 0.2657 (26.57%)
Divider:   0.1903 (19.03%)

Stage 1目标 (600×600)

mIoU:      0.48+ (+17%)
Stop Line: 0.35+ (+30%)  ⭐
Divider:   0.28+ (+47%)  ⭐

改进来源

  1. 分辨率提升 (0.167m vs 0.25m):

    • 细节更清晰
    • 小目标更容易检测
  2. 深度Decoder:

    • 更丰富的特征层次
    • 更好的语义理解
  3. ASPP多尺度:

    • 适应不同尺度目标
    • Stop Line和Divider受益最大
  4. Dice Loss:

    • 直接优化IoU
    • 改善边界精度

总结

Phase 4A Stage 1 采用了渐进式分辨率提升策略,通过:

  1. 适中的分辨率 (600×600): 平衡性能和显存
  2. 深度网络 (4层Decoder): 提升表达能力
  3. 多尺度特征 (ASPP): 捕获全局和局部
  4. 混合损失 (Focal+Dice): 优化多个目标
  5. Deep Supervision: 加速训练收敛

预期在Stop Line和Divider两个关键小类别上取得显著提升!