本文经自动驾驶之心公众号授权转载,转载请联系出处。
写在前面&笔者的个人理解
在目前自动驾驶领域,传统的感知(perception)-预测(prediction)-规划(planning)的常规端到端自动驾驶在处理常规场景时表现尚可,但在面对复杂场景或者长尾场景时会遇到较大的挑战。论文作者认为主要是因为目前常规模块的设计缺乏“场景理解”能力所导致的,比如感知模块常常只是检测识别常见物体,忽略了长尾物体和物体特性的识别。鉴于近期大视觉语言模型(LVLMs)在视觉理解和推理展现出的强大能力,作者将VLM应用在自动驾驶领域,并设计了一套特殊的CoT推理过程,同时提出了一种与传统自动驾驶系统相结合的方法,提高了精度的同时又能确保实时性的部署。
论文链接:https://arxiv.org/abs/2402.12289
DriveVLM的主要贡献
提出了一种将大视觉语言模型用于自动驾驶场景的方法DriveVLM,设计了场景描述、场景分析和层级规划地递进式思维链(CoT),分别对应于传统自动驾驶流程中的感知、规划和控制三个模块,期望借助大视觉语言模型的强大泛化和认知能力,实现比传统模块更优越的性能。
提出了一种大模型与传统自动驾驶模块相结合的方法DriveVLM-Dual,通过有选择性地与传统感知和规划模块进行交互,一方面将匹配的物体感知3D信息引入VLM一侧实现更好地特征分析,另一方面VLM输出的轨迹点可选择地送入传统规划模块,实现实时且更精细地轨迹规划。
提出了一套挖掘复杂和长尾驾驶场景的数据挖掘流程,并以此构建了多样化地SUP-AD数据集。该数据挖掘流程依次包括长尾/挑战性场景挖掘,人工筛选过滤,视频关键帧选取,场景标注,人工检验。
DriveVLM可视化结果
作者提供了几个DriveVLM的可视化场景展示。在图1中,DriveVLM在夜晚识别出前方慢速行驶的车辆,并提供了变道超车的驾驶决策。
在图2中,DriveVLM识别了一个倒塌的树木,并给出了稍微向右偏移的驾驶决策。
在图3中,DriveVLM准确的捕捉出交警示意继续前行的手势,展示了其对于物体行为理解的能力。
详解DriveVLM
图中是DriveVLM的模型pipeline,主要包括场景描述、场景分析、层级规划三个主要模块设计,下面将分别介绍。
一.场景描述
场景描述模块的功能主要分为两部分——环境描述和关键物体识别。其中环境描述主要是对共性的驾驶环境的描述,比如天气和道路状况等;关键物体识别则是为了找出对于当前驾驶决策产生较大影响的关键物体。
环境描述.
环境描述共包括以下四个部分:天气、时间、道路类型、车道线状况。
天气(E_weather):描述了当前驾驶场景的天气状况,比如晴天或者下雪等。像雨雪或者雾天这种天气状况自然会需要更加谨慎地驾驶策略。
时间(E_time):描述当前的时间段,比如白天还是夜间场景。像夜间场景由于能见度低也需要采取谨慎地驾驶策略。
道路类型(E_road):描述当前驾驶所处路段的类型,比如城市、高速、乡村等。不同路段可能存在不同类型的挑战,即需要不同地驾驶风格。
车道线状况(E_lane):提供了车道线状况的描述,包括自车所处车道和潜在的车道线选择。这些信息对于我们车道的选择和安全变道至关重要。
关键物体识别
区别于传统自动驾驶感知模块将所有待检测物体都检出,DriveVLM借鉴了人类在驾驶时的思考过程,专注于识别当前驾驶场景中最有可能影响自车驾驶决策的物体,称之为关键物体。得益于海量数据的预训练,VLM相比于传统3D目标检测器能够更好的识别出长尾的关键物体,比如路面杂物或者非常见动物等。对于每个关键物体,DriveVLM会分别输出其语义类别c和对应的2D目标框b。
二.场景分析
在传统端到端自动驾驶流水线中,预测(prediction)模块一般只输出物体的未来轨迹,来辅助后续规划模块进行决策。但这种单一的轨迹预测不能全面体现物体对自车驾驶决策的影响,很多物体对自车产生的影响不单单限于其未来潜在轨迹这么简单。得益于大视觉模型的发展,DriveVLM对当前驾驶场景进行更加全面的场景分析。
关键物体分析。在之前得到驾驶场景中的关键物体后,DriveVLM对关键物体特征和其对自车潜在的驾驶影响进行分析。在这里,作者将物体特征分为3个方面——静态属性(Cs)、运动状态(Cm)和特殊行为(Cp)。静态属性描述了物体固有的属性,比如道路标志中的标号或者标语,超出卡车车身长度的货物等,这些属性有助于自车确定一些潜在驾驶风险或对应的。
运动状态(Cm),包括位置、方向和动作等,描述物体在一段时间内的运动状态,与传统轨迹预测模块类似。特殊行为(Cp)则是指某些专属于该物体做出的可能影响自车驾驶的特定行为或者手势等,比如交警指挥交通的手势,面前的人在使劲挥手示意等。在实际应用中,作者并没有强制DriveVLM对于所有关键物体都输出这三方面的信息,而是使模型学会应该自适应地输出某个物体在这三方面中可能包含的方面。
场景总结
在分析完所有关键物体后,DriveVLM会对当前驾驶场景进行一个总结,除去汇集之前的分析信息之外,还有一些场景级别的额外的场景级别的分析会在这里完成。之后,所有信息会作为上下文进行后续的分层级规划。
层级规划
DriveVLM提出了一种逐渐递进地层级式规划,依次推理对应自车未来驾驶决策的元动作、决策描述、轨迹点三种规划目标。
元动作:每个“元动作”对应驾驶决策的一个基本粒度的动作,一系列元动作的序列可以一定程度上描述未来短时间内的驾驶决策。作者将元动作的类型归为了17种,比如加速、等待、向左\右变道等。可以按照其特点归为速度控制类、转向类、车道线控制类这三大类别。
决策描述:相对于简单动作粒度级别的“元动作”,“决策描述”包含了对于驾驶决策更加详细多维地描述。一个完整的“决策描述“一般包含三个基本元素:动作A,主体S,以及持续时间D。动作类似之前的元动作,比如“加速”,”转弯”,“等待”等。主体指的是自车动作所施加的物体,例如行人、交通信号或特定的车道等。持续时间表示动作的执行时间,比如动作应该持续多久或何时开始等。
文中提供了一个对应“决策描述”示例的分析:等待(A)行人(S)通过街道,然后(D)开始加速(A),并且汇入右侧车道(S)。这种结构化的决策描述有助于VLM输出规范且易于的驾驶指令。
轨迹点: 输出较为详细的轨迹描述后,DriveVLM接下来输出相应的轨迹点预测,记为W = {w1, w2, ..., wn}, wi = (xi , yi),代表未来固定时间间隔t时刻的位置。通过这种分层级设计,引导DriveVLM一步步地输出由易到难地决策规划,最后对应的轨迹点可以送入专门的规控模块进行进一步的改善和细化。
DriveVLM-Dual
尽管现有的大视觉语言模型在识别长尾物体和理解复杂场景方面表现优越,但根据现有研究和作者的初步实验表明,VLM有时在涉及到推理物体的细微运动状态改变时表现不佳。另外,由于大语言模型巨大的参数量,导致模型的推理时间相比传统自动驾驶系统往往具有较高的延迟,阻碍了其对环境的快速实时反应。为此,作者提出了DriveVLM-Dual,一种VLM与传统自动驾驶系统互相协作的解决方案。该方法包含两个关键性设计,一是在3D感知信息融合,二是高频轨迹细化操作。
3D感知信息融合
对于传统自动驾驶系统3D检测器检测到的目标物体,记为,其中表示第i个物体的3D目标框,表示其对应的语义类别。随后将这些3D目标框根据相机内外参反投影回2D图像坐标系,得到相应的2D目标框表示。将其与VLM这一分支识别到的关键物体Cj对应的目标框之间进行一种近似的目标框IoU匹配,将IoU得分超过一定阈值并且属于同一大的语义类别的关键物体记为匹配的关键物体(matched critical object),对于那些不符合条件的,则归为非匹配的关键物体。该过程可以用如下公式表示:
对于匹配的关键物体,将其在感知模块中预测得到的历史轨迹、朝向、中心点坐标等作为语言prompt送入VLM中的关键物体分析模块,用来辅助物体特征的推理。对于没有匹配的关键物体,比如一些传统3D感知模块难以识别的长尾物体,也依旧进行关键物体分析,只不过不使用的3D感知信息作为辅助。通过这种设计,能使得DriveVLM更加准确的理解关键物体的空间位置和细粒度的运动状态变化等。
高频轨迹优化
与传统规划器相比,由于DriveVLM具有视觉语言模型(VLMs)固有的巨大参数量,在生成轨迹时速度显著较慢。为了实现快速实时的推理能力,作者将它与传统的planner相结合形成了一个快-慢双系统设计。
在DriveVLM输出一个规划轨迹Wslow之后,将其作为一个参考轨迹送入经典的规划模块进行一个二阶段的轨迹优化。具体来说,对于基于优化的planner,Wslow作为优化求解器的初始解;对于基于神经网络的planner,Wslow作为输入query的形式,与原本planner的输入特征f相结合,经过网络生成新的轨迹Wfast。在实际应用时,该双系统是异步运行的,VLM分支主要负责task-level的规划,传统分支中的planner主要负责motion-level的规划,只在固定重叠时间接受来自VLM分支的轨迹输入。
任务与数据集
SUP任务
为了更好地衡量大语言模型在处理复杂和长尾驾驶场景中的能力,作者定义了名为SUP(scene understanding for planning)的任务和相应的评估指标。
输入数据包括来自周围摄像头的多视角视频集V,以及可选的来自感知模块的3D感知结果P,输出包括场景描述E,场景分析S,元动作A,决策描述D,轨迹点W。对于轨迹点W可以采用位移误差(DE)和碰撞率(CR)作为指标来评估生成的好坏,但对于文本内容的场景描述和分析,以及元动作序列的好坏并没有已有的评估方法,于是作者分别提出了使用LLM和动态规划的评估方法,详细可参见附录。
数据集构建
针对之前定义的SUP任务,作者提出了一种数据挖掘和标注的方法。并以此为基础构建了一个超过40个场景类别的自动驾驶数据集SUP-AD。该方法流程图如下所示,首先从海量自动驾驶数据中进行长尾目标挖掘和挑战性场景挖掘来收集样本数据,之后对于每个场景选择一个关键帧,并进行相应的场景信息标注。
长尾目标挖掘。 作者首先预定义了一系列长尾目标类别,比如异形车辆、道路杂物和横穿马路的动物等。接下来,作者使用基于CLIP的搜索引擎从海量自动驾驶数据中挖掘这些长尾场景,该搜索引擎能够使用语言 query 从大量的自动驾驶视频数据中挖掘与类别相关的驾驶数据。在此之后进行人工检查,以筛选出与指定类别不一致的场景。
挑战性场景挖掘。 除了长尾物体外,作者同样对具有挑战性的驾驶场景进行了挖掘。在这些场景的数据中,需要根据不断变化的驾驶条件调整自车(ego vehicle)的驾驶策略。这些场景一般是根据记录的驾驶操作变化得到的,例如急刹车等。在得到相应数据后,同样会进行人工筛选来过滤出不满足要求的数据。
关键帧选择。 每个挖掘出来的驾驶场景都是一个十几秒视频片段,在这么长的时间跨度中,选取“关键帧”至关重要。在大多数具有挑战性的场景中,关键帧是在需要显著改变速度或方向之前的时刻。根据综合测试,作者选择在实际操作前0.5秒到1秒作为关键帧,以确保改变驾驶决策的最佳反应时间。对于不涉及驾驶行为变化的场景,作者选择与当前驾驶情景相关的帧作为关键帧。
场景标注。 对于选取好关键帧后的数据,由一组标注员进行场景标注,包括任务提到的场景描述、场景分析和规划等内容信息。同时为了便于场景标注,作者开发了一个视频标注工具,能够比较方便的针对特定标注内容进行对应的标注和检查。最终某个场景关键帧的标注结果如下图所示
实验部分
Main Results
作者在提出的SUP-AD和nuScenes数据集上进行了相应的实验来验证DriveVLM的有效性。其中SUP-AD按照 7.5:1:1.5的比例来划分训练、验证和测试集,按照上文提出的两种评价指标进行了评测。 在nuScenes数据集上,作者遵循之前的工作,采用位移误差(DE)和碰撞率(CR)作为指标来评估模型在验证集上生成轨迹的性能。
其中在SUP-AD数据集上,作者展示了DriveVLM与几种大型视觉-语言模型在之前的性能比较,并与GPT-4V进行了对比,如表1所示。
DriveVLM采用Qwen-VL作为其基座模型,由于其本身强大的模型性能,相较于其他开源VLMs,如Lynx和CogVLM取得了最佳性能。尽管GPT-4V在视觉和语言处理方面表现出强大的能力,但无法对其进行微调,只能以in-context learning的方式来进行测试。作者提到这样通常会导致在场景描述任务中生成无关信息,按照所提的评估方法,这些额外信息经常被分类为幻觉信息,导致得分不高。
在nuScenes数据集上,作者将DriveVLM和DriveVLM-Dual与之前的经典方法进行了对比,如表2所示。当与VAD进行协同时,DriveVLM-Dual在规划任务的L2和CR指标下都取得了最先进的性能。虽然DriveVLM是为了理解复杂场景所设计的,但在nuScenes这种普通场景上也同样表现出色。
Ablation Study
模型设计。 为了验证每部分模块设计的必要性,作者在nuScenes数据集上对不同模块组合进行了消融实验,如表3所示。其中“Base”表示只进行层级规划,而不采用所提出的特殊的CoT推理设置;“CO”表示引入关键物体分析;“3D”表示引入匹配的3D感知结果作为额外的语言prompt。
可以看出,包含关键物体分析这一设计使得DriveVLM提高了决策的准确性,从而实现更安全的导航。而引入3D感知结果后,DrvieVLM生成的轨迹在L2和CR上都会有比较明显的下降,表明引入3D感知结果对于捕捉运动动态并改善轨迹预测至关重要。
推理速度。另外,作者还在NVIDIA Orin平台上测试了DriveVLM和DrvieVLM-Dual的推理速度,如下表所示。
由于 LLM 的参数量巨大,DriveVLM 的推理速度比类似于 VAD 的传统自动驾驶方法慢一个数量级,使得其很难在对实时性要求较高的车载环境中进行部署。然而,在与传统自动驾驶 Pipeline 以异步的快-慢速协作模式配合后,整体延迟取决于快速分支的速度,使得 DriveVLM-Dual 成为了现实世界部署的理想解决方案。
原文链接:https://mp.weixin.qq.com/s/g32V4b5VGsgsMwg-5hMkRQ