端到端自动驾驶
端到端自动驾驶旨在减少传统自动驾驶系统中感知、预测、规划和控制等模块之间的信息损失与误差累积,通过可学习模型把多模态感知输入映射为车辆未来轨迹或控制意图。与完全依赖人工规则和串行接口的模块化架构相比,端到端方法能够围绕最终驾驶目标进行联合优化,但也带来了训练稳定性、可解释性和闭环安全验证等新的工程挑战。
本实验以UniAD和Bench2Drive/Bench2DriveZoo为示例,围绕“多相机输入—BEV特征—感知跟踪—运动预测—占用预测—规划轨迹”的流程展开。学生需要理解端到端自动驾驶的任务接口,熟悉UniAD的模块协同方式,完成环境配置、预训练权重准备、开环验证或闭环测试,并结合可视化结果分析模型在复杂场景中的表现。
一、实验目的
- 理解端到端自动驾驶任务:掌握端到端架构与传统模块化架构的差异,理解其输入、输出、优势、局限性以及在自动驾驶系统中的定位。
- 掌握UniAD示例模型:了解UniAD中TrackFormer、MapFormer、MotionFormer、OccFormer与规划模块的功能分工,理解查询机制、BEV表征和“感知—预测—规划”联合优化思想。
- 掌握实验运行流程:能够完成Bench2DriveZoo项目环境配置、预训练权重与数据集准备,运行UniAD-Tiny或UniAD-Base的开环评估,并在具备条件时进行CARLA闭环测试。
- 形成结果分析能力:能够结合规划L2、碰撞率、Driving Score、路线完成率以及RGB/BEV可视化结果,分析端到端模型在复杂场景中的成功与失败原因。
二、实验涉及的知识点
实验项目涉及到的主要理论知识点包括:
- 端到端自动驾驶与模块化自动驾驶架构
- BEV表征、多相机感知融合与Transformer查询机制
- UniAD中检测跟踪、在线地图、运动预测、占用预测与规划模块的协同关系
- 两阶段训练策略、任务损失加权与多任务学习稳定性
- Bench2Drive/Bench2DriveZoo数据集、开环评估与CARLA闭环测试方法
三、实验仪器设备及功能
- 硬件设备:Ubuntu 18.04及以上系统;NVIDIA独立显卡,推荐显存不少于16GB;用于数据集与模型权重存储的充足磁盘空间;
- 开发环境:Python 3.8;Anaconda/Miniconda/CondaForge;CUDA 11.8;PyTorch GPU版;ninja、packaging等编译辅助工具;Bench2DriveZoo、Bench2Drive与CARLA 0.9.15。
- 运行方式:推荐优先使用小规模数据包完成UniAD-Tiny开环验证;具备GPU与CARLA环境时,可在本地完成闭环测试。全量Bench2Drive数据集规模较大,训练实验可使用官方或课程提供的子集。
四、实验内容与步骤
本实验默认以Bench2DriveZoo中的UniAD-Tiny为实践对象。若硬件资源充足,可进一步运行UniAD-Base或进行短轮次训练;若资源有限,可使用预训练权重完成开环评估与可视化分析。
0. 项目结构认识:
下载Bench2DriveZoo后,重点阅读以下目录,明确配置、模型、数据和闭环测试代码的位置:
1. 创建运行环境:
第一步:创建虚拟环境
第二步:安装cuda工具链
第三步:安装Torch
第四步:设置环境变量
第五步:安装ninja和packaging辅助编译
第六步:clone项目并进行安装
注意:CUDA、GCC与PyTorch版本不一致时,常见报错集中在MMCV编译、CUDA extension加载和推理阶段。
2. 准备预训练权重:
在项目根目录创建ckpt文件夹,下载视觉编码器预训练权重和UniAD checkpoint。课程实验优先推荐使用UniAD-Tiny权重完成开环验证。
官方资源位于HuggingFace的rethinklab/Bench2DriveZoo与rethinklab/Bench2Drive数据页面。若直连速度较慢,可使用镜像代理下载。
下载链接:
3. 准备Bench2Drive数据集:
按照官方数据集组织目录。全量Bench2Drive-Full规模约为TB级,普通课程实验不要求完整下载;使用400GB版本或课程子集即可完成训练流程理解与开环验证
4. 运行UniAD开环验证:
在数据、配置和checkpoint准备完成后,运行UniAD-Tiny的开环评估脚本。记录终端输出中的规划误差、碰撞相关指标和可视化文件路径。
若需要复现实验训练流程,可参考两阶段训练命令。Stage1训练track/map,Stage2进行端到端联合训练。受显存和时间限制,课程实践可只阅读配置或进行少量epoch验证。
5. 运行CARLA闭环测试:
具备CARLA环境时,可下载CARLA0.9.15和AdditionalMaps,并配置CARLA_ROOT与Python API路径。随后将Bench2DriveZoo链接到Bench2Drive的leaderboard测试目录,运行闭环评价脚本。
闭环测试重点记录路线完成率、违规情况、碰撞事件、Driving Score以及失败场景截图。若无法完成闭环测试,应在实验报告中说明受限原因,并使用开环可视化结果完成分析。
6. 参数修改与对比分析:
在不大幅改动框架的前提下,选择一个配置项进行对比实验,例如queue_length、planning_steps、运动模态数量、规划损失权重或碰撞优化相关参数。每次只修改一个变量,保持checkpoint、数据划分和评估脚本一致,比较指标和可视化结果变化。
完成开环评估后,整理模型输出的RGB视角、BEV视角、目标检测跟踪结果、未来轨迹、占用预测和ego规划轨迹。重点观察规划轨迹是否贴合导航指令,是否避开占用风险区域,是否存在不合理急转、穿越障碍物或偏离车道等现象。
五、思考题
本项目聚焦于理解端到端自动驾驶框架与UniAD示例模型,不要求对大型模型进行完整复现训练。以下问题以资料查阅、代码阅读和实验结果分析为主:
- 查阅资料并解释模块化端到端与一体式端到端自动驾驶的接口差异,各自适合解决哪些问题?
- 结合UniAD结构,说明TrackFormer、MapFormer、MotionFormer、OccFormer和规划模块之间传递了哪些信息?
- 为什么UniAD采用Stage1先训练track/map,再进行Stage2端到端联合训练?这种策略对训练稳定性有什么帮助?
- 开环规划L2较低是否一定意味着闭环Driving Score较高?请结合实验结果说明两者可能不一致的原因。
- 选择一个失败场景,从感知错误、地图理解、运动预测、占用预测和规划优化五个角度提出可能原因。
- 尝试修改一个配置项(如queue_length或planning_steps),记录指标和可视化变化,并分析该参数影响模型表现的机制。
