LMDrive: Closed-Loop End-to-End Driving with Large Language Models

论文链接:https://arxiv.org/pdf/2312.07488.pdf
代码链接:https://github.com/opendilab/LMDrive

1. 摘要(Abstract)

     尽管自动驾驶领域最近取得了重大进展,但当遇到长尾不可预见事件和具有挑战性的城市场景时,现代方法仍然很困难,可能会发生严重事故:

  • 一方面,大型语言模型(LLM)已经显示出接近“通用人工智能”的表达推理能力。
  • 另一方面,先前的自动驾驶方法往往依赖于有限的格式输入(例如传感器数据和导航路线点),限制了车辆理解语言信息和与人类互动的能力。

     为此,港中文 & MMLab重磅推出LMDrive,这是一种全新的语言引导、端到端闭环自动驾驶框架:

  • LM-Drive独特地处理并集成了多模态传感器数据与自然语言指令,使其能够在现实的教学环境中与人类和导航软件进行交互。
  • 为了促进对基于语言的闭环自动驾驶的进一步研究,我们还公开发布了相应的数据集,其中包括大约64K的指令跟随数据clip,以及测试系统处理复杂指令和具有挑战性的驾驶场景的能力的LangAuto基准。

     进行了大量的闭环实验来证明LMDrive的有效性。据我们所知,本文是第一个利用LLM实现闭环端到端自动驾驶的工作。

2. 相关工作(Related Work)

端到端自动驾驶

最近,端到端自动驾驶领域取得了很大进展。

  • UniAD:设计了一个包含全栈驱动任务的框架,并利用查询统一接口在不同任务之间进行通信。
  • ThinkTwice:设计了一个Look模块来检索关键区域的信息,并利用这些特征来细化粗略预测。
  • ReasonNet:利用驾驶场景的时间和全局信息来提高感知性能并有利于遮挡检测。
  • InterFuser:提出了一种基于transformer的框架,以完全融合和处理来自多模态多视图传感器的信息,从而实现全面的场景理解。
  • TCP:提出了一种新的多步预测方法,将轨迹规划和直接控制这两个分支集成在一起。
  • LAV:引入了一些监督任务来学习视点不变表示,该表示可以在训练时提供更丰富的监督信号,并在推理过程中为复杂推理提供更多信息。
    除了之前讨论的模仿训练方法之外,还有几种方法试图结合强化学习策略。以监督的方式训练潜在DRL,以获得环境观测的潜在表示,并使用该表示作为输入进行强化学习。
  • Roach:使用了一个具有特权访问环境信息的强化学习代理,并提取一个模型作为最终代理
  • ASAPRL和TaEcRL:利用抽象技能,通过促进有效的探索和奖励信号,有效提高强化学习效率和最终表现。

然而,这些端到端的方法缺乏与人类(乘客)进行口头或文本交互的能力,并且在决策过程中通常具有较低的可解释性。

驾驶任务中的大语言模型

     在过去的几个月里,大型语言模型(LLM)取得了新的进展。此外,视觉大语言模型(VLLM)进一步引入了视觉编码器,并为LLM不仅解释文本数据,还解释其他模态的图像和数据打开了大门。在自动驾驶领域,最近的研究将LLM集成到自动驾驶系统中,以更好地解释和与人类的自然互动。一些研究采用了视觉语言模型方法,该方法可以处理多模态输入数据,并为驾驶场景提供文本描述和控制信号。例如:

  • DRIVEGPT4:提出了一种多模态LLM框架,该框架将一系列帧作为输入,然后生成对人类询问的响应,并预测下一步的控制信号。然而,由于该框架缺乏输入命令,预测的控制无法遵循特定的导航命令,这表明该框架很难在真实场景中部署。
    在这里插入图片描述

     与此同时,更多的研究人员专注于将驾驶情况转换为文本描述,作为LLM的输入,以直接解释和推理综合驾驶情况。在这一系列工作中:

  • GPT-Driver:通过将异构场景输入转换为语言标记,将运动规划重新表述为自然语言建模的任务。
  • LanguageMPC:利用LLM来推理复杂场景并输出高级驾驶决策。然后,该方法调谐参数矩阵以将决策转换为低电平控制信号。
  • LLM-Driver:利用数字矢量作为输入模态,并融合矢量化对象级2D场景表示,使LLM能够基于当前环境回答问题。

     然而,这项工作只考虑了开环设置中的驾驶问题,而忽略了累积误差、时间动作一致性和端到端可训练性等问题,这些问题对于将模型带入实际的闭环驾驶任务至关重要。据我们所知,我们是第一个在闭环环境中基于语言的端到端自动驾驶方法。相关数据集、基准和训练模型也是开源的,以促进社区的进一步研究。

3. 文章主体

3.1. 数据生成

数据集制作的目标是开发一种智能驾驶代理,该代理可以基于三种输入源生成驾驶动作:

  • 1)传感器数据(环视相机和激光雷达),使该代理能够生成感知并符合当前场景的动作;
  • 2) 导航指令(例如变道、转弯),使代理可以驾驶以满足自然语言的要求(来自人类或导航软件的指令);
  • 3)人类注意指令,使代理能够与人类互动并适应人类的建议和偏好(例如,关注对抗性事件、处理长尾事件等)。

本节描述了如何生成训练代理所需的多模态数据集,以及导航指令和人工通知指令的提示设计。具体来说,我们选择CARLA作为仿真器,因为它可以模拟真实的动态闭环世界,并且在端到端自动驾驶领域被广泛采用。数据采集包括两个阶段:

  • 1)利用专家代理收集传感器数据和控制信号;
  • 2)用指令解析和标记所收集的数据。

传感器和控制数据收集。

     我们利用基于规则的专家代理来创建一个包括大约3M个驱动帧的数据集。由于专家代理可以访问CARLA中的特权信息,因此该数据集将包括相机数据、激光雷达数据和每帧的控制动作。为了增强所收集数据集的多样性,该代理在2.5k条路线、8个城镇和21种环境条件(如天气、一天中的时间)上运行。我们使用四个RGB相机(左、前、右、后)和一个激光雷达。侧面摄像头的角度为60°。此外,我们对前面的图像进行中心裁剪,作为额外的聚焦视图图像,以捕捉远处红绿灯的状态。激光雷达有64个通道,每秒产生600K个点。

解析和语言注释。

     在第二阶段,我们将收集的数据解析为clip,并用适当的导航指令和可选的通知指令标记每个片段。解析过程将一系列帧作为输入,并将这些帧分段为clip,其中每个clip对应一个导航指令。例如,如果代理在第T0帧开始左转并在第Tn帧结束,我们将把(T0,Tn)标记为新剪辑,并指示“在下一个十字路口左转”。此外,如果在时间Ta发生对抗性事件1,我们将在该片段中添加一条通知指令,模拟真实场景,当紧急情况发生时,乘客或侧面辅助系统将与驾驶员进行通信。如图2所示,每个片段包括传感器数据、控制信号、相应的导航指令和可选的通知指令。解析后的剪辑在剪辑长度和相应指令方面的分布如图3所示。在我们的数据集中,我们收集了64K个解析片段和464K条通知指令。
在这里插入图片描述
在这里插入图片描述

指令设计

我们考虑三种类型的导航指令(跟随、转向和其他)以及一种类型的通知指令,共由56种不同的指令组成。表1显示了一些示例,完整列表可在补充材料中找到。为了使代理能够在现实的教学环境中驾驶,其中指令来自导航软件或人类:
在这里插入图片描述

  • 使指令多样化:考虑到自然语言的内在丰富性,对于每种类型的指令,使用ChatGPT API生成了八种不同的变体,每个变体具有相同的语义,但措辞不同。这使得语言解释更加全面和灵活,能够适应相同指令的不同传达方式。

  • 包含误导性说明:在现实世界中,导航软件或乘客可能会向AV发出违反交通规则或引发安全问题的误导性说明。例如,在单行道上,遵循“变左车道”的指示是危险的。为了提高我们的模型对误导性指令的稳健性,我们模拟了这些场景,并将它们添加到我们的数据集中。

  • 连接多个指令:在许多情况下,指令可能由两到三个连续的指令组成,例如“在这个十字路口右转,然后直行到下一个十字路口再右转。”我们还构建了一些连续的复杂指令数据,以模拟真实的基于导航的驾驶场景。

3.2. LMDrive解析

在这项工作中,我们提出了LMDrive,这是一个可以通过自然语言理解和遵循高级驾驶指令的框架。如图4所示,LM-Drive由两个主要组件组成:1)视觉编码器,处理多视图多模态传感器数据(相机和激光雷达),用于场景理解和生成视觉标记;2) 一个大型语言模型及其相关组件(标记器、Q-Former和适配器),该组件接收视觉标记和语言指令,以预测控制信号以及给定指令是否完成。
在这里插入图片描述

3.2.1. 视觉编码器

在视觉语言社区中,对齐视觉和语言的最常见方法可以是使用预先训练的CLIP模型来编码图像特征。然而,CLIP模型的大触发器和参数大小增加了其在AV系统中的部署难度。此外,AV感知系统通常是3D的,以包括激光雷达输入。因此,受InterFuser和TF++的启发,我们设计了一种多视图多模态视觉编码器来编码/融合传感器数据。如图5所示,视觉编码器由传感器编码部分和BEV解码器组成,传感器编码部分分别对图像和激光雷达输入进行编码,BEV解码器融合图像和点云特征以生成视觉标记,然后将其传递到语言模型。值得注意的是,通过添加额外的预测头,对视觉编码器进行感知任务的预训练,然后冻结编码器以供大型语言模型稍后使用。
在这里插入图片描述
传感器编码
对于每个图像输入,使用2D主干ResNet来提取图像特征图。然后将特征图展平为一维token。为了从多个角度全面理解全局上下文,来自不同视图的令牌将通过标准K层transformer编码器进行融合,每一层都包含多头自注意力、MLP块和layer normalization。对于激光雷达输入,采用3D骨干PointPillars将原始点云数据处理为以自车为中心的激光雷达特征,其中每个pillar包含0.25m×0.25m区域内的点。然后使用PointNet来聚合特征,并将特征图下采样到C×H×W,随后用作BEV查询。

BEV解码器
然后将上面编码的传感器特征传递到BEV解码器中以生成视觉标记。具体而言,BEV解码器被设计为具有K层的标准transformer。BEV点云特征作为H×W查询被馈送到BEV解码器,以关注多视图图像特征并生成BEV令牌。我们还将N个可学习查询和1个可学习询问馈送到BEV解码器,以分别生成N个路点token和1个红绿灯token。因此,三种类型的视觉标记(BEV、航路点和红绿灯)将包含丰富的场景信息,然后将馈送给大型语言模型。

使用预测头进行预训练
我们考虑了三个视觉编码器预训练任务:目标检测、未来航路点预测和红绿灯状态分类。对于目标检测,BEVtoken将通过一个阶段的中心点来预测Hm×Wm区域中目标的边界框和速度。对于航路点预测,我们将N个航路点标记和导航航路点依次传递到GRU网络中,以预测N个未来航路点。对于红绿灯状态分类,将2层MLP应用于红绿灯令牌。考虑了三个相应的损耗项:1)InterFuser中的检测损耗;2) l1路失分;以及3)交叉熵交通信号灯状态损失。请注意,这些预测头仅用于视觉编码器的预训练,并且将在LLM的训练和整个模型的推理中被丢弃。

3.2.2. LLM for instruction-following auto driving

如图4所示,在我们的框架中,LLM在整个驾驶过程中充当“大脑”,处理冻结视觉编码器为每一帧生成的传感器token,理解自然语言指令,生成必要的控制信号,并预测给定指令是否完成。具体而言,我们选择LLaMA作为语言主干,它已被广泛用于许多语言和视觉教学调整模型。我们还有三个相关的组件来桥接LLM与指令、视觉信息输入和动作预测:1)标记器,2)Q-Former,3)两个适配器。

指令和可视化tokenization
给定导航指令和可选通知指令,使用LLaMA标记器将指令转换为文本标记。请注意,执行一条指令的持续时间将从几秒钟到几分钟不等,并且我们的模型是在闭环设置中部署的。因此,在每一帧,我们利用所有历史传感器信息(具有最大极限Tmax)来降低累积误差并提高模型的时间一致性。具体而言,对于每帧的多视图多模态传感器输入,我们利用上一节中预先训练的视觉编码器来生成视觉标记(H×W BEV标记、N个航路点标记和一个红绿灯标记)。然而,视觉标记的数量(例如,每帧406个标记)对于LLM来说迅速增长得太大,因为通常需要数百个帧来完成一条指令。为了克服这一点,本文遵循BLIP-2 使用Q-Former来减少视觉标记的数量。具体来说,对于每一帧,我们使用M个可学习查询来通过交叉注意力层处理视觉令牌,这可以将每一帧的视觉令牌数量减少到M。随后,我们使用2层MLP适配器将Q-Former提取的令牌转换为与语言令牌共享相同的维度,然后将其馈送到LLM中。

行为预测
在接收到一系列指令和视觉标记后,LLM预测动作标记。然后应用另一个2层MLP适配器来预测未来的路点,以及指示给定指令是否已完成的标志。注意,为了增强监督信号,我们还将在训练期间对每个历史帧进行预测,并且在推理时只执行最新帧的预测。为了获得最终的控制信号,包括制动、节流和转向,遵循LBC,使用两个PID控制器进行横向和纵向控制,分别跟踪预测航路点的航向和速度。

训练目标。当微调LLM及其相关组件时,我们考虑两个损失项:1)l1航路点损失;2) 分类损失(交叉熵),用于确定当前帧是否完成给定的指令。

3.3. LangAuto基准

我们提出了LangAuto(语言引导的自动驾驶)CARLA基准,这是第一个评估语言指令下闭环驾驶性能的基准。与之前的CARLA基准测试Town05和Longest6相比,我们的基准测试仅为AV提供自然语言的导航指令和可选通知指令。

具体而言,LangAuto基准涵盖了CARLA的所有8个公共城镇,包括各种场景(如高速公路、十字路口、环形交叉口)。我们还考虑了16种环境条件,包括7种天气条件(晴朗、多云、潮湿、中雨、多云、大雨、软雨)和3种日光条件(夜间、中午、日落)的组合。此外,LangAuto由三个轨道组成,以全面测试agent的指令跟随能力:

  • LangAuto跟踪:对于每条路线,都会根据代理的当前位置向代理提供并更新导航指令。我们还将这条赛道分为三个不同路线长度的经典赛道,以更好地区分性能。路线长度超过500米的LangAuto,路线长度在150米到500米之间的LangAuto Short,以及路线长度短于150米的LangAuto Tiny。
  • LangAuto-Notice跟踪:在LangAuto跟踪的基础上,我们向代理添加了额外的通知说明。该设置模拟了乘客或其他辅助系统可以在长距离复杂或对抗性场景中发出实时通知的真实情况,这通常是AV系统难以自行处理的。理想情况下,能够理解和利用指令的代理可以实现更好的性能。
  • LangAuto-Sequential跟踪:基于LangAuto跟踪,我们将10%的连续2到3条指令合并为一条长指令。此设置模拟了来自乘客或导航软件的多语句指令的现实场景。
    请注意,误导性指示将随机(~5%)间歇性地提供给驾驶代理,并持续一定的时间(1-2秒)。驾驶代理应拒绝这些误导性指令,并执行符合当前场景的安全操作,直到产生下一个正确指令。

4. 实验效果

定量结果

在这里插入图片描述

消融实验

在这里插入图片描述

LangAuto-Notice Benchmark

在这里插入图片描述

LangAuto-Sequential Benchmark

在这里插入图片描述

可视化结果

在这里插入图片描述

5. 补充说明

  • 参考文献:
    【1】 微信公众号:驶向『闭环』| LMDrive:首篇基于LLM的闭环端到端自动驾驶

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/470864.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

构建智慧交通平台:架构设计与实现

随着城市交通的不断发展和智能化技术的迅速进步,智慧交通平台作为提升城市交通管理效率和水平的重要手段备受关注。本文将探讨如何设计和实现智慧交通平台的系统架构,以应对日益增长的城市交通需求,并提高交通管理的智能化水平。 ### 1. 智慧…

协调尺度:特征缩放在机器学习中的重要作用

目录 一、介绍 二、背景知识 三、了解功能缩放 四、特征缩放方法 五、特征缩放的重要性 六、实际意义 七、代码 八、结论 一、介绍 特征缩放是机器学习和数据分析预处理阶段的关键步骤,在优化各种算法的性能和效率方面起着至关重要的作用。本文深入探讨了特征缩放的…

Kotlin基本语法2基本内置方法

1.Kotlin的可空性 fun main() {var str:String? "butterfly" //?问好代表可空类型str null } 安全的管理 1.1 安全操作调用符 fun main() {var str:String? "butterfly" //?问好代表可空类型str nullprintln(str?.capitalize())//当String为null时…

找不到目标和方向,怎么办?

现代社会里,许多人常见的症状,就是「空心病」。 什么是空心病呢?类似这样: 我知道要有目标,但我就是不知道想做什么,感觉对一切事物都提不起兴趣,没有动力,怎么办? 这个…

京东护网面试题汇总

1 、JNI 函数在 java 中函数名为 com.didi.security.main,C 中的函数名是什么样的? com_didi_security_mian java.com.didi.security.main 2 、Frida 和 Xposed 框架? 3 、SSRF 利用方式? 4 、宏病毒? 5 、APP 加壳&a…

Qt:自定义信号,信号emit,传参问题,信号槽与moc

一、自定义信号,信号emit 1、自定义信号 在头文件中 加入signals: 就可以编写信号 2、emit emit的作用是通知信号发生 二、跨UI控件传参 每次按Dialog添加按钮主控件数字会增长 // .h private slots:void on_btnAdd_clicked(); signals:void sign…

新时代异步 IO 框架:IO_URING 的原理、用法、业界示例分析

文章目录 IO_URING基本介绍常见 I/O 模型IO_URING 原理核心结构工作模式高级特性 用法APIliburing基本流程Demo 业界示例SeaStar / ScyllaDBCEPHRocksDBClickHouse IO_URING 基本介绍 常见 I/O 模型 当前 Linux 的几种 I/O 模型: I/O 模型 同步 I/O 是目前应用最…

每日一练:LeeCode-98、 验证二叉搜索树【二叉搜索树+DFS】

本文是力扣LeeCode-98、 验证二叉搜索树【二叉搜索树DFS】】 学习与理解过程,本文仅做学习之用,对本题感兴趣的小伙伴可以出门左拐LeeCode。 给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下&am…

LeetCode 每日一题 Day 62 - 75

1686. 石子游戏 VI Alice 和 Bob 轮流玩一个游戏,Alice 先手。 一堆石子里总共有 n 个石子,轮到某个玩家时,他可以 移出 一个石子并得到这个石子的价值。Alice 和 Bob 对石子价值有 不一样的的评判标准 。双方都知道对方的评判标准。 给你…

基于MQTT协议的消息代理软件(Mosquitto)介绍与应用

文章目录 一、Mosquitto是什么二、Mosquitto的特点三、Mosquitto常用命令四、Mosquitto的主要应用场景五、Mosquitto的下载与安装六、Mosquitto如何使用 一、Mosquitto是什么 Mosquitto是一个开源的消息代理软件,它实现了MQTT(Message Queuing Telemetry…

OTA升级时序

ECU启动时序 在上电/复位后, ECU 执行 Bootloader 程序。 Bootloader 程序首先执行一些基本的初始化,然后检查外部编程请求标志位是否置为 TURE。如果外部编程请求标志位置为 TURE,即使应用程序是有效的,Bootloader 程序 也会继续…

[OPEN SQL] 更新数据

UPDATE语句用于更新数据库表中的数据 本次操作使用的数据库表为SCUSTOM&#xff0c;其字段内容如下所示 航班用户(SCUSTOM) 需要操作更新以下数据 1.更新单条数据 语法格式 UPDATE <dbtab> FROM <wa>. UPDATE <dbtab> FROM TABLE <itab>. UPDATE &l…