51c自动驾驶~合集43

我自己的原文哦~      https://blog.51cto.com/whaosoft/12930230

#ChatDyn

上交大最新ChatDyn:一句话操纵三维动态

理解和生成真实的三维虚拟世界是空间智能的核心。所生成的三维虚拟世界能够为自动驾驶、xxx等AI系统提供高质量闭环仿真训练场,高效提供源源不断的训练数据,并以极低成本合成罕见情景进行测试。目前,虽然我们有了Diffusion,三维虚拟世界的画质呈现大幅提升,但是虚拟世界中前景物体交互行为的一致性、可靠性、可控性仍然很低,限制了这一领域取得实质性突破。

为了突破现有困境,上海交通大学人工智能学院陈思衡团队联合上海人工智能实验室,马普所,苏黎世联邦理工和香港大学的研究者们重磅推出ChatDyn,这是首个实现自然语言驱动的街景多参与者互动与真实动态生成的系统,统筹考虑高层次的规划和低层次执行,一并生成丰富并带有交互信息的交通参与者动态。如样例1所示,输入指令“A person is taking a taxi at the left roadside, and a vehicle overtakes the taxi. Two persons are walking together with one's arm around another's shoulder. A person is chasing another person along the roadside.”即可生成相关动态场景,包括了人与人交互,人与车交互等复杂动态交互。

,时长00:07

,时长00:07

样例 1(上图白膜,下图带蒙皮)包含多种不同交互类型(人车交互,人人交互),并能够依据高层级轨迹控制行人、车辆动态。指令:A person is taking a taxi at the left roadside, and a vehicle overtakes the taxi. Two persons are walking together with one's arm around another's shoulder. A person is chasing another person along the roadside.

ChatDyn的核心理念在于结合高层次规划与低层次控制,以创建一个真实的仿真系统。大型语言模型(LLM)擅长高层次规划,而基于物理的方法则非常适合生成细粒度的低层次控制。基于这一观察,ChatDyn将多LLM代理用于高层次规划,并结合基于物理的执行器进行低层次生成。通过集成高层次和低层次组件,ChatDyn允许用户输入语言指令来指定需求。然后,它会根据指定的场景生成真实的动态,涵盖包括行人和车辆在内的多种交通参与者,并支持参与者之间复杂多样的互动。

主页链接:https://vfishc.github.io/chatdyn/
论文链接:https://arxiv.org/pdf/2412.08685​

ChatDyn整体设计

ChatDyn能够解读并分析用户的语言指令,然后生成与之相符的场景动态。ChatDyn采用了两阶段的处理流程:高层次规划阶段负责在复杂和抽象的指令下规划轨迹和行为;低层次生成阶段则负责生成细粒度的真实动态。由于用户指令可能包含许多需要精确控制的具体细节,以及需要理解的抽象语义,ChatDyn利用多LLM-agent角色扮演方法,将每个交通参与者视为一个LLM-agent。该方法充分利用了LLM在理解语义信息和广泛常识上的能力,通过特定的工具和交互过程完成高层次的轨迹和行为规划。每个交通参与者的对应代理还配备了一个执行器作为工具之一。在高层次规划完成后,执行器利用规划结果执行低层次生成过程。执行器基于高层次规划生成细粒度、真实且物理上可行的动态。

图片

图 1 ChatDyn系统结构​

基于规划的行人动态生成

行人执行器(PedExecutor),根据高层次规划中规划的轨迹和行为生成低层次的行人动态。行人行为可以细分为由语言直接指定的单一代理行为和多个代理之间发生的互动行为。因此,挑战在于如何同时处理轨迹跟随、单一代理的运动规范以及多代理之间的互动,同时保持类人品质。为此,PedExecutor利用统一的多任务训练,通过单一策略执行LLM规划的轨迹、单一代理行为和多代理互动。PedExecutor采用了多任务统一训练的方式,能够使用一个策略网络实现多种不同控制信号下的生成,并能够完成预先设定的交互行为且结合物理引擎得到相应的物理反馈。为了提升最终行人动态的质量和真实性,动作空间采用了层级控制提供先验信息,而奖励函数使用身体遮蔽的对抗性运动先验(AMP)来鼓励类人的控制行为。最终,PedExecutor返回的动态能够遵循规划轨迹并完成预期行为,从而生成真实的行人动态。

图片

图 2 PedExecutor结构设计​

基于规划的车辆动态生成

车辆执行器(VehExecutor),根据高层次规划的轨迹生成最终的真实且物理上可行的车辆动态控制策略,这些轨迹在初始阶段可能会违反某些动态约束。为了引入物理约束并实现精确控制,VehExecutor利用基于物理的过渡环境,并结合历史感知的状态和动作空间设计。最终的动态通过累积车辆的位置和航向信息从环境中获得。

图片

图 3 VehExecutor结构设计​

实验结果

系统整体效果

我们在开头展示了系统输出来自两个场景。每个生成的输出都包含了丰富的交通参与者,基于用户的指令进行生成。从系统的输出中,我们可以看到以下几点:(i)互动得到了全面展示,包括人车互动(例如打车、避让、减速)、车与车的互动(例如换道、超车),以及人与人之间的互动(例如推搡、追逐、肩并肩走)。不同类型交通参与者之间的这些互动使得场景动态更加多样化和真实;(ii)系统实现了精确和细致的控制,每个场景描述都较为复杂,可能包含抽象的语义信息。通过多LLM-agents角色扮演的设计,复杂的指令得到了准确分析和执行,抽象的语义信息有效地被分解成可执行的指令,最终生成动态;(iii)生成的结果高度逼真。基于物理的控制策略使行人和车辆的动态表现得既真实又直观,特别是在展现人与人之间的互动时,突出体现了物理反馈。指令:A person pushes another person, and another person is making a phone call, then walks along the roadside. A vehicle turns right at the intersection, and a hurried vehicle overtakes a stationary one.

,时长00:07

,时长00:07

样例2(上图白膜,下图带蒙皮)包含多种交互,能够实现交互的物理反馈,并能够控制行人、车辆进行具体细致的行为。指令:A person pushes another person, and another person is making a phone call, then walks along the roadside. A vehicle turns right at the intersection, and a hurried vehicle overtakes a stationary one.

高层次规划对比

我们将LLM agent生成的规划轨迹与现有的基于语言的交通生成方法进行比较,验证高层级规划的结果是否让用户满意。结果表明,ChatDyn始终生成更准确的规划结果,这些结果更符合描述,且更受用户偏好。我们还提供了视觉示例,其中也展示了ChatDyn在包含行人的场景中的一些规划结果。ChatDyn能够准确满足需求,生成符合规范的高质量输出,即使在涉及行人的场景中也能表现优异。

图片

表 1 高层次规划对比

图片

图 4 高层次规划对比

行人动态生成对比

我们评估了PedExecutor在轨迹跟随和动作模仿任务中的表现。在分层控制和相关训练策略的支持下,PedExecutor生成了更高质量的动态,并在跟随和模仿任务中展示了高度竞争的表现。我们还评估了执行互动任务的过程,以确定每种方法在完成这些任务中的有效性。凭借分层控制和身体遮蔽的AMP,PedExecutor不仅在任务成功率上表现优秀,还能保持高质量、类人的输出。

图片

表 2 PedExecutor模仿与跟随任务对比

图片

表 3 PedExecutor交互任务对比

图片

图 5 PedExecutor交互任务可视化对比

,时长00:34

视频 3. PedExecutor对比视频

车辆动态生成对比

我们通过测量位置误差和速度误差,评估了VehExecutor在不同初始速度下的精度。VehExecutor在所有速度下始终表现出最佳的准确率。

图片

表 4 VehExecutor对比实验结果

,时长00:17

视频 4 VehExecutor对比视频

总结

ChatDyn的突破,标志着我们在模拟真实世界动态方面迈出了重要一步。通过将大型语言模型(LLM)的高层次规划能力与基于物理的方法的低层次控制相结合,ChatDyn能够精确地执行复杂的语言指令,从而生成街道场景中交互式、可控制及真实的参与者动态。这种结合不仅提高了模拟的准确性,还极大地增强了虚拟环境的真实感和沉浸感。ChatDyn能够细致全面地模拟场景物体动态,进而能够作为先验辅助下游方式例如渲染引擎、生成模型等进行成像,助力构建更加真实,可控的世界模型。ChatDyn中的相关方法也能够在特定优化下应用于室内等场景,进行室内场景的动态仿真。

#UniGraspTransformer

各种形状和方向的物体都能抓取!UniGraspTransformer不一般

论文标题:UniGraspTransformer: Simplified Policy Distillation for Scalable Dexterous Robotic Grasping

论文链接:https://arxiv.org/pdf/2412.02699

项目链接:https://dexhand.github.io/UniGraspTransformer/

作者单位:微软亚洲研究院 悉尼大学 新加坡国立大学

UniGraspTransformer的出发点

UniGraspTransformer是一种基于Transformer的通用网络,用于灵巧机器人的抓取任务,具有简化训练流程并提升可扩展性与性能的优势。与需要复杂多步骤训练流程的先前方法(如UniDexGrasp++)不同,UniGraspTransformer采用简化的训练过程:首先,通过强化学习为单个物体训练专用策略网络,以生成成功的抓取轨迹;随后,将这些轨迹蒸馏到一个统一的通用网络中。本文的方法使得UniGraspTransformer能够高效扩展,支持多达12个自注意力模块,用于处理数千种具有不同姿态的物体。此外,该模型在理想化输入和现实世界输入中都表现出了良好的泛化能力,适用于基于状态和基于视觉的环境。值得注意的是,UniGraspTransformer可以为各种形状和方向的物体生成更广泛的抓取姿态,从而实现更加多样化的抓取策略。实验结果表明,在多个物体类别上,UniGraspTransformer相比最先进的方法UniDexGrasp++表现出显著的性能提升。在基于视觉的场景中,其抓取成功率分别在以下任务中实现了提升:对于已见物体提高3.5%,对于已见类别的未见物体提高7.7%,对于完全未见的物体提高10.1%。

方法设计

灵巧机器人的抓取任务依然是机器人领域的一大挑战,尤其是在处理形状、尺寸及物理属性多样的物体时更为复杂。灵巧机械手由于其多自由度以及复杂的控制需求,在执行操作任务时面临独特的困难。尽管方法如UniDexGrasp++ 在这一领域取得了显著进展,但当单一网络需要处理大量且多样化的物体时,其性能会显著下降。此外,UniDexGrasp++ 采用了多步骤的训练流程,包括策略学习、基于几何的聚类、课程学习以及策略蒸馏等,这种复杂的训练方式限制了方法的可扩展性并降低了训练效率。

在本研究中,本文简化了通用网络的训练流程,使其能够处理数千种物体,同时提升了性能和泛化能力。本文提出的工作流程清晰简洁:

  1. 为训练集中每个物体单独训练策略网络:利用强化学习方法,通过精心设计的奖励函数,引导机器人掌握针对特定物体的抓取策略;
  2. 生成大量成功抓取轨迹:使用这些经过充分训练的策略网络,生成数百万条成功的抓取轨迹;
  3. 训练通用Transformer网络:基于这些丰富的抓取轨迹集,在监督学习框架下训练一个基于Transformer的通用网络,即UniGraspTransformer,使其能够高效泛化到训练中见过的物体以及全新未见的物体。

本文的架构提供了以下四个主要优势:

  • 简洁性:本文直接以离线方式将所有单独的强化学习策略蒸馏到一个通用网络中,无需使用任何额外的技术,例如网络正则化或渐进蒸馏。
  • 可扩展性:较大的抓取网络通常能够处理更广泛的物体,并在形状和尺寸的变化中表现出更强的鲁棒性。本文的方法利用离线蒸馏,使得最终网络——UniGraspTransformer——可以设计为更大规模,支持多达12个自注意力模块。与传统的在线蒸馏方法相比,这种方法提供了显著的灵活性和容量,而后者通常依赖于较小的MLP网络以确保收敛,但限制了可扩展性。此外,本文的专用策略网络设计为轻量级,每个网络仅需要处理单个物体,从而在不牺牲性能的前提下确保效率。
  • 灵活性:每个专用策略网络在一个受控的、理想化的环境中进行训练,在该环境中,系统的全状态(包括物体表示,如完整的点云;灵巧机械手状态,如手指关节角度;以及它们的交互,如手-物体距离)是完全可观测且高度精确的。本文的架构能够将这种理想环境下的知识蒸馏到更实用的真实世界环境中,即使某些观测可能不完整或不可靠。例如,物体的点云可能存在噪声,或者物体姿态的测量可能不够精确。这些专用策略网络的主要作用是为各种物体生成多样化的成功抓取轨迹。在蒸馏过程中,这些抓取轨迹作为标注数据,使本文能够利用现实环境中的输入(如带噪声的物体点云和估计的物体姿态)训练UniGraspTransformer模型,从而预测出与理想环境中的成功抓取轨迹高度一致的动作序列。
  • 多样性:本文的更大规模通用网络结合离线蒸馏策略,不仅能够抓取数千种不同的物体,还展现出为各种方向的物体生成更广泛抓取姿态的能力。这相较于先前的方法(如UniDexGrasp++)有显著提升,后者通常在不同物体间生成重复且单一的抓取姿态。

在本文的实验中,所提出的方法在多个评估环境下相较于现有最先进方法UniDexGrasp++展现了显著的性能提升。具体而言,本文在两种设置下对方法进行了评估:

  1. 基于状态的设置:在此设置中,物体的观测信息与灵巧机械手的状态由模拟器提供,具有完全的精确性。
  2. 基于视觉的设置:在此设置中,物体的点云由多视图重建生成。

在多种物体类型上,本文的方法始终优于UniDexGrasp++,包括已见物体、已见类别中的未见物体,以及来自未见类别的完全未见物体,如图1所示。例如,在基于视觉的设置下,本文的方法分别在以下任务中实现了性能提升:对已见物体提高3.5%,对已见类别的未见物体提高7.7%,对完全未见类别的物体提高10.1%。

图1. UniDexGrasp、UniDexGrasp++ 和本文提出的 UniGraspTransformer 在基于状态和基于视觉两种设置下的性能比较。对于每种设置,成功率分别在以下三种任务中进行评估:已见物体、已见类别中的未见物体,以及来自未见类别的完全未见物体。

图2. UniGraspTransformer 概览
(a) 专用策略网络训练:每个单独的强化学习策略网络被训练以抓取特定物体,并适应不同的初始姿态。
(b) 抓取轨迹生成:每个策略网络生成  条成功的抓取轨迹,构成轨迹集合 。
(c) UniGraspTransformer 训练:利用轨迹集合 

本文研究了两种设置——基于状态和基于视觉。这两种设置的主要区别体现在物体状态和手-物体距离的输入表示(图中以“*”标注)。S-Encoder 和 V-Encoder 的具体架构请参考图3。

图3. 基于状态的设置中物体点云编码器 S-Encoder 的网络架构示意图

该过程从物体点云中采样 1,024 个点,生成维度为 

在推理阶段,仅使用编码器,将物体点云转换为 128 维的物体特征。

表1. 专用策略网络的输入类型

输入被组织为五个组别,每组的具体元素定义详见附录。这些输入类型同样适用于本文的 UniGraspTransformer。

实验结果

图4. 抓取姿态多样性的定量分析

图5. 比较 UniDexGrasp++(上排)和本文提出的 UniGraspTransformer(下排)生成的抓取姿态。每列展示了同一物体在相同初始姿态下的两种不同抓取姿态。

表2. 与现有最先进方法在灵巧机器人抓取任务中的通用模型对比

在基于状态和基于视觉的设置下,通过成功率进行评估。对于已见类别中的未见物体及完全未见类别的物体的评估,反映了模型的泛化能力。标记 † 的结果为 UniDexGrasp++ 中报告的数据。“Obj.” 表示物体,“Cat.” 表示类别。

表3. 不同  值对 UniGraspTransformer 性能的影响分析

针对每个专用策略网络(共 3,200 个),本文生成  条成功的抓取轨迹,并将其蒸馏到 UniGraspTransformer 中。该表分析了随着 

表4. UniGraspTransformer 中自注意力模块数量对性能的影响分析

模型由 

表5. 不同数量专用策略网络蒸馏到 UniGraspTransformer 的影响分析

表6. 不同输入组件对 UniGraspTransformer 训练的影响

“Prev.”:先前状态;“Obj.”:物体;“Feat.”:特征;“Dist.”:距离;“SR”:成功率。

表7. 使用近似估计(特别是局部物体点云的中心和PCA)对性能的提升

表8. 基于视觉的物体编码器在是否使用蒸馏损失情况下对 UniGraspTransformer 性能的影响

表9. 引入奖励  和两种奖励变体  对专用策略网络性能的影响

总结

本文提出了UniGraspTransformer,一种基于Transformer的通用网络,用于简化灵巧机器人抓取任务的训练流程,同时在抓取策略的可扩展性、灵活性和多样性方面实现显著提升。本文的方法通过专用的强化学习策略网络为单个物体生成抓取轨迹,随后采用高效的离线蒸馏过程,将这些成功的抓取轨迹整合到一个单一的、可扩展的模型中,从而简化了传统复杂的训练管线。UniGraspTransformer 能够处理数千种物体及其多样化的姿态,展现出在基于状态和基于视觉的多种设置中的鲁棒性和适应性。尤其值得注意的是,该模型在已见物体、已见类别的未见物体以及全新类别的未见物体上显著提升了抓取成功率,相较当前最先进方法,在各类评估环境下均实现了大幅性能改进。

#DrivingRecon

港科技最新DrivingRecon:可泛化自动驾驶4D重建新SOTA!

从这一两年发表的论文数量可以看出,自动驾驶街景的重建与仿真备受关注,由此构建的自动驾驶仿真器对corner case的生成以及端到端模型的闭环评估/测试都非常重要,本次分享的是一篇关于自动驾驶场景4D重建的工作DrivingRecon。

  • 论文链接: https://arxiv.org/abs/2412.09043
  • 开源地址: https://github.com/EnVision-Research/DriveRecon

过去有很多使用3DGS或者Diffusion来做自动驾驶街景重建/生成的工作,比较具有代表性的是StreetGaussian,OmniRe这一类借助3D bbox将静态背景和动态物体解耦的框架,后来又出现了使用4D NeRF学习动态信息的方法,虽然取得了不错的效果,但这些方法都有一个共性,就是需要不断的训练来进行重建,即每个场景训练一个模型,非常耗时。因此作者提出了一种可泛化的自动驾驶4D重建模型DrivingRecon。在模型中,作者引入了PD-Block来更好的融合相邻视角的图像特征,消除重叠区域的高斯;也引入了Temporal Cross-attention来增强时序的信息融合,并且解耦动态和静态物体来更好的学习几何和运动特征。实验结果表明,与现有的视图合成方法相比,DrivingRecon 方法显著提高了场景重建质量和新视图合成。此外,作者还探讨了 DrivingRecon 在模型预训练、车辆自适应和场景编辑中的应用。​

相关工作回顾

驾驶场景重建

现有的自动驾驶模拟引擎如 CARLA或 AirSim,在创建虚拟环境时需要花费很多时间,而且生成的数据缺乏现实性。Block-NeRF和 Mega-NeRF提出将场景分割成不同的Block用于单独建模。Urban辐射场利用来自 LiDAR 的几何信息增强了 NeRF 训练,而 DNMP利用预先训练的可变形mesh primitive来表示场景。Streetsurf将场景分为近景、远景和天空类别,获得较好的城市街道表面的重建效果。MARS使用单独的网络对背景和车辆进行建模,建立了一个实例感知的仿真框架。随着3DGS的引入,DrivingGaussian引入了复合动态高斯图和增量静态高斯,而 StreetGaussian优化了动态高斯的跟踪姿态(位姿),并引入了四维球谐函数,用于不同时刻的车辆外观建模。Omnire进一步关注驾驶场景中非刚性对象的建模,例如运动的行人。然而,这些重建算法需要耗时的迭代来建立一个新的场景。

大型重建模型

一些工作提出通过训练神经网络来直接学习完整的重建任务,从而大大提高了重建速度。LRM利用大规模多视图数据集来训练基于Transformer的 NeRF 重建模型,训练完的模型具有更好的泛化性,在单次模型前向传递中,从稀疏姿态图像中重建以物体为中心的3D形状质量更高。类似的工作研究了将场景表示改变为高斯溅射,也有一些方法改变模型的架构以支持更高的分辨率,并将方法扩展到3D 场景。L4GM 利用时间交叉注意力融合多帧信息来预测动态物体的高斯表示。然而,对于自动驾驶,还没有人探索融合多视图的特殊方法。简单的模型会预测相邻视图的重复高斯点,显著降低了重建性能。此外,稀疏的图像监督和大量的动态物体进一步让重建的任务变得更复杂。

文章主要贡献如下:

  • DrivingRecon是第一个专门为环绕视图驾驶场景设计的前馈4D 重建模型
  • 提出了 PD-Block,学习从不同的视角和背景区域去除冗余的高斯点。该模块还学会了对复杂物体的高斯点进行扩张,提高了重建的质量
  • 为静态和动态组件设计了渲染策略,允许渲染图像跨时间序列进行有效监督
  • 验证了算法在重建、新视图合成和跨场景泛化方面的性能
  • 探索了 DrivingRecon 在预训练、车辆适应性和场景编辑任务中的有效性

方法详解

通常,先看一下论文的框架图有益于对整体的理解,DrivingRecon的整体框架如下:

为了得到一种generalizable的模型,那模型必然不能和数据是一一对应的关系,实现这一步的关键就是提取图像数据特征然后再进行后面的步骤,这个思路很常见,类似的还有GaussianFormer等。首先使用一个共享图像编码器对图像提取特征;接下来使用一个深度估计网络预测对应图像的深度,然后结合相机的内外参得到世界坐标系下的点云(x,y,z),并和图像特征拼接得到具有几何信息的特征。对于4D的任务,Temporal Cross Attention的是很常见且有用的模块,用来融合不同时序的特征,DrivingRecon也有使用到,可以看下文的细节;然后再用一个解码器增强特征的分辨率,最后,高斯适配器将解码的特征转换为高斯点(即scale,alpha等)和分割输出。

以上是DrivingRecon的整体思路,下面看一些细节:

3D Position Encoding

这部分主要是为了融合不同视角和不同时间间隔的特征:首先用DepthNet获得uv坐标下的像素深度d_(u,v),方法也很简单,直接使用Tanh激活函数来处理第一个通道的图像特征,然后再将深度投影到世界坐标系:

图片

最后结合图像特征一起输入到PD-Block进行多视角特征融合。为了更好的融合,作者在训练时使用lidar得到的稀疏深度进行约束,即lidar点投影到图像上与之对应的深度算loss,具体计算为:

图片

其中为有效深度的mask。

Temporal Cross Attention

因为视角的稀疏性,精确的街景甚至其他场景的重建是非常困难的。为了获取更多的有用特征,增强场景建模效果,在时间维度或空间维度来融合特征是比较常见的方法。文章中的方法可以简单表示为:

图片

其中x是输入的特征,B表示Batch size, T表示时间维度,V表示视角个数,H,W,C表示特征的高,宽以及通道数。注意,与更为常见的时序交叉注意力不一样的是,这里同时考虑时间空间的信息融合, 从倒数第二维度可以看出。

Gaussian Adapter
由两个卷积blocks构成,输入是时序融合后的特征,输出分割c,深度类别,深度回归修正,RGB颜色rgb,alpha,scale,rotation,UV坐标偏移量[∆u,∆v],optical flow [∆x,∆y,∆z],最后深度的计算方式如下:

图片

这里为啥要预测坐标偏移量?是因为作者使用的方法不是严格的像素对齐的,原因是PD -Block通过将资源从简单场景重新分配到更复杂的物体上,有效的管理空间的计算冗余。此时世界坐标的计算变为:

图片

这里输出的光流可以用来获得每一个世界坐标下的点在下一帧的位置,即:

图片

Prune and Dilate Block(PD-Block)

如上图所示,自动驾驶车辆上的相邻相机视野通常会存在重叠部分,就会导致不同视角中的同一个物体会出现重复gaussian预测,叠加后生成的效果会变差,另外在场景表示中,像天空这些区域不需要太多的gaussian来表达,而对于物体边缘处(高频处)则需要更多的gaussian来表示,因此作者提出了一个PD-Block的模块,它可以对复杂实例的高斯点进行扩张,并对相似背景或不同视图的高斯点进行修剪,步骤如下:

(1)将相邻视角的特征图以range view的形式拼接起来,那重叠部分的特征在位置上是比较靠近的,易于融合
(2)然后为了减少内存的使用将range view特征分割成多个区域
(3)在空间中均匀地选择K个中心,中心特征通过平均其Z个最近点来计算
(4)计算区域特征和中心点之间的余弦相似矩阵S
(5)根据阈值生成生成mask
(6)基于mask,可以对长距离特征和局部特征进行聚合,即 。其中,长距离特征e_lt通过大核卷积提取,局部特征e_lc为原始range view特征。

动静解耦

自动驾驶场景的视野非常稀疏,这意味着只有有限数量的摄像机同时捕捉到相同的场景。因此,跨时间视图监督是必不可少的。对于动态目标,该算法不仅可以在 t 时刻预测动态目标的高斯分布,而且可以预测每个高斯分布点的Flow(类似光流)。因此,实验中也会使用下一帧来监督预测的高斯点,即 。对于静态对象,可以使用相邻时间戳的相机参数来渲染场景,并且只监督静态部分,即 。大多数方法只使用静态的物体场景来更好地构建3D高斯,而忽略了对动态物体多视图的监督。注意,当监督跨时间序列的渲染时,阈值小于 α 的渲染图像是不进行监督的,因为这些像素通常不会在整个时间序列中重叠。此外,同样使用 L1重建约束 ,让渲染的图像与GT更接近。

分割

主要有两个作用:一是为了获得动态物体的mask(例如车辆和行人),静态物体的mask,以及天空的mask,另外引入语义监督有利网络对整个场景的理解(建模),作者用的模型是DeepLabv3plus。作者还将3D bbox投影到2D图像上,以此做为prompt通过SAM获得更精确的mask,这里使用一个简单的“或”逻辑合并两种处理的方式,确保所有动态的物体都获得对应的mask,相当于双重保障了。

损失函数

训练中的损失函数为:

图片

  • :约束渲染图像
  • :约束深度的类别
  • :约束修正后的深度
  • :约束深度
  • :约束动态对象
  • :约束静态对象
  • :约束分割结果

 和  使用分割的标签,这部分不用于预训练实验。其他损失是无监督的,这也使得DrivingRecon 实现良好的性能。这些规则和约束使得 DrivingRecon 能够有效地整合几何和运动信息,提高其跨时间和跨视角的场景重建能力。

实验分析

与现有方法的渲染结果对比:

与现有方法的指标对比:

从表1和表2可以看出,不管是动态还是静态对象,指标提升的还是很大的。

重建结果可视化:

泛化性测试结果如下:

消融实验:

最后,文章最后还讨论几个潜在的应用:

车辆适应性:新车型的引入可能导致摄像机参数的变化,如摄像机类型(内参)和摄像机位置(外参)。所提出的四维重建模型能够用不同的摄像机参数来渲染图像,以减小这些参数的潜在过拟合。实验中作者在 Waymo 上使用随机的内参渲染图像,并以随机的方式渲染新的视角图像作为一种数据增强的形式。渲染的图像也会使用图像检测中的数据增强方式,包括调整大小和裁剪,然后结合原始数据训练BEVDepth,结果如下:

预训练模型:四维重建网络能够理解场景的几何信息、动态物体的运动轨迹和语义信息。这些能力反映在图像编码中,其中这些编码器的权重是共享的。为了利用这些能力进行预训练,作者用 ResNet-50替换了编码器。然后重新训练DrivingRecon,没有使用任何语义注释,属于完全无监督的预训练。随后,用预先训练好的模型替换了 UniAD 的编码器,并在 nuScenes 数据集上对其进行了微调。与 ViDAR 相比,使用新的预训练模型取得了更好的性能。

场景编辑:四维场景重建模型能够获得一个场景的全面的四维几何信息,这允许删除,插入和控制场景中的对象。文中给出了一个例子,在场景中的固定位置添加了带有人脸的广告牌,表示汽车停下的corner case:​

结论

文章中提出了一种新的4D重建模型DrivingRecon,输入全景视频(环视)即可快速重建出4D自动驾驶场景。其中关键的创新点是提出了PD-Block,可以删除相邻视角的冗余高斯点,并允许复杂边缘周围进行点扩张,增强了动态和静态物体的重建。另外,文章中也引入了一种使用光流预测的动静态渲染方法,可以更好的监督跨时间序列的动态对象。实验表明,与现有方法对比,DrivingRecon在场景重建和新视角生成方面具有更优越的性能。并通过实验证明了可以用于模型的预训练,车辆自适应,场景编辑等任务。

#Selective Kalman Filter

怼上所有传感器不一定好!Selective Kalman Filter:优雅的融合如何处理个别传感器的退化

为了解决复杂环境中的挑战并提高定位的鲁棒性和环境感知能力,越来越多的研究集中于融合多种传感器的SLAM系统。这些系统通常集成了多种传感器,如LiDAR、视觉、RGB-D相机和IMU,代表性的系统包括R3LIVE、FAST-LIVO、LVIO-Fusion、RIVER等。

现有关于卡尔曼滤波器的研究主要集中在多传感器信息融合方面,这些研究提出了使用扩展卡尔曼滤波器(EKF)和自适应模糊逻辑系统来融合里程计和声纳信号的方案,其核心思想是自适应调整增益。然而,这些工作主要集中于如何利用和融合来自多传感器的信息,而未考虑是否有必要融合或是否需要融合所有可用数据。在非退化条件下,当高精度数据与中等精度数据融合时,精度的提升往往是微小的,甚至可能是负面的,同时还会增加额外的计算开销。我们将这种对所有测量数据不加区分进行融合的方法称为“全包含”(“all-in”)方法。这种方法面临以下两个主要问题:

  1. 首先,“全包含”方法处理的信息量比单传感器SLAM大得多,通常导致计算负担显著增加,影响实时性能。
  2. 其次,尽管该方法结合了各种传感器的优势,但也引入了其劣势。例如,视觉SLAM易受运动模糊、剧烈光照变化和动态物体的影响,从而产生较大的误差,甚至导致系统失效。

因此,通过探讨何时以及如何选择性地融合多传感器信息,以LiDAR与视觉融合SLAM系统为例,解决上述两个问题。在多传感器SLAM融合中,单一传感器易出现定位退化,而整合不同类型的传感器可以提供额外的约束,防止SLAM退化。

  • 对于“何时”融合,我们的解决方案是仅在更为精确和鲁棒的LiDAR SLAM子系统表现出退化时,才引入视觉信息,否则仅依赖LiDAR子系统进行位姿估计。
  • 关于“如何”融合,如果直接融合所有信息,视觉子系统的较低精度可能会降低LiDAR系统的整体精度。因此,我们的解决方案是仅在LiDAR子系统退化的方向上融合视觉信息。
  • 解决“何时”问题需要准确判断LiDAR SLAM是否发生退化。现有方法未考虑点面约束中旋转与平移的高耦合性,导致退化方向的评估不准确。

Selective Kalman Filter(选择性卡尔曼滤波器)[1]的解决方案通过准确判断LiDAR SLAM退化的方向,仅在这些退化方向上引入视觉观测数据。相比之下,LION的融合方法在LiDAR退化时停止使用LiDAR里程计,转而依赖其他里程计信息。这种方法较为粗糙,因为在非退化方向上依赖较低精度和鲁棒性的传感器信息可能会降低系统性能。Zhang、Hinduja和X-ICP的方法主张仅在退化方向融合其他传感器信息,这被我们认为是优化的策略。然而,这些优化方法基于优化框架,未能在滤波框架中精确识别退化的具体方向,可能导致实际退化方向未被充分约束。

图片

具体贡献包括:

  • 提出了一种新型的多传感器融合方法——选择性卡尔曼滤波器,设计用于解决数据“何时”与“如何”选择性融合的问题。这种方法仅在LiDAR数据退化时引入必要的视觉信息,大幅提升实时性能,同时确保鲁棒性和精度。
  • 提出了一种创新高效的LiDAR里程计退化检测方法,可同时确定退化方向。该方法充分考虑了旋转与平移约束之间的耦合关系。
  • 通过实验验证了所提退化检测方法的精确性以及选择性卡尔曼滤波器的效率。
  • 开源了代码以促进社区参与和广泛应用。

系统概述

首先介绍LiDAR-惯性-视觉SLAM的“全包含”方法,该方法由FAST-LIVO和R3LIVE等方法所代表。在没有视觉或LiDAR测量数据的情况下,类似于FAST-LIO2,系统利用IMU的加速度和角速度进行状态传播,作为卡尔曼滤波的预测步骤。当LiDAR或视觉测量数据到达时,系统在卡尔曼滤波中执行数据融合更新。

图片

据我们所知,在没有退化的情况下,与视觉-惯性SLAM(VIO)相比,LiDAR-惯性里程计(LIO)系统通常表现出更高的精度和更强的鲁棒性。在将选择性卡尔曼滤波器集成到LiDAR-惯性-视觉里程计(LIVO)系统中时,我们优先将LIO子系统作为核心,将VIO子系统作为辅助。系统的工作流程如图2所示。与“全包含”方法不同,我们的方法基于LiDAR测量进行退化检测与分析:

  • 如果LIO子系统未发生退化,我们选择不融合视觉测量数据。这种方法有助于避免因视觉问题(如运动模糊、过度曝光和错误特征匹配)引入的误差。此外,它还减少了计算负担,从而提高了实时性能。
  • 如果LIO子系统发生退化,为了尽量减少引入的视觉信息并防止状态估计恶化,我们分析LiDAR的退化方向,然后选择性地融合与此退化方向相关的视觉数据,并舍弃与非退化方向相关的数据。这有助于防止LiDAR的非退化维度的精度下降。

我们将这种选择性更新信息融合的方法称为“选择性卡尔曼滤波器”(Selective Kalman Filter)。​

LiDAR SLAM中的退化检测

首先,我们通过加权线性最小二乘法对LiDAR测量方程(2)进行变换,得到以下形式:

其中,为状态的估计值。为了简化表示,我们做出以下定义:

因此,上述方程可以简化为:。

由于实际场景中的噪声影响,矩阵通常为满秩矩阵,因此是一个6×6的对称正定矩阵。

图片

Hinduja方法通过比较的最小特征值与预设阈值来检测退化。然而需要注意的是,由于的前三维表示旋转,后三维表示平移,其特征值是旋转和平移的耦合值,缺乏明确的物理意义,且单位同时与旋转和平移相关。同一特征值分解中的特征值单位不同,因此难以设定合理的退化检测阈值。此外,与这些特征值对应的特征向量也无法代表实际方向,这使得该方法在实际部署中往往不切实际。

为了解决这一问题,LION提出通过分析的对角元素来确定退化及其方向。首先,将矩阵表示为分块矩阵的形式:

LION分别对和进行特征值分解:

其中,和为对角矩阵,包含旋转和平移部分的特征值。然后通过设定两个阈值,评估旋转和平移是否退化。这种方法有效解决了Hinduja方法中阈值缺乏物理意义的问题,但其忽略了耦合项和,从而忽视了旋转和平移约束之间的相互影响。这种忽略导致在大多数情况下,退化程度及方向的估计不准确。

例如,如图3(a)所示,根据LION的观点,y方向的估计仅依赖于点A在y方向的点面残差雅可比,导致y方向估计较差(如所示)。但实际上,点B的点面残差可以改善旋转的估计,从而增强y方向的估计(如所示)。可以推断,这种考虑了平移和旋转耦合的后者方法,对于不确定的估计具有更高的准确性。

为了解决上述问题,我们提出了一种基于协方差信息的新型、简单且具有物理意义的退化检测方法。我们首先对矩阵求逆,得到状态的协方差矩阵:

需要注意的是:

从以上公式可以看出,我们的方法与LION使用局部Hessian矩阵的方法不同。我们的方法考虑了旋转与平移之间的耦合关系。此外,该方法具有实际的物理意义:协方差矩阵的对角块表示状态的方差,而非对角块表示不同状态之间的相关性。方差可以作为退化程度的直观量度,例如,高方差表示该方向上的估计存在较大的不确定性,从而表明退化。

我们对和进行特征值分解:

其中,和的特征值分别具有物理单位,旋转部分为,平移部分为。对应的特征向量代表退化方向,此时,和分别为旋转矩阵,能够将原始坐标系旋转到这些特征方向。

最后,我们基于实际需求和经验设置两个方差阈值和。如果,则表示发生旋转退化,对应的特征向量表示退化方向;平移部分同理。

综上所述,本节提出了一种具有实际物理意义并考虑耦合约束的退化检测方法,理论上能够更准确地判断退化程度及方向。​

视觉测量的选择

我们首先对视觉测量方程 (3) 应用加权线性最小二乘法,得到以下形式:

其中, 为状态  的估计值。为了简化表示,我们定义如下:。

因此,方程可以简化为:。

需要注意的是,根据实际场景中的噪声,矩阵  总是可逆的。因此,可以得到估计状态  为:。

利用协方差矩阵的特征向量矩阵  和 ,我们定义一个新的旋转矩阵 :。

该旋转矩阵能够将  的坐标系旋转至旋转和平移的主分量方向上:。

在已知 LiDAR 子系统退化维度的情况下,我们定义一个选择矩阵 ,以选择视觉测量方程中与退化方向相关的信息,从而滤除无关数据:。

例如,如果 LiDAR 子系统在一个平移方向和一个旋转方向上发生退化,例如  和 ,我们可以将选择矩阵  设置为:

在该矩阵中,设置为1的对角元素对应退化状态的维度,而设置为0的对角元素对应非退化维度。我们将状态恢复到原始坐标系,并同时恢复原始测量方程:

为了保持信息矩阵的对称性,我们进一步处理,得到:

可以简化为:,

其中:

此时,我们已完成对视觉数据的选择,仅保留与 LiDAR 退化方向相关的信息。

选择性卡尔曼滤波器

首先,我们描述传统卡尔曼滤波器的形式。对于视觉子系统,假设已存在先验估计,记为  和协方差 。按照FAST-LIO的方法,卡尔曼增益  的计算公式为:,

得到更新方程为:。

将卡尔曼增益  代入更新方程并进行简化,可以得到:

根据式 (17),可以进一步简化为:

其中, 是后验估计状态。

对于后验协方差 ,其公式为:。

将  的表达式代入并简化,可以得到:。

通过观察视觉信息的测量方程在选择前(式 (18))和选择后(式 (26))的变化,我们只需将  替换为 ,将  替换为 ,即可得到新的选择性卡尔曼滤波器公式:。

备注:在本文中,所有进行特征值分解的矩阵均为实对称矩阵,因此其特征值分解和奇异值分解的结果是等价的。我们的主要目标是确定这些矩阵的主方向,这本质上与奇异值相关的物理含义一致。为了简化表达并减少变量的数量,本文统一采用特征值分解描述整个过程。

LiDAR-惯性-视觉里程计

基于出色的LIVO框架R3LIVE,我们集成了选择性卡尔曼滤波器,构建了SKF-Fusion,其系统框架如图4所示。原始R3LIVE框架包含两个并行子系统:LiDAR-惯性里程计(LIO)和视觉-惯性里程计(VIO)。本文未重复描述R3LIVE中的相同内容。在此基础上,我们对LIO子系统进行退化检测。如果未检测到退化,仅将视觉信息用于上色,同时保存地图的颜色信息,以便在退化状态下使用。如果检测到退化,则在帧与帧之间以及帧与地图之间进行序列更新,专注于退化状态的相关成分。在随后的实验中,我们使用R3LIVE数据集对SKF-Fusion进行了评估。

图片

系统工作流程:

未检测到退化时:

  • 系统仅使用LiDAR子系统进行状态估计和更新。
  • 视觉信息仅用于地图的颜色渲染,无需进行视觉状态更新。
  • 这种方式避免了视觉子系统带来的计算开销,并减少了因视觉特性(如运动模糊、过度曝光等)引起的误差。
  1. 检测到退化时:
  • 系统分析LiDAR的退化方向。
  • 针对退化方向,选择性地融合视觉观测数据,仅对退化状态进行更新。
  • 非退化方向的数据被舍弃,从而防止引入不必要的误差。

通过引入选择性卡尔曼滤波器,SKF-Fusion实现了高效的退化处理,显著提升了系统的鲁棒性和实时性能。

实验效果

图片

图片

图片

图片

图片

图片

图片

图片

总结一下

基于传统的“全包含”融合SLAM(涉及LiDAR、视觉和IMU),本研究引入了一种基于协方差信息的创新退化检测模块,以及用于退化状态选择性更新的选择性卡尔曼滤波器。与现有退化检测方法相比,实验结果表明,该方法显著提升了退化检测的准确性,从而提高了定位的精度和鲁棒性。此外,与“全包含”方法相比,方法显著提升了视觉子系统的实时性能。需要注意的是,当前的阈值选择未能适应不同体素分辨率下的LIO,这为未来的研究提供了方向。

#某主机厂智驾自研的波澜

今年这家主机厂在智驾业务上的一系列变化,都源自于大BOSS的战略构想。眼看新能源汽车的上半场“电动化”结束,进入下半场的“智能化”,所以大BOSS就想在下半场的“智能化”上占领用户心智。

在大BOOS的战略设想中,智驾会存在技术引领者和技术普及者两种角色。华为是技术引领者的角色,以这家主机厂现阶段的技术能力来说肯定比不了华为。而且,以这家主机厂的销量规模和用户层次来说,现阶段技术普及者的战略定位比较合适。

所以,这家主机厂准备在智驾普及上发动大规模的攻势。

一是尽可能的把智驾做到标配,用标配打响智驾普及的第一枪。以这家主机厂的体量来说足以引起声势浩大的市场反响,这一枪要打好了足以站稳智驾普及者的地位。二是除了部分高阶智驾继续采用头部供应商的方案之外,其他的全部切自研。

压力就来到了自研团队这边。在这家主机厂高层眼里,自研上的钱投入了很多、时间也不短了,到了该拉出来溜溜的时候了。

这家主机厂在重大技术攻坚上喜欢赛马机制,投入了A和B两个自研团队。今年下半年对赛马进行考核,要两个自研团队交考卷,其中一个考核点是谁能先把自研的方案量产上车。

A团队的进度要快于B团队,再加上A团队的负责人是老人,导致B团队的业务和人员被A团队给“吞掉”。B团队的负责人也被调岗,不过最终还是离职走人。

在这一波的赛马PK过程中,A团队的负责人成了大赢家。原本在这家主机厂智驾业务上是智驾负责人、A团队负责人、B团队负责人的三人“斗地主”的局面,A团队不仅PK掉了B团队负责人,而且下半年也不断传出智驾负责人离职的消息。

风光无限的同时,A团队的一些技术中层也在不断的担忧,明年自研方案的量产上车能不能成功?如果量产上车的过程不顺利或者出了岔子,到时候问责,锅是先扣负责人头上还是掉在自己头上?

带着一脑子问号的部分技术中层,谋生了跳槽走人的想法。

#Pi-0: 面向通用机器人控制的VLA Flow 模型

Pi-0 是Physical Intelligence 成立后的第一个论文工作(全公司都署名了,豪华阵容)。这篇论文主要关注如何实现robot foundation model,并聚焦在两个方面:Pre/Post-Training 策略;基于Flow-Matching 的action expert。从结果看,pi-0可以实现比较强的泛化能力,并能实现非常实时的推理。比起之前的OpenVLA 等工作,pi-0 在端到端VLA这条路线上向robot foundation model 迈进了很多。

图片

Motivatio

Pi-0 的核心motivation 是将LLM 和VLM 领域中已经经过考验的Pre/Post-Training 训练范式迁移到机器人xx模型的训练过程中来,即:

  • Pre-training:在大规模且非常多样性的互联网语料库上对模型做预训练;
  • Post-training:在更精心设计的数据集上fine-tune (or "align") 模型,使模型输出更符合预期;

如何将这个范式迁移到机器人领域呢?Pi-0 的训练,实质上是三步:

  • Internet-scale Pre-Training: Pi-0 是基于一个训练好的开源VLM 模型继续训练的,因此这个开源VLM 模型的训练实质上相当于是Pi-0 模型训练的第一个阶段,提供了模型的多模理解能力;
  • Pre-Training:基于团队构造的一个10000 小时机器人操作数据集,进行了大规模训练。实质上,Pre-Training 后,Pi-0 模型就已经可以处理见过的任务,并zero-shot泛化到一些不那么难的任务上
  • Post-Training:对于一些新的很困难的任务,需要5-100 小时数据进行fine-tune.

作者认为,要获得一个具备良好泛化能力的robot foundation model,主要有三方面挑战:

  • 数据的规模要足够大(数据量、本体丰富度、任务丰富度等);
  • 模型的架构要合理(支持高频控制,连续action space控制);
  • Training recipe 要合理(训练策略,数据配比等);

围绕这几个问题,Pi-0 的核心设计如下节介绍。

The Pi-0 Model模型结构

图片

模型结构如上图所示:

  • 模型基于一个Pre-Trained VLM (PaliGemma) 构建,其包含视觉Encoder 部分(SigLIP,400M)和Transformer 部分(Gemma,2.6B);
  • 在预训练模型的基础上,Pi-0 通过MoE 混合专家模型的方式引入了一个action expert 来处理动作的输入和输出。这里是指,只有一个Transformer 模型,在处理文本和图像token 时,用的是原模型的参数;在处理action token 时,则用新初始化的action expert 的参数;
  • 输入:模型的输入包括3帧最近的图像,文本指令,以及机器人本体信号(即各joint 当前angle)
  • 输出:输出是称作action chunk 的形式,即未来一段时间的action 序列,这里的序列长度H 设定为50,对于50HZ 控制的情况,即相当于预测未来一秒钟的动作。这里action 的维度,设定为各个本体中最长的那个(18DoF),不够的本体则pad。(注意,这里action space 都设定在joint space,这有利于模型输出结果直接控制机械臂,避免了IK 解算环节)

Flow Matching as Action Expert

Flow matching 可以看作是diffusion 的一种变体,之前有听说但没仔细学习过,正好这次学习了下(知乎上也有很多不错的介绍文章,比如 笑书神侠:深入解析Flow Matching技术 )。Flow-Matching 主要是学习如何从一个噪声分布数据流形到目标分布数据流形之间的flow。Flow matching 的主要优势主要在于训练/推理方式比较简单、生成路径比较容易控制、稳定性更高等。Flow Matching +简单线性高斯概率路径的方案在生成任务上也获得了比较好的效果。

具体到Pi-0中:在action 预测任务中,在时间t我们要预测一个action chunk, 则优化目标为:

图片

  • 是 [0,1] 之间的数值,代表flow-matching 的timestep,0对应噪声分布,1对应目标分布;
  • 即所对应的噪声流形到目标流形的中间流形。基于flow matching 的定义,我们可以将后验概率(即已知,来获得)表示为:

图片

  • 具体地,基于线性高斯路径策略,可以表示为(和扩散加噪过程很相似):

图片

  • 而在前面的训练损失函数中,我们实质监督的是,在这个时间点流形的 flow 或者说是速度方向(也因此这种训练方法叫做flow matching)。(,)指网络预测结果,其优化目标为:

图片

  • 因此,diffusion 和flow matching 的训练都是一个去噪过程,但表示形式不同,前者预测的是添加的噪声,后者预测的是噪声到分布的方向。flow matching 可以通过控制优化路径来实现更灵活的生成控制。
  • 在训练阶段,从一个beta 分布中采样(为了强调前段/噪声更多阶段的训练)。而在inferece 阶段,Pi-0 使用了10步均等步长(=0.1)的形式来实现flow matching 过程:

Pre-Training and Post-Training

图片

作者认为预训练阶段最重要的就是diversity,用了一个10000小时规模的数据集训练:

  • 数据集大部分是自采的(采集方式下一节介绍),仅9.1% 是开源的(Open-emb-x, droid 等)。数据集的自采集部分,包含了903 million timestep。
  • 数据集中使用了多种本体,大部分都是双臂数据,基本都是aloha 数据
  • 自采任务包含68个任务,但普遍都是比较复杂的符合任务,所以实质上包含的任务更多;

作者认为后训练阶段数据的要点是动作质量高,即动作要完成地一致且高效

  • Post-training 阶段的任务选择地和预训练有明显差异;
  • 简单的任务,需要5小时数据,最复杂的任务需要100小时甚至更多;

Robot System

图片

Pi-0 构造了一个还算比较丰富的多本体平台,如上图所示。具体信息整理如下:

图片

  • 轻型机械臂用的都是Aloha 方案,主要是Trossen,ARX(方舟无限,国产)和AgileX(松灵,国产)
  • 非轻型机械臂(UR5e 和Franka)用的不是Aloha 方案,没说啥采集方案。猜测应该是6D 鼠标等遥操设备。
  • 这里面的所有任务都是夹爪,没做灵巧手;

Experiment

实验内容比较多,这里主要贴一下两个主要实验

Zero-shot evaluation

这个任务主要是想看Pre-Training 完的模型直接拿来用的效果,和OpenVLA,Octo 等方法比;

图片

图片

  • Pi-0 比OpenVLA 等方法效果好很多;
  • Pi-0-Parity 是训练步数比较少的模型 160k/700k,表明训练充分对模型效果影响很大
  • Pi-0-Small 是没有用Pretrain VLM 的模型,可以看出来效果也差了很多。

Post-Training Evaluation

在新的困难的灵巧任务上进行训练和测试:

图片

图片

部署 & 效率测评

这里补充一下附录里面提到的部署时的推理策略和推理效率。推理策略:

  • 模型每次生成H timestep 的action chunk,H一般是50;
  • 对于20Hz 控制的机械臂,需要2.5s 执行完;对于50HZ 控制的机械臂,需要1s 的执行完;
  • 实质上,并不会等所有action 执行完再进入下一轮执行。对于20Hz 平台,在执行完16步(0.8s)后就会进入下一轮;对于50Hz平台,执行完25步(0.5s)后就会进入下一轮

这个执行策略,其实是每0.5s 做一次重新规划。这是因为Pi-0 并没有把历史决策作为输入,即这个模型并没有维护history 信息。所以这个方案实质上还是应该看作是一个开环方案。

图片

  • 速度是在4090 上测试的,可以看出这个3.4B模型的推理还是很快的,应该用上了当前主流的推理加速
  • Off-board 指显卡不在设备上,通过wifi 通信,可以看出他们这个通信延迟做的也还行。
  • 整体延迟控制在了100ms 内,这意味着他们其实最高可以以10FPS 频率来做重规划。

讨论 & 总结

Pi-0 方案可以看作是OpenVLA 这类VLA 方案的一次系统升级,主要是更好的训练数据 + 更好的Policy Head。而且Policy Head 和VLM 模型连接的方式,可能是一种很好的大小脑系统连接的路径。整个方案系统性很强,值得细读学习,整体读下来感觉也很好。

除了优点,还是有不少槽点和疑惑点的:

  • 从预训练的层面,这篇工作似乎并没有带来太多新东西。当前大家对于“xx预训练”这个话题,可能更多还是希望能够减少需要大量人力投入的遥操数据采集环节。所以,这篇文章里面的Pre-Training,可能实质上对应的是我们认为的Post-Training,而Post-Training 对应的则是我们认为的few-shot adaption。
  • 文章中提到一个观点:“高质量数据不能教会模型如何从错误中恢复”,那言下之意应该是低质量数据中一下错误后重新尝试的数据对这方面有帮助。这个观点很认同,但文中其实并没有分析训练数据中是否真的有这类数据,也没有做相关的佐证实验。
  • Pi-0 的框架没有加入history 我感觉还是比较可惜的,或许是他们的下一步吧;
  • 模型部分,不同本体似乎没有加一个区分指示的token,只靠action space 维度区分不太靠谱;同时Pi-0 也没有展示本体层面的泛化能力。

#LiON-合成数据助力自驾点云异常检测新SOTA

论文信息

  • 论文题目:LiON: Learning Point-wise Abstaining Penalty for LiDAR Outlier DetectioN Using Diverse Synthetic Data
  • 论文发表单位:清华大学, 厦门大学,滴滴出行, 香港中文大学-深圳
  • 论文地址:https://arxiv.org/abs/2309.10230
  • 项目仓库:https://github.com/Daniellli/LiON

1.Motivation

基于点云的语义场景理解是自动驾驶汽车感知技术栈中的重要模块。然而,由于点云不像图像那样具有丰富的语义信息,在点云中这个识别异常点是一项极具挑战性的任务。本工作从两个方面缓解了点云缺乏语义信息对异常点感知的影响:1) 提出了一种新的学习范式,使模型能够学习更鲁棒的点云表征,增强点与点之间的辨别性;2) 借助额外的数据源,ShapeNet,提出了一套可以生成多样且真实伪异常的方法。实验结果表明,在公开数据集 SemanticKITTI 和 NuScenes 上,本方法显著超越了前 SOTA。

,时长01:29

2.Method

给定一个场景点云,点云语义分割的主要任务是为点云中的每个样本点分配一个预先定义的类别,例如车、树、行人等。本工作将这些属于预先定义类别的样本点称为正常样本点。而 点云异常检测则作为点云语义分割模块的补充,用于识别那些不属于预先定义类别集合的样本点,例如桌子、椅子等无法预料的类别。本工作将这些样本点称为异常样本点。

此前的工作 REAL 将图像异常检测方法直接适配到点云异常检测领域,并通过实验发现,大量异常样本被错误分类为预先定义的类别。为了解决这一问题,REAL 提出了一种新的校正损失,用于校正正常样本的预测。然而,本工作的实验结果表明,尽管该校正损失能够提升异常样本的分类性能,但同时也对正常样本的分类性能造成了显著的负面影响。

本工作将图像异常检测方法在点云异常检测领域表现不佳的原因归结于点云不像图像那样具有丰富的语义信息。比如Figure 1左侧,即使是人类也难以识别道路中央的家具信息。因此,该工作从两个方面缓解点云缺乏丰富语义含义所带来的影响。

图片

Figure 1 点云语义分割模块错误地将家具分类成道路

首先,该工作提出为每个样本点计算一个惩罚项,并通过额外的损失函数保证正常样本点的惩罚较小,而异常样本点的惩罚较大。然后,将该惩罚项嵌入交叉熵损失中,以动态调整模型的优化方向。通过为每个样本点学习额外的惩罚项并改进学习范式,本工作增强了样本点之间的辨别性,缓解了点云缺乏语义信息的问题,从而全面提升了异常检测能力。

此外,该工作提出利用 ShapeNet 数据集生成伪异常。ShapeNet 是一个大规模的三维形状数据集,包含超过 22 万个三维模型,覆盖 55 个主要类别和 200 多个子类别。因此,通过 ShapeNet 生成的伪异常具有较高的多样性。其次,在生成伪异常时,该工作进一步考虑了点云的采样模式,从而使生成的伪异常更加真实。因此,该工作通过生成更加多样且真实的伪异常,更好地估计和模拟了真实异常的分布,缓解了点云缺乏语义信息的问题。​

2.1. 模型整体架构

如Figure 2所示,本工作通过伪异常生成方法对输入点云进行编辑生成带有伪异常的输入点云x, 而后该点云通过特征提取器和正常样本分类器f和异常样本分类器g处理, 得到正常类别logit , 以及异常类别logit , 而后通过softmax 处理, 可以拿到正常类别概率和异常类别概率。c表示正常样本类别数量,n表示给定点云的点数量。该处理过程可以形式化表达为:

图片

其中[·]表示拼接操作。

图片

Figure 2 算法处理流程

2.2. 基于逐点惩罚的学习范式

本工作提出对每个样本点用能量函数计算一个额外的惩罚项,惩罚项的计算如下所示:

图片

此外,该工作通过一个额外的逐点惩罚损失函数使得对于所有的正常样本点都有个较小的惩罚,对于所有的异常样本点都有较大的惩罚。该逐点惩罚损失函数的形式化表达如下:

图片

其中,m表示数据集大小;n表示场景点数量;I(.)表示示性函数;{1,...,c,c+1}为样本点类别真值,c+1表示异常类别;max(.)为最大值函数;,为超参数。该损失函数的作用如Figure 3所示,对于所有的正常样本点(逐点惩罚损失函数公式左侧),如果惩罚项大于,损失函数的值就会大于0;反之,损失函数的值等于0。异常样本的情况与此类似。通过优化逐点惩罚损失函数,就可以对所有的正常样本计算得到一个接近甚至小于的惩罚, 对于所有异常样本得到一个接近甚至大于的惩罚。

图片

Figure 3 惩罚项和逐点惩罚损失之间关系

而后,该工作用惩罚项升级交叉熵损失函数,动态调整交叉熵损失的优化重点, 升级后的交叉熵损失函数被叫做逐点拒绝(abstain)损失函数:

图片

对于所有正常样本,该算法会计算得到一个较小的惩罚系数。将其取负后,值会变得较大,而取负后的平方值则会进一步放大。因此将异常类别概率除上该值,异常类别概率对于逐点拒绝损失函数的影响会被抑制,从而逐点拒绝损失函数重点会放在优化正常类别概率上。异常样本的情况与此类似。

因此整个算法的损失函数为:

图片

其中为损失函数的系数。​

2.3.合成数据生成点云异常

该工作通过引入额外的数据源, ShapeNet,来生成更加多样且真实的伪异常,从而更好地近似真实异常分布。首先,通过伯努利分布计算插入的伪异常数量G。而后,通过循环G次下面流程来插入伪异常。

如Figure 4所示,该生成方法包括以下步骤:(a)加载物体后,基于均匀分布计算平移距离和旋转角度,并对物体进行(b)平移和(c)旋转,使其有可能放置在场景中的任意角落;(d)基于均匀分布计算的缩放系数,对物体进行缩放;(e) 将物体放置于场景地面; (f)使用被插入物体遮挡住的场景样本点来替换插入物体的样本点。

图片

Figure 4 伪异常生成流程

3.Experiment

实验结果表明,该工作提出的方法在SemanticKITTI和NuScenes两个公开数据集上能够大幅优于之前的SOTA方法。

3.1.实验基准

该工作沿用了之前的实验基准。采用SemanticKITTI和NuScenes作为基准数据集。在SemanticKITTI中,将{other-vehicle}设为异常类别;在NuScenes中,将{barrier,constructive-vehicle,traffic-cone,trailer}设为异常类别。这些异常类别的样本在训练过程是不可见的。

在测试阶段,主要评估算法对这些被设为异常类别的样本的分类精度,采用的评价指标主要包括 AUPR 和 AUROC。此外,对于正常样本分类的评估指标为。该任务的目标是在保证不受影响的前提下,尽可能提升AUPR和AUROC。

3.2.定量结果

图片

Table 1 定量结果对比

该工作沿用之前的实验设置, 选C3D(Cylinder3D)作为分割基座模型。前SOTA方法, APF,没有在NuScenes上开展实验并且没有开源代码, 因此该工作无法在NuScenes上与其进行对比。Table 1实验结果表明,该工作提出的算法在两个公开基准数据集上大幅优于之前SOTA方法。​

3.3.定性结果

图片

Figure 5 SemanticKITTI(左)和NuScenes(右)上的定性结果对比

与前SOTA算法对比,该工作提出的算法不管是在64线雷达采集的点云数据上(SemanticKITTI)还是32线雷达采集的点云数据(NuScenes)上都表现出了优越的性能, 不仅能够精确定位异常类别而且能够赋予较高的置信度。

#OpenEMMA 

自动驾驶黑科技 | 开源框架 OpenEMMA 正式上线!

今天为大家带来一个自动驾驶领域的重磅消息:OpenEMMA,一个完全开源、端到端的多模态框架,正式发布啦!

这是我们团队在推动自动驾驶技术透明化和普惠化道路上的重要一步,希望通过开源化,赋能更多科研人员和开发者,共同推进这一领域的快速发展。在2024年十月底,谷歌的自动驾驶子公司Waymo发布了第一个基于纯视觉的自动驾驶端到端多模态大模型解决方案EMMA,其Blog如下图所示

Waymo发布了端到端多模态自动驾驶大模型EMMA

我们团队于11月份正式开始计划来进行开源版本的复现,旨在让自动驾驶和交通社区都能用上开源的替代解决方案,推动自动驾驶开源化、透明化。于是呼,OpenEMMA正式诞生了!

什么是 OpenEMMA?OpenEMMA 是一个基于多模态大语言模型(MLLMs)的开源自动驾驶框架,灵感来自 Waymo 的 EMMA 系统。它支持从感知规划的完整自动驾驶任务链,专为推动行业透明化和技术共享而打造。OpenEMMA 的亮点功能

链式推理(Chain-of-Thought Reasoning)

通过引入链式推理技术,OpenEMMA 让轨迹规划和决策过程更可解释,贴近人类逻辑思维。

增强的 3D 目标检测

集成微调后的 YOLO3D 模型,大幅提升目标检测精度,无论在城市街道还是复杂环境中表现出色。

强大的适应性和鲁棒性

从急转弯到低光环境,OpenEMMA 能轻松应对各种驾驶场景,确保稳定性与安全性。

结果和性能

视频例子

我们测试了OpenEMMA在真实数据集上视频序列上的效果,具体如下图所示

完全开源

框架、数据集、模型权重全都开源,致力于推动学术研究和产业开发的共同进步。为什么 OpenEMMA 很重要?在自动驾驶领域,技术的透明化和普惠化是加速行业发展的关键。OpenEMMA 不仅为开发者提供了一个高性能工具,还让更多人有机会参与其中,推动技术的落地应用。这是我们迈向更安全、更智能交通体系的重要一步!参与我们 | 一起让自动驾驶更安全我们希望 OpenEMMA 成为一个全球化的开源社区,任何意见、建议或者贡献都是极为宝贵的!目前框架还处于初期阶段,我们期待和全世界的开发者、学者们一起完善它。如果你对自动驾驶感兴趣,欢迎 DM 或留言加入我们的社区!

论文链接:arxiv.org/abs/2412.15208

开源地址:https://github.com/taco-group/OpenEMMA

#如何评价deepseek上线的deepseek-V3模型?

国产大模型又信仰充值了

deepseek 找到了一个弯道超车海外 LLM 的方法,作为友商员工我都愿意粉一下,真产业升级

我觉得把刷榜看成是模型能力增强带来的副产品,效果是好于 1. 对着榜去刷过拟合 2.急着用赶超战略复刻新技术的

比方说我们发现 GPT4 某些榜表现好,专门加这类数据并不本质,反而污染了一个原本很好的评价指标

把基模做强就有惊喜!又是 The Bitter Lesson。既想刷榜又不想做预训练,就很容易技术落后

当 OpenAI / Anthropic 有些新现象和新技术出来,要复刻的前提是基础模型够强,不然即使人家把监督微调 / 强化学习的数据开源了,小模型可能学完也没什么变化

研究小模型最怕的也是得到的结论和大模型完全不相关,浪费宝贵人力和时间

从这个角度来说,预训练不做就很难发现新的模型特性和现象,只能等别人喂

等别人开源模型完再动工新产品或者研究,再退一步就是等着 copy huggingface 开源社区 demo 了

​https://github.com/deepseek-ai/DeepSeek-V3/blob/main/DeepSeek_V3.pdf​

作为近期必读的技术报告,我也来瞅瞅,当然工程上我有很多不了解的地方,欢迎大家指正

主要贡献

  1. 架构改进: 在 DeepSeek-V2 的高效架构基础上,我们引入了一种无辅助损失的负载均衡策略,以最小化负载均衡对模型性能的负面影响。
  2. 多令牌预测: 我们研究了多令牌预测(MTP)目标,并证明了它在模型性能方面的益处。MTP 目标可以用于推测性解码,以加速推理。
  3. 预训练: 我们设计了一个 FP8 混合精度训练框架(工程好强啊),并首次在极其大规模的模型上验证了其可行性和有效性。通过算法、框架和硬件的联合设计,我们克服了跨节点 MoE 训练的通信瓶颈,实现了近全计算-通信重叠,从而显著提高了训练效率并降低了成本。
  4. 后训练: 我们引入了一种创新的方法,从 DeepSeek-R1 系列模型中蒸馏推理能力,并将其集成到标准 LLMs 中,特别是 DeepSeek-V3。我们的管道优雅地将 R1 的验证和反射模式集成到 DeepSeek-V3 中,显著提高了其推理性能。同时,我们还保持了对输出样式和长度的控制。
  5. 核心评估结果总结: DeepSeek-V3 在知识、代码、数学和推理等多个领域表现出色。在教育基准测试(如 MMLU、MMLU-Pro 和 GPQA)上,它超越了所有其他开源模型,并表现出与领先封闭源代码模型(如 GPT-4o 和 Claude-Sonnet-3.5)相当的性能。在数学相关基准测试上,DeepSeek-V3 取得了最先进的性能,甚至在某些基准测试上超过了 o1-preview。在编码相关任务上,DeepSeek-V3 在编码竞赛基准测试(如 LiveCodeBench)上表现出色,成为该领域的领先模型。

图片

预训练

14.8T数据,2048 H卡,训了56天(2.788M GPU hours),算力开销是四千万人民币,很值的感觉。这就能烧一个 GPT4 水平的基础模型,大佬们应该都蠢蠢欲动了。

  • 14.8T 训练:
  • 完整训练仅需 2.788M H800 GPU 小时。
  • 看报告有三十位数据标注员。这版覆盖更多语言,继续增加了数学 / 代码的比例,代码数据中的 10% 用中间补充(FIM)策略来组织(我理解这主要是为了给模型强化一个常用的推理功能)。为了压缩其它语言的内容,调整了分词器。
  • 模型架构:
  • 700B MoE 模型。
  • 256 个总专家,其中 1/8 共享专家,8 top-k,推理激活了 37B 参数。
  • 与 DeepSeek v2 的比较:236B MoE,16 个专家,1/8 共享,1 top-k 选择,推理激活了 21B 参数。
  • 多头潜在注意力(MLA):
  • 类似于 DeepSeek v2 MoE,前三层不是 MoE。
  • 其他细节:
  • 61 层,宽度 7168。
  • 多令牌预测(MTP)作为目标。
  • 16 PP(并行)/ 64 EP(专家并行)/ Zero-1 DP(数据并行)#优化了全对全通信内核,而不是昂贵的 TP(张量并行)。
  • 在 CPU 上进行 EMA

超参数

  • 初始的学习率和优化器配置,都是继承 deepseek v1 的结论,batchsize 也是按缩放定律从 v1 的 3072 到 15,360。
  • WSD 学习率调度器:0 → 2.2e-4(2k steps)→ 常数直到 10T → 2.2e-5(在 4.3T tokens 时余弦衰减)→ 2.2e-5(在剩余的 167B tokens 时常数)。

长文本能力

  • 用 YaRN 方法 (arXiv:2309.00071)
  • 上下文窗口扩展: 每 1000 steps,从 4k 逐步扩展到 32k,然后到 128k。

RLHF 部分

奖励构建:

  1. 基于规则的奖励机制。对于可以使用特定规则进行验证的问题,我们采用基于规则的奖励系统来确定反馈。例如,某些数学问题有确定的结果,我们要求模型在指定的格式内(例如,在方框中)提供最终答案,以便我们可以应用规则来验证正确性。类似地,对于 LeetCode 问题,我们可以利用编译器根据测试用例生成反馈。通过尽可能利用基于规则的验证,我们确保了更高的可靠性,因为这种方法不易受到操纵或利用。
  2. 对于具有自由形式真实答案的问题,我们依靠奖励模型来确定响应是否与预期的真实答案匹配。相反,对于没有明确真实答案的问题,例如涉及创意写作的问题,奖励模型的任务是根据问题和相应的答案作为输入提供反馈。奖励模型从 DeepSeek-V3 SFT 检查点进行训练。为了提高其可靠性,我们构建了偏好数据,这些数据不仅提供最终奖励,还包括导致奖励的思维链。这种方法有助于减轻在特定任务中奖励被操纵的风险。

看起来还是客观题用规则方法,主观题用奖励模型,而且是一种 COT 的奖励模型

  • 训练了 2epoch,余弦学习率衰减
  • 提到了 constitutional AI approach 和 self-rewarding,显然有模型打分造数据的部分了

评测

我圈出了一些比较有亮点的数字

我个人觉得如果一个榜 qwen-dense 也能做得不错,可能就不是做超大 MoE 模型应该关注的点了

图片

比较有亮点的是数学能力,Coding 看这个榜不好说提升是不是非常大,因为 Codeforces 漏题还是比较严重的,从论文字面上没看出来有没有排除相关影响

无所谓,训出来了,自有大儒会讲经的

论文讨论部分

蒸馏好像很重要,但是主要在这部分描述

从 DeepSeek-R1 蒸馏
我们通过基于 DeepSeek-V2.5 的实验来消融从 DeepSeek-R1 蒸馏的贡献。基线模型是在短链数据上训练的,而其竞争对手则使用了由专家检查点生成的数据。
表 9 展示了蒸馏数据的有效性,在 LiveCodeBench 和 MATH-500 基准测试中都取得了显著改进。我们的实验揭示了一个有趣的权衡:蒸馏会导致性能更好,但也会显著增加平均响应长度。为了在模型准确性和计算效率之间保持平衡,我们为 DeepSeek-V3 的蒸馏精心选择了最佳设置。
我们的研究表明,从推理模型中蒸馏知识是一个有前途的后训练优化方向。虽然我们目前的工作重点是蒸馏数学和编码领域的数据,但这种方法在各种任务领域都显示出潜力。这些特定领域的有效性表明,长链蒸馏可能对增强其他需要复杂推理的认知任务的模型性能有价值。对这种方法在其他领域的进一步探索仍然是未来研究的一个重要方向。

图片

推理过程强化,然后筛选和蒸馏反哺,听起来很有搞头

自我奖励
奖励在 RL 中起着至关重要的作用,指导着优化过程。在可以通过外部工具进行验证的领域,如某些编码或数学场景中,RL 显示出了出色的效果。然而,在更一般的场景中,通过硬编码构建反馈机制是不切实际的。在 DeepSeek-V3 的开发过程中,对于这些更广泛的上下文,我们采用了Constitutional AI 方法(Bai et al., 2022),利用 DeepSeek-V3 本身的投票评估结果作为反馈源。这种方法产生了显著的对齐效果,显著提高了 DeepSeek-V3 在主观评估中的表现。
通过将补充信息与 LLM(大型语言模型)作为反馈源相结合,DeepSeek-V3 可以优化到 Constitutional 方向。我们认为这种范式将补充信息与 LLM 作为反馈源相结合,对于推动 LLM 的自我改进至关重要。除了自我奖励外,我们还致力于发现其他一般性和可扩展的奖励方法,以持续推动模型能力在一般场景中的发展。

Constitutional AI 方法简单来说就是,不是所有打标都要人搞,比如有害性标注就可以交给模型负责,然后我们可以在降低有害性,提高有用性两个维度上,做帕累托改进

多令牌预测评估
DeepSeek-V3 通过多令牌预测(MTP)技术预测了下一个 2 个令牌,而不是仅仅预测下一个单个令牌。结合推测性解码框架(Leviathan et al., 2023; Xia et al., 2023),这可以显著加速模型的解码速度。一个自然的问题是,额外预测的令牌的接受率是多少?基于我们的评估,第二个令牌预测的接受率在各种生成主题上都保持在 85% 到 90% 之间,展示了一致的可靠性。这个高接受率使 DeepSeek-V3 能够实现显著改进的解码速度,将 TPS(每秒令牌数)提高了 1.8 倍。

虽然解码速度提升是常数级的,但是对于用户体验非常重要的

#Frenet坐标系 or Cartesian坐标系?

首发于 Frenet坐标系 or Cartesian坐标系?

在智能驾驶领域,轨迹规划问题可以抽象成在满足一定约束条件下寻找最优解的问题,优化变量、状态方程和约束条件是决定优化问题求解复杂性的关键要素。坐标系的选择不仅是解决问题首先要考虑的,而且对优化问题形式和复杂性有着至关重要的影响。

智能驾驶领域中广泛使用的坐标系有Frenet坐标系(sl坐标系)和Cartesian坐标系(xy坐标系),两者最大的区别在于坐标轴是否允许为曲线,Cartesian坐标系即几何中常见的直角坐标系,两条坐标轴是相互正交的直线。而Frenet坐标系允许一条坐标轴为曲线(参考线s),故又称为曲线坐标系。

从定义上可以直觉得出Frenet坐标系特别适合自动驾驶领域的结论,因为车辆的行驶的绝大部分场景都是存在车道线的道路环境下,只要将道路的中心线作为参考线,就可以将复杂的道路环境简化为直线隧道模型,图1显示了Cartesian坐标系向Frenet坐标系的转换。

图1 Cartesian坐标系向Frenet坐标系的转换示意图[1]

将弯曲的道路拉直,这是Frenet坐标系最大(也许是唯一)的优点,怎么评估这个优点的大小?在自动驾驶领域,道路边界是一个不得不处理的约束,很多情况下,非线性的道路边界也是最难表示和处理的约束。这种转换直接将非线性的道路边界约束变成了线性的约束,从而大大简化了后续优化问题的求解。此外,现实中的车辆大多数时候都是沿着道路中心线行驶的,所以在Frenet坐标系中,车辆的运动可以直接解耦为纵向运动和横向运动,实现了降维的效果,这是在Cartesian坐标系中是很难实现的。所以,虽然Frenet坐标系有诸多不足之处,它依旧是自动驾驶领域优先考虑的坐标系。

下面主要讨论Frenet坐标系在使用过程中可能出现的问题点:

问题1:xy向sl坐标转换的连续性问题

xy坐标向sl坐标转换的第一步是确定投影点的位置,即在s轴上寻找距离点P最近的投影点,这是一个寻找最优值的过程,没法保证其解的唯一性。如图2所示,参考线上红色区域是曲率为kr的圆弧,圆弧上的任何一点都是其圆心位置P0的投影点。多个投影点的后果是坐标转换困难,如果在多个可行解中随机取值就可能会导致连续的xy轨迹转换成不连续的sl轨迹,这是不连续性的第一个来源。即使能实现处处一对一的转换,xy转换成sl也可能变得不连续,如图2所示,Cartesian坐标系下相距很近的P1、P2的投影点s1、s2也差距巨大。对于曲率越大的参考线,发生这种问题的风险就越高。

图2 xy向sl坐标转换导致不连续 [1]

问题2:对参考线要求高

参考线直接决定投影点的位置,以及sl曲线。以kx表示xy曲线的曲率,kf表示sl曲线的曲率,两者的转换关系如下:

式中kr为参考线曲率,所以要得到曲率连续sl曲线,不仅要求xy曲线的曲率连续,还要求参考线的曲率连续;

问题3:车辆形状扭曲

车辆一般被简化为具有固定尺寸的矩形,用四个顶点来控制其边界,甚至车辆会被抽象成一个点,向四周碰撞一定距离形成边界,在Cartesian坐标系中,这种简化与实际情况完全相符。Frenet坐标系将弯曲道路拉直的同时,也将规则的车辆变得扭曲,如下图3所示。相应地,Frenet中规则的方形实际上代表的是与参考线平行的扭曲形状,如果简单以四个顶点的模型来代表整个车辆边界,就会与真实车辆形状产生偏差,常用的碰撞检测算法就会失效。这种偏差随着参考线曲率和车辆尺寸的变大而变大。

图3 坐标转换导致车辆形状扭曲

问题4:sl和xy的坐标转换误差

工程应用中,参考线通常是以一系列离散坐标点的形式表示的,只有离散点处(x,y)的信息来自传感器,其他的heading/kappa/dkappa信息都是据此推导而来的,这些信息的连续性或平滑性,依赖于相邻参考点之间的连接处理。使用高阶连续曲线处理,可以解决连续性问题,但是会导致投影点的计算量剧增,而坐标转换的计算是个高频行为,有时甚至是算法的性能瓶颈,工程中为了降低计算复杂性,通常有以下假设:

假设1:xy向sl转换时,假设相邻两参考点之间的参考线是直线,heading保持不变。

假设2:sl向xy转换时,假设相邻两参考点之间参考线的heading是线性变化的。

在这两条不一直的假设下,xy和sl之间的来回转换就是不可逆,即(x, y) → (s,l) → (x', y'),(x, y) != (x', y'),如下图4所示。这种差异也会随着参考线曲率和轨迹的采样间隔的增加而增大。

图4 sl和xy的坐标转换误差示意图

有了上面的讨论后,我们再重新思考Frenet坐标系和Cartesian坐标系的选择问题,可以有如下建议:

  1. 在小曲率的结构化道路中(如高速路或城区快速路),Frenet是首选坐标系。
  2. Frenet坐标系的问题随着参考线曲率的增加而被放大,所以在大曲率的结构化道路(如城区有引导线的路口)中,选择Frenet就要慎重。
  3. 对于非结构化的道路,如港口、矿区、停车场,无引导线的路口,建议使用Cartesian坐标系。

#DrivingGPT

中科院最新:利用多模态自回归方法统一驾驶世界模型和规划双任务!

目前,驾驶世界模型已获得了来自工业界和学术界的广泛关注,因为基于模型的搜索和规划被广泛认为是实现人类级智能的重要途径。这些模型有多种用途,包括训练数据增强、稀有场景生成。大多数当前世界模型都是通过微调现有的扩散模型来开发的,利用视频生成基础模型的泛化能力。控制信号(如文本、布局和驾驶操作)通过两种主要方法整合:扩散模型的空间特征与控制信号特征之间的交叉注意,或通道级特征调制技术。

尽管驾驶世界模型取得了非常不错的研究进展,但一个根本挑战仍然存在:在可微分框架中无缝集成世界建模和规划仍未得到很大程度的解决,从而限制了可微分模型规划的全部潜力。世界模型目前主要基于视频扩散架构,限制了它们生成多种模态(如文本和动作序列)的能力。因此,在扩散模型框架内实现驾驶规划和世界建模的真正端到端集成仍然是一项重大的技术挑战。这些限制促使我们探索能够自然处理多模态输入和输出并实现端到端可微分规划的替代架构。

与扩散模型相比,具有下一个Token预测训练目标的自回归Transformer在包括语言建模、视觉问答、图像生成、视频预测、顺序决策和机器人操作在内的广泛任务中表现出卓越的建模能力。自回归Transformer处理顺序数据和多种模态的天生能力使其特别有希望成为基于模型的集成驾驶规划器。

基于上述的讨论,在这项工作中,我们旨在利用自回归Transformer的建模能力来进行驾驶任务中的世界建模和轨迹规划,提出的算法模型称为DrivingGPT。在具有挑战性的 NAVSIM 基准上进行的实验进一步证明了所提出的多模态驾驶语言作为规划训练目标的有效性。我们的 DrivingGPT 在驾驶得分方面优于流行的带有 MLP 轨迹解码器规划器的视觉编码器。

  • 论文链接:https://arxiv.org/pdf/2412.18607

网络模型结构&技术细节

经过训练用于下一个Token预测的自回归Transformer已在不同领域展现出卓越的能力。在这项工作中,我们通过结合世界模型和轨迹规划,利用自回归Transformer的强大功能实现自动驾驶。我们的方法将视觉输入和驾驶动作转换为离散驾驶语言,从而通过自回归Transformer实现统一建模,其整体的网络结构图如下图所示。

问题表述

与许多其他任务一样,驾驶问题可以表述为马尔可夫决策过程,这是一种在具有部分随机结果的环境中做出决策的通用数学框架。MDP 包含一个状态空间,它反映了自车和环境的所有状态;一个动作空间;一个随机转换函数,它描述了给定时间的状态和动作的所有可能结果的概率分布;以及一个标量奖励函数,它决定了在特定状态下应采取的最佳动作。在大多数实际应用中,我们只能感知到噪声观测,而无法感知底层状态。因此,引入了观测概率函数,MDP 变为部分可观测的 MDP。预测未来轨迹的端到端策略和模拟驾驶世界动态的观察空间随机转换函数在自动驾驶中都非常重要。我们寻求将这两个挑战统一为一个序列建模任务。

多模态驾驶语言

一般的驾驶序列可以表示为一系列时间同步的观察-行动对,时间范围为。在这里,我们需要将观察和动作标记为离散token,并形成多模态驾驶语言,然后才能利用自回归Transformer进行下一个token预测。

Observation Tokenization

为了简化我们的方法,我们只将前置摄像头图像包含在观察空间中,而将更先进的传感器设置(如周围的 cemaras、LiDAR 和 IMU)留待将来探索。为了将更多帧纳入我们的序列建模,我们利用 VQ-VAE 将图像下采样为图像token。

Action Tokenization

我们的方法与现有的驾驶世界建模方法的不同之处在于,它能够生成未来的驾驶行为。与大多数的端到端驾驶规划器不同,可以预测未来的整个驾驶轨迹。我们的下一个 token 预测公式的因果性质禁止我们构建具有较长动作范围的驱动序列。未来的观察和行动都从历史行动中获取了太多特权信息。

如果我们使用的动作范围,最后的历史动作将包含直到时间戳的所有未来驾驶动作,导致模型只学习复制历史动作,而不是学习基于观察的驾驶。因此,我们不是预测长距离绝对驾驶轨迹,而是预测帧间相对驾驶轨迹,表示时间戳之间的纵向平移、横向平移和偏航旋转。我们将量化为动作token,首先将每个动作组限制在其第1百分位和第99百分位之间。然后,我们通过将限制的动作成分均匀划分为M个格子,获得动作标记。由于的大小和单位不同,我们用不同的词汇量化这三个动作成分,以最大限度地减少信息损失。

Unified Visual Action Sequence Modeling

我们根据token化的驾驶序列构建统一的驾驶语言,然后利用带有因果注意力掩码的自回归Transformer将驾驶建模为下一个token预测。我们将视觉模态和动作模态视为不同的foreign language,并使用统一的词汇表进行驱动。视觉模态的词汇量为,即 VQ-VAE 的codebook大小。动作模态的词汇量为,其中是每个动作组件的bin大小,3表示不同的动作组件。因此,我们的多模态驾驶语言的词汇量为。

我们对图像和动作token应用逐帧一维旋转embedding。然后,自回归Transformer学习使用标准交叉熵损失对统一token序列进行建模。

图片

虽然驾驶语言模型形式看起来很简单,但它明确地将驾驶世界建模和端到端驾驶作为其子任务。

Integrating Action into Trajectory

由于我们在驾驶语言中使用了帧与帧之间的相对动作,因此我们需要将它们整合起来以获得绝对驾驶轨迹。我们首先将预测的动作转换为二维变换矩阵,然后进行整合。

然后,我们通过连续乘以这些相对位姿矩阵来获得绝对位姿,并将其相应地转换回绝对动作。

实验结果&评价指标

视频生成的实验结果

我们对navtest数据集上的几种方法进行了定量比较,相关的实验结果汇总在下表当中。

由于许多视频模型仅发布模型权重,我们将我们的方法与它们公开可用的模型进行比较。我们发现 SVD 和 CogvideoX 都倾向于产生细微的动作,这导致驾驶场景中的表现不佳。为了确保公平比较,我们在 navtrain 集上微调了 SVD 模型。以前的视频模型通常依赖于基于扩散的方法,而我们的方法是自回归视频生成的先驱。值得注意的是,我们从头开始训练的模型在视频生成质量方面超越了以前的方法。

自回归模型的一个关键优势是能够通过有效利用历史信息来生成长时长视频,从而生成更连贯的视频。在这个实验中,我们从 navtest 数据集中选择了 512 个视频片段(每个片段包含超过 64 帧)进行评估。而 SVD 方法在生成较长的序列时很难保持质量,相关的实验结果如下表所示。

通过上表的实验结果可以看出,我们的方法表现出了生成高质量长期序列的卓越能力。SVD的固定帧数训练限制导致较长序列的图像和视频质量显着下降。相比之下,我们的方法始终如一地生成高质量图像并获得较低的 FVD 分数,表明性能更稳定和更优越。

此外,与以往基于扩散的方法相比,我们的方法可以生成更加多样化和合理的场景。如下图所示,SVD 微调方法在生成较长的视频时经常会陷入重复过去内容的困境,例如长时间被困在红灯下。相比之下,自回归方法在生成长视频方面表现出显着的优势,从而显着改善了场景内容和视频质量。

除了长视频生成之外,我们方法的另一个优势在于它能缓解物体幻觉现象。如下图所示,基于扩散的方法由于缺乏历史信息,经常会遭遇物体突然出现(红色框)和逐渐消失(绿色框)的情况。相比之下,我们的自回归方法保持了卓越的一致性。

端到端规划的实验结果

我们的 DrivingGPT 能够联合预测未来图像和驾驶行为,从而实现端到端的规划性能评估。为了严格评估我们的规划器的性能,我们选择了更具挑战性的 NAVSIM 基准,该基准旨在提供比以前的 nuScenes 和 nuPlan 基准更多样化的驾驶操作。此外,鉴于最近关于使用自车状态将为规划者提供过多特权信息的讨论,我们故意选择将其排除在我们的驾驶语言之外。按照 NAVSIM 设置,我们根据过去 2 秒的观察和行动来预测未来 4 秒的轨迹。相关的实验结果如下表所示。

与恒定速度和恒定速度恒定偏航率的基线相比,我们提出的 DrivingGPT 实现了不俗的表现性能。此外,我们的 DrivingGPT 与使用 ResNet-50 视觉编码器和 MLP 轨迹解码器实现的简单但可靠的端到端规划器基线相比更具优势。该基线仅使用前置摄像头图像,也不使用自车状态。考虑到我们提出的 DrivingGPT 只能通过重建驾驶环境的高度压缩图像token来学习表示,结果突出了联合学习世界建模和给定规划的潜力。下图展示了我们提出的DrivingGPT 在具有挑战性的驾驶场景下生成的轨迹。

消融实验分析

如下表所示,视觉标记器的质量显著影响世界模型视觉预测质量的上限。我们在navtest数据集上评估了几种最先进的离散视觉标记器,该数据集包含 12,146 个视频样本。根据我们的评估,我们选择 Llama-Gen 作为我们世界模型的最佳视觉标记器。

此外,自回归Transformer是众所周知的强大拟合机器。因此,我们试图回答一个问题:DrivingGPT 是否真正学会了驾驶,还是只是通过复制或推断历史驾驶动作来偷工减料。我们逐渐用仅从历史动作估计的未来动作替换 DrivingGPT 的预测动作。我们只是复制最后的历史动作,因为一般的驾驶轨迹不涉及任何动作输入变化。相关的实验结果如下表所示。

我们的 DrivingGPT 始终优于所有简单复制横向、纵向和历史动作的变体。可能会注意到,复制之前的纵向动作会产生最差的规划结果,这是因为 NAVSIM 基准包含许多场景,其中自车刚刚开始从停止和启动加速。实验结果表明,我们的 DrivingGPT 真正学会了如何驾驶,而不仅仅是复制历史动作。

同时,我们发现数据质量在语言建模等其他任务上训练自回归Transformer时起着核心作用。因此,我们研究驱动数据质量和数量对端到端规划性能的影响,相关的实验结果如下表所示。

使用NAVSIM等高质量数据训练的模型(仅包含 100k 个驾驶序列)优于使用 650k 个 nuPlan 驾驶序列训练的模型。结果表明,在驾驶语言建模中,数据质量比数据数量更重要。​

结论

在本文中,我们提出了一种新颖的多模态驾驶语言,该语言有效地将视觉世界建模和轨迹规划统一到序列建模任务中。我们设计的算法框架称为DrivingGPT,可以联合学习为这两个任务生成图像和动作token。在nuPlan 和 NAVSIM 基准上进行的实验和消融研究证明了所提出的 DrivingGPT 在动作条件视频生成和端到端规划方面的有效性。

#一些必备算法和硬件

视觉语言动作(VLA)

  • 算法:VLA要求智能体根据视觉和语言输入生成动作。常用算法包括:
  • 多模态Transformer:用于融合视觉、语言和动作信息;
  • 强化学习(RL):用于优化动作策略;
  • 学习路径
  • 学习多模态融合技术,掌握Transformer架构;
  • 研究VLA任务的经典论文和开源框架,包括显示端到端、隐式端到端、分层端到端方法等;
  • 熟悉数据的采集和生成;
  • 熟悉代码框架;

视觉语言导航(VLN)

  • 算法:VLN要求智能体根据自然语言指令在环境中导航。常用算法包括:
  • 强化学习(RL):通过奖励机制训练智能体导航;
  • 模仿学习(IL):通过专家示范数据训练智能体;
  • 图神经网络(GNN):用于建模环境中的空间关系;
  • 学习路径
  • 学习强化学习和模仿学习的基础知识;
  • 掌握图神经网络的基本概念和应用;
  • 研究VLN的经典数据集(如R2R)和仿真平台(如Matterport3D);

机械臂抓取

  • 算法:机械臂抓取任务涉及物体检测、姿态估计和抓取规划。常用算法包括:
  • 6D姿态估计:用于估计物体在三维空间中的位置和姿态;
  • 抓取生成网络(GG-CNN):用于生成抓取点;
  • 强化学习:用于优化抓取策略;
  • 学习路径
  • 学习计算机视觉中的物体检测和姿态估计技术,包括传统视觉抓取和端到端/深度学习方法;
  • 掌握机械臂运动学和动力学基础;
  • 研究抓取生成算法和强化学习在机器人中的应用;

视觉语言模型(VLM)

  • 算法:VLM用于理解和生成与视觉内容相关的语言描述。常用算法包括:
  • CLIP:OpenAI提出的多模态模型,能够将图像和文本映射到同一空间;
  • BLIP:用于图像-文本生成和理解的模型;
  • ViLT:视觉和语言Transformer模型;
  • Qwen/internVL/Deepseek等:最新视觉语言大模型,可以微调执行下游任务;
  • 学习路径
  • 学习Transformer架构和多模态模型的基础知识;
  • 研究CLIP、BLIP等模型的论文和代码实现;
  • 大模型的微调、多任务、部署等;

扩散策略(Diffusion Policy)

  • 算法:扩散策略是一种基于扩散模型的决策方法,用于生成连续动作序列。常用算法包括:
  • 扩散模型(Diffusion Models):通过逐步去噪生成数据;
  • 行为克隆(Behavior Cloning):通过模仿专家数据生成策略;
  • 学习路径
  • 学习扩散模型的基本原理和应用;
  • 研究扩散策略在机器人控制中的应用;
  • 扩散模型的策略生成任务;

强化学习

  • 算法:强化学习用于优化智能体的决策策略。常用算法包括:
  • DQN:深度Q网络,用于离散动作空间;
  • PPO:近端策略优化,用于连续动作空间;
  • SAC:适合高维动作空间;
  • 学习路径
  • 学习强化学习的基础理论,如马尔可夫决策过程(MDP);
  • 掌握经典算法(如DQN、PPO)的实现和应用;
  • 在仿真环境(如OpenAI Gym)中实践强化学习任务;

触觉感知

  • 算法:触觉感知涉及力觉、触觉传感器的数据处理和反馈控制。常用算法包括:
  • 信号处理:用于处理触觉传感器数据;
  • 深度学习模型:用于触觉数据的分类和回归任务;
  • 学习路径
  • 学习传感器数据处理技术;
  • 掌握触觉反馈控制方法;
  • 研究触觉感知在机器人抓取和操作中的应用;

#端到端自动驾驶模型的三大仿真测试

“浅析”究竟有多浅——本文将围绕三个自动驾驶端到端模型闭环仿真测试项目的例子,分析不同的端到端模型仿真框架。主要分析的内容是:仿真系统产生的传感器数据是如何传递给端到端模型的,模型输出的控制命令又是如何反馈给仿真系统的。

本文的三个例子正好覆盖了基于游戏引擎的仿真系统、基于3DGS三维重建的仿真系统和基于生成式模型的仿真系统。

Bench2Drive

  • Website: https://thinklab-sjtu.github.io/Bench2Drive/
  • Github: https://github.com/Thinklab-SJTU/Bench2Drive/

Bench2Drive项目的详细介绍,可以参考的文章:上交ReThinkLab新作 | Bench2Drive:首个端到端自动驾驶综合能力闭环评估开放平台!

简言之,Bench2Drive是一个以开源自动驾驶仿真软件CARLA为基础的测试框架,而且重新实现了UniAD,VAD等方法的代码。我们将以此项目的代码为例分析CARLA的Leaderboard,一个常用的端到端仿真测试框架。

Bench2Drive闭环仿真程序总入口:Bench2Drive/leaderboard/leaderboard/leaderboard_evaluator.py:main(),其中主要创建了一个LeaderboardEvaluator的类的实例并调用了其run()方法。

LeaderboardEvaluator类主要职责包括管理CARLA服务器生命周期、加载路线配置和城镇环境、动态加载智能体模块、验证传感器配置有效性等。

核心组件:

  • ​_setup_simulation()​​: Bootstraps CARLA server/client with retry logic
  • ​_load_and_run_scenario()​​: Core scenario loop with error handling
  • ​run()​​: Main execution flow with route iteration
  • ​_cleanup()​​: Ensures proper resource teardown

在创建LeaderboardEvaluator类实例的时候,在该类的构造函数中:

  1. self.module_agent将从leaderboard/team_code/下获取被测端到端模型的python module,例如来自Bench2DriveZoo仓库的uniad_b2d_agent.py
  2. 会创建一个ScenarioManager类的实例self.manager。

接下来,在LeaderboardEvaluator的run()方法会调用​​def _load_and_run_scenario()​​,在该方法中:

  1. self.agent_instance会创建一个UniAD的UniadAgent类的实例,UniadAgent类继承自leaderboard/leaderboard/autoagents/autonomous_agent.py中的AutonomousAgent类。AutonomousAgent类在初始化时会给自己创建一个来自leaderboard/leaderboard/envs/sensor_interface.py的SensorInterface()的实例:​​self.sensor_interface = SensorInterface()​
  2. ​self.manager.load_scenario(self.route_scenario, self.agent_instance, config.index, config.repetition_index)​​进入ScenarioManager类的load_scenario()方法

在self.manager.load_scenario()方法中:

  1. ​self._agent_wrapper = AgentWrapperFactory.get_wrapper(agent)​​给agent(即上一步的agent_instance)实例选择一个AgentWrapper,对于本文中的UniAD,这将会是实例化一个leaderboard/leaderboard/autoagents/agent_wrapper.py的AgentWrapper类。
  2. ​self._agent_wrapper.setup_sensors(self.ego_vehicles[0])​​执行AgentWrapper类的setup_sensors方法,在carla中的主车上附加上仿真所用的传感器。

在setup_sensors()方法的代码内部,有使用CARLA仿真经验的人就会发现一个熟悉的语句:​​sensor.listen(CallBack(id_, type_, sensor, self._agent.sensor_interface))​​​,这里的​​self._agent​​就是前文的agent_instance。

其中,CallBack类也来自于leaderboard/leaderboard/envs/sensor_interface.py,该类的__call__方法会将CARLA仿真的传感器数据存入agent的sensor_interface中的data_buffers的Queue()队列中。因此,在仿真运行过程中,每一步的传感器数据就会通过这个callback存入UniadAgent类的实例的sensor_interface中。

我们再回到​​def _load_and_run_scenario()​​​方法,接下来会进入​​self.manager.run_scenario()​​​,run_scenario()的核心是ScenarioManager类的​​def _tick_scenario(self)​​​方法: 其中的​​ego_action = self._agent_wrapper()​​,AgentWrapper的__call__方法会直接返回UniadAgent类的实例,调用该类的__call__方法。

在UniadAgent类的父类AutonomousAgent类的__call__方法中,首先就获取了该步仿真下的传感器数据:

​input_data = self.sensor_interface.get_data(GameTime.get_frame())​​ get_data会把数据从sensor_interface的data_buffers中取出。

​control = self.run_step(input_data, timestamp)​​ UniadAgent类覆写的run_setup会被调用。就像Leaderboard官方文档给出的agent编写建议creating-your-own-autonomous-agent写的那样,这个函数的输入input_data就包含了一个端到端模型所需要的传感器数据输入。

在UniadAgent类实例的run_setup中,传感器输入经过处理,最终会输入给UniAD模型进行推理:​​output_data_batch = self.model(input_data_batch, return_loss=False, rescale=True)​​,而推理结果经过一些列的PID调制等步骤,最终会作为control输出。

我们再回到​​def _tick_scenario(self)​​​方法,上文提到的​​ego_action = self._agent_wrapper()​​​,ego_action承接了UniAD模型输出的control,并接下来通过​​self.ego_vehicles[0].apply_control(ego_action)​​控制仿真中的主车。

至此,我们通过Bench2Drive项目简要分析了CARLA Leaderboard在端到端模型闭环仿真中的输入输出形式。

HUGSIM

  • Github: https://github.com/hyzhou404/HUGSIM/

HUGSIM项目的详细介绍,可以参考文章:真实闭环拉满!浙大&华为发布全新闭环仿真工具HUGSIM

简言之,HUGSIM不仅研究了一种新的基于3DGS的自动驾驶场景三维重建方法,而且在该方法的基础上开发了一个可闭环测试端到端自动驾驶模型的仿真系统。

HUGSIM使用Gymnasium作为框架,以完成仿真运行。Gymnasium是一个强化学习环境库,它提供了一套标准化的接口来构建和测试强化学习算法。以下是一些基本用法,重点介绍 ​​gymnasium.make()​​​, ​​gymnasium.reset()​​​, ​​gymnasium.step()​​ 等方法的使用:

1. 创建环境 ​gymnasium.make()

​gymnasium.make()​​ 函数用于创建或加载一个环境。你需要传入环境的ID,例如 "CartPole-v1"。

2. 重置环境 ​gymnasium.reset()

​gymnasium.reset()​​ 方法用于重置环境到初始状态。在每次新的episode开始时,都需要调用这个方法。它返回环境的初始观察值。

3. 与环境交互 ​gymnasium.step()

​gymnasium.step(action)​​ 方法用于执行一个动作,并返回环境的反馈。具体返回值包括:

  • ​observation​​:环境的新状态。
  • ​reward​​:执行动作后获得的即时奖励。
  • ​terminated​​:布尔值,表示环境是否终止(例如,杆倒下或达到最大步数)。
  • ​truncated​​:布尔值,表示环境是否被截断(例如,达到最大步数)。
  • ​info​​:额外的信息,如调试信息等。

在HUGSIM中,仿真环境和被测对象是两个单独的进程,进程间数据的交换采用的是FIFO管道的形式。FIFO管道是一种特殊的文件,允许不相关的进程通过文件系统进行通信。FIFO管道在文件系统中有一个路径名,任何有权限的进程都可以打开它进行读写。

HUGSIM闭环仿真程序总入口:HUGSIM/closed_loop.py:main()。下面我们仍以UniAD为例。

首先,​​process = launch(ad_path, args.ad_cuda, output)​​在另一进程中启动了UniAD_SIM/tools/e2e.sh脚本,通过UniAD_SIM/tools/closeloop/e2e.py运行起了UniAD模型。

然后进入create_gym_env函数中:

  1. ​env = gymnasium.make('hugsim_env/HUGSim-v0', cfg=cfg, output=output)​​创建仿真环境,进入逐步仿真过程:
  2. ​pipe.write(pickle.dumps((obs, info)))​​将三维重建的渲染结果等信息obs写入obs_pipe,这将作为传感器信息给到UniAD。
  3. ​plan_traj = pickle.loads(pipe.read())​​从plan_pipe中读取UniAD输出的规划路径。
  4. ​acc, steer_rate = traj2control(plan_traj, info)​​将规划的路径转化成控制命令。
  5. ​obs, reward, terminated, truncated, info = env.step(action)​​通过gymnasium框架的step方法,将控制命令给到仿真车辆,运行仿真环境向前计算一步,获得新的obs。
  6. 重复2-5步骤

HUGSIM仿真环境hugsim_env代码位于sim/hugsim_env/envs/hug_sim.py中,核心是HUGSimEnv类。

在HUGSimEnv类的step方法中,控制命令action改变ego车动作self.ego,在step中会进行测评指标判断以决定仿真是否中止,然后进行到​​observation = self._get_obs()​​:

在​​self._get_obs()​​中:

c2w = self.ego @ c2front
viewpoint = create_cam(intrinsic, c2w)
render_pkg = self.render_fn(viewpoint=viewpoint, prev_viewpoint=None, **self.render_kwargs)

新的self.ego会通过render_fn产生新的渲染结果。

下面来看UniAD_SIM/tools/closeloop/e2e.py中对于UniAD模型的调用,关键步骤有:

  1. ​raw_data = pipe.read()​​ 从obs_pipe读取传感器数据
  2. ​data = parse_raw(raw_data, cameras, img_norm_cfg, history)​​ 对传感器数据做预处理
  3. ​results = model(return_loss=False, rescale=True, **data)​​ 调用UniAD模型进行推理
  4. ​pipe.write(pickle.dumps(plan_traj))​​ 将后处理过的推理结果写入plan_pip

至此,我们通过简要分析了HUGSIM工程在端到端模型闭环仿真中的输入输出形式。

DriveArena

  • Website: https://pjlab-adg.github.io/DriveArena/
  • Github: https://github.com/PJLab-ADG/DriveArena/

DriveArena项目的详细介绍,可以参考的文章:首个为高保真度闭环模拟设计!DriveArena:自动驾驶闭环生成仿真平台(上海AI Lab等)

DriveArena项目中的闭环仿真系统,主要由World Dreamer,Traffic Manager和被测的Agent组成。其中World Dreamer通过扩散模型和上游输入,提供新的图像信息,作为传感器信息输入给Agent。Traffic Manager接受Agent输出的规划轨迹,生成交通流信息,提供给World Dreamer。

工程中三者间的信息交互是通过FastAPI实现调度的。FastAPI是一个现代、快速(高性能)的Web框架,用于构建API,FastAPI的性能与Node.js和Go相当,是目前最快的Python Web框架之一,基于ASGI(异步服务器网关接口),支持异步编程。

简言之,DriveArena项目中的World Dreamer, Traffic Manager和Agent是通过Web网络通讯实现信息交互的。

Traffic Manager

Traffic Manager启动的入口在TrafficManager/sim_manager.py:main(),创建了一个SimulationManager类的实例并执行了run_simulation()方法。

下面进入run_simulation()的核心:self.process_frame()。在process_frame()中:

  1. ​limsim_trajectories = self.planner.plan(self.model.timeStep * 0.1, self.roadgraph, self.vehicles)​​ 是根据路网和车辆信息来进行交通流仿真,生成的轨迹准备传输给World Dreamer作为图像生成的依据。
  2. ​diffusion_data = limsim2diffusion(...)​​ 将轨迹转换成扩散模型的输入格式
  3. ​gen_images = self.send_request_diffusion(diffusion_data)​​​ 在send_request_diffusion函数中,向"dreamer-api/"发送网络请求​​response = requests.post(self.DIFFUSION_SERVER + "dreamer-api/", json=serialized_data)​​,扩散模型的输入包含在了serialized_data中,response则包含了生成的图像
  4. ​response = requests.get(self.DRIVER_SERVER + "driver-get/")​​ 向"driver-get/"发送网络请求,response中获取Agent规划输出的ego车轨迹(生成的图像向Agent发送的过程在World Dreamer部分将有介绍)
  5. ​limsim_trajectories[self.EGO_ID] = ego_traj​​ 闭环仿真中,代表Agent的规划出的ego车轨迹参与到下一轮的交通流仿真中。

World Dreamer

World Dreamer启动的入口在WorldDreamer/tools/dreamer_fast_api.py:main()。

在主函数中,主要进行了以下操作:

  1. ​image_queue = Queue()​​ 定义了一个队列用来存放渲染的图像
  2. ​pipe, weight_dtype= load_model(cfg)​​ 加载了StableDiffusion模型为后续生成图像做准备
  3. ​uvicorn.run(app, host=args.host, port=args.port, log_level="info")​​uvicorn是一个ASGI(Asynchronous Server Gateway Interface)服务器,用于运行异步Python Web应用,这行代码的作用是启动一个ASGI服务器,并将FastAPI应用 (app) 部署到指定的主机和端口上。

而在本py文件的app中,主要定义了以下功能:

@app.post("/dreamer-api/")
async def process(request: Request, background_tasks: BackgroundTasks)

在FastAPI中,process函数是由框架自动调用的,@app.post("/dreamer-api/")装饰器会在FastAPI应用启动时自动将URL路径/dreamer-api/与POST请求方法绑定到process函数,这个注册过程发生在应用初始化阶段,无需开发者显式调用。当Traffic Manager发送POST请求到/dreamer-api/端点时,该函数会自动调用。

在process()中,request传入了Traffic Manager送来的交通流信息,在此:

return_tuples = run_one_batch(cfg, pipe, val_input, weight_dtype,
                                      transparent_bg=transparent_bg,
                                      map_size=target_map_size)

调用了扩散模型生成图像,并在接下来​​image_queue.put({'param': param, 'img': gen_imgs_list[0]})​​将图像存入image_queue队列。

​background_tasks.add_task(send2agent)​​ 向Agent传输生成的图像被放入了一个后台任务。

在​​async def send2agent()​​ 中,图像从image_queue中取出:

​response = requests.post("http://localhost:{}/driver-api".format(args.agent_port), json=send_data)​​向"driver-api/"发送网络请求,执行端到端的自动驾驶规划。生成的图像都在send_data里。

Agent

我们再次以UniAD为例,Agent的启动入口在:DrivingAgents/UniAD/demo/uniad_fast_api.py:main(),main函数的前部都在做加载UniAD模型的工作,最后的:

​uvicorn.run(app, host=args.host, port=args.port, log_level="info")​​ 与前述类似。

@app.post("/driver-api/")
async def process(request: Request, background_tasks: BackgroundTasks):

在process()中,request传入了来自World Dreamer的生成图像等信息,作为端到端模型的输入,在此:

​outputs = custom_single_gpu_test(model, dataset, args.tmpdir, args.gpu_collect, eval_occ=False, eval_planning=False)​​调用了UniAD模型进行推理,在outputs中输出了规划出的ego轨迹。

@app.get("/driver-get/")
async def get_output()

当Traffic Manager向"driver-get/"发送网络请求时,get_output()会将outputs中的ego轨迹返回。

至此,我们通过简要分析了DriveArena工程在端到端模型闭环仿真中的输入输出形式。

结语

自动驾驶端到端模型的研究是时下十分前沿热门的内容,因此模型在环闭环仿真框架也是百花齐放:使用worldsim软件如CARLA的就沿用成熟的Leaderboard框架,使用新兴方法如3DGS,Diffusion的就视项目情况而定选择一种方便的实现形式。在这种端到端“模型在环”的不考虑硬件实现和仿真实时性的前提下,这些框架都已经能够成功地供研究者展开闭环测试。当然,在端到端模型落地成为可部署的软件形式或域控制器硬件形式时,其闭环仿真系统的输入输出接口形式应该就和目前差异不大了。

#X-Driver

迈向可解释VLM自动驾驶(哈工大&百度)

传统模块化自动驾驶系统存在错误传播泛化能力不足的问题,而端到端方法虽简化了系统设计,但在闭环场景中成功率较低。现有基于多模态大语言模型(MLLMs)的框架在闭环评估中易出现幻觉(不合理决策)和鲁棒性不足。为此,X-Driver提出结合链式思维(CoT)推理和MLLMs,旨在提升决策的可解释性闭环性能

  • 论文链接:https://arxiv.org/abs/2505.05098

摘要

X-Driver通过以下核心设计实现目标:

  1. 多模态融合与CoT推理
    基于LLaVA模型,整合视觉(图像)与文本(导航指令)输入,利用CoT提示分解驾驶任务为多步推理(如目标检测、交通灯状态判断),生成结构化决策流程(参见Figure 3)。

图片

  1. 连续图像编码
    采用ViT编码器替代VQ-VAE,保留远距离交通灯等关键场景信息,减少信息损失。
  2. 闭环框架设计
    在CARLA仿真环境中验证,通过实时传感器输入与动态调整实现闭环控制,显著提升驾驶评分(Driving Score)和成功率(Success Rate)。

方法

核心架构

  • 输入:图像(相机数据)与文本(导航指令)的多模态输入。
  • 推理流程
  1. 通过CoT提示将任务分解为子任务(目标检测、交通灯状态、车道信息等)。
  2. 模型整合历史token与当前输入,生成最终决策与轨迹预测(如Table 1所示场景指令)。

图片

  1. 闭环控制:根据预测轨迹动态调整车辆动作(Figure 1)。

图片

关键技术

  • CoT训练数据:通过高质量提示模板引导模型分步推理(如“先定位目标→分析运动→判断风险→更新决策”)。
  • 连续编码优势:ViT编码器在远距离目标检测中比VQ-VAE保留更多细节(如交通灯状态),提升感知精度(Table 2)。

图片

实验与结果闭环性能

  • 指标:Driving Score(综合路线跟随、速度控制、交规遵守)与Success Rate(任务完成率)。
  • 对比结果
  • 在Bench2Drive数据集上,X-Driver(带CoT)的Driving Score达51.7(vs. UniAD的45.9),Success Rate提升至18.1%(Table 4)。
  • CoT版本在行人避让等场景中显著优于无CoT模型(Figure 4)。

图片

轨迹预测

  • 开环实验:未来3秒轨迹的平均位移误差(ADE)为1.488米,预测精度优于传统方法(Table 3)。

图片

不足与未来展望局限性

  • 场景泛化性:实验主要基于仿真环境(CARLA),未验证极端天气或高度复杂城市路况。
  • 实时性:MLLM的计算开销可能影响实时响应,需进一步优化推理速度。

未来方向

  1. 多模态扩展:融合激光雷达、雷达等传感器,增强环境感知鲁棒性。
  2. 轻量化部署:通过知识蒸馏或模型压缩技术适配边缘设备。
  3. 跨数据集验证:在真实道路数据(如nuScenes)中测试泛化能力。

#SteepGS

无损渲染爆减一半高斯点!SteepGS最速密度控制

最速密度控制

3D高斯泼溅作为神经辐射场(NeRF)的继承者,在新视角合成领域展现出卓越性能,能够实时渲染高分辨率的大规模场景。与传统NeRF的体素化表示不同,3DGS将三维场景的辐射场建模为高斯基元的混合体,每个基元通过位置、尺寸、不透明度和外观等参数定义。通过集成GPU光栅化管线,该方法实现了超高效的渲染与反向传播,显著加速了场景重建与视图推理过程。

3DGS的核心在于交替优化框架:首先以预计算的稀疏点云作为初始化,随后通过标准梯度法优化基元参数以最小化光度误差,同时配合专门设计的自适应密度控制算法(ADC)动态调整基元数量。在致密化阶段,ADC会识别经过充分优化的基元点集,根据其绝对尺寸进行克隆或分裂操作:对尺寸较小的基元沿梯度方向生成两个子代,而对大尺寸基元则在其分布范围内随机生成缩包子代。这种机制旨在扩展场景覆盖范围并捕捉精细几何细节。

然而,现有重构流程存在显著缺陷:生成的冗余点云会导致内存占用激增、渲染速度下降及存储开销过大,这对移动端设备部署形成严重制约。尽管已有研究尝试通过后处理剪枝或量化压缩缓解此问题,但针对致密化过程的优化方法仍属少数。现有改进方案多依赖启发式规则,例如修改分裂准则或基于不透明度分布采样生成新基元,但由于缺乏对致密化机理的深入理解,其性能提升十分有限。

项目主页:https://vita-group.github.io/SteepGS/

本研究通过非凸优化视角对3DGS密度控制机制进行理论解析。我们通过引入"分裂矩阵"这一新型数学工具,揭示基元分裂与损失函数海森矩阵的深层关联,证明分裂操作在逃离鞍点过程中的关键作用。基于此,我们提出四项核心结论

  1. 每个基元分裂为两个子代即可实现损失最优下降;
  2. 子代幅值需减半以保持局部密度;
  3. 沿分裂矩阵最小特征向量方向位移可获得最速下降;
  4. 提供子代不透明度的解析归一化方案。

这些理论发现被整合为"最速密度控制"原则,并由此构建出SteepGS系统[1]。

实验表明,SteepGS在保持渲染质量的前提下,将基元数量缩减约50%,显著提升内存效率与渲染速度。我们的工作不仅为3DGS优化提供了理论支撑,更推动了该技术向移动端设备的实用化进程迈出关键一步。

具体方法

尽管传统的自适应密度控制(ADC)在3D高斯泼溅(3DGS)中取得了经验性成功,但其启发式且略显手工化的分割标准往往会产生冗余的点。本节我们将建立一个理论框架来研究密度控制机制。通过这种方式,我们明确回答了三个关键问题

  1. 高斯基元需要分割的必要条件是什么?
  2. 新的高斯子代应该放置在何处?
  3. 如何调整新高斯点的不透明度?。

结合这些结果,我们提出了一种具有硬件高效实现的新型密度控制策略。

问题设定

假设场景由n个高斯基元表示,其参数集合记为,总损失为(如公式4所定义)。我们的目标是将每个高斯分割为个子代。记第i个高斯的子代参数为,其中是第j个子代。此外,为每个高斯分配一组权重系数来重新调整其不透明度。由于场景通过求和近似,分割过程可以等价地视为用子代的组合局部替换现有高斯:。每个旧高斯的2D投影变为(对所有相机位姿)。注意表示不发生分割,原始高斯保持不变。

我们将所有新高斯的参数收集为,权重系数为作为简写。密度控制算法在每一步确定、和的值。指定后,这些系数将被吸收到子代的不透明度值中。

原始ADC可以通过该框架的视角进行解释:(i) 若则,否则;(ii) 若,则,否则且(对所有);(iii) 两种情况下均设(对所有)。

何时密度控制有益?

本节我们通过检查分割后的光度损失来理论阐明密度控制算法的作用。新增高斯基元后,损失可评估为:

其中表示用新参数和通过公式2渲染的像素颜色。原始ADC[13]无法保证分割后损失会降低。正如我们稍后所示,随机分割点甚至可能增加损失。Bulò等人[3]和Kheradmand等人[14]调整高斯子代的不透明度值以在分割后保持局部总密度。在此设置下,损失近似等同于。然而,我们接下来将证明这种保持原则并非最有效方法。通过选择合适的高斯基元,甚至可以进一步降低损失。

从现在起,我们考虑两个额外的实际条件:首先,为确保分割后总不透明度守恒,我们施加约束(对所有)。其次,我们假设子代参数接近原始参数,即位于的邻域内:(对某些)。定义为第i个高斯在密度控制后的平均位移,表示每个子代相对于的额外偏移。图2展示了我们的符号说明。

基于这些设置,我们提出第一个主要结果,该结果将分割后的损失分解:

定理1 假设关于具有有界三阶导数,则

其中连接所有平均偏移,定义为:

所有证明见补充材料附录C。定理1将平均位移和每个子代个体偏移的影响解耦并分组。蓝色标注的前三项称为均值偏移项,共同表示整体均值偏移的影响。由于同时偏移所有子代等价于对原始高斯应用相同偏移,橙色标注的涉及个体偏移的项完全捕捉了分割过程的内在效应。我们将该求和中的各项分离,称为分割特征函数,其完整描述了单个高斯点分割的效果:

本质上,分割特征函数关于矩阵呈现二次型。我们称为分割矩阵,其完全决定了分割特征函数的行为。定理1得出以下两个见解:

密度控制帮助逃离鞍点 通过使用定理1的右侧作为最小化损失的代理,可以观察到优化均值偏移项不需要密度控制,标准梯度下降即可实现。然而值得注意的是,公式4的损失函数是高度非凸目标,其损失景观中存在大量多余鞍点(见图1右侧示意)。梯度容易陷入这些鞍点,此时梯度下降无法带来进一步改进。但通过在鞍点处将高斯点分割为多个粒子,会产生一个新项——由分割特征函数捕获——这些项可能变为负值从而进一步降低损失。因此,密度控制成为逃离鞍点的有效机制。

何时分割能降低损失? 实际上,可以通过分割特征函数进行更精细分析。由于分割对损失的总体贡献表示为关于分割矩阵的二次函数之和,仅当相关分割矩阵非正定时才可能为负从而降低损失。这意味着执行分割的必要条件是,其中表示矩阵的最小特征值。

最优密度控制

基于定理1,我们可以推导出更强的结果。我们希望找到一种密度控制策略,在引入最少数量点的同时实现损失的最陡下降。每一步最大化损失下降能强制保持低重建误差并加速收敛。为此,我们制定以下约束优化目标:

该目标寻求最优配置:子代数量、重加权系数以及新基元参数更新(对所有)以最大化损失下降。

虽然直接求解公式7很困难,但定理1提供了理想的二阶近似作为替代。由于分割高斯的效果完全由分割特征函数表征,因此最小化关于即可。相应的解是简单且解析的。我们的主要结果如下:

定理2 公式7的最优解包含两部分:

  1. 若分割矩阵半正定(),则分割无法降低损失。此时设且不进行分割。
  2. 否则(),以下分割策略在约束下最小化:

其中表示对应最小特征值的特征向量。

我们将定理2概述的分割策略称为最陡密度控制(SDC),其具有四个实际意义: i) 密度控制的必要条件是分割矩阵的非正定性; ii) 将每个高斯分割为两个子代足够,生成更多子代无额外益处; iii) 新基元的幅值必须减半以保持局部不透明度; iv) 两个子代的参数应沿分割矩阵最小特征值对应特征向量的正/负方向更新。

此外,(i)的结果(如4.2节所示)可作为过滤器减少待密度控制的点数;(ii)的结果证明了现有ADC算法中"两个子代"选择的合理性,并确保适度增长率;(iii)的结果与Bulò等人和Kheradmand等人的方法形成对比,后者基于渲染特定方案调整新高斯的不透明度;(iv)给出了两个更新方向,当点优化到驻点时将其转移到非鞍点区域(如图1右侧所示)。图3展示了该分割方案如何局部优化几何结构。

最陡高斯泼溅

本节我们实例化一个以SDC作为密度控制方案的3DGS优化算法,称为SteepGS。SteepGS的核心是计算分割矩阵并利用它们决定何时及如何分割点。附录A.1的算法1提供了SteepGS的参考实现。我们证明这些可以高效实现并集成到CUDA内核中。

回顾定理1中分割矩阵的形式,注意到表示标量损失反向传播到第i个高斯基元输出的梯度,是第i个高斯关于其自身参数的Hessian矩阵。值得注意的是,分割矩阵是逐点定义的,仅依赖于每个高斯单独的Hessian。因此存储分割矩阵的总内存占用为。当我们仅考虑位置参数时,。

为计算分割矩阵,我们注意到梯度在计算的反向传播过程中已获得。剩余部分——Hessian矩阵可解析近似为(推导见附录C.4):

其中,表示由给出的投影矩阵,。可并行计算,且中间结果如可从先前前向计算中复用。计算矩阵的最小特征值和特征向量的复杂度为。由于我们仅使用位置参数,3×3矩阵的最小特征值和特征向量可使用求根公式[29]计算。尽管分割矩阵利用了二阶信息,但它与总损失的完整Hessian不同,后者排除了完整Hessian中的交叉项[36]。令人惊讶的是,问题的结构允许仅通过分割矩阵提供的部分Hessian信息即可逐点识别鞍点。

实验效果

总结一下

本研究针对实时高分辨率新视角合成的领先技术——3D高斯泼溅(3DGS)存在的效率问题提出了解决方案。虽然3DGS效果显著,但其致密化过程常产生冗余点云,导致高内存占用、低效渲染和存储压力,阻碍了在资源受限设备上的部署。为此,我们建立了理论框架来阐明并优化3DGS的密度控制机制。分析揭示了分裂操作对逃离鞍点的重要性,确立了致密化的最优条件,包括子代高斯的最小数量及其参数更新方式。基于这些理论成果,我们提出的SteepGS集成了最速密度控制策略,在保持紧凑点云的同时减少50%的高斯点,显著提升了实际应用中的效率和可扩展性。

参考

[1] Steepest Descent Density Control for Compact 3D Gaussian Splatting

#DriveMLM

用多模态大语言模型进行闭环自动驾驶~

推荐一篇多模态大模型用于自动驾驶的论文,实验中展示了很好可解释性,并且在CARLA仿真器上实现SOTA的驾驶得分。

原文题目:《DriveMLM: Aligning Multi-Modal Large Language Models with Behavioral Planning States for Autonomous Driving》

原作者 :上海AILab OpenGVLab 港中文 王文海大佬团队

开源地址:https://github.com/OpenGVLab/DriveMLM

摘要:

这是一个基于LLM的自动驾驶框架,能够在仿真器中实现闭环自动驾驶。可以在百度Apollo上即插即用。

介绍

作者给出三个框图表示自动驾驶算法的演进过程,图a表示基于规则需要专家系统知识,b图端到端框架由数据驱动,这些算法难以处理corner case。图c则是本文基于大语言模型的设计,大语言模型具备广泛的知识、稳健的逻辑和高级的认知能力。(extensive world knowledge, robust logical reasoning, and advanced cognitive capabilities)。

作者罗列了近期的一些将LLM融合进AD的工作:

  • [1]Driving with LLMs: Fusing Object-Level Vector Modality for Explainable Autonomous Driving
  • [2]Drivelm: Drive on language.https://github.com/OpenDriveLab/DriveLM
  • [3]MetaGPT: Meta Programming for Multi-Agent Collaborative Framework
  • [4]MTD-GPT: A Multi-Task Decision-Making GPT Model for Autonomous Driving at Unsignalized Intersections
  • [5]LanguageMPC: Large Language Models as Decision Makers for Autonomous Driving
  • [6]DiLu: A Knowledge-Driven Approach to Autonomous Driving with Large Language Models
  • [7]DRIVEGPT4: INTERPRETABLE END-TO-END AUTONOMOUS DRIVING VIA LARGE LANGUAGE MODEL

这些现有方法重点在于生成基于语言的决策,不能直接用于车辆控制。高级别的决策和低级别的控制操作之间存在gap,在传统的模块化方案中,决策和控制之间由规划planning模块连接。因此作者通过将规划和决策对齐来实现基于LLM的AD闭环系统DriveMLM。进行了如下三个设计:

  • [1]研究Apollo的决策规划部分,转换为可以被LLM轻松处理的形式;
  • [2]设计多模态LLM规划器,接受多视角RGB、激光雷达点云、交通规则、系统消息、用户指令来预测决策状态;
  • [3]从CARLA中搜集280h的数据,设计数据引擎转换为决策状态和解释标注;

这样做可以达到了三个优点:

  • [1]轻松插入到Apollo,实现闭环驾驶;
  • [2]支持语言指令输入,更加灵活;
  • [3]行为决策可解释;

方法

模型整体框图如下:

系统输入包含四个部分:多视角RGB、激光雷达点云、系统消息(交通规则、决策状态定义)和用户指令;

多模态大语言模型MLLM的输入是四个输入量的Embeding X;

MLLM的输出是决策状态 S和解释E;

决策状态S会输入到规划和控制模块,预测用于控制的轨迹;

行为规划状态对齐

如何将LLM输出的结果转化为车辆的控制信号。按照常规做法,决策部分可以分为两个阶段:速度决策和路径决策。速度决策有加减速或保持 [KEEP、ACCELERATE、DECELERATE、STOP],路径决策状态包括跟随和转向 [FOLLOW、LEFT CHANGE、RIGHT CHANGE、LEFT BORROW、RIGHT BORROW]。

作者通过如下的系统消息System Message来进行约束对齐,告知LLM一些模板和答案的选项,(让LLM做选择题来输出有限选项中的答案?妙啊):

“你是驾驶汽车的驾驶助手。你需要遵循导航命令和交通规则。
交通规则是xxxxx。 
路径决策包括 [FOLLOW,LEFT CHANGE...]。路径决策定义如下:
  FOLLOW表示保持当前车道,
  LEFT CHANGE表示xxxx。
  xxxx表示xxx 
速度决策包括 [KEEP,...]。速度决策定义如下:
  KEEP表示保持
  xxxx表示xxx
给定从相机或 LiDAR 获得的导航命令和驾驶场景,
你应该从预定义的选项中选择路径决策和速度决策,
并解释您的决策。”

相应的文中MLLM应对提问的回答示例如下:

人类提问: 描述当前驾驶环境。
DriveMLM答:现在是白天的。一辆红色的汽车在自我前面行驶。
人类提问: 右转,请选择路径决策和速度决策。
DriveMLM答:RIGHT CHANGE, KEEP。
人类提问: 请解释为什么选择这些决定?
DriveMLM答:由于右转弯需要提前而不是右转弯车道,因此更改为右车道。

人类提问: 我很急。你能超车吗?
DriveMLM答:LEFT CHANGE, ACCELERATE。
人类提问: 为什么选择这些决定?
DriveMLM答:由于左车道上没有车辆,为了超过前车,需要相左变道并加速。

MLLM规划器

两个部分组成:多模块tokenizer和MLLM解码器。

多模块tokenizer的设计如下:

  1. 对于多视角RGB:使用VIT-g 提取特征,结合temporal QFormer构建时序内容;
  2. 对于激光雷达:使用稀疏金字塔变压器Transformer(Sparse Pyramid Transformer, SPT)提取特征,使用Qformer获得Embedding;
  3. 对于系统消息和用户指令:当作常规文本使用LLM的oken embedding层即可;

MLLM解码器:构造了系统消息模板,回答被格式化到决策状态。使用交叉熵损失监督。

高效的数据引擎

在CARLA中构造决策状态和解释的标签,流程如下:

  1. 构造具有挑战的场景challenging scenarios;
  2. 让专家系统(人类或代理)驾驶通过,安全到达才会记录数据;
  3. 根据安全的专家轨迹生成速度决策和路径决策标签;
  4. 根据场景生成行为解释的标签;
  5. 人工对解释标签进行修正,并用GPT3.5扩展多样性;

实验分析

数据分析

作者采集了280h的训练样本,5万条路线,30个scenarios,不同的光照和天气条件,8个小镇地图(Town01, Town02, Town03, Town04, Town06, Town07, Town10HD, Town12),每个场景在每张地图中有200个随机触发点。场景包括常见和罕见的案例,具体信息可以看论文附录。

与现有的驾驶理解的数据集对比:

本文的数据有两个独特的特征。第一个是行为规划状态的对齐。这使能够将 MLLM 规划器的输出转换为控制信号,以便在闭环驾驶中控制车辆。第二个是人机交互注释。它的特点是人类给出的自然语言指令以及响应决策和解释。目标是提高理解人类指令并相应地响应的能力。

闭环测试

测试效果要好于现有的算法:

CARLA Town05 Long的闭环测试结果

Roach(ICCV 2021,ETH,强化学习教练监督模仿学习的agent,TCP的训练数据就是以它为agent)

Interfuser(CoRL2022,商汤,carla leaderboard1.0 排名第二)

Think Twice(CVPR2023,上海AILab,不在leaderboard1.0,但是在Town05上优于Interfuser那也是前三吧)。

leaderboard1.0目前榜单第一是ReasonNet,CVPR2023,商汤。

闭环测试的评价指标有:驾驶分数 (DS)、路线完成 (RC) 和违规分数 (IS),DS是RC和IS的乘积。还使用 Miles Per Intervention (MPI) 评估驾驶性能,这是工业中广泛使用的指标,MPI = (Total Autonomous Miles) / (Total Interventions)。表中的DD表示data driven,FSM是有限状态机Finite State Machine。

消融实验:

MV 表示多视图图像,CT 表示连接时间标记,TQ 表示时间 QFormer,PC 表示点云。MV + TQ 表现出最佳决策性能,CT 在准确性方面带来了小幅改进,但会导致更大的计算消耗。PC对DriveMLM影响不大。这可能是由于稀疏金字塔transformer和 MLLM 解码器之间的巨大表示差距造成的。

案例分析和可视化

案例a,人类要求超车且条件允许超车。LLM给出左转和加速指令,解释说“前车较慢且左车道空,我会超车”。

案例b,下图人类要求超车但是不具备超车条件。LLM给出保持车道、减速的指令。解释为“左车道有车、右车道不允许超车,我不能超车”。(确实还挺合理,但是为啥要减速)

零样本案例1,下图在nuScens上测试,人类要求保持车道,LLM输出保持停车,LLM给出的解释是“交通灯是红色,我们该停车”。(我还以为理由会是前车太近,并亮起刹车灯,我甚至没注意到红灯/狗头)

零样本案例2,人类要求保持车道,LLM输出保持、并减速,理由是前方为左转路口应该减速。

总结

DriverMLM提出了基于多模态到决策控制的框架设计,让AD系统更加透明可信。代码即将开源,很漂亮的工作,其中大模型部分用的是LLaMA-7B,有能力的实验室可以复现测试。港中文MMLab的另一新篇工作LMDrive也是LLM驱动的闭环自动驾驶(LMDrive: Closed-Loop End-to-End Driving with Large Language Models)已开源!https://github.com/opendilab/LMDrive。可以对比看一看。

这里梳理一下最近的相似命名,防止混淆:DriveMLM、DriveLM、DriveLLM、LMDrive

  • DriveLLM: Charting The Path Toward Full Autonomous Driving with Large Language Models(TIV 2023)
  • DriveLM:Drive on Language: https://github.com/OpenDriveLab/DriveLM
  • DriveMLM: Aligning Multi-Modal Large Language Models with Behavioral Planning States for Autonomous Driving(本篇)
  • LMDrive: Closed-Loop End-to-End Driving with Large Language Models(港中文)

另外,商汤和上海AILab真的开源了很多优秀的端到端自驾算法,榜单上这些TOP算法多数都是来自于商汤和上海AILab。

#自动驾驶视觉大语言模型思维链层层拆解

一、思维链在自动驾驶技术中的兴起

近期思维链CoT的研究热度持续上升,成为车企辅助驾驶赛道的新热点。
多模态CoT(如DriveVLM-Dual)在NuScenes测试集上mAP提升19%
端到端时延优化至300ms内(地平线征程6芯片支持)

优度的突破带来了研究的热度和企业的布局。各大平台讨论量急剧上升。

平台

相关话题帖数

热搜关键词

知乎

4.2k+

#CoT自动驾驶解释性#、#VLM泛化#

Reddit,SelfDriving Cars

680+

"How CoT beats HD maps?"

微信指数

峰值158万

"思维链自动驾驶"搜索量周环比+33%

还有多家企业基于思维链技术展开研究布局。

公司/机构

动作

技术亮点

理想汽车

发布MindVLA 2.0

支持实时CoT推理(延迟<200ms)

特斯拉

申请"Vision Chain"专利

融合Dojo超算与CoT场景生成

毫末智行

与NVIDIA合作DriveGPT-X

千亿参数+车端蒸馏CoT模型

在专利和融资上也出现上升趋势,根据报道统计:

  • 融资事件:2025年Q1自动驾驶CoT相关初创公司融资超$3.7亿(同比+215%)
  • 专利趋势:中国CoT+VLM专利2025年H1达1,892件(占全球54%)

二、什么是思维链

思维链(Chain of Thought, CoT)是一种提示工程技术,通过引导大语言模型(LLM)将复杂任务分解为多步骤推理过程,从而提升其逻辑推理和问题解决能力。其核心思想是向模型展示包含中间推理步骤的少量示例(Few-shot),使模型在生成答案时能模仿人类逐步思考的模式,例如先分析问题、拆分步骤、逐步推导,最终得出答案。这种方法显著提升了模型在数学计算、关系推理等复杂任务中的表现。

图片

图 思维链CoT提高回答准确率示例,图片来自网络

CoT的典型应用包括零样本思维链(直接要求模型展示推理)和少样本思维链(提供带步骤的示例),其优势在于通过显式结构化推理减少模型错误,同时增强结果的可解释性。研究表明,CoT技术是LLM“智能涌现”的关键驱动力之一,尤其在参数规模超过100B的模型中效果更显著。

图片

图 典型的CoT工作流程,图片来自网络

  1. 定义与原理

定义:CoT是一种结构化的问题解决方法,通过生成中间推理步骤(如“问题→步骤1→步骤2→…→答案”)引导模型完成复杂任务。
核心原理:化繁为简:将复杂任务拆解为可管理的子问题。
逐步推理:模拟人类“分步思考”的认知策略。

  1. 技术特点

增强模型能力:提升逻辑推理、数学计算等复杂任务的性能。 弥补传统提示方法直接输出答案的局限性。
可解释性:通过展示中间步骤,使模型决策过程更透明。

  1. 应用场景

典型任务:

任务类型

示例

数学应用题

多步骤算术运算

逻辑推理题

谜题或因果推断

常识推理

需要背景知识的问答

如果还觉得以上描述太抽象,我们一张图直观解释:

图片

图 一个典型的思维链,图片来自AIOS论文

上图就是让LLM查询某一航班到达目的地的天气,经常出差的人再熟悉不过了。
这个问题需要分解,指定航班什么时候到达哪里?到达当天的天气预报。
这种分而治之的思考方式,不仅大大提高回答准确率,而且这种分步走的方式还可以让提问实现“中断-调度-恢复”功能。这样可以让多个提问代理共用一个LLM模型,而不是某一个提问代理长期霸占LLM;和多任务操作系统让多个任务通过中断-保存上下文-恢复的方式轮流使用CPU是一样的。中断的前提是任务可分,这也是为什么这张图来自AI操作系统论文的原因。

三、CoT思维链在视觉大模型的原理和应用

从上面描述可知,CoT是一个语言大模型的概念,以视觉输入为主的自动驾驶VLM与CoT该如何结合?

主要是靠多模态输入对齐来融合视觉-语言特征。

具体通过视觉编码器(如BEV、Transformer)将摄像头/LiDAR数据与文本指令映射到统一语义空间,形成可推理的联合表征。

示例:DriveVLM使用Qwen-VL模型将图像序列转换为场景描述文本,作为CoT推理的输入。

所谓对齐是把视觉信息映射到语义空间,从而把视觉信息和语义信息统一到语义空间,先喂给CoT推理分解为子问题,再把子问题喂给语言大模型处理,并返回最终答案。

图片

所谓对齐,实际是用一个小的神经网络(称为projector),比如多层感知机,把视觉数据(一个向量空间)映射到语义空间(另外一个向量空间)。Projector是可以训练的,让数据通过训练来“塑造”最佳的Projector权重参数。

除了对齐外,分层推理是另外一种常见的结合视觉和思维链的方式。这种方式更加简单直观,就是先把视觉场景转换为自然语言描述(典型的图生文或者视频生文),再把自然语言描述给思维链处理。

一个典型的CoT模块分层推理如下:

阶段

功能

输出示例

图生文场景描述

生成自然语言的环境描述(如天气、障碍物)

"左前方有行人正在过马路"

CoT推理链条场景分析

推理潜在风险与优先级

"行人可能突然加速,需减速"

输出规划

生成元动作序列(转向/制动等)

"减速至20km/h,向右微调方向"

CoT在技术实现的关键如下:

  1. 动态思维链生成

自回归推理:模型基于当前状态迭代生成下一步动作,如百度X-Driver通过CoT链式预测轨迹点。
知识增强:引入驾驶常识库(如交通规则)约束推理逻辑,避免不合理决策。

  1. 可解释性保障

中间步骤可视化:例如理想汽车的VLA模型会输出“检测到施工锥桶→预计影响车道→规划绕行路径”的完整推理链。
失败归因:通过CoT步骤回溯错误源头(如误识别停车标志)。

  1. MoE式的答案生成:还有一些思维链通过类似于混合专家模型MoE的投票机制来消除答案的不一致性,比如下图:

图片

图 类似于MoE的CoT架构,图片来自网络

  1. 最关键的问题,是CoT如何合适地把大问题分解为一系列小问题。这一点我们在下一节单独详述。

四、自动驾驶场景下思维链的问题拆分

在自动驾驶场景下,Chain-of-Thought(CoT)的问题拆分和评价需要紧密结合多模态感知、场景理解和决策规划等关键环节。

以下给出一个Cot 思维链在自动驾驶中的详细实例,车辆通过十字路口场景。

  1. 感知阶段

问题拆分:将环境感知拆解为信号灯状态识别、行人信息捕捉、周边车辆动态监测三个子问题。

摄像头通过图像识别算法,定位路口信号灯区域,判断其颜色为黄色;
利用人体姿态检测模型,锁定路口中间行人的位置,同时分析其肢体动作,判断正处于行进状态;
结合雷达测距与摄像头视觉信息,获取右侧车辆的实时位置与速度,通过前轮转向角度、转向灯亮起等细节,初步判定有变道意图。

  1. 分析阶段

问题拆分:分别分析信号灯、行人、变道车辆对当前行驶的影响,并评估综合风险。

信号灯影响:黄灯剩余时间未知,根据常规交通灯周期推算,快速变红概率高,若强行通过可能违反交通规则;
行人干扰:行人位于车辆行驶路径上,若保持原速行驶,到达路口时可能与行人发生碰撞;
变道风险:右侧车辆变道会侵占本车道空间,且两车速度差与相对位置存在碰撞可能;

综合风险:三者叠加导致当前行驶存在严重安全隐患,需优先消除风险。

  1. 推理阶段

问题拆分:针对每个风险点,结合规则与车辆性能推理对应决策,并整合为最终方案。

信号灯应对:依据 “黄灯无法安全通过需停车” 的交通规则,车辆需做好减速准备;
行人保护:为确保行人安全,必须降低车速,直至行人完全离开行驶路径;
变道避让:考虑到车辆制动距离与变道车辆的动态,减速或停车避让可避免碰撞;

最终决策:综合以上因素,同时满足交通规则与安全需求的最优解是立即减速停车。

  1. 决策执行阶段

问题拆分:将停车决策拆解为制动力度控制、停车位置选择、后续动作规划三个步骤。

系统根据当前车速与距离,计算合适的制动压力,向制动系统发送指令,平稳降低车速;
选择距离行人与变道车辆安全距离外的位置,完全停车等待;
持续监测行人与变道车辆动态,待行人通过、右侧车辆完成变道,且信号灯状态允许时,再规划启动与行驶路径。

通过 Cot 思维链对复杂场景的层层拆分与逻辑推导,自动驾驶系统能够有条不紊地处理多源信息,在保障安全的前提下做出合理决策,显著提升应对复杂路况的能力。

图片

图 CoT在自动驾驶场景中的问题分解示意图

思维链问题分解虽好,但是如何分解才是关键。

在原始论文《Chain-of-Thought Prompting Elicits Reasoning in Large Language Model》中,一句话暗含了CoT思维链的核心要点和痛点。“chain of thought, in principle, allows models to decompose multi-step problems into intermediate steps, which means that additional computation can be allocated to problems that require more reasoning steps.”

“in principle”,“原则上”允许推理模型把多步问题分解为中间步骤,但是这个原则上具体该怎么做,才是CoT的核心问题。

具体的实现方式有如下三种:

方法

描述

适用场景

显式CoT提示

人工设计中间步骤模板,引导模型逐步输出

少样本学习、数学推理

隐式CoT(知识蒸馏)

通过训练让模型自动学习中间推理步骤

大规模预训练模型

动态规划(planning)

任务分解与资源分配由模型自主决策

复杂多模态任务

所谓显式CoT提示,主要是人为规则,对于特定场景,已经人为预先给出了子问题列表。因此本文不多着墨。

而动态规划planning模式,才是CoT的终极形态。

planning模式下,一个典型的实例HuggingGPT介绍自《HuggingGPT: Solving AI Tasks with ChatGPT and its Friends in Hugging Face》一文。HuggingGPT 以大型语言模型(如 ChatGPT)作为核心控制中枢,搭配各类专家模型作为具体执行者。其完整工作流程可划分为四个关键阶段:首先是任务规划环节,核心大语言模型对用户输入的请求进行拆解分析,将其转化为清晰的任务清单,并梳理出各任务间的执行先后顺序及所需资源依赖关系;进入模型选择阶段后,大语言模型会基于 Hugging Face 平台上专家模型的功能特性说明,为每项任务精准匹配最合适的执行模型;随后在任务执行阶段,分布于混合端点的专家模型各司其职,完成分配给自己的具体任务;最后响应生成阶段,核心大语言模型汇总整合各专家模型的推理成果,同时生成任务执行的工作流日志摘要,最终形成完整、准确的答案反馈给用户。

图片

图 带有预置模版槽位(图中的大括号)的HuggingGPT,自动规划分解子问题为主,认为模版为辅,图片来自论文《HuggingGPT: Solving AI Tasks with ChatGPT and its Friends in Hugging Face》

HuggingGPT的工作流程如下:

  1. 任务规划(Task Planning):

a. 当HuggingGPT接收到用户请求时,首先使用ChatGPT(一个大型语言模型)来分析请求,理解用户的意图,并根据请求将任务分解成一系列可解决的子任务。请注意,是使用LLM来分解子任务。
b. 在这个阶段,ChatGPT需要确定子任务的依赖关系和执行顺序,以建立它们之间的连接。为了提高ChatGPT在任务规划中的效果,HuggingGPT采用了基于规范的指令和基于演示的解析,这相当于是用人为模版来支持辅助LLM分解子任务。
c. 基于规范的指令要求ChatGPT按照特定的规范(例如JSON格式)来表示和解析任务。
d. 基于演示的解析则通过包含用户请求及其对应输出的多个演示来帮助ChatGPT更好地理解任务规划的意图和标准,以及任务之间的逻辑联系。

  1. 模型选择(Model Selection):

a. 在任务规划之后,HuggingGPT会根据解析出的任务列表来匹配任务和模型,即选择每个任务中最合适的模型。
b. 为了实现这一点,HuggingGPT使用模型描述作为连接每个模型的语言接口。具体来说,它首先从机器学习社区(如Hugging Face)收集专家模型的描述,然后使用动态的基于上下文的任务-模型分配机制来选择模型。
c. 为了减少提示中的token使用,HuggingGPT首先根据任务类型过滤模型,并基于Hugging Face上的下载次数对选定的模型进行排名,选择前K个模型作为候选。

  1. 任务执行(Task Execution) :

一旦为某个解析任务分配了特定模型,下一步就是执行该任务(即进行模型推理)。在这一阶段,HuggingGPT 会自动将任务参数输入到模型中,执行这些模型以获得推理结果,然后将结果反馈给 LLM。

  1. 响应生成(Response Generation):

在所有任务执行完成后,HuggingGPT 需要生成最终响应。HuggingGPT 在这一阶段整合前三阶段(任务规划、模型选择和任务执行)的所有信息,包括计划的任务列表、任务的模型选择和模型的推理结果,生成简洁的总结。

四、总结

尽管Planning(规划)来分解子问题子任务,是CoT的终极形态,非常强大,但用LLM来分解也导致了结果的不可预测性,源自LLM本身的黑盒性。相较于可靠地使用人为预置子任务子问题,或者预置分解规则,“Planning”是一个相对较难预测的技术。

因此,思维链提示目前还存在一些不足,列出如下:

  1. 目前所生成的思路链在事实准确性方面存在不足,后续需通过优化迭代来增强其事实可靠性。
  2. 思路链提示技术的有效应用高度依赖大规模语言模型,这使得实际使用过程中产生较高的成本支出(训练成本,维护成本等)。
  3. 思路链的标注工作耗费大量人力与资源,难以实现大规模推广应用,因此探索自动生成思路链的方法成为重要方向。
  4. 思路链提示示例的效果受提示工程的影响显著,输出结果波动较大,亟待发掘更为稳定、可靠的提示策略。
  5. 在处理简单任务时,思路链提示带来的效果提升不够明显,有必要拓展其应用领域,以充分发挥该技术的潜力。

这些CoT的不足在应用到自动驾驶VLA模型时,自然也延续了下来。这一点决定了自动驾驶中CoT的应用,必然经历从人为规则分解任务到机器学习分解子任务,最后竞赛机器学习分解子任务的优度。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值