UniAD 端到端智驾学习:从 BEV 到 Planning
编写时间:2024-04
代码仓库:Plumess/UniAD-mini
UniAD 是端到端自动驾驶方向里很适合学习的一套工程:它把感知、跟踪、地图、运动预测、占用预测和规划串在一个框架里。重点围绕环境、数据、训练成本、指标和推理流程。
整体流程
推理输出里通常包含 tracking、segmentation/map、motion、occupancy、planning 五类结果。真正有意思的是,它不是每个任务独立输出,而是前面任务的结果会成为后面任务的条件。
训练成本记录
| 环境 | GPU | 数据集 | 阶段 | Queue Length | 显存 | 时长 |
|---|---|---|---|---|---|---|
| 参考配置 | A100 x8 | full 850 scenes | stage1 | 5 | 50GB | 约 2 天 |
| 参考配置 | A100 x8 | full 850 scenes | stage2 | 3 | 17GB | 约 4 天 |
| 个人 | 4090 x1 | 1/10 数据集 | stage1 | 1 | 18GB | 约 1 天 18 小时 |
| 云端 | A100 x4 | mini | stage1 | 5 | 50GB | 约 1 小时 |
| 云端 | A100 x4 | mini | stage2 | 3 | 17GB | 约 2 小时 20 分 |
几条经验:
- 数据集大小主要影响训练时间。
queue length显著影响显存和效果,一个 batch 的显存基本取决于它。调workers per gpu之类参数改善有限。- stage1(track + map)比 stage2(e2e)显存高很多,因为 BEV encoder 在 stage2 会被冻结。
- 4090 性能不排除受官方环境 CUDA 11.1 影响,新架构未必高效利用。
自定义拆分 nuScenes 数据集
UniAD-mini 仓库的一个贡献是能按需从 full nuScenes 拆出 mini 子集。nuScenes 的数据以 JSON 表格形式组织,各表之间通过 token 相互引用——scene → sample → sample_data → ego_pose / calibrated_sensor → sensor,外加 sample_annotation → instance → category。拆分时不能只改一个文件,需要把整条引用链对齐。
拆分逻辑的核心是利用 scene.json 里的 description 字段:full v1.0 中,测试集 scene 的 description 是固定占位文本 "## No descriptions available for the test set. ##",而 trainval 的 scene 有真实描述。因此不需要按比例随机切,直接按 description 是否有占位文本即可区分 trainval 和 test。
具体处理规则:
| 文件 | trainval | test |
|---|---|---|
attribute.json, category.json, map.json, sensor.json, visibility.json | 直接复制 | 直接复制 |
instance.json, sample_annotation.json | 包含全部数据 | 空 |
scene.json | 有真实 description 的 scene | 占位文本 description 的 scene |
sample.json, sample_data.json 等 | 与 trainval scene 关联的记录 | 与 test scene 关联的记录 |
关键点在"相互对齐":calibrated_sensor.json 里的记录如果被 trainval 的 sample_data 引用,就必须留在 trainval 里;删 test scene 时,关联的 sample、sample_data、ego_pose 等也要级联删除,否则会因 token 引用断裂导致训练时报错。
指标理解
| 任务 | 指标 | 直觉 |
|---|---|---|
| Tracking | AMOTA / AMOTP / IDS / Recall | 跟踪准不准、ID 是否稳定 |
| Motion | min_ADE / min_FDE / MR / EPA | 未来轨迹偏差和漏预测 |
| Occupancy | IoU / VPQ | 占据空间预测质量 |
| Planning | L2 Distance | 规划轨迹与真实轨迹的距离 |
mini 数据集训练和 full 数据模型差距很明显,这很正常。端到端智驾不是"能跑起来就会学会",数据规模、时序上下文和训练阶段都会影响结果。
训练与评估命令
# stage1: tracking + map
./tools/uniad_dist_train.sh ./projects/configs/stage1_track_map/base_track_map.py 4
# stage2: e2e
./tools/uniad_dist_train.sh ./projects/configs/stage2_e2e/base_e2e.py 4
# eval
./tools/uniad_dist_eval.sh ./projects/configs/stage2_e2e/base_e2e.py ./ckpts/uniad_base_e2e.pth 4如果使用自定义 info,记得检查 config 里对应 stage 的 base 配置,避免 img_root 拼路径错误。
推理可视化

UniAD 推理可视化
右侧为合成 BEV 鸟瞰视角,左侧为相机视角。输出包含跟踪 ID、轨迹预测、占用栅格和规划路径,可以看到模型同时对多个目标做检测、跟踪和运动预测。
学习价值
UniAD 最适合作为"端到端智驾系统如何组织任务"的学习材料:BEV 作为共享表征,tracking/map/motion/occ/planning 串联,指标也跨任务。它不只是模型结构,而是一套多任务工程组织方式。