Project Icon

carla_garage

突破端到端自动驾驶模型的隐藏偏差 高性能仿真平台

基于CARLA仿真器的端到端自动驾驶研究开源项目。提供可配置代码、文档和高性能预训练模型,揭示了端到端驾驶模型的隐藏偏差。在多个基准测试中表现优异,支持数据生成、模型训练和评估,有助于研究人员探索自动驾驶前沿问题。

CARLA车库

论文 | 视频 | 演讲 | 幻灯片 | 海报

PWC PWC PWC

端到端驾驶模型的隐藏偏见
Bernhard JaegerKashyap ChittaAndreas Geiger
2023年国际计算机视觉会议(ICCV)

本仓库包含论文端到端驾驶模型的隐藏偏见的代码。
我们提供了清晰、可配置的代码和文档,以及性能强大的预训练权重。
该仓库可以作为在CARLA上进行端到端自动驾驶研究的良好起点。

目录

  1. 设置
  2. 预训练模型
  3. 评估
  4. 数据集
  5. 数据生成
  6. 训练
  7. 附加文档
  8. 引用

设置

克隆仓库,设置CARLA 0.9.10.1,并构建conda环境:

git clone https://github.com/autonomousvision/carla_garage.git
cd carla_garage
chmod +x setup_carla.sh
./setup_carla.sh
conda env create -f environment.yml
conda activate garage

在运行代码之前,您需要将以下路径添加到系统的PYTHONPATH中:

export CARLA_ROOT=/path/to/CARLA/root
export WORK_DIR=/path/to/carla_garage
export PYTHONPATH=$PYTHONPATH:${CARLA_ROOT}/PythonAPI
export PYTHONPATH=$PYTHONPATH:${CARLA_ROOT}/PythonAPI/carla
export PYTHONPATH=$PYTHONPATH:$CARLA_ROOT/PythonAPI/carla/dist/carla-0.9.10-py3.7-linux-x86_64.egg
export SCENARIO_RUNNER_ROOT=${WORK_DIR}/scenario_runner
export LEADERBOARD_ROOT=${WORK_DIR}/leaderboard
export PYTHONPATH="${CARLA_ROOT}/PythonAPI/carla/":"${SCENARIO_RUNNER_ROOT}":"${LEADERBOARD_ROOT}":${PYTHONPATH}

您可以将其添加到您的shell脚本中,或直接集成到您喜欢的IDE中。
例如,在PyCharm中:设置 -> 项目 -> Python解释器 -> 显示所有 -> garage(需要先从现有conda环境添加) -> 显示解释器路径 -> 添加上述所有绝对路径(不包括pythonpath)。

预训练模型

我们在这里提供了一组预训练模型。 这些模型根据CC BY 4.0许可。 这些是论文中使用的最终模型权重,文件夹表示基准测试。 对于训练和验证城市,我们提供了3个模型,对应3个不同的训练种子。格式为approach_trainingsetting_seed。每个文件夹都有一个包含文本形式训练设置的args.txt,一个包含代码所有超参数的config.pickle,以及一个包含模型权重的model_0030.pth。此外,大多数模型还包含训练日志。

评估

要评估模型,你需要先启动一个CARLA服务器:

cd /path/to/CARLA/root
./CarlaUE4.sh -opengl

之后,运行leaderboard_evaluator_local.py作为主Python文件。 这是原始leaderboard_evaluator.py的修改版本,包含了我们考虑的基准测试中使用的配置,并提供了额外的日志功能。

--agent-config选项设置为包含config.picklemodel_0030.pth的文件夹。 将--agent设置为sensor_agent.py--routes选项应设置为lav.xmllongest6.xml--scenarios选项应设置为eval_scenarios.json(适用于两个基准测试)。 将--checkpoint设置为/path/to/results/result.json

要在基准测试上进行评估,请设置相应的环境变量:export BENCHMARK=lavexport BENCHMARK=longest6。 设置export SAVE_PATH=/path/to/results以保存额外的日志或可视化内容。

模型有可以通过环境变量设置的推理选项。 对于longest6模型,你需要设置export UNCERTAINTY_THRESHOLD=0.33;对于LAV模型,设置export STOP_CONTROL=1;对于leaderboard模型,设置export DIRECT=0。 其他选项默认设置正确。 你可以查看local_evaluation.sh作为示例。

评估完成后,你需要使用result_parser.py解析结果文件。 它将重新计算指标(初始指标不正确),计算额外的统计数据,并可选择将违规情况可视化为简短的视频剪辑。

python ${WORK_DIR}/tools/result_parser.py --xml ${WORK_DIR}/leaderboard/data/lav.xml --results /path/to/results --log_dir /path/to/results

结果解析器可以选择创建简短的视频/GIF剪辑,展示评估过程中发生的违规行为的重新渲染。该代码由Luis Winckelmann和Alexander Braun开发。 要使用此功能,你需要先准备一些地图文件(这些文件太大,无法上传到GitHub)。为此,在你的计算机上启动CARLA服务器并运行prepare_map_data.py。 之后,你可以在result_parser.py中使用--visualize_infractions标志来运行该功能。此功能需要在结果文件夹中有可用的日志,因此你需要在评估期间设置export SAVE_PATH=/path/to/results

如何实际进行评估

上述说明是你用于调试代码的方法。实际评估具有挑战性的基准测试(如longest6,有超过108条长路线)在实践中非常慢。幸运的是,CARLA评估是高度并行的。108条路线中的每一条都可以独立并行评估。这意味着如果你有2个GPU,评估速度可以提高2倍;如果你有108个GPU,评估速度可以提高108倍。同时使用相同的总体计算资源。为此,你需要访问可扩展的集群系统和一些并行化脚本。我们在研究所使用SLURM。要评估模型,我们使用脚本evaluate_routes_slurm.py。它旨在在交互式节点的tmux中运行,并将生成评估作业(最多设置为max_num_jobs.txt中的数量)。它还监控作业并重新提交检测到崩溃的作业。最后,脚本将运行结果解析器来汇总结果。如果你使用不同的系统,可以将此作为指导并编写自己的脚本。CARLA排行榜基准测试目前是驾驶场景中最具挑战性的,但如果你无法访问多个GPU,你可能想要使用计算密集度较低的模拟器进行研究。NuPlan是一个不错的选择,我们的团队也为nuPlan提供了强大的基准

数据集

我们发布了用于训练最终模型的数据集。 该数据集根据CC BY 4.0许可。 你可以使用以下命令下载:

cd /path/to/carla_garage/tools
bash download_data.sh

脚本会将数据下载到/path/to/carla_garage/data。这也是你需要为训练设置--root_dir的路径。脚本将使用11个并行进程下载并解压数据。下载大小约为350 GB(解压后会稍大一些)。

数据生成

数据集生成与评估类似。你可以通过将--agent选项更改为data_agent.py并将--track选项更改为MAP来生成数据集。此外,你需要设置以下环境标志:

export DATAGEN=1
export BENCHMARK=collection
export CHECKPOINT_ENDPOINT=/path/to/dataset/Routes_{route}_Repetition{repetition}/Dataset_generation_{route}_Repetition{repetition}.json
export SAVE_PATH=/path/to/dataset/Routes_{route}_Repetition{repetition}

同样,用单台计算机生成我们的数据集太慢,你应该使用多个GPU。我们为SLURM集群提供了一个Python脚本,它的工作方式与评估脚本相同。 我们将在稍后发布我们使用的数据集。

训练

通过文件 train.py 对智能体进行训练。 提供了使用 shellSLURM 的示例。 运行前需要激活 garage conda 环境。 首先设置相关环境变量,然后使用 torchrun 启动训练。 Torchrun 是一个处理多 GPU 训练的 PyTorch 工具。 如果想在单个 GPU 上调试,只需设置 --nproc_per_node=1。 训练脚本有许多选项可以配置训练,可以通过 python train.py --help 列出它们或查看代码。 最重要的选项有:

--id your_model_000 # 实验名称
--batch_size 32 # 每个 GPU 的批量大小
--setting all # 训练期间保留哪些城镇。使用 'all' 用于排行榜,longest6 和 '02_05_withheld' 用于 LAV 模型。
--root_dir /path/to/dataset # 数据集根目录路径
--logdir /path/to/models # 存储训练文件的根目录
--use_controller_input_prediction 1 # 模型是否使用分类 + 路径预测头进行训练
--use_wp_gru 0 # 模型是否使用路点头进行训练
--use_discrete_command 1 # 是否将导航命令作为模型输入
--use_tp 1 # 是否将目标点作为模型输入
--cpu_cores 20 # 机器上的总 CPU 核心数
--num_repetitions 3 # 训练数据量(选项为 1,2,3)。1x 对应表 5 中的 185k,3x 对应 555k

此外,要进行表 4 中的两阶段训练,需要使用 --continue_epoch--load_file 选项。 需要训练两次。首先训练一个模型,设置 --use_wp_gru 0--use_controller_input_prediction 0,这将只使用辅助损失训练感知主干网络。 然后,训练第二个模型,设置如 --use_controller_input_prediction 1--continue_epoch 0--load_file /path/to/stage1/model_0030.pthload_file 选项通常用于恢复崩溃的训练,但使用 --continue_epoch 0 时,训练将从头开始,使用预训练权重进行初始化。

在 PyCharm 中训练

您也可以在 PyCharm 中运行和调试 torchrun。为此,您需要按如下方式设置运行/调试配置:
将脚本路径设置为:/path/to/train.py
将解释器选项设置为:

-m torch.distributed.run --nnodes=1 --nproc_per_node=1 --max_restarts=0 --rdzv_id=123456780 --rdzv_backend=c10d

训练参数应在 Parameters: 字段中设置,环境变量在 Environment Variables: 中设置。 此外,您需要按上述方式设置 conda 环境(变量)。

提交到 CARLA 排行榜

要提交到 CARLA 排行榜,您需要在系统上安装 docker(以及 nvidia-container-toolkit 进行测试)。创建文件夹 team_code/model_ckpt/transfuser。将要评估的 model.pth 文件和 config.pickle 复制到 team_code/model_ckpt/transfuser。如果要评估集成模型,只需将多个 .pth 文件复制到文件夹中,代码将加载所有文件并集成预测。 编辑 tools/make_docker.sh 顶部的环境路径,然后:

cd tools
./make_docker.sh

脚本将创建一个名为 transfuser-agent 的 docker 镜像。 在提交之前,您应该在本地测试您的镜像。为此,在您的计算机上启动 CARLA 服务器(它将能够通过端口与 docker 容器通信)。然后启动您的 docker 容器。run_docker.sh 中提供了一个示例。 在 docker 容器内使用以下命令启动您的智能体:

cd leaderboard
cd scripts
bash run_evaluation.sh

确认没有问题后,可以使用 "ctrl + c + " 停止评估。
要提交,请按照 排行榜 上的说明创建账户并安装 alpha。

alpha login
alpha benchmark:submit  --split 3 transfuser-agent:latest

该命令将上传 docker 镜像到云端并进行评估。

附加文档

  • CARLA 仓库中的坐标系统通常是一团糟。在这个项目中,我们通过将所有数据转换为统一的坐标系来解决这个问题。关于坐标系统的更多信息可以在这里找到。

  • TransFuser 模型家族已经发展出许多不同的变体,这可能会让新的社区成员感到困惑。**历史**文件解释了不同的版本以及您应该引用哪篇论文来指代它们。

  • 构建完整的自动驾驶系统涉及相当多的工程。文档解释了我们在这个项目中使用的一些技术和设计理念。

  • 代码库可以运行论文中提出的任何实验。它还支持一些我们最终没有使用的额外功能。这些功能在这里有所记录。

联系

如果您有任何问题或建议,请随时提出问题或通过 bernhard.jaeger@uni-tuebingen.de 与我们联系。

引用

如果您觉得 CARLA garage 有用,请考虑给我们一个星星 🌟 并使用以下 BibTeX 条目引用我们的论文。

@InProceedings{Jaeger2023ICCV,
  title={Hidden Biases of End-to-End Driving Models},
  author={Bernhard Jaeger and Kashyap Chitta and Andreas Geiger},
  booktitle={Proc. of the IEEE International Conf. on Computer Vision (ICCV)},
  year={2023}
}

致谢

像这样的开源代码是建立在许多其他开源库的基础之上的。我们特别要感谢以下库对本项目的贡献:

我们还要感谢我们所使用的众多pip库的创作者。没有你们的贡献,像这样复杂的项目将无法实现。

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号