bev-project/CALL_FLOW_DIAGRAM.txt

378 lines
28 KiB
Plaintext
Raw Permalink Normal View History

================================================================================
BEVFusion 项目调用关系流程图
================================================================================
┌─────────────────────────────────────────────────────────────────────────┐
│ 训练流程 (tools/train.py) │
└─────────────────────────────────────────────────────────────────────────┘
┌────────────────────┼────────────────────┐
│ │ │
▼ ▼ ▼
┌───────────────┐ ┌───────────────┐ ┌───────────────┐
│ 加载配置文件 │ │ 初始化分布式 │ │ 设置随机种子 │
│ (YAML) │ │ (torchpack) │ │ (seed) │
└───────────────┘ └───────────────┘ └───────────────┘
┌───────────────────────────────────────┐
│ build_dataset() → NuScenesDataset │
│ ├── LoadMultiViewImageFromFiles │
│ ├── LoadPointsFromFile/FromMultiSweeps│
│ ├── LoadAnnotations3D │
│ ├── ObjectSample (数据增强) │
│ ├── RandomFlip3D │
│ ├── GlobalRotScaleTrans │
│ └── Normalize, Pad, FormatBundle │
└───────────────────────────────────────┘
┌───────────────────────────────────────┐
│ build_model() → BEVFusion Model │
│ (见下方模型结构详图) │
└───────────────────────────────────────┘
┌───────────────────────────────────────┐
│ train_model() │
│ ├── EpochBasedRunner │
│ ├── Optimizer (AdamW) │
│ ├── LrScheduler (OneCycle) │
│ ├── Checkpoint Hook │
│ ├── Evaluation Hook │
│ └── Logger Hook │
└───────────────────────────────────────┘
================================================================================
┌─────────────────────────────────────────────────────────────────────────┐
│ BEVFusion 模型结构详图 │
└─────────────────────────────────────────────────────────────────────────┘
输入数据:
┌──────────────────────┐ ┌──────────────────────┐ ┌──────────────────┐
│ 多视角图像 (6个) │ │ LiDAR点云 │ │ Radar点云(可选) │
│ (B,6,3,H,W) │ │ List[Points(N,C)] │ │ List[Points] │
└──────────────────────┘ └──────────────────────┘ └──────────────────┘
│ │ │
│ │ │
▼ ▼ ▼
┌─────────────────────────────────────────────────────────────────────────┐
│ ENCODERS (编码器) │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────┐ ┌──────────────────┐ ┌─────────────────┐│
│ │ Camera Encoder │ │ LiDAR Encoder │ │ Radar Encoder ││
│ ├─────────────────────────┤ ├──────────────────┤ ├─────────────────┤│
│ │ │ │ │ │ ││
│ │ ┌─────────────────┐ │ │ ┌──────────────┐ │ │ ┌─────────────┐││
│ │ │ Backbone │ │ │ │ Voxelize │ │ │ │ Voxelize │││
│ │ │ - ResNet50 │ │ │ │ - Hard/ │ │ │ │ - Dynamic │││
│ │ │ - ResNet101 │ │ │ │ Dynamic │ │ │ │ Scatter │││
│ │ │ - SwinTransformer│ │ │ └──────┬───────┘ │ │ └──────┬──────┘││
│ │ │ - VoVNet │ │ │ │ │ │ │ ││
│ │ └────────┬──────────┘ │ │ ▼ │ │ ▼ ││
│ │ │ │ │ ┌──────────────┐ │ │ ┌─────────────┐││
│ │ ▼ │ │ │ Backbone │ │ │ │ Backbone │││
│ │ ┌─────────────────┐ │ │ │ Sparse │ │ │ │ Radar │││
│ │ │ Neck (FPN) │ │ │ │ Encoder │ │ │ │ Encoder │││
│ │ │ - Generalized │ │ │ │ - VoxelRes │ │ │ │ │││
│ │ │ LSSFPN │ │ │ │ BackBone │ │ │ │ │││
│ │ │ - FPN │ │ │ │ 8x │ │ │ │ │││
│ │ └────────┬──────────┘ │ │ └──────┬───────┘ │ │ └──────┬──────┘││
│ │ │ │ │ │ │ │ │ ││
│ │ ▼ │ │ │ │ │ │ ││
│ │ ┌─────────────────┐ │ │ │ │ │ │ ││
│ │ │ VTransform │ │ │ │ │ │ │ ││
│ │ │ - LSS │ │ │ │ │ │ │ ││
│ │ │ - DepthLSS │ │ │ │ │ │ │ ││
│ │ │ - BEVDepth │ │ │ │ │ │ │ ││
│ │ │ - AwareBEVDepth │ │ │ │ │ │ │ ││
│ │ │ │ │ │ │ │ │ │ ││
│ │ │ 步骤: │ │ │ │ │ │ │ ││
│ │ │ 1.预测深度分布 │ │ │ │ │ │ │ ││
│ │ │ 2.Frustum构建 │ │ │ │ │ │ │ ││
│ │ │ 3.BEV Pooling★ │ │ │ │ │ │ │ ││
│ │ └────────┬──────────┘ │ │ │ │ │ │ ││
│ │ │ │ │ │ │ │ │ ││
│ └──────────┼────────────────┘ └────────┼─────────┘ └────────┼───────┘│
│ │ │ │ │
│ ▼ ▼ ▼ │
│ ┌────────────────┐ ┌────────────────┐ ┌───────────────┐│
│ │ Camera BEV │ │ LiDAR BEV │ │ Radar BEV ││
│ │ (B,C1,H,W) │ │ (B,C2,H,W) │ │ (B,C3,H,W) ││
│ └────────────────┘ └────────────────┘ └───────────────┘│
└─────────────────────────────────────────────────────────────────────────┘
│ │ │
└─────────────────────────────┼────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────┐
│ FUSER (融合器) │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ ConvFuser AddFuser │
│ ┌─────────────────┐ ┌──────────────────┐ │
│ │ Conv → Concat │ │ Element-wise Add │ │
│ │ ↓ │ └──────────────────┘ │
│ │ Conv → ReLU │ │
│ │ ↓ │ │
│ │ Output │ │
│ └─────────────────┘ │
│ │
│ 输出: Unified BEV Features (B, C_out, H, W) │
└─────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────┐
│ DECODER (解码器) │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────────────────────────────────┐ │
│ │ Backbone (SECOND / ResNet) │ │
│ │ ├── Conv Block 1 (stride=1) │ │
│ │ ├── Conv Block 2 (stride=2) │ │
│ │ ├── Conv Block 3 (stride=2) │ │
│ │ └── Conv Block 4 (stride=2) │ │
│ └────────────────┬─────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌──────────────────────────────────────────┐ │
│ │ Neck (SECONDFPN) │ │
│ │ ├── Deconv + Concat (上采样) │ │
│ │ ├── Multi-scale Feature Fusion │ │
│ │ └── Output: [P3, P4, P5] │ │
│ └────────────────┬─────────────────────────┘ │
│ │ │
└───────────────────┼─────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────┐
│ HEADS (任务头) │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌────────────────────────────┐ ┌─────────────────────────────┐ │
│ │ Object Detection Head │ │ Map Segmentation Head │ │
│ │ (TransFusion/CenterPoint) │ │ (VanillaSegHead) │ │
│ ├────────────────────────────┤ ├─────────────────────────────┤ │
│ │ │ │ │ │
│ │ ┌────────────────────┐ │ │ ┌─────────────────────┐ │ │
│ │ │ Heatmap分支 │ │ │ │ Conv Layers │ │ │
│ │ │ - Conv │ │ │ │ - Conv 3x3 │ │ │
│ │ │ - Sigmoid │ │ │ │ - BatchNorm │ │ │
│ │ │ → 类别热图 │ │ │ │ - ReLU │ │ │
│ │ └────────────────────┘ │ │ │ - Upsample │ │ │
│ │ │ │ │ - Conv 1x1 │ │ │
│ │ ┌────────────────────┐ │ │ │ → 分割logits │ │ │
│ │ │ Bbox回归分支 │ │ │ └─────────────────────┘ │ │
│ │ │ - Center offset │ │ │ │ │
│ │ │ - Size (w,h,l) │ │ │ 训练: CrossEntropyLoss │ │
│ │ │ - Rotation (yaw) │ │ │ 推理: Argmax → Mask │ │
│ │ │ - Velocity (vx,vy)│ │ │ │ │
│ │ └────────────────────┘ │ │ 输出: (B, H, W) │ │
│ │ │ │ 语义分割结果 │ │
│ │ ┌────────────────────┐ │ └─────────────────────────────┘ │
│ │ │ Transformer │ │ │
│ │ │ Decoder (可选) │ │ │
│ │ │ - Query-based │ │ │
│ │ │ - Cross Attention │ │ │
│ │ └────────────────────┘ │ │
│ │ │ │
│ │ 训练模式: │ │
│ │ └→ loss计算 │ │
│ │ ├── FocalLoss │ │
│ │ ├── L1Loss │ │
│ │ └── IoULoss │ │
│ │ │ │
│ │ 推理模式: │ │
│ │ └→ get_bboxes() │ │
│ │ ├── 提取峰值 │ │
│ │ ├── 解码参数 │ │
│ │ ├── NMS │ │
│ │ └→ Boxes3D │ │
│ │ │ │
│ │ 输出: (boxes, scores, │ │
│ │ labels, velocity) │ │
│ └────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────┘
│ │
▼ ▼
┌──────────────┐ ┌──────────────┐
│ 3D Detection │ │ BEV Segment │
│ Results │ │ Results │
└──────────────┘ └──────────────┘
================================================================================
┌─────────────────────────────────────────────────────────────────────────┐
│ 关键模块调用关系 │
└─────────────────────────────────────────────────────────────────────────┘
1. 模型构建 (builder.py):
───────────────────────────────────────────────────────
build_model()
├→ build_backbone() → BACKBONES.build()
├→ build_neck() → NECKS.build()
├→ build_vtransform()→ VTRANSFORMS.build()
├→ build_fuser() → FUSERS.build()
└→ build_head() → HEADS.build()
2. 数据加载 (datasets/nuscenes_dataset.py):
───────────────────────────────────────────────────────
NuScenesDataset
├→ __getitem__()
│ └→ pipeline(data_info)
│ ├→ LoadMultiViewImageFromFiles
│ ├→ LoadPointsFromFile
│ ├→ LoadAnnotations3D
│ ├→ ObjectSample
│ ├→ GlobalRotScaleTrans
│ ├→ RandomFlip3D
│ └→ FormatBundle3D
└→ evaluate()
├→ format_results()
└→ NuScenesEval()
3. 训练循环 (apis/train.py):
───────────────────────────────────────────────────────
train_model()
├→ build_optimizer()
├→ build_runner() → EpochBasedRunner
│ │
│ └→ run()
│ └→ for epoch in epochs:
│ ├→ train_epoch()
│ │ └→ for batch in dataloader:
│ │ ├→ model.forward() → losses
│ │ ├→ optimizer.zero_grad()
│ │ ├→ losses.backward()
│ │ └→ optimizer.step()
│ │
│ └→ validate_epoch()
│ └→ model.eval()
│ └→ single_gpu_test()
└→ Hooks
├→ CheckpointHook (保存模型)
├→ EvalHook (验证)
├→ LoggerHook (日志)
└→ LrSchedulerHook (学习率)
4. 推理流程 (apis/test.py):
───────────────────────────────────────────────────────
single_gpu_test() / multi_gpu_test()
└→ for batch in dataloader:
├→ model.forward() → predictions
├→ post_process()
└→ collect_results()
→ evaluate()
└→ compute_metrics()
5. 配置加载 (utils/config.py):
───────────────────────────────────────────────────────
configs.load(yaml_file, recursive=True)
└→ 递归加载继承的配置文件
└→ merge configurations
└→ Config(dict)
6. CUDA算子调用:
───────────────────────────────────────────────────────
ops/bev_pool/bev_pool.py
└→ bev_pool_v2() → CUDA kernel
ops/spconv/conv.py
└→ SparseConv3d() → CUDA sparse conv
ops/voxel/voxelize.py
└→ Voxelization() → CUDA voxelize
================================================================================
┌─────────────────────────────────────────────────────────────────────────┐
│ 文件组织结构映射 │
└─────────────────────────────────────────────────────────────────────────┘
配置层:
configs/*.yaml → 定义模型结构和训练参数
入口层:
tools/train.py → 训练入口
tools/test.py → 测试入口
数据层:
mmdet3d/datasets/
├── nuscenes_dataset.py → 数据集定义
├── pipelines/ → 数据处理管道
│ ├── loading.py → 数据加载
│ ├── transforms_3d.py → 3D变换
│ └── formating.py → 格式化
└── builder.py → 数据集构建器
模型层:
mmdet3d/models/
├── fusion_models/
│ └── bevfusion.py → 主模型
├── backbones/ → 特征提取
│ ├── resnet.py
│ ├── sparse_encoder.py
│ └── ...
├── necks/ → 特征金字塔
│ ├── generalized_lss.py
│ └── second.py
├── vtransforms/ → 视图转换
│ ├── lss.py
│ └── depth_lss.py
├── fusers/ → 模态融合
│ ├── conv.py
│ └── add.py
├── heads/ → 任务头
│ ├── bbox/transfusion.py
│ └── segm/vanilla.py
└── builder.py → 模型构建器
算子层:
mmdet3d/ops/
├── bev_pool/ → BEV pooling (CUDA)
├── spconv/ → 稀疏卷积 (CUDA)
├── voxel/ → 体素化 (CUDA)
└── ...
API层:
mmdet3d/apis/
└── train.py → 训练API
工具层:
mmdet3d/utils/
├── config.py → 配置处理
└── logger.py → 日志
核心层:
mmdet3d/core/
├── bbox/ → 3D框处理
├── points/ → 点云处理
└── voxel/ → 体素处理
================================================================================
★ 标记说明:
- BEV Pooling: 核心优化算子速度提升40x
- 所有模块均支持分布式训练
- 配置系统支持继承和覆盖
- 支持FP16混合精度训练
================================================================================