端到端自动驾驶VLM模型:LMDrive: Closed-Loop End-to-End Driving with Large Language Models

论文地址:https://arxiv.org/pdf/2312.07488

代码地址:https://github.com/opendilab/LMDrive

1. 摘要

一方面,目前自动驾驶领域取得了显著进展,但在遇到长尾场景或复杂城市路况时,当前的自动驾驶方法仍容易失效甚至导致严重事故。另一方面,大语言模型(LLMs)展现出了接近“通用人工智能”的推理能力。因此,利用大语言模型所具备的“人类知识”帮助自动驾驶应对长尾问题,提升端到端模型的可解释性,并与导航和驾驶员进行互动成为端到端自动驾驶研究的热点。论文提出 LMDrive —— 一个新颖的、语言引导的、端到端、闭环自动驾驶框架。LMDrive 能够融合处理多模态传感器数据和自然语言指令,从而实现与人类乘客或导航系统的交互,在真实指令场景下进行驾驶。主要创新点:

  • 使用冻结的预训练 LLM 保持强推理能力;
  • 为其引入多视角的相机和 LiDAR 编码器,以及可学习的输入/输出适配器;
  • 在 CARLA 模拟器上构建支持语言指导的数据集,涵盖动态场景与复杂指令;
  • 构造挑战性评估集(LangAuto Benchmark)。

2. 方法

 LMDrive 框架由两个部分组成:视觉编码器(Vision Encoder),用于处理多视角、多模态的传感器数据(相机 + LiDAR),并生成视觉 token;大语言模型(LLM)及其辅助模块,包括 tokenizer、Q-Former、Adapters,用于处理视觉 token 和语言指令,进而预测控制信号与任务完成状态。

2.1 视觉编码器

没有使用预训练的 CLIP 模型,设计了一个多视角多模态视觉编码器来处理 RGB 图像和 LiDAR 数据,并融合成 Bird's Eye View(BEV)视图,以生成视觉 token 输入给 LLM。为了提高视觉编码器的理解力,增加了感知和预测任务项,这些预测头只用于视觉预训练阶段,在指令微调和推理时将被移除。

图像编码(2D):对每张图像使用 ResNet提取 2D 特征图,将特征图展平成 token 序列,来自不同视角的 token 使用一个 Transformer 编码器进行融合。

点云编码(3D):LiDAR 输入使用 PointPillars处理点云数据,形成以自车为中心的 LiDAR 特征图,每个“pillar”覆盖 0.25m × 0.25m 区域,使用 PointNet进一步聚合特征,输出维度为C×H×W,作为 BEV 查询向量。

解码器:生成traffic light和waypoint的query,结合激光点云的query,以视觉特征作为KV,使用标准 Transformer 解码器,生成BEV token、traffic light token和waypoint token。

预训练:BEV token 接入 CenterPoint,预测目标边界框与速度;Waypoint token + 导航点输入 GRU,预测 N 个未来轨迹点;Traffic light token 输入两层 MLP,预测红灯/绿灯状态。

2.2 指令跟随的LLM模型

LLM模型用于将输入的视觉token和导航任务翻译成驾驶指令,LLM模型选用开源模型,如LLaMA-2、Vicuna-1.5或者LLaVA-v1.5,训练过程中会冻结LLM的参数,只会训练输入输出头。

文本 Tokenizer:采用主流 LLM(如 LLaMA)中使用的标准分词器(tokenizer)将自然语言指令转化为 token,这些 token 构成文本输入部分。

Q-Former:将图像/点云提取出的视觉 token 输入给语言模型会带来显著计算负担(比如 BEV token 的数量通常很大),因此采用 BLIP-2提出的 Q-Former 模块来进行视觉 token 压缩。具体做法:

  • 输入:来自前一阶段的三类 token(BEV / Waypoint / Traffic Light);
  • 对每一类输入 token 分别使用一个 Transformer 模块(Q-Former);
  • 每个模块中引入一组可学习的 Query token(如 4 个),通过 Cross-Attention 选择性地关注输入 token;
  • 输出:每类 token压缩为固定长度的语义向量(每帧 3×4=12 个 token),作为视觉信息输入语言模型。

Token Adapters:由于视觉 token 的维度(如 256)通常不同于语言模型 token 的维度(如 4096),我们引入了一组 token adapter 模块(通常是一层线性映射)来完成维度对齐。此外,在每一帧数据后附加一个 [SEP] token,用于帮助语言模型学习帧间结构。

输出解码:直接将车辆行驶轨迹文本化,模型直接按照字符输出轨迹,然后再转成数字即可。以自回归地生成这些轨迹点,推理的时间会比较长。

3. 总结

后续探索方向:

  • 更强语言模型:引入更大规模、具备推理能力的语言模型;
  • 结构化输出:结合语言输出和向量回归,提升精度与控制稳定性;
  • 实际部署:将此框架推广到真实车辆或更高保真度的仿真环境中;
  • CoT(思维链)解释性:进一步研究 LLM 输出语言的推理链条,与行为之间的对应关系。
### Task-agnostic 视频语言模型 (VLM) 的预训练及其在视频理解中的应用 #### 定义与背景 Task-agnostic 视频语言模型VLM)是一种能够处理多任务场景的通用型模型,旨在通过联合建模视频和文本数据来捕捉跨模态的信息交互。这种类型的模型通常通过对大规模未标注或多标签的数据集进行自监督学习完成预训练阶段[^2]。相比传统的任务特定模型,Task-agnostic VLM 更加灵活,在多个下游任务中表现出色。 #### 预训练方法概述 预训练的核心目标是从大量无标记或弱标记的多媒体数据中提取有用的特征表示。对于视频语言模型而言,常见的做法是将视频序列分解为离散的时间步,并将其映射到高维向量空间中。具体来说,给定一段视频片段 \( v \),以及对应的自然语言描述 \( t \),可以通过以下方式实现: 1. **Token化**: 将视频帧转换为一系列 token 嵌入,这一步骤可能涉及使用冻结的视觉编码器(如 ResNet 或 Swin Transformer)提取每帧的空间特征。 2. **时间建模**: 利用可训练的 MLP 层或其他结构进一步捕获帧间关系,从而得到最终的视频 token 表示。 3. **对比学习框架**: 在许多情况下,采用基于对比损失的目标函数优化模型参数,使得正样本对之间的相似度最大化而负样本最小化[^3]。 #### 应用于视频理解的具体案例分析 以 Meta AI 和 CMU 提出的任务无关视频语言模型为例,该架构展示了如何有效地结合来自不同源域的知识来进行广泛的视频理解和生成任务。此外,还有其他研究尝试比较不同类型 VLM 架构的效果差异,例如 BLIPBASE 和 XVLMCLIP 这两类分别代表了编解码器网络混合模式和平行流模式的设计理念。 当涉及到实际应用场景时,像 SeeDo 系统那样利用预先训练好的大型多模态语言模型去解析真实世界的演示录像成为一种新兴趋势[^1]。它不仅继承了传统模仿学习技术的优点——即把复杂的操作拆分成更易于管理的小单元;同时还引入了先进的 NLP 技术支持更加多样化的动作执行形式。 ```python import torch from transformers import VideoMAEModel, AutoTokenizer def extract_video_features(video_frames): video_encoder = VideoMAEModel.from_pretrained('videomae-base') tokenizer = AutoTokenizer.from_pretrained('bert-base-uncased') with torch.no_grad(): frame_embeddings = video_encoder(video_frames).last_hidden_state text_input_ids = tokenizer("A man is playing basketball", return_tensors="pt")['input_ids'] # Hypothetical fusion mechanism between visual and textual embeddings. fused_representation = combine_visual_textual(frame_embeddings, text_input_ids) return fused_representation def combine_visual_textual(vis_emb, txt_id): pass # Placeholder for actual implementation details. video_data = ... # Preprocessed input data structure containing frames. result = extract_video_features(video_data) print(result.shape) ``` 上述代码片段展示了一个简单的例子说明怎样加载现成工具包里的组件并组合起来形成初步解决方案雏形。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值