deepdrive
Deepdrive 是一款面向自动驾驶研究的开源模拟器,旨在让任何拥有个人电脑的用户都能轻松探索前沿的自动驾驶技术。它主要解决了传统自动驾驶开发中仿真环境搭建复杂、硬件门槛高以及训练数据获取困难等痛点,提供了一个从数据采集、模型训练到算法验证的一站式实验平台。
该工具特别适合人工智能开发者、学术研究人员以及自动驾驶算法工程师使用。用户可以在 Linux 环境下,利用 Python 和 TensorFlow 快速构建实验流程。Deepdrive 的技术亮点在于其高度的灵活性与扩展性:它不仅内置了基于有限状态机(FSM)和 PID 控制的基础代理用于路径跟随,还支持通过远程 API 进行分布式训练。更重要的是,它原生支持模仿学习和行为克隆,允许用户便捷地记录驾驶数据并转换为标准格式,进而训练如 DAgger 或 PPO2 等先进算法。配合丰富的视角切换与调试快捷键,Deepdrive 让复杂的自动驾驶仿真测试变得直观且高效,是进入该领域理想的入门与实践工具。
使用场景
某自动驾驶初创团队的算法工程师正在开发一套适用于复杂峡谷地形的车辆路径跟随系统,急需在低成本环境下验证新策略的鲁棒性。
没有 deepdrive 时
- 硬件门槛极高:团队必须依赖昂贵的实车测试或高端仿真工作站,普通开发者的 PC 无法运行高精度物理模拟,导致全员并行实验受阻。
- 数据采集困难:缺乏便捷的录制工具,难以快速生成用于模仿学习(Imitation Learning)的高质量驾驶行为数据集,模型训练起步缓慢。
- 调试周期漫长:缺少内置的状态机(FSM)和 PID 控制基准,每次验证新算法都需从零搭建底层控制器,且无法通过多视角相机(如追视、自由飞行视角)直观排查故障。
- 环境复现成本高:难以在本地轻松模拟不同光照条件(如调整太阳位置)或特定交通场景,导致算法在极端情况下的表现无法得到充分验证。
使用 deepdrive 后
- 人人皆可仿真:仅需配备 8GB 内存的普通 Linux PC 即可部署,团队成员能利用本地算力大规模并行测试自研算法,大幅降低硬件投入。
- 一键数据闭环:通过
--record命令即可同步录制驾驶数据并转换为 TFRecords 格式,快速构建数据集以训练 DAgger 或 PPO2 等先进模型。 - 基准与可视化赋能:直接调用内置的 C++ 路径跟随代理作为基线进行对比,并利用多种相机视角实时观察车辆边界框与碰撞检测,显著缩短调试时间。
- 灵活场景配置:通过快捷键即时调整光照角度或切换车辆,轻松覆盖各种边缘案例,确保算法在峡谷超车等复杂场景中的稳定性。
deepdrive 将自动驾驶研发从“重资产依赖”转变为“桌面级创新”,让每位开发者都能以最低成本推动技术边界。
运行环境要求
- Linux
可选(用于基线代理训练):需要支持 CUDA 的 NVIDIA GPU(测试型号包括 GTX 970, 1060, 1070),需安装与 TensorFlow 1.7-2.0 匹配的 CUDA 和 cuDNN 版本(例如 TF 1.12 需 CUDA 9.0 / cuDNN 7.3),未明确具体显存大小要求
8GB

快速开始
Deepdrive 
体验自动驾驶 AI 的最简单方式
模拟器要求
- Linux
- Python 3.6+
- 10GB 磁盘空间
- 8GB 内存
可选 - 基线智能体要求
- 支持 CUDA 的 GPU(已在 970、1070 和 1060 上测试和开发)
- 1.7 <= Tensorflow < 2.0 参阅 Tensorflow 安装提示
安装
git clone https://github.com/deepdrive/deepdrive
cd deepdrive
可选 - 激活已安装 Tensorflow 的 Python conda 环境或 virtualenv,然后
注意:如果您使用 Anaconda(我们推荐 Miniconda),请仅在您的 deepdrive conda 环境中使用
pip install,切勿使用conda install
- 安装
python install.py # 请勿以 sudo 运行!请使用 Miniconda 或 virtualenv 在无 sudo 权限的情况下进行安装。
云端
示例
前向智能体
python example.py
同步前向智能体
python example_sync.py
- 远程智能体示例 - 使用 deepdrive 远程 API 通过网络运行
Mnet2 基线智能体
python main.py --mnet2-baseline --experiment my-baseline-test
内置 C++ FSM / PID 智能体,可在峡谷地图中超车
python main.py --path-follower --experiment my-path-follower-test
录制训练数据用于模仿学习 / 行为克隆
python main.py --record --jitter-actions --sync
请注意,我们以同步模式录制了基线数据集,这比异步模式慢得多。异步模式 可能 也适合录制,只是我们尚未在 v3 中尝试过。
可选:转换为 HDF5 文件再转为 tfrecords(用于训练 MNET2)
python main.py --hdf5-2-tfrecord
使用录制的数据进行训练
python main.py --train [--agent dagger|dagger_mobilenet_v2|bootstrapped_ppo2] --recording-dir <your-hdf5-or-tfrecord-dir>
使用我们的数据集进行训练
获取 数据集
python main.py --train --recording-dir <包含数据集的目录> [--agent dagger|dagger_mobilenet_v2|bootstrapped_ppo2]
TensorBoard
tensorboard --logdir="<your-deepdrive-home>/tensorflow"
其中 <your-deepdrive-home> 默认位于 $HOME/Deepdrive,也可在 $HOME/.deepdrive/deepdrive_dir 中配置。
运行单元测试
pytest tests/unit_tests/test_sanity.py
快捷键
- Esc - 暂停(在 Unreal 编辑器中退出)
- Enter - 无菜单暂停
- P - 在 Unreal 编辑器中暂停
- 1 - 追踪摄像机
- 2 - 轨道式(侧方)摄像机
- 3 - 引擎盖上方摄像机
- 4 - 自由摄像机(使用 WASD 键飞行)
- 空格 - 手刹
- Alt+Tab - 控制其他窗口 / 显示鼠标
</kbd> - Unreal 控制台 - 可执行如stat FPS` 等命令- M - 使用键盘 WASD 驾驶车辆 - 请确保同步功能已关闭 - 已知问题:目前仅在路径跟随模式下有效
- Ctrl+数字 - 更改太阳位置 - 适用于 1 到 7
- B - 显示车辆边界框
- N - 显示车辆碰撞盒
- Page Up - 下一辆车
- Page Down - 上一辆车
观测数据
观测中返回的所有值均遵循 Unreal 引擎的约定,具体如下:
- 所有距离单位均为厘米,基于 Unreal 的默认数据类型。
- 所有旋转/角度值以滚转、俯仰、偏航的顺序表示,单位为度。
- x, y, z 分别对应前、右、上方向。
{
'acceleration': array([-264.26913452, -227.578125 , 105.16122437]),
'angular_acceleration': array([210980.234375, 105423.765625, 38187.28125 ]),
'angular_velocity': array([2.59908962, 3.8214705 , 1.87282801]),
'brake': 0.0,
'camera_count': 1,
'cameras': [{ 'aspect_ratio': 1.0,
'capture_height': 227,
'capture_width': 227,
'depth_data': array([0.9995 , 0.9995 , 0.9995 , ...,
0.005146, 0.005146, 0.005146], dtype=float16),
'horizontal_field_of_view': 1.7654,
'id': 1,
'image': array([[[ 40., 78., 110.] ..., dtype=float32),
'image_data': array([0.283 , 0.557 , 0.82,
..., 0.02321, 0.02574, 0.02599], dtype=float16),
'image_raw': array([[[144, 195, 233]..., dtype=uint8),
'type': 0
}],
'capture_timestamp': 4132.511303506,
'dimension': array([514.99609375, 514.99609375, 91.1796875 ]), # 车辆尺寸
'distance_along_route': 70658.828125, # 沿路线行进的距离(厘米)
'distance_to_center_of_lane': 1038.8463134765625, # 到车道中心线的距离(厘米)
'world': { 'vehicle_positions': [ [ -15800.8193359375,
38030.23828125,
19894.62890625],
[ -13854.9384765625,
39296.91015625,
20041.6484375],
[ -10323.2744140625,
39767.69921875,
20409.265625],
[ -6528.05810546875,
38875.75390625,
21034.83984375],
[ 4577.29150390625,
36155.37890625,
22704.166015625]]},
'distance_to_next_agent': 326125.625, # 同车道下一辆车
'distance_to_next_opposing_agent': -1.0, # 对向车道下一辆车
'distance_to_prev_agent': 30758.2734375, # 同车道上一辆车
'forward_vector': array([-0.8840133 , -0.4375411 , -0.16455328]),
'gym_action': [0, 1, 0, 0, True],
'gym_done': False,
'gym_reward': -2.4653405387152016,
'handbrake': 0,
'is_game_driving': 0,
'is_passing': 0,
'is_resetting': 205,
'lap_number': 0,
'last_collision': { 'collidee_velocity': array([0., 0., 0.]),
'collision_location': 'rear_right_fender',
'collision_normal': array([0., 0., 0.]),
'time_since_last_collision': 0.0,
'time_stamp': 4105.741911045,
'time_utc': 1562958070},
'position': array([-10163.55371094, 17115.17382812, 22500.29492188]),
'right_vector': array([-0.8840133 , -0.4375411 , -0.16455328]),
'rotation': array([ 0.10010731, -0.16530512, -2.68199444]),
'route_length': 273551.21875,
'episode_return': { 'avg_kph': 0,
'closest_vehicle_cm': 15812.662932649602,
'closest_vehicle_cm_while_at_least_4kph': 15812.662932649602,
'cm_along_route': 18730.72265625,
'collided_with_vehicle': False,
'collided_with_non_actor': True,
'end_time': '1969-12-31T16:00:00-08:00',
'episode_time': 11.5,
'gforce_penalty': 90.68476390028613,
'got_stuck': False,
'lane_deviation_penalty': 255.7695629358121,
'max_gforce': 0.8785649610557551,
'max_kph': 138.7572978515625,
'max_lane_deviation_cm': 1038.8463134765625,
'num_steps': 0,
'prev_progress_pct': 6.70844576752594,
'progress_pct': 6.8472451856879175,
'progress_reward': 0.0,
'route_length_cm': 273551.21875,
'speed_reward': 371.6081579415893,
'start_time': '2019-07-12T12:00:59.003417-07:00',
'time_penalty': 0.0,
'total': 25.15383110549117,
'wrong_way': False},
'speed': 3854.369384765625,
'steering': 0.0,
'throttle': 1.0,
'up_vector': array([-0.8840133 , -0.4375411 , -0.16455328]),
'velocity': array([-3404.32958984, -1700.12841797, -613.90289307]),
'view_mode': 'normal',
}
无需编译 C++ 或蓝图,即可通过 UnrealEnginePython 访问 Unreal API 来获取更多观测数据。
基准测试
智能体将通过 Botleague 自动评分。
数据集
包含 100GB(8.2 小时驾驶)的摄像头图像、深度信息、转向角、油门和刹车数据,这些数据来自一个“最优”路径跟踪智能体。我们在三种不同视角之间切换:正常视角、广角视角和半挂车视角,并在每个回合开始时对相机的内参和外参进行随机扰动,这使得基准测试中的性能提升了三倍。此外,我们还使用 DAgger 方法收集了与先前版本 DeepDrive 相同的路径修正数据。
- 获取 AWS CLI
- 确保您有 104GB 的可用空间
- 下载我们的混合 Windows(Unreal PIE + Unreal 打包版)和 Linux 版本的数据集,其中包含不同相机视角及修正动作记录(通过
--record生成):
cd <您希望存放的目录>
aws s3 sync s3://deepdrive/data/baseline_tfrecords .
或者下载用于训练 AlexNet 的旧版 HDF5 文件:
aws s3 sync s3://deepdrive/data/baseline .
如果您想查看我们的 TensorBoard 训练过程,可以下载 1GB 的 tfevents 文件,解压后运行:
tensorboard --logdir <您解压后的目录>
并访问这个视图,它会绘制随时间变化的曲线。
架构

Linux 上的帧率问题
如果您在 Linux 系统上遇到帧率过低的问题,可能需要安装 NVIDIA 显卡驱动程序,包括 OpenGL 驱动。我们建议通过 CUDA 安装这些驱动,因为 CUDA 会自动为您选择适合运行基准智能体的版本。此外,请确保已启用电源管理功能,例如调整笔记本电脑的电源设置。如果已经安装了 CUDA,请直接跳至 OpenGL 测试部分。
TensorFlow 安装提示
- 请确保安装 TensorFlow 官方文档中指定的 CUDA 和 cuDNN 的主版本和次版本。例如,TensorFlow 1.12.0 需要 CUDA 9.0 和 cuDNN 7.3。这些版本通常会比 NVIDIA 最新发布的版本旧。你可以在 这里查看所有 CUDA 版本。
- 建议使用打包好的安装方式,比如在 Ubuntu 上使用
.deb包(deb[local]),具体可参考 这篇指南。 - 如果你选择使用运行文件(runfile)方式进行安装,请务必按照 NVIDIA 的官方说明,在 Ubuntu 系统上禁用 Nouveau 驱动程序。
- 在 Windows 系统上,请使用符合最低要求的标准显卡驱动程序(非 CUDA 打包版)。安装 CUDA 时,选择自定义安装,并取消勾选安装显卡驱动的选项。
OpenGL
运行 glxinfo | grep OpenGL 应该会返回类似以下内容:
OpenGL vendor string: NVIDIA Corporation
OpenGL renderer string: GeForce GTX 980/PCIe/SSE2
OpenGL core profile version string: 4.5.0 NVIDIA 384.90
OpenGL core profile shading language version string: 4.50 NVIDIA
OpenGL core profile context flags: (none)
OpenGL core profile profile mask: core profile
OpenGL core profile extensions:
OpenGL version string: 4.5.0 NVIDIA 384.90
OpenGL shading language version string: 4.50 NVIDIA
OpenGL context flags: (none)
OpenGL profile mask: (none)
OpenGL extensions:
OpenGL ES profile version string: OpenGL ES 3.2 NVIDIA 384.90
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.20
OpenGL ES profile extensions:
为了使 NVIDIA 的 OpenGL 以及 nvidia-smi 等工具正常工作,你可能需要在 BIOS 中禁用安全启动功能。这并不是 Deepdrive 特有的要求,而是 Ubuntu 系统下 NVIDIA 驱动的一般性需求。
开发
要在 PyCharm 中运行测试,请依次进入 File | Settings | Tools | Python Integrated Tools,将默认的测试运行器改为 pytest。
此外,还需按照 这个回答 的建议,禁用 SciView 插件。
版本历史
2.02018/05/17常见问题
相似工具推荐
openclaw
OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
markitdown
MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具,专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片(含 OCR)、音频(含语音转录)、HTML 乃至 YouTube 链接等多种格式的解析,能够精准提取文档中的标题、列表、表格和链接等关键结构信息。 在人工智能应用日益普及的今天,大语言模型(LLM)虽擅长处理文本,却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点,它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式,成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外,它还提供了 MCP(模型上下文协议)服务器,可无缝集成到 Claude Desktop 等 LLM 应用中。 这款工具特别适合开发者、数据科学家及 AI 研究人员使用,尤其是那些需要构建文档检索增强生成(RAG)系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性,但其核心优势在于为机器
LLMs-from-scratch
LLMs-from-scratch 是一个基于 PyTorch 的开源教育项目,旨在引导用户从零开始一步步构建一个类似 ChatGPT 的大型语言模型(LLM)。它不仅是同名技术著作的官方代码库,更提供了一套完整的实践方案,涵盖模型开发、预训练及微调的全过程。 该项目主要解决了大模型领域“黑盒化”的学习痛点。许多开发者虽能调用现成模型,却难以深入理解其内部架构与训练机制。通过亲手编写每一行核心代码,用户能够透彻掌握 Transformer 架构、注意力机制等关键原理,从而真正理解大模型是如何“思考”的。此外,项目还包含了加载大型预训练权重进行微调的代码,帮助用户将理论知识延伸至实际应用。 LLMs-from-scratch 特别适合希望深入底层原理的 AI 开发者、研究人员以及计算机专业的学生。对于不满足于仅使用 API,而是渴望探究模型构建细节的技术人员而言,这是极佳的学习资源。其独特的技术亮点在于“循序渐进”的教学设计:将复杂的系统工程拆解为清晰的步骤,配合详细的图表与示例,让构建一个虽小但功能完备的大模型变得触手可及。无论你是想夯实理论基础,还是为未来研发更大规模的模型做准备