23年12月来自普渡大学、UIUC、Virginia大学多家高校及北美丰田研究中心的论文“LaMPilot: An Open Benchmark Dataset for Autonomous Driving with Language Model Programs“。
LaMPilot是一种用于自动驾驶领域规划的新框架,将任务重新思考为已建行为原语的代码生成过程。这种方法旨在解决解释和执行自发用户指令(如“超越前方汽车”)的难题,这些指令通常会给现有框架带来困难。引入LaMPilot基准,专门用于定量评估大语言模型(LLM)在转化人类指令为可行动的驾驶策略政策方面的功效。GPT-4在人类反馈的情况下,实现了92.7%的任务完成率和0.9%的最小碰撞率。
LaMPilot的灵感来源于Code as Policy[20],用写代码的LLM编写机器人策略代码,它用语言模型程序(LMP)作为动作空间,而不是加速和转向等低级控制命令。这一决定的动机是,程序表现时域上扩展和组合动作的固有能力,这对于解决复杂的长期驾驶任务(如超车)至关重要。
具体而言,为基于LLM的智体配备了涵盖各种功能驾驶原语的API,包括与感知相关的功能,如目标检测和车辆控制功能,如车道保持。LaMPilot框架的关键思想是使LLM智体能够通过代码生成将自然语言指令与详细的战略动作联系起来。
LaMPilot由三个关键组件组成:模拟器、数据集和评估器。在LaMPilot中,驾驶策略通过Python语言模型程序(LMP)进行阐述。主要方法包括在LaMPilot中基于人工注释指令创建提示,LLM处理这些提示,生成相应的代码;然后执行该代码,并在LaMPilot框架内评估其性能,如图所示:一旦初始化,结构化语言生成器解释模拟器环境,建立语言上下文;中央的LLM利用预定义的API处理输入提示并生成LMP;然后在模拟器中执行LMP;执行的策略由评估器进行评估,评估器为策略提供最终分数。
模拟器是LaMPilot环境的重要组成部分,建立在HighwayEnv[18]上,这个广泛用于自动驾驶和战术决策相关研究。它提供各种驾驶模型,并模拟多辆车之间的真实互动。HighwayEnv最初是为训练强化学习智体而设计的,在LaMPilot中进行扩展,包括适用于基于LLM智体的接口。此外,还实现了具有不同配置的自定义交叉路口,增加决策场景的多样性。该扩展实现了现有的“高速公路”环境,增强了模拟器的整体功能,对更广泛的驾驶场景进行评估。模拟包括随机生成各种密度设置的交通模式,涵盖拥堵的高峰交通时间和不太拥挤的道路条件。
LaMPilot数据集由4900个人工标注的交通场景组成,其中每个数据样本包括三个元素:
指令I,这是高级任务描述。
初始状态b,用于初始化模拟器。
确定目标状态G的一组标准,与指令I保持一致。
数据集分为三组:训练(3900个样本)、验证(500个样本)和测试(500个样本)。数据集包含各种指令,这些指令反映了现实世界需求的多样性和不可预测性。这些指令按机动类型进行分类,如转弯、变道和超车,以及场景类型,包括高速公路和十字路口设置。如图显示了指令中前四个单词的分布,突出数据集中指令的多样性。详细统计如表所示。
驾驶策略涉及对功能基元(functional primitives)的API调用,这些功能基元是专用API,旨在支持LLM根据指令生成可操作的规划。主要目标是利用LLM进行战略规划,同时有意避免其直接参与低级控制任务。由于LLM的自回归性质,完成长的生成可能会引入显著的延迟。这一特性使它们不太适合于时间紧迫的任务,如需要快速反应的目标回避。为了解决这一问题,API设计战略性地卸载了安全-紧要任务,使LLM能够专注于基于常识的决策,与其能力保持一致[49]。
功能基元套件是根据Mobileye责任敏感安全(RSS)[33]模型开发的。这些API有助于构建驾驶策略,最大限度地降低因策略不当而导致事故的风险。这种方法使工作与许多现有的方法不同,它们可能优先考虑API功能[56],而不强调安全可行性。
API套件分为四种主要类型:(1)自API:这些API提供有关自车状态的信息,如速度和位置;(2) 感知API:这些API包括目标和车道检测等功能,可以调用这些功能来获取周围环境的信息;(3) 规划API:当提供目的地时,这些API提供生成路线的功能;(4) 控制API:这些API将LLM生成的代码转换为车辆的低级命令,实现适当的响应[33]以避免碰撞。在执行生成的策略期间若发生异常的情况下,自车自动切换到预定义的“autopilot”模式,防止未定义的行为进行。
输入提示包括:环境上下文和API文档。环境上下文包括驾驶环境的相关信息。这些细节在模拟器中表示为数值矢量。作者开发了一个接口,允许LLM将数字矢量转换为自然语言描述,这样使用这些信息。这些向量包含来自模拟的语义属性,例如道路上其他车辆、自车和地图的信息。这种方法使该工作与该领域的其他最新进展不同[10],在该领域中,数字矢量直接输入LLM,而无需任何上下文翻译。具体来说,作者使用了一个结构化的语言生成器,将状态向量的数字转换为叙述格式。该叙述不需要LLM对解释进行任何额外微调。它提供了智体人环境的全面信息,包括其他道路使用者、自车状态和相关地图信息。
考虑示例指令进行右侧车道变更,其中LLM可能会建议操作change_lane_right。然而,控制器可能不直接支持其作为基元动作。为了弥补这一差距,在提示中包含API文档。本文档为LLM提供了有关可用API的基本信息,并指导其正确使用。这些文档不仅包括输入和输出规范,还提供了使用描述和背后的逻辑。将API文档集成到提示中,确保LLM生成的策略代码与自车的实际功能保持一致,从而促进可执行的动作规划。
LLM接收提示并负责生成一个完成(Completion)。LLM生成的完成,预计是用所提供的API编写的有效函数。这些函数的范围可以从简单的一次性函数到更复杂的生成器函数。此外,LaMPilot支持使用控制结构,如if-else和loop语句,使LLM能够创建动态反馈策略。
要在LaMPilot中执行LMP,需要使用Python执行函数。该函数将语言模型程序(LMP)代码作为输入字符串,以及定义执行范围的两个字典:(i)api,包括代码可能调用的所有API;(ii)策略,一个最初为空的字典,最终将包含合成函数和策略变量。如果LMP被设计为返回一个生成器,那么在执行exec函数后,该生成器将从本地字典中提取。
评估器中用三个关键条件来评估从初始状态b到目标状态g的驾驶性能:安全性(基于TTC)、舒适性(速度方差)和效率(时间)。当自车成功地从初始状态b转换到目标状态g时,任务被认为是完成的。具体来说,它需要满足特定的条件。例如,当车辆在目标车道上,并且其航向与车道的方向对齐,偏差在定义的阈值内,车道变更任务就完成了。
用最先进的大语言模型进行基准测试,其中包括开源和专有解决方案。评估的模型为:Llama 2[41]、PaLM 2[3]、ChatGPT[28]、GPT-4[30]和GPT-4 Turbo[29]。零样本设置配置了从API描述(A)、用户指令(I)和驾驶上下文(C)到可执行程序代码(P)的映射,其中输入提示由结构化语言生成器生成的(A),(I),和(C)中串联tokens组成。输出旨在提供在给定驾驶环境下遵循用户指令的可执行程序代码(P)。在少样本设置中,遵循标准范式[4],在测试实例之前包括k个人工示例{Ii,Ci,Pi},i=1~k。这些上下文示例有助于模型适应LaMPilot基准测试中的任务。
为了解决这些挑战并提高LLM在LaMPilot基准测试中任务的性能,引入了一种人在环方法。这种方法不同于大多数仅依赖体验式学习的数据驱动自动驾驶系统。相反,它将实践经验与理论知识相结合,类似于人类驾驶员如何发展驾驶技能。在这种方法中,LLM不仅作为规划器,而且作为整合人类反馈的平台[16,31,38]。如图所示:该工作流程图说明了在LaMPilot框架中LLM和用户之间的交互;该过程从用户提供指令(I)开始,LLM使用该指令来生成程序(P);该程序与LaMPilot模拟器交互,执行结果由人工评估;根据满意度的不同,系统可以将代码提交到代码库,也可以向LLM提供反馈以进行进一步改进。