LMDrive 深度技术解读

LLM-based Language-guided End-to-End Autonomous Driving
CVPR 2024 · Hao Shao, Yuxuan Hu, Letian Wang, Steven L. Waslander et al.
University of Toronto + opendilab
GitHub · arXiv
← 返回 VLN 技术站

0. 30 秒速览

LMDrive 是首个将大语言模型(LLM)引入端到端自动驾驶的系统。它不再用规则或简单神经网络做驾驶决策,而是让 LLM 充当"大脑"——接收多摄像头图像、LiDAR 点云和自然语言导航指令,直接输出车辆控制信号。核心创新:用BEV 视觉编码器 + Q-Former将传感器数据压缩为 LLM 可处理的 token,让 LLM 在闭环驾驶中理解场景、遵循指令。

属性规格
LLM backboneLLaVA-v1.5(最佳)、Vicuna-v1.5、LLaMA2 等 6 种对比
视觉编码器ResNet(图像)+ PointPillars(LiDAR)+ BEV Decoder
Token 压缩Q-Former(BLIP-2 风格),每帧 406 → M 个视觉 token
传感器4 路 RGB 摄像头(左/前/右/后)+ 64 通道 LiDAR + focus-view 前裁切
动作输出N 个未来航点 + 指令完成标志 → PID 控制器 → 油门/刹车/方向盘
训练数据~3M 帧、64K 导航片段、464K 通知指令、8 城镇 21 种天气
指令类型56 种(follow / turn / others + notice 通知)
仿真平台CARLA Simulator

1. 背景:为什么自动驾驶需要语言?

1.1 传统端到端的局限

传统端到端自动驾驶(如 LAV、TCP、ThinkTwice)从传感器数据直接映射到控制信号,存在一个根本问题:它们不理解"指令"。导航系统说"前方 200 米左转",传统系统只能靠全局路径规划模块处理,神经网络本身无法关联语言语义和驾驶行为。

1.2 语言指令的真实场景

现实驾驶中,指令来源非常丰富:

核心洞察

LLM 天然理解自然语言和常识推理。如果把驾驶场景编码为 LLM 可读的 token,LLM 就能像人类驾驶员一样:听指令 → 观察环境 → 推理决策 → 执行控制。

2. 整体架构

1
Vision Encoder — 多视角多模态视觉编码器 4 路 RGB + LiDAR → ResNet 提取图像特征 + PointPillars 处理点云 → BEV Decoder 融合 → 输出 BEV token、航点 token、交通灯 token(每帧共 406 个 token)
↓ 406 个视觉 token(太多!)
2
Q-Former — Token 压缩 用 M 个可学习 query 通过 cross-attention 压缩 → 每帧从 406 token 降到 M 个 + MLP adapter 对齐到 LLM 嵌入维度
↓ M 个压缩视觉 token + 语言指令 token
3
LLM — 语言模型"大脑" 接收历史帧的视觉 token 序列(最多 T_max 帧)+ 导航/通知指令 → 理解场景语义 → 输出 N 个未来航点 + 指令完成标志
↓ 未来航点 + 完成标志
4
PID 控制器 两个 PID 控制器分别跟踪航向角(横向)和速度(纵向)→ 输出方向盘角度、油门、刹车

2.1 为什么需要历史帧?

LMDrive 工作在闭环(closed-loop)设置:每帧的决策会影响下一帧的环境状态。一条导航指令可能持续几秒到几分钟,需要累积历史观测来减少累积误差、提高时序一致性。但历史帧越多,视觉 token 数量线性增长,必须用 Q-Former 压缩。

Token 爆炸问题

每帧 406 个视觉 token,几百帧 = 数万 token,远超 LLM 上下文窗口。Q-Former 将每帧压缩为 M 个 token(M ≪ 406),是整个架构可行性的关键。

3. Vision Encoder 详解

3.1 传感器配置

传感器规格用途
左/右摄像头侧向 60° 角侧面路况
前摄像头前方主视角
后摄像头后方后方来车
Focus-view前摄像头中心裁切远处交通灯状态
LiDAR64 通道,600K 点/秒3D 空间感知

3.2 图像编码:ResNet + Transformer 融合

每路摄像头图像过 ResNet 提取 2D 特征图,flatten 为 1D token。然后多视角 token 通过一个 K_enc 层 Transformer Encoder(Multi-Head Self-Attention + MLP + LayerNorm)融合,实现跨视角的全局上下文理解。

3.3 LiDAR 编码:PointPillars + PointNet

LiDAR 点云用 PointPillars 处理:将点云划分为 0.25m × 0.25m 的柱体(pillar),每个 pillar 内的点用 PointNet 聚合特征,下采样为 C×H×W 的 BEV 特征图。这些 LiDAR BEV 特征同时作为后续 BEV Decoder 的查询(query)

3.4 BEV Decoder:跨模态融合

BEV Decoder 是一个 K_dec 层标准 Transformer。它以 LiDAR BEV 特征(H×W 个 query)去 attend 多视角图像特征,生成BEV token。同时还输入 N 个可学习 query 和 1 个可学习 query,分别生成航点 token交通灯 token

视觉 token 类型数量内容
BEV tokenH × W鸟瞰图场景特征(障碍物、道路结构)
航点 tokenN未来路径信息
交通灯 token1交通灯状态(红/绿/黄)
合计~406每帧总视觉 token 数

3.5 预训练任务

Vision Encoder 先在感知任务预训练阶段训练,冻结后供 LLM 使用。三个预训练任务:

任务预测头损失函数
目标检测CenterPoint(one-stage)→ 检测 H_m × W_m 范围内的 bbox + 速度detection loss(同 InterFuser)
未来航点预测GRU 网络 → N 个未来航点L1 loss
交通灯分类2 层 MLP → 红/绿/黄cross-entropy loss

关键设计

这些预测头仅用于预训练。微调 LLM 和推理时,预测头被丢弃——Vision Encoder 输出的视觉 token 直接喂给 LLM。这是一种"感知先学习、后冻结"的迁移策略。

4. LLM 模块详解

4.1 LLM 的角色

LMDrive 选择 LLaMA 系列作为语言 backbone(与 LLaVA 等视觉语言模型一脉相承)。LLM 在整个驾驶过程中扮演"大脑":处理视觉 token 序列 + 理解语言指令 → 输出控制信号 + 指令完成判断。

4.2 Q-Former Token 压缩

直接将每帧 406 个 token 输入 LLM 不可行。LMDrive 采用 BLIP-2 风格的 Q-Former:用 M 个可学习 query 通过 cross-attention 从 406 个 token 中提取关键信息,压缩为 M 个 token。再用 2 层 MLP adapter 将 Q-Former 输出对齐到 LLM 的嵌入维度。

# Token 流转
Vision Encoder → 406 tokens/帧
    ↓ Q-Former (M 个 learnable queries)
M tokens/帧 → MLP adapter → 与语言 token 同维度
    ↓ 拼接历史帧 + 指令 token
LLM 输入:[指令 tokens] + [帧0的 M tokens] + [帧1的 M tokens] + ... + [帧T的 M tokens]

4.3 动作预测

LLM 接收视觉 token 序列和指令 token 后,输出动作 token。一个 2 层 MLP adapter 将动作 token 转化为:

最终控制信号通过两个 PID 控制器(参考 LBC 方法):横向 PID 跟踪航点航向角,纵向 PID 跟踪航点速度 → 输出方向盘、油门、刹车。

4.4 误导指令处理

为了让系统对不安全指令有拒执行能力,训练时将误导指令(如单车道要求变道)标注为"误导指令给出约 1 秒后标记为已完成"——相当于 LLM 学会了"收到危险指令后短暂忽略并继续正常行驶"。

5. 两阶段训练

阶段训练什么数据冻结部分
Stage 1:视觉编码器预训练Vision Encoder(ResNet + PointPillars + BEV Decoder + 预测头)~3M 原始帧(指令标注前)
Stage 2:指令微调Q-Former + Adapters64K 导航片段 + 464K 通知指令Vision Encoder + LLM 全部冻结

Stage 2 的关键设计

• 训练时固定序列长度 T_max 构建 batch

• 相邻帧高度相似(~10Hz 采集),采用固定间隔采样 + 时序增强(随机前后偏移不超过间隔)

• 训练时对每个历史帧都做预测监督(增强信号),推理时只用最新帧的预测

6. 数据集构建

6.1 传感器数据采集

使用规则化专家代理(InterFuser)在 CARLA 中自动驾驶,收集约 3M 帧数据。覆盖 2500 条路线、8 个城镇、21 种环境条件(天气、时间段组合)。

6.2 指令标注

第二阶段将原始帧序列切分为导航片段(clip),每个 clip 对应一条导航指令。例如:车辆从 T0 帧开始左转到 Tn 帧结束 → 标注为"Hang a left at the next crossroads"。

6.3 指令类型(56 种)

类型示例说明
Follow"In [x] meters, switch to left lane."跟随/换道类
Turn"After [x] meters, take a left."转弯类
Others"Slow down now." "Feel free to start driving."其他操作
Notice"Watch for walkers up front." "There's a bike ahead."即时通知(紧急情况)

指令多样化策略

• 每种指令用 ChatGPT 生成 8 个语义相同、措辞不同的变体

误导指令:注入违反交通规则或不安全的指令(如单车道要求变道)

连续复杂指令:2~3 条连续指令组合("右转后直行到下个路口再右转")

7. 实验结果

7.1 LLM Backbone 对比(LangAuto Benchmark)

LLM BackboneLangAuto DS↑LangAuto-Short DS↑LangAuto-Tiny DS↑
Random Init.10.714.220.1
LLaMA31.342.852.2
LLaMA232.844.856.1
Vicuna33.545.355.5
Vicuna-v1.534.047.059.0
LLaVA-v1.536.250.666.5

LLaVA-v1.5 在所有 benchmark 上全面领先——预训练视觉理解能力对驾驶性能有显著迁移效果。Random Init(随机初始化 LLM)DS 仅 10.7,证明 LLM 的语言先验至关重要。

7.2 消融实验

模块设计DS↑RC↑IS↑
Baseline (LLaVA-v1.5)36.246.50.81
w/o Q-Former31.741.20.79
w/o BEV tokens33.945.90.72
w/o visual pre-training16.924.10.70

消融结论

视觉预训练最关键:去掉后 DS 暴跌 53%(36.2→16.9),验证了"感知先学习再冻结"的必要性

Q-Former 不可或缺:去掉后 DS 下降 12%,token 压缩不仅解决上下文限制,还起到信息筛选作用

BEV tokens 提升安全性:去掉后 IS 从 0.81 降到 0.72,BEV 特征对碰撞避免贡献显著

7.3 Notice 指令的效果

BackboneBenchmark车辆碰撞/km↓行人碰撞/km↓红灯违规/km↓
LLaVA-v1.5LangAuto0.330.030.92
LLaVA-v1.5LangAuto-Notice0.170.020.50
Vicuna-v1.5LangAuto0.300.031.18
Vicuna-v1.5LangAuto-Notice0.150.010.56

加入 Notice 指令后,车辆碰撞率近乎减半(0.33→0.17),红灯违规也大幅下降。这验证了"语言通知"能显著提升驾驶安全性——就像乘客提醒"小心红灯"一样有效。

8. Benchmark 设计

Benchmark说明难度
LangAuto指令自动按路线生成,导航/通知完整标准
LangAuto-Short路线较短,指令少中等
LangAuto-Tiny路线最短,场景简单入门
LangAuto-Notice含即时通知指令(行人、自行车、红灯提醒)安全增强
LangAuto-Sequential连续多指令场景(2~3 条组合)推理密集

9. 工程权衡分析

✓ 优势

• 首个将 LLM 真正放入闭环自动驾驶 loop 的系统

• 语言指令理解——支持 56 种自然语言指令 + 误导指令拒执行

• Notice 机制——乘客/导航系统可实时干预,碰撞率减半

• 模块化——Vision Encoder 可独立预训练和升级

• Q-Former 压缩——解决历史帧 token 爆炸

✗ 代价

• 推理延迟——LLM 前向传播 + Q-Former 计算,难以满足高速实时性

• 仅仿真验证——CARLA 8 城镇,未上真车

• 预训练成本——3M 帧数据收集 + Vision Encoder 训练

• PID 控制器——航点到控制的映射较简单,未学习端到端控制

10. 与其他端到端方法对比

维度LMDrive传统端到端(TCP/LAV)Agent-Driver
决策核心LLM(LLaVA-v1.5)CNN+MLPLLM(GPT-4o)+ 工具库
语言理解✅ 原生支持 56 种指令❌ 不支持✅ 通过 Tool 间接支持
视觉处理BEV + Q-Former直接编码感知模块 → 文本描述
经验积累❌ 需重新训练❌ 需重新训练✅ Memory 模块
闭环驾驶✅ CARLA closed-loop部分✅ CARLA closed-loop
可解释性中等(动作 token)强(自然语言推理链)