DI-drive
决策智能驱动的自动驾驶仿真训练平台,支持模仿学习/强化学习多算法统一入口
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
决策智能驱动的自动驾驶仿真训练平台,支持模仿学习/强化学习多算法统一入口
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
图1:DI-drive 项目 banner
想象这样一个场景:一位年轻的自动驾驶算法工程师,手头有一个效果不错的高速公路跟车模型。某天,产品经理提出了一个新需求——"能不能让车在隧道出口主动变道超车?"从想法到真车上路,中间隔着什么?答案是:大量的场景仿真测试。
现实道路不可能让你随意测试"急刹"、"违规变道"、"cut-in(插队)"这类危险场景。仿真器就是为此而生——它提供一个可复现、高效率、低成本的虚拟训练场。而 DI-drive 要解决的核心问题远不止"搭个仿真环境"这么简单:如何让模仿学习(Imitation Learning)、强化学习(Reinforcement Learning)、GAIL 等各种决策算法,用统一的入口跑在不同的仿真器上?
这就是 DI-drive 立项的初心——做一个真正打通算法与仿真器的"决策智能+自动驾驶"一站式训练平台。
DI-drive 来自 OpenDILab 开源组织,这是一个专注于决策智能(Decision Intelligence)的开源社区,旗下明星项目包括 DI-engine——一个通用强化学习训练框架。DI-drive 本质上是 DI-engine 的一个垂直应用方向:用决策智能训练自动驾驶策略。
项目由上海人工智能实验室(Shanghai AI Lab)相关团队维护,采用 Apache 2.0 开源协议,目前已获得 636 颗 GitHub Stars,在自动驾驶仿真训练开源项目中属于头部水准。
图2:DI-drive 中 Carla 仿真器的驾驶可视化(多摄像头视角)
DI-drive 的设计哲学是**"算法与仿真器解耦"**。整个系统分为五层:
| 层级 | 模块 | 职责 |
|---|---|---|
| 数据层 | core/data/ | 轨迹数据采集、格式标准化 |
| 环境层 | core/envs/ | 仿真器封装,统一环境接口 |
| 模型层 | core/models/ | 驾驶感知-决策模型 |
| 策略层 | core/policy/ | 控制策略(PID、模仿学习、强化学习) |
| 评估层 | core/eval/ | 仿真测试与性能评估 |
这种分层设计意味着:换一个新仿真器,只需重写环境封装层(core/envs/),其余算法代码完全不用动。
core/
data/ # 数据采集(CILRS、LBC、CICT、BEV-VAE 等)
envs/ # 仿真器封装(SimpleCarlaEnv、MetaDrive Macro/Traj)
eval/ # 评估器(Benchmark、Serial、Single)
models/ # 神经网络模型(ResNet 主干 + 多任务头)
policy/ # 策略(AutoPID、CILRS、LBC、Traj-PPO)
simulators/ # Carla 仿真器底层接口
utils/ # 工具函数(数据增强、规划器、模型工具)
demo/
auto_run/ # 一键运行 Carla 自动驾驶演示
cilrs/ # CILRS 模仿学习训练
cict/ # CICT 连续意图轨迹预测
implicit/ # 隐式 affordance 学习
lbc/ # LBC(Large-Brain CNN)模仿学习
metadrive/ # MetaDrive 强化学习训练
CILRS(Conditional Imitation Learning):基于 ResNet 主干,融合车速信息,输出 6 分支转向/油门/刹车预测。模型结构为 ResNet18/34/50 + 速度融合 MLP + 多任务输出头。参考论文 arXiv:1710.02410。
LBC(Learning by Cheating):Bird's Eye View(鸟瞰图)输入 + Deconv 上采样 + Spatial Softmax 输出 5 步路点轨迹。相比 CILRS 的直接动作输出,LBC 输出的是路径规划点,更适合下游控制模块。参考论文 arXiv:1912.12294。
CICT(Continuous Intention to Continuous Trajectory):意图驱动的连续轨迹预测,用 GAN 或 MSE 损失训练生成轨迹。参考论文 arXiv:2010.10393。
图3:CILRS 模仿学习模型输出可视化
基于 DI-engine 框架,支持 DQN、DDPG、PPO、SAC 等主流 RL 算法,典型应用场景:
BEV-VAE:变分自编码器,将鸟瞰图压缩到隐空间,用于表征学习和数据增强。DREX:基于排名的驾驶经验迁移,通过偏好学习加速策略适应。
Carla 是目前最成熟的自动驾驶开源仿真器,支持:
DI-drive 中的 SimpleCarlaEnv 封装了 Carla Python API,提供 RGB 图像和鸟瞰图两种观测模式。缺点是:Carla 服务端需要独立部署(Ubuntu/Linux 推荐),内存占用大(约 10GB),GPU 渲染开销高。
图4:Auto Run 模式下鸟瞰图(Birdview)可视化
图5:同一场景的 RGB 相机视角
MetaDrive 是麻省理工团队开发的轻量级驾驶仿真器,核心优势:
pip install metadrive-simulator 一键安装,无需独立服务端DI-drive 中 MetaDriveMacroEnv 专门针对大规模 RL 训练优化,适合快速验证算法思路。
对于自动驾驶来说,"在空旷马路上直行"没什么挑战性,真正的难点在于复杂场景。DI-drive 提供了 Casezoo——一套包含真实路测数据的场景库,涵盖:
| 场景 | 描述 |
|---|---|
| CutIn | 旁车插入本车道后减速 |
| ControlLoss | 车辆短暂失控抖动 |
| FollowLeadingVehicle | 跟随前车(转弯/直行/匝道) |
| ChangeLane | 借道绕行故障车 |
| OppositeDirection | 对向车道来车 |
| SignalizedJunctionLeftTurn | 信号灯路口左转 |
图6:CutIn(插队)场景示意
这些场景数据来自真实车辆采集和上海临港路考场景,XML + JSON 格式定义,支持路由场景(route scenario)和单一场景(single scenario)两种运行模式。
# 基础安装(Python >= 3.6)
git clone https://github.com/opendilab/DI-drive.git
cd DI-drive
pip install -e .
# 仿真器(二选一)
pip install metadrive-simulator # 轻量,快速上手
# 或安装 Carla Python API(重型,需独立 Carla 服务端)
# 1. 启动 Carla 服务端(需要独立窗口)
./CarlaUE4.sh
# 2. 修改 demo 配置中的 Carla 端口
# auto_run.py 中的 carla_host/carla_ports
# 3. 运行 Auto Policy 演示
cd demo/auto_run
python auto_run.py
cd demo/metadrive
python macro_env_dqn_train.py # DQN 训练
python macro_env_ppo_train.py # PPO 训练
核心门槛:DI-drive 本质上是一个研究级框架,而非开箱即用的产品。它的用户画像是:
如果你期望的是"一行命令启动 Web UI 体验自动驾驶",这个项目不适合你。
DI-drive 的技术栈非常纯粹:
| 组件 | 技术选型 |
|---|---|
| 核心语言 | Python 3.6+ |
| 深度学习框架 | PyTorch |
| 算法框架 | DI-engine(强化学习) |
| 仿真器 | Carla(重型)、MetaDrive(轻量) |
| 数据格式 | LMDB(高速键值存储)、HDF5 |
| 日志 | Loguru 0.3.0 |
| 图像处理 | OpenCV、scikit-image、imgaug |
代码风格规范由 .style.yapf 约束,CI 中有 Style 和 Docs 两个自动检查流程。
metadrive-simulator==0.2.4 硬锁定版本,可能导致依赖冲突DI-drive 代表了一个重要趋势:决策智能(Decision Intelligence)从游戏/机器人领域向自动驾驶的渗透。相比特斯拉的"影子模式"和小马的"路测为王",DI-drive 选择了另一条路——用强化学习在仿真中解决长尾场景问题。
随着自动驾驶法规逐步放开、仿真数据的合规性逐步明确,这类开源仿真训练平台的价值会持续凸显。DI-drive 与 CARLA、MetaDrive 的深度整合,为研究者提供了从算法实验到场景验证的完整闭环,在学术界和工业界都有持续的应用空间。