bev-project/CALL_FLOW_DIAGRAM.txt

378 lines
28 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

================================================================================
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混合精度训练
================================================================================