UniAD 端到端智驾学习:从 BEV 到 Planning

2024 年 4 月 25 日 星期四(已编辑)
/ , , , ,
6
摘要
UniAD 的环境搭建、数据集拆分、训练成本和指标理解。核心贡献:自定义 nuScenes 子集拆分工具,利用 description 字段区分 trainval/test,保持 JSON 表间 token 引用对齐。

UniAD 端到端智驾学习:从 BEV 到 Planning

编写时间:2024-04

代码仓库:Plumess/UniAD-mini

UniAD 是端到端自动驾驶方向里很适合学习的一套工程:它把感知、跟踪、地图、运动预测、占用预测和规划串在一个框架里。重点围绕环境、数据、训练成本、指标和推理流程。

整体流程

推理输出里通常包含 tracking、segmentation/map、motion、occupancy、planning 五类结果。真正有意思的是,它不是每个任务独立输出,而是前面任务的结果会成为后面任务的条件。

训练成本记录

环境GPU数据集阶段Queue Length显存时长
参考配置A100 x8full 850 scenesstage1550GB约 2 天
参考配置A100 x8full 850 scenesstage2317GB约 4 天
个人4090 x11/10 数据集stage1118GB约 1 天 18 小时
云端A100 x4ministage1550GB约 1 小时
云端A100 x4ministage2317GB约 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 相互引用——scenesamplesample_dataego_pose / calibrated_sensorsensor,外加 sample_annotationinstancecategory。拆分时不能只改一个文件,需要把整条引用链对齐。

拆分逻辑的核心是利用 scene.json 里的 description 字段:full v1.0 中,测试集 scene 的 description 是固定占位文本 "## No descriptions available for the test set. ##",而 trainval 的 scene 有真实描述。因此不需要按比例随机切,直接按 description 是否有占位文本即可区分 trainval 和 test。

具体处理规则:

文件trainvaltest
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 时,关联的 samplesample_dataego_pose 等也要级联删除,否则会因 token 引用断裂导致训练时报错。

指标理解

任务指标直觉
TrackingAMOTA / AMOTP / IDS / Recall跟踪准不准、ID 是否稳定
Motionmin_ADE / min_FDE / MR / EPA未来轨迹偏差和漏预测
OccupancyIoU / VPQ占据空间预测质量
PlanningL2 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 推理可视化

UniAD 推理可视化

右侧为合成 BEV 鸟瞰视角,左侧为相机视角。输出包含跟踪 ID、轨迹预测、占用栅格和规划路径,可以看到模型同时对多个目标做检测、跟踪和运动预测。

学习价值

UniAD 最适合作为"端到端智驾系统如何组织任务"的学习材料:BEV 作为共享表征,tracking/map/motion/occ/planning 串联,指标也跨任务。它不只是模型结构,而是一套多任务工程组织方式。

使用社交账号登录

  • Loading...
  • Loading...
  • Loading...
  • Loading...
  • Loading...