51c自动驾驶~合集47
我自己的原文哦~ https://blog.51cto.com/whaosoft/13083194
#DreamDrive
性能爆拉30%!英伟达:时空一致下的生成重建大一统新方案~
从自车的驾驶轨迹中生成真实的视觉图像是实现自动驾驶模型可扩展训练的关键一步。基于重建的方法从log中生成3D场景,并通过神经渲染合成几何一致的驾驶视频,但它们对昂贵标注的依赖限制了它们在野外驾驶场景中的泛化能力。另一方面,生成模型可以以更通用的方式合成动作条件驾驶视频,但往往难以保持3D视觉的一致性。本文介绍了DreamDrive,这是一种结合生成和重建优点的4D时空场景生成方法,用于合成具有3D一致性的可推广4D驾驶场景和动态驾驶视频。具体来说,我们利用视频扩散模型的生成能力来合成一系列视觉参考,并通过一种新的混合高斯表示将其进一步提升到4D。给定一个驾驶轨迹,然后我们通过高斯飞溅渲染3D一致的驾驶视频。生成先验的使用使我们的方法能够从野外驾驶数据中生成高质量的4D场景,而神经渲染则确保从4D场景生成3D一致的视频。对nuScenes和室外驾驶数据的广泛实验表明,DreamDrive可以生成可控和通用的4D驾驶场景,以高保真度和3D一致性合成驾驶视频的新视图,以自监督的方式分解静态和动态元素,并增强自动驾驶的感知和规划任务。
- 论文链接:https://arxiv.org/abs/2501.00601
介绍
基于自车的轨迹生成驾驶视频是自动驾驶中的一个关键问题。动作条件视频生成允许自动驾驶汽车预测未来的场景,做出相应的响应,并超越专家轨迹进行推广,这对于自动驾驶模型的可扩展训练至关重要。为了应对这一挑战,出现了两个系列的工作:基于重建的方法和基于生成的方法。基于重建的方法从log中模拟3D场景,然后通过神经渲染技术(如NeRF或3D高斯飞溅)生成动作条件视觉观察。这些方法可以合成3D一致和真实的视觉观察结果,但它们严重依赖于注释良好的驾驶日志,其中包括标定的相机参数、目标框和3D点云,这限制了它们在室外驾驶数据中的可扩展性。另一方面,基于生成的方法可以从野外驾驶数据中学习,并通过图像或视频扩散模型合成动作条件下的动态驾驶视频。然而,视频生成存在帧间3D几何一致性差的问题,这可能会破坏自动驾驶合成视觉观察的可靠性。因此,为自动驾驶综合通用和3D一致的视觉观察仍然是一个悬而未决的挑战。
为了应对这一挑战,我们提出了DreamDrive,这是一种用于自动驾驶的4D场景生成方法。我们的核心想法是将视频扩散先验的生成能力与3D高斯飞溅的几何一致性渲染相结合。我们将2D视觉参考从视频扩散模型提升到4D时空场景中,其中自车载体通过高斯飞溅导航和合成新的视图观察。视频扩散先验增强了我们方法的泛化能力,能够从野外驾驶数据中生成4D场景,而高斯飞溅确保了新视图合成过程中的3D一致性。这种方法使DreamDrive能够产生高质量、3D一致的视觉观察,并对各种驾驶场景具有很强的泛化能力。
尽管直观,但从生成的视觉参考中准确建模4D场景仍然非常具有挑战性。与标注好的驾驶数据集不同,生成的视觉参考缺乏关键信息,如相机参数、物体位置和深度数据,这阻碍了4D建模。此外,视频扩散模型中固有的3D不一致性加剧了这个问题,导致传统的高斯表示过拟合训练视图,并在新的视图合成中失败。为了解决这些问题,我们引入了一种自监督混合高斯表示。我们的方法利用与时间无关的高斯模型来模拟静态背景,并利用与时间相关的高斯模型对动态目标进行建模,将它们组合成一个统一的4D场景。首先,我们提出了一种自监督方法,可以仅通过图像监督将场景分解为静态和动态区域。接下来,我们引入时空聚类将3D高斯聚类分为静态和动态高斯聚类,有效地减轻了4D建模中的虚假动态。最后,我们优化了具有时间相关和时间无关表示的高斯聚类,以在图像监督下构建4D场景。通过混合高斯表示,我们的方法能够合成3D一致的新视图驱动视频。我们的方法适用于纯图像监控,消除了对数据注释的需求,使其更具可扩展性和通用性,适用于野外驾驶数据。
我们在nuScenes数据集和野生驾驶场景中评估了我们的方法,展示了我们4D场景生成的可控性和泛化能力。我们的方法使用混合高斯表示,可以生成高质量、3D一致的新视图驱动视频,视觉质量比以前的方法提高了30%。此外,我们还展示了我们的方法在自动驾驶感知和规划任务中的应用。
相关工作回顾
自动驾驶生成模型。生成模型在基于当前行为合成未来驾驶视频方面显示出巨大的潜力。最近的研究对驾驶数据的稳定视频扩散模型进行了微调,结合了地图、物体、天气和动作等控件来生成不同的驾驶场景。然而,由于这些模型在2D中运行,它们很难捕捉到世界的底层3D几何形状,导致生成的视频中的3D一致性较差。相比之下,我们的方法采用4D场景的神经渲染,确保生成的视频保持3D一致性。
城市景观重建。许多论文专注于从驾驶日志重建3D或4D城市场景,使用多视图图像监控优化基于NeRF或3D-GS的场景。这些方法可以基于驾驶轨迹合成新的视图。然而,大多数方法严重依赖带注释的目标框来跟踪和建模动态目标,限制了它们处理未标记驾驶日志的能力。虽然一些方法使用自监督技术来分离动态目标,但它们仍然依赖于校准良好的相机姿态和3D数据,这使得它们在野外驾驶场景中不太通用。相比之下,我们的方法消除了对姿势或3D信息的需求,直接从视觉参考中实现了精确的4D场景建模。
4D场景生成。许多论文关注3D和4D内容生成,但大多数论文关注目标生成,这不适用于驾驶场景。一些工作引入了4D场景生成的扩散先验。然而,这些方法中的4D场景仅限于以目标为中心的小规模场景,这使得它们很难推广到具有众多动态目标的大规模、无界的驾驶场景。最相关的工作使用扩散先验来生成3D驱动场景,但仅依赖于可变形的3D高斯分布,导致新视图合成中的视觉质量较差。相比之下,我们提出了一种新的自监督方法,用混合高斯表示对4D驾驶场景进行建模,该方法在新的视图驾驶视频合成中表现出更好的泛化能力和视觉质量。
DreamDrive方法详解
DreamDrive是一种用于自动驾驶的4D时空场景生成方法。我们的方法概述如图2所示。DreamDrive遵循2D-3D-4D渐进式生成过程。我们首先利用视频扩散先验来生成2D视觉参考,然后进行高斯初始化将其提升到3D。接下来,我们提出了一种新的自监督场景分解方法,该方法采用基于聚类的分组策略,在4D时空域中分离静态和动态区域。最后,我们引入混合高斯表示来对静态结构和动态目标进行建模,以生成4D场景。
视频扩散先验。视频扩散模型在模拟视觉数据的时间动态方面非常有效,但仅依赖它们进行轨迹条件视频生成可能会导致3D不一致,因为它们是为2D图像生成而设计的,没有考虑底层的3D结构。在我们的方法中,我们使用视频扩散先验来生成初始视觉参考,然后将其提升到4D空间进行场景生成和3D一致的视频渲染。具体来说,我们使用在驱动数据上训练的视频扩散模型来生成一系列参考图像,并从早期层中提取潜在特征,以捕获有价值的视觉动态,用于静态动态分解。该过程正式表示为:
高斯初始化。在没有相机姿态和3D信息的情况下,将生成的图像提升到4D空间是相当具有挑战性的。因此,相机参数和3D结构的稳健估计对于4D场景生成的可靠初始化至关重要。虽然之前的工作使用COLMAP来估计粗略的3D几何,但其稀疏的点云不足以对大规模和无界的驾驶场景进行建模。相反,我们采用端到端的多视图立体网络来生成像素对齐的密集3D几何体,同时恢复相机姿态。具体来说为每张图像生成密集的、与参考像素对齐的3D点云。使用Weiszfeld算法估计相机内参,并通过全局对齐帧间的点云来计算相机外部函数。聚集的点云形成密集的场景级点云,用于初始化3D高斯参数,产生一组高斯Ginit。这些3D高斯分布进一步丰富了像素对齐的潜在特征Zref。整个过程可以表示为:
准确捕捉动态目标的运动。自车监督的场景分解。混合建模的一个关键挑战是在没有额外注释的情况下分离静态和动态区域。为了解决这个问题,我们的关键见解是,图像误差图是区分静态和动态区域的有效指标。具体来说,我们首先通过假设所有初始高斯Ginit都是静态的来优化整个场景。然后,我们将优化的静态高斯分布映射到静态图像Istatic中:
使用高斯聚类进行分组。由于生成的视觉参考中固有的3D不一致性,Iref中经常出现伪动力学,如静态结构中的局部变形。这导致将动态高斯分布错误地分配给静态目标,并对4D场景建模和新的视图合成产生负面影响。为了提高场景分解的鲁棒性,我们引入了一种新的基于聚类的分组策略。我们的关键见解是,目标通常作为一个整体移动,即同一目标中的高斯分布可能具有相同的动态属性。由于我们没有目标注释,我们引入了“时空聚类”来将高斯分布聚类。如果一个簇中的大多数高斯分布是静态的,这意味着整个部分应该是静态的。我们为所有部分分配静态标签,即使有些最初被归类为动态的,反之亦然。该过程可以表示为
混合高斯表示法。场景分解使我们能够用不同的高斯分布表示静态和动态组件。静态高斯模型G静态模型元素,如道路和建筑物,参数G(x,r,s,α,c)随时间保持不变,确保静态结构的准确渲染。
最后,我们将Gstatic和Gdynamic结合到一个4D时空场景中,并通过将它们叠加到图像上来优化它们的参数:
实验结果
结论本文提出了DreamDrive,这是一种新的自动驾驶4D场景生成方法,将视频扩散模型的生成能力与3D高斯飞溅的几何一致性相结合。使用混合高斯表示,我们的方法在4D驾驶场景中准确地建模静态和动态元素,而无需手动注释。实验表明,DreamDrive可以生成高质量、几何形状一致的驾驶视频,适用于各种驾驶场景,并增强自动驾驶中的感知和规划任务。
#地平线年底交卷
『三网合一』端到端挑战上海早高峰全程无接管
地平线,作为一个完整的智能驾驶全栈软硬件玩家,首次交卷:
量产单片算力最大智驾硬件J6P,和配套的自研高阶智驾SuperDrive,整套方案正式量产名叫HSD。
上海老城区的复杂城市道路,智能车参考替大家抢先体验,早高峰半小时,全程无一接管。
创始人、CEO、首席科学家余凯说,地平线端到端量产,是为了捅破“天”而来。
更进一步,他认为自动驾驶发展快二十年,无论车企还是科技巨头,这个“天”从未有人摸到过。
地平线高阶智驾,体验如何?
硬件上,HSD这套系统搭载了地平线自研的征程6P(560TOPS)硬件,并配备有1枚瞭望塔式激光雷达、11枚摄像头,
以及3枚毫米波雷达。
路线选择很有意思。
最近上海豪车密集出街,给韩国游客亿点点震撼火出了圈,“地标”武康路其实是最早计划的路段。
但是地平线向我们透露,实地考察发现网红武康路现在已经堵得寸步难行,大部分时间浪费在停车等待上,体现不出智驾真实水平。
所以选择了静安区,属于老上海滩核心之一。体验路线围绕有百年历史的花园饭店周边,特征是道路狭窄,多是单行道,充斥车与车、车与人之间的博弈场景,早高峰10公里左右全程跑完需要半小时。
但无论是Plan A武康路,还是静安区Plan B路线,都是临时选定的,没有任何针对性的系统优化和特调——证明HSD真无图,交付即可实现有路就能开。
体验路线一上来就是一个左转场景,可以看到测试车跟随前车,一起做了一个礼让行人的动作,重点是刹停起步都做的很柔和:
接下来这波也是蛮精彩,并排右侧车辆侵入本侧车道,HSD向左微调方向避让,紧接着因为前面要右转,所以又和并排车辆来了波博弈:
HSD尝试加速超车,在右侧车辆加速之后,速度放缓完成了变道,并且在路口避让了突然插进来的Model Y和非机动车,并再次找准了通行效率更高的右侧车道。
常规路线通行场景中最令人印象深刻的是这个左转路口:
先是避让了调头车辆、随后又礼让了行人、接着又躲避了从右侧强插进来的左转车辆,全程HSD在线,没提示接管没紧急退出。
这次体验最独特的功能,要数多点式掉头:
不需要宽阔的路面,不需要明显隔离带,无需人工接管,即可实现“三点式”、“五点式”掉头和“N点掉头”,在狭窄路段、甚至死胡同也能掉头脱困全行业首创。
另外HSD还推出了“漫游模式”,即在封闭园区、城市开放道路上不设置导航,HSD也不会降级或退出。
总结一下,HSD的在“边边角角”做的智驾功能创新,其实是让智驾应用场景“无死角”覆盖,把割裂的、经常需要用户接管的智驾体验连接起来。
解决的是智驾普及“最后一公里”的问题。
后续可能还会有小版本优化更新,但量产上已经不存在任何挑战,4月的上海车展将和旗舰J6P硬件(余凯透露已投片,年内出货可突破百万)同时发布。
至于何时给到用户手中,取决于车企的产品节奏——地平线透露有可能是今年三季度。
最先搭载什么品牌什么车型,已经是公开的秘密,智能车参考之前的报道透露过“天机”,熟悉或知情的用户可以踊跃在评论区公布答案。
背后什么样的技术
坦白讲,HSD首秀场景并不算丰富,尤其是多车道平行汇入汇出的变道博弈能力没有直接体现,而这也是目前绝大多数“有路就能开”智驾系统普遍通病。
客观原因同样和车企量产节奏有关:HSD体验车还是基于大众ID老车型的改装车,量产车没上市,所以通行路段上有所限制。
但有限的场景已经体现出优势,更像人,更像老司机,给用户“预期感”,流行的话是“端味很足”。
背后是基于两个最主要的技术手段:端到端感知架构,以及数据驱动的交互式博弈算法。
一个是为了智驾系统看的更清楚更明白,一个是让智能代驾的“脑子”更灵活更高效。
一段式端到端感知架构,避免了模块化算法架构中,数据多级传递造成的“损耗”,算法模型一端直接输入传感器数据,另一端直接输出轨迹预测,包括本车的,也包括道路其他交通参与者的。
端到端体现在SuperDrive将动态、静态、OCC(Occupancy占用网络)三网合一,统一在一个Transformer架构下,不需要对感知数据进行抽象和逐级传递,“所见即所得”:实现感知端到端同时,又保证了每个子网络的可解释性。
实际上SuperDrive的算法基础,正是来自于智能车参考介绍过的CVPR 2023最佳论文成果——UniAD,地平线学者一作,也是全球第一个公开的端到端自动驾驶大模型,成为行业参考的标杆基础。
动态、静态、Occupancy三网合一的感知端到端架构下,有效解决感知架构时延高、规则多、负载重的问题。
感知端到端网络输出的结果,会接着进入数据驱动的交互博弈算法,可以理解成PNC(Planning and Control / 规控),但是和以前的PNC不同,HSD在决策、预测、规划整个大的系统里面进行了模块划分,全部用了神经网络作核心——保证驾驶行为的拟人化。
到了具体上车实证环节,地平线还给HSD单独设计了外部引擎:一方面是做博弈验证,包括给端到端提供安全边界、提供决策和轨迹层面的指引。
试验方法,以前是人为定义,不过地平线选择的是通过10000小时高质量驾驶数据来训练,让算法最大程度理解效仿人类老司机的驾驶方法。
当然最终轨迹或者决策并不由端到端来决定,系统会根据比较明确和轻量级的验证规则来决定是否向下游Planner释放,兜住安全的底。
通过这样的双擎驱动,HSD可以在数据驱动下,把上限提高的同时,还把安全下限给兜住,Scale up方面会有很好的表现。
这就是体验中SuperDrive像人类司机一样完成复杂掉头动作的技术核心。
算法之外,SuperDrive“拟人化”体验仍然离不开地平线软硬结合的实力——征程6系列计算硬件,CPU、BPU、GPU、全功能的MCU四芯合一。
500TOPS+的算力、18核的410K DMIPS的CPU、5.3Gpixel/s的图像处理带宽能力….这些都是征程6P的能力体现,跟业界其他主流的方案相比处于领先。
但地平线无意反复拿参数证明实力,因为堆晶体管不是难事,关键核心是——IP,也就是地平线自研的BPU架构纳什。
纳什专为大参数的Transformer而生,相比地平线最早推出的伯努利架构,纳什架构在基础CNN网络上的计算性能实现了200多倍的提升,在Transformer上性能相比BPU贝叶斯架构实现了20多倍的提升。
这个迭代的速度和幅度,远远超越了集成电路传统的摩尔定律(18个月提升一倍)。
背后的原因在于地平线从软件到硬件实现了系统和技术的联合优化和深度协同。
地平线:智驾3年定大局,对标不必特斯拉
余凯博士对自动驾驶趋势格局的最新判断是:
三年的时间,行业大局可定。
具体地说,是智驾体验三年hands off,五年eyes off,十年minds off。
而淘汰赛的要素——领先的算法、足够大的算力、海量丰富的数据,缺一不可,或者说软硬偏废任何一方都不行。
地平线是从自动驾驶技术本身的价值特性出发得出的论断。
华为ADS第一代系统的核心打造者之一,曾以争议言论出圈的苏箐,加入地平线后首次在HSD“交卷仪式”上亮相,以地平线智能驾驶首席架构师的身份解释了地平线亲自下场做算法的逻辑。
他认为,“对标特斯拉”本身是营销逻辑、融资逻辑,而深入自动驾驶本质,唯一的对标应该是人类本身,这其实也是特斯拉自己一直在践行的。
因为自动驾驶的价值呈现二段性,是一种“拐点”式的价值:没达到、超越人类司机的阶段,自动驾驶只能是昂贵的玩具属性;突破这一拐点,自动驾驶价值会立刻飞升。
具体到产品上,是智驾体验:安全性、连贯性、场景覆盖率。
举个例子,现在绝大部分量产智驾,在高速城快等简单路况下能做到100分,但复杂城市路况、多车博弈时频繁要求用户接管——属于“拐点”之前的系统。
显然不能让用户放心用、愿意用,这是余凯博士反复强调的“捅破天”的必要性。
而从技术角度,“捅破天”需要的不仅仅是一套端到端算法。
地平线的观点是,自动驾驶没有silver bullet,不存在一招制敌的捷径,如此复杂的系统需要一个强大的综合团队。
比如硬件方面J6那是架构针对Transformer对算力更高的要求专门做了一个VPU,可以支持更高精度的包括浮点运算,以及从FP16到FP32多种浮点数据类型的计算。此外还会专门优化部分算子,让计算时间和计算量匹配,同时针对性做硬件加速,即特别优化的超越函数,保障系统效率。
再比如软件方面,地平线认为新技术出现,重要的是知道它的边界是什么。端到端解决的是数据驱动问题,但解决不了认知问题,在北美大部分是高速路况,端到端系统可以有很好的表现,但中国路况更无序、复杂博弈更多。
所以地平线的方法是以一段式端到端为内核解决绝大部分场景下的数据驱动问题,也就是“拟人化”,而在一些数据稀疏,短期内用更大的数据也很难收敛的场景,会用规则兜底。
这样的例子还有很多。
软硬结合谁都会讲,但真正深入到IP架构级别的优化,无论是纯算法玩家,或是通用GPU硬件玩家,都很难实现。
而这样的结合,还代表着端到端时代不可阻挡的趋势:
端到端大模型要求专用架构,专用架构又催生原生的软件算法。接下来,专用的工具、软件又会衍生出自动驾驶的生态、壁垒。
对于地平线从单一智驾硬件供应商到软件+硬件全栈智驾玩家的转型,整个过程外界的质疑、不理解一直没断。
有人从市值管理的角度解释,有人从软硬件不同的利润率角度解释,也有人从科技竞赛地缘政治等等角度理解。
都能自洽,但大多是充分条件,解释不了必要性,也解释不了为何硬件不愁赚的英伟达,几乎同时开启智驾软件的布局。
现在我们明白,从产品价值出发倒推技术实现手段,才是地平线真正要带头“捅破天”的原因,也是英伟达“紧随”地平线加码软件的驱动因素。
从这个角度看,2025智能驾驶格局,已经入场了了一个最大的“变量玩家”:
国内硬件No.1,软件引领全行业,而且有工程能力有合作生态的地平线。
#VLM为自动驾驶做好准备了吗?
论文标题:Are VLMs Ready for Autonomous Driving? An Empirical Study from the Reliability, Data, and Metric Perspectives
论文链接:https://arxiv.org/pdf/2501.04003
项目链接:https://drive-bench.github.io/
数据集链接:https://huggingface.co/datasets/drive-bench/arena
作者单位:加州大学欧文分校 上海人工智能实验室 新加坡国立大学 新加坡南洋理工大学 S-Lab 香港大学
图1. DriveBench 概览
这里提出的基准测试从感知、预测、规划和解释四个主流驾驶任务出发,评估视觉语言模型(VLMs)在自动驾驶中的可靠性和视觉基础能力。测试覆盖了17种输入设置(清晰输入、损坏输入和仅文本输入),包含19,200帧图像和20,498个问答对,涉及三种问题类型:多项选择、开放式问答和视觉基础问题。通过应对多样化的任务和条件,DriveBench 旨在揭示 VLM 的局限性,推动可靠且可解释的自动驾驶发展。
近年来,视觉语言模型(Vision-Language Models, VLMs)的进展引发了其在自动驾驶领域应用的广泛兴趣,尤其是在通过自然语言生成可解释驾驶决策方面。然而,VLMs 能够内在地提供视觉基础、可靠且可解释的驾驶解释这一假设仍缺乏系统性验证。为填补这一研究空白,这里提出了DriveBench,一个评估 VLM 可靠性的基准数据集。该数据集覆盖了17种输入设置(包括清晰输入、损坏输入和仅文本输入),包含19,200帧图像、20,498个问答对、三类问题类型、四种主流驾驶任务,以及总计12种主流 VLMs。
研究发现,VLMs 通常基于通用知识或文本线索生成合理的响应,而非真正依赖视觉信息,特别是在视觉输入退化或缺失的情况下。这种行为由于数据集的不平衡性和评估指标的不足而被掩盖,然而在诸如自动驾驶等对安全性要求极高的场景中,这种缺陷可能带来显著风险。此外,本文观察到 VLMs 在多模态推理方面存在困难,并对输入损坏表现出高度敏感性,导致性能不一致。
针对这些挑战,该工作提出了优化的评估指标,重点关注稳健的视觉基础和多模态理解能力。同时,强调了利用 VLMs 对输入损坏的感知能力来提升其可靠性的潜力,进而为开发更可信且具有可解释性的真实世界自动驾驶决策系统提供了路线图。该基准工具包现已公开发布。
实证研究的思路
随着视觉语言模型(Vision-Language Models, VLMs)的最新进展,在自动驾驶应用中引入 VLMs 的研究兴趣日益增加。这些研究涵盖了端到端框架的设计,以及通过自然语言提升可解释交互与决策的 VLMs 集成。这种可解释性被认为能够增强自动驾驶系统的透明性、可信度和用户信心。
然而,先前的研究指出,在开环(open-loop)设置中评估端到端自动驾驶模型存在显著局限性。因此,与其专注于使用潜在不可靠的开环端到端 VLMs 进行轨迹预测,本文转而关注另一个重要但尚未被充分探索的问题,该问题在诸多研究中被广泛假设:
现有的视觉语言模型(VLMs)是否能够基于视觉线索为驾驶提供可靠的解释?
为此,该工作研究了 VLMs 生成的驾驶决策是否真正基于来自物理环境的感知信息,抑或仅反映了通用知识和基于文本线索的虚构响应。
模型可靠性
为回答这一核心问题,通过分布外(Out-of-Distribution, OoD)鲁棒性的视角评估 VLM 的可靠性。为此,提出了DriveBench,一个基准数据集,涵盖四种主流驾驶任务和15种数据损坏类型,包括19,200张图像和20,498个针对真实自动驾驶场景设计的问答对。
为了评估在极端条件下的鲁棒性,该工作通过仅使用文本提示(text-only prompts)将视觉退化推至极限。令人惊讶的是,即使在没有任何视觉线索的情况下,VLM 的表现与在“清晰”视觉输入下的输出相当(如图2所示)。这一现象与人类驾驶员的表现形成鲜明对比,因为在如此恶劣的条件下,人类驾驶员通常难以应对。
深入分析表明,这种表面上的“韧性”往往是由于数据集不平衡和评估协议不完善造成的,而非模型自身具备的内在鲁棒性。
数据集
该工作对现有的“语言驱动驾驶”(Driving with Language)基准数据集进行了深入分析,发现了关键缺陷,尤其是在数据集不平衡方面的问题。这些基准数据集大多基于流行的驾驶数据集构建,如 nuScenes、BDD和 Waymo Open,并继承了其原始设计中的局限性。
例如,不平衡的数据分布导致评估结果倾斜,使得过于简单的回答(如“直行”)在与运动相关的查询中即可实现超过90%的准确率。此外,许多基准数据集依赖于单帧问题,而这些问题通常需要时间上下文的支持,这甚至对人类标注者来说也存在挑战。
因此,这些基准数据集存在固有的偏差和持续的负样本问题,这削弱了评估结果的可解释性和可靠性。
指标
这里还对现有的指标设计进行了深入的重新评估。针对驾驶应用中的语言交互,目前通常使用传统的模式匹配指标进行评估,如 ROUGE 、BLEU 和 CIDEr,这些指标最初为摘要和翻译任务而设计。然而,正如先前工作所指出的,这些指标在评估复杂的语言驱动驾驶决策时存在显著局限性。
即使是现代评估方法(如基于 GPT 的评分机制),在没有任务特定评分规则的情况下,也难以提供深入见解。这些限制凸显了需要能够有效捕捉推理能力、上下文理解和安全关键因素的指标。
该工作倡导开发更加先进的评估指标,这些指标应结合任务特定的评分规则、结构化问题格式以及上下文驾驶信息,从而更准确地评估 VLM 在真实世界场景中的表现。
关键见解
通过一系列全面的实验,该工作从分析中得出了一些关键见解。实验覆盖了17种输入设置(包括清晰输入、仅文本输入以及各种损坏输入)、12种 VLMs(包含开源和商业模型)、5个任务(感知、预测、规划、行为和损坏识别)以及3种评估指标(准确率、传统语言指标和基于 GPT 的评分)。这些发现揭示了在将 VLMs 集成到驾驶场景中所面临的当前挑战:
- 退化条件下的虚构响应:在视觉条件退化的情况下,VLMs 通常生成看似合理但实为虚构的响应,包括在完全没有视觉线索的场景中。这引发了对其可靠性和可信度的担忧,因为此类行为难以通过现有的数据集和评估协议进行检测。
- 对视觉损坏的感知:尽管 VLMs 在一定程度上能够感知视觉损坏,但仅在被直接提示时才会明确承认这些问题。这凸显了模型在自主评估视觉输入可靠性以及提供针对具体场景和安全性的响应方面的能力有限。
- 数据集偏差的影响:高度偏向的数据集和次优的评估协议可能导致对 VLM 性能的误导性认知。在许多情况下,VLMs 更倾向于依赖通用知识而非实际的视觉线索来生成响应,这在现有指标下可能意外地获得高分。
- 定制化评估指标的需求:现有的评估指标,包括传统的语言指标和基于 GPT 的评分,无法充分反映自动驾驶任务的复杂需求。亟需开发专门的评估指标,以更有效地评估 VLMs 的推理能力、上下文理解能力以及安全关键因素。
该工作的研究通过 DriveBench 不仅突出了改进数据集和评估协议的必要性,还为开发更安全、更具可解释性的真实世界自动驾驶系统中的 VLMs 奠定了基础。
图2. VLMs 是否能基于视觉线索为驾驶提供可靠的解释?
从可靠性、数据和指标三个视角对此进行研究。研究发现,当视觉信息缺失时,VLMs 仍能够生成高质量的驾驶问题答案。然而,这些虚构的答案由于数据集不平衡、缺乏上下文信息以及评估协议存在问题,能够通过现有指标的检验,包括基于 GPT 的评分。这一观察挑战了之前的假设,即 VLMs 因其基于视觉的可解释性响应在驾驶决策中比任务专用模型更可靠。
图3. DriveLM-nuScenes 中转向与速度的行为分布
车辆行为的主要动作是“直行”,这一现象在 [39] 中也有所提及。
图4. 不同视觉输入下感知与行为任务的准确率
结果来源于 DriveLMAgent 。其中,No Pix. 表示无图像像素输入,No Fea. 表示无特征输入。
图5. 现有数据集中的挑战性案例
结果来自 GPT4-o 。
(a):黑色轿车正左转,左转信号灯已亮。
(b):黑色轿车正右转。模型却对两者均预测为“直行”。这些示例展示了在转向选择(Turn choice)中的挑战性案例,其中视觉线索过于细微或需要依赖时间上下文才能做出正确预测。
(c) 和 (d) 均为右转场景,但由于存在重叠或遮挡,模型无法基于中心像素位置正确定位物体。
图6. 基准数据集中问答对的词云
从提出的基准数据集中的问答对提取的词云,突出显示了 DriveBench 中不同自动驾驶任务的主要关注点。字体越大,出现频率越高。
表1. 驾驶评估基准的对比
“Per.”、“Pre.”、“Beh.”、“Pla.”、“Rob.” 分别表示感知、预测、行为、规划和鲁棒性任务。 表示结合上下文信息增强的 GPT 评分。
图7. GPT-4o 的失败案例
(a):GPT-4o 通过物体相对于帧的位置变化来推断行人运动状态,而非基于运动物体本身的坐标,导致感知结果错误。
(b):模型在基于目标物体坐标区分正确方向时表现困难。
(c):GPT-4o 通过物体相对于当前帧的相对位置推断 SUV 的运动状态,导致感知结果错误。
(d):GPT-4o 未能正确感知汽车的朝向。
(e):数据集中包含需要多帧推理才能成功的示例,但 GPT-4o 无法通过单帧输入解决这些问题。
(f):GPT-4o 通过物体相对于当前帧的相对位置推断 SUV 的运动状态,再次导致感知结果错误。
图8. 性能退化示意图
在每种损坏条件下,该工作评估多项选择题(MCQs)准确率相对于清晰输入的变化。结果显示,人类性能大幅下降,而大多数 VLM 的表现几乎没有变化。
图9. 不同模型的雷达图对比
每种输入损坏类型的性能通过四种驾驶任务中的 1,261 个问题的平均值计算得出。评估指标为 GPT 评分。
图10. Qwen2-VL7B 在仅文本提示下的预测空间分布
该模型可能通过利用文本线索(如问题中的相机和坐标位置),在没有视觉信息的情况下“猜测”多项选择题(MCQ)的答案。
图11. 使用不同指标的评估结果
语言指标(如 ROUGE-L 和 BLEU-4 )表现出较高的一致性,而 GPT 评分显示了显著的差异。同时,该工作发现微调过程显著提升了 DriveLM 在规范响应格式方面的能力,从而在语言指标下表现出误导性较高的性能。
图12. 不同指标使用下的相关性分析
该工作还研究了准确率或 ROUGE-L 分别与 GPT 评分在开放式问题和多项选择题(MCQs)中的匹配程度。结果发现,ROUGE-L 未能反映驾驶中关键的语义信息(如关键物体)。相比之下,准确率与 MCQs 的 GPT 评分具有较好的一致性,而在答案正确的情况下,GPT 评分能够进一步捕捉解释中的细微差异。
图13. 不同评估类型的对比(基于评分规则、问题感知和上下文感知)
GPT 评分根据评分规则、问题内容和实际驾驶上下文的不同而有所变化。随着信息的逐步增加,评估结果变得更加可区分。
表2. 不同驾驶任务中 VLMs 的评估结果(感知、预测、规划和行为)
“Clean” 表示清晰图像输入,“Corr.” 表示损坏图像输入(取15种损坏的平均值),“T.O.” 表示仅文本输入的评估。对于人类测试者,本文仅在感知和行为任务中评估多项选择题(MCQ)。评估基于 GPT 评分,并针对每个任务和问题类型定制了详细的评分规则。对于在损坏条件下表现优于清晰输入的分数进行了高亮显示。
表3. “清晰”输入与完全“黑屏”(无图像)输入之间准确率的对比
该工作观察到,大部分模型即使在缺乏视觉信息的情况下,其性能也未明显下降。这表明,VLMs 的响应可能主要依赖于多数偏差(例如,在大多数驾驶场景中选择“直行”),而非利用传感器提供的视觉线索。
表4. 提示 VLM 明确的损坏上下文前后准确率变化的对比
这里还注意到,在问题中提及损坏类型后,模型性能显著下降。这表明 VLMs 能够感知当前的损坏情况,并在被明确提示时承认它们无法对严重退化的视觉信息作出有效响应。
表5. 对损坏感知能力的评估
“MCQ” 表示直接询问当前损坏类型的多项选择题;
“VQA” 表示针对感知、预测和规划任务的问题,但增加了明确的损坏上下文信息,结果取三种驾驶任务的平均值;
“CAP” 表示要求在物体层级和损坏层级提供详细描述的字幕生成问题。
最后总结
该工作识别并探讨了在自动驾驶中部署视觉语言模型(VLMs)所面临的关键挑战,重点关注其在复杂真实场景中的视觉基础可靠性。研究结果表明,在严重视觉退化的情况下,VLMs 经常生成看似合理但缺乏依据的响应,这对其在关键决策任务中的可靠性提出了质疑。此外,不平衡的数据集和次优的评估协议加剧了这些问题,导致对 VLM 可靠性的高估。
为缓解这些挑战,该工作倡导未来的研究重点发展平衡性良好且上下文感知的数据集,以及能够严格评估驾驶决策质量、上下文推理和安全性的先进评估指标。
@article{xie2025drivebench,
author = {Xie, Shaoyuan and Kong, Lingdong and Dong, Yuhao and Sima, Chonghao and Zhang, Wenwei and Chen, Qi Alfred and Liu, Ziwei and Pan, Liang},
title = {Are VLMs Ready for Autonomous Driving? An Empirical Study from the Reliability, Data, and Metric Perspectives},
journal = {arXiv preprint arXiv:2501.04003},
year = {2025},
}
更多可视化示例:
图14. GPT-4o 在低光条件下对四个任务的响应示例及对应评估结果
观察到,GPT-4o 能够意识到低光环境,并能够从图像中识别出公交车和行人,展现了一定的鲁棒性。
图15. GPT-4o 在运动模糊条件下对四个任务的响应示例及对应评估结果
观察到,GPT-4o 受到此类损坏的影响,倾向于基于模糊预测“行驶速度快”。该示例表明视觉损坏对高层次驾驶决策产生影响的潜在可能性。
图16. 不同 VLM 在帧丢失条件下的响应示例
观察到,GPT-4o 能够基于可见的物体进行响应,而 LLaVA-NeXT 和 DriveLM 则倾向于虚构提供图像中不可见的物体。
图17. 不同 VLM 在水花溅射条件下的响应示例*
观察到,在严重的视觉损坏条件下,VLMs 倾向于基于其学习的知识给出模糊且笼统的答案,而不参考视觉信息。大多数响应提及交通信号和行人,尽管它们在提供的图像中并不可见。
#对经典SLAM技术是否没落的回答
视觉SLAM在自动驾驶领域是不是已经被淘汰了?
先说个人的结论:SLAM 技术没有被淘汰,在特定场景尤其是低算力平台上仍然有长期需求,但职位需求是萎缩的,且存量人才过于饱和,不建议再入坑,积极拥抱AI 时代吧!
没落的技术栈
这里讨论的是以状态估计为核心的经典SLAM技术,NeRF/GS重建和VLN这些方向是经典SLAM场景的延伸,但是和经典SLAM的技术栈已经差别比较大,不在这里的讨论范围内。
SLAM其实本身是一个比较小众的方向,它深度地和机器人以及XR行业绑定,XR行业一直处于不温不火的状态,智驾行业的繁荣提供了大量的SLAM技术职位,且吸引了更多人选择这个技术方向。目前智驾行业已经进入后期存量竞争阶段,不仅没有新的玩家进场,甚至也不断有车企和智驾供应商没有经受住商业市场的残酷考验倒闭,在这种情况下,市场的总体需求是萎缩的。
过去几年,智驾的地图定位以及感知后处理是对SLAM技术背景工程师有大量需求的两个主要业务方向,在感知模型能力不足的情况下,采用堆叠人力题海战术的方式设计了大量规则保证智驾功能的上线。但是很不幸,这两个方向都是被端到端革命的对象,今年很多智驾公司的组织架构改革,都基本取消了地图定位团队,变为数据生产等支撑性部门,其重要性式微是显而易见的。端到端一阶段模型,也打破了传统感知和规控模块的边界,不再需要很重的感知后处理模块。以上不仅导致行业上对SLAM技术没有太多增量的需求,也导致存量人才饱和,这是笔者认为不适合再入坑的主要原因。同时,确实还是存在一些业务方向对SLAM技术是有长期需求,比如4D label,标定,XR/扫地机等低算力平台,以及智驾的AVP等,但想象力相对有限,技术方案已经很多年基本没什么变化了,不会再有明显的增量机会。
技术转型
技术方向转型:比较新的技术方向其实是适合转型的,因为它意味着有很多新增的职位需求,同时也没有太多存量深耕多年的竞争者,比如AIGC,VLX(VLM,VLA,VLN)等。同时也要考虑技术的生命周期和适用范围。
AIGC 极大的降低了内容生产的成本,文生视频,文生3D,机器人和自动驾驶里的生成式仿真/世界模型,这些方向的底层技术相通,目前主流的方案都是conditional diffusion模型,所以我把它们都归属于AIGC技术,这个技术方向就业面比较广,比较适合转型。
5~10年的时间维度,机器人和智驾的终局是VLA,即输入视觉,输出动作指令的系统,人类本身就是一个VLA系统,而现存的互联网视频中,有大量的人类行为数据可供模型学习,但如何让模型从视频里学习到物理规律,确实是一个还没解决好的问题。关于机器人和VLA,其实还可以发散性的思考下。机器人本质上是提供了新的劳动力,是生产力工具,而VLA则提供了类人大脑,为机器人提供接近人类的行动能力。两者可以类比为PC和操作系统,当技术成熟之后,以此构建的新的世界,可能会像PC和操作系统一样,深刻影响人类社会的方方面面和各行各业,这里蕴含的新的可能性,可能比做机器人本体和VLA技术更大。机器人行业目前处于设计一款可用的的PC和操作系统的阶段。
转行做产品经理:AI和泛机器人方向是一个技术门槛比较高的方向,这意味着做这个方向的产品经理,要有足够的技术认知,所以技术人员转型产品经理是比较有优势的,一个能把SLAM学好的工程师,是完全有能力短期内掌握一个新的技术领域的主干脉络,这个学习程度不能完全让你拿到一个该技术领域工程师的职位,但对于做产品经理,这样的学习能力是完全足够的。而且AI和泛机器人行业目前仍处于行业早期,探索如何将新兴的技术做到落地,也是有很大空间的。目前很多AI编程工具能力已经很强了,明显降低了一个功能需求的开发周期,将来,提出一个好的产品方案会是更重要的事情,所以不管要不要转型做产品经理,笔者都建议要不断提升这方面的能力。
曾经有人问李想如何寻找新的千亿市场,他回答说早期很难预判,但观察历史上大部分新兴行业都是由新的技术革命驱动的,这让我醍醐灌顶,关注那些能带来深刻变革的新技术,就大概率不会错过新的行业机会。很幸运,我们正在经历AI时代的前期,这会是一场可以定义为第四次工业革命的技术变革,虽然当前其落地应用还相对有限,但是很明显能感受到多方能量在快速聚集,蓄势待发。强烈建议朋友们读下《沸腾新十年》,书中对2009年,移动互联网爆发前夜的状态的描述以及很多现在大家比较熟悉的大佬当时的彷徨和摸索,与现在的AI行业和智能行业现状是何其相似。
最后,2024最大的感悟是信念才是人生最宝贵的东西,愿新的一年,朋友们都能在这波AI浪潮中找到自己的热爱,加油!
#高阶智驾,到了谈市场占有率的时候?
高阶智驾迎来水大鱼大的时刻。
众所周知,25年主机厂开始从卷电动进入到卷智驾的阶段。
一位主机厂的朋友表示,无论新旧势力,价位20W以上的车型基本都要上高阶智驾,即使不标配至少也要搞个选配。如果20W以上的车没有高阶智驾,在市场上就会像“老年手机”一样,新车发布会上连吹牛都不好吹。
连老外(海外主机厂)都行动起来了,老外也瞄准了25年的上海车展,想去“淘”好货,绑定国内高阶智驾供应商,给爆款车型+战略投资的方式深度合作。
在这样的一个市场需求放量井喷的窗口期,头部玩家也开始了密集接单拿定点。面对这一波市场机会,不同的玩家采取了迥异的策略。有的玩家把自己打造成了轻奢品,有的玩家大小都吃,有的玩家扮演技术先锋。
1. 高阶智驾的关键:爆款车型
主机厂卷高阶智驾,无疑对高阶智驾供应商是巨大利好。
作为英伟达算力芯片国内最主要的两个高阶玩家,元戎和Momenta表现出不一样的市场策略。
魔门塔在市场策略上属于急进风格,追求定点项目的规模量,所以表现为典型的大小都吃,销量高的车型定点也做,销量低的车型定点也做。
元戎在市场策略上则是相对克制,没有盲目的追求项目定点的规模量。元戎选择和一些alpha客户做深度合作,朝向alpha客户的爆款车型。自从长城蓝山成功量产交付之后,元戎变得炙手可热,许多主机厂主动找上门来谈。
据悉,在相对克制的做法下,元戎又拿到了数家主机厂的高阶智驾的合作意向,合作方式也由过去零散的车型定点变为爆款车型或一个车型平台。
元戎的克制做法,和高阶智驾到了新阶段有关系。
一是端到端时代主机厂和高阶智驾供应商合作方式变化。
众所周知端到端需要数据,数据在主机厂手中,这就要求供应商和主机厂的合作方式升级为双方都要“all in”的模式,而不是简单的拿点车型来做量产。另外,端到端对数据规模的要求逐步升级,从一百万clips向千万级clips迅速升级。这就需要高阶智驾供应商做爆款车型,销量大的爆款车型才能采集到大规模数据。
二是主机厂在开发费和license上的策略也发生变化。现在主机厂跟供应商议价时更倾向于“少付开发费,多付license”的策略。
以前主机厂付了大笔的开发费,结果搭载高阶智驾的车型月销数百辆,开发费均摊到单车成本上高达数万元,比传感器+域控的成本都高,所以就有了“大冤种”的心态。而“少付开发费,多付license”的策略,可以降低固定开销,更灵活弹性。
所以,无论是从获得数据的角度还是议价策略,都使得高阶玩家做爆款车型才更有价值。
元戎正是在长城蓝山这个爆款车型上尝到了甜头,所以没有盲目的扩张,而是持续的瞄准做爆款车型。
在端到端时代,爆款车型正成为高阶智驾供应商之间竞争的核心关键之一,一个爆款车型在license收入和数据采集上的价值顶一堆销量拉跨车型。魔门塔24年的量产交付数据,占大头的客户还是上汽智己,其他的比如腾势、路特斯、广汽昊铂等客户,量产高阶智驾的车型卖的都不行。
对于做高阶智驾的公司来说,技术能力是构建竞争力护城河的一环,另外重要的一环是市场策略。在市场需求井喷的时候,瞄准什么样的主机厂客户、做什么样的车型,是未来决胜的关键。
2. to B to C商业闭环的关键:技术爆点
众所周知,国内高阶智驾的玩家比较少,现阶段量产上车的也就头部那几个玩家。虽然玩家不多,但是各自的战略定位又不相同,在智驾的产品技术上极具差异化。
华为定位成了轻奢品,性能遥遥领先的同时价格昂贵;魔门塔的定位追求定点规模,只要能拿定点无论高阶还是中阶以及英伟达还是高通芯片全都做;大疆卓驭定位做普及,朝着性价比死磕;元戎定位做智驾技术先锋的角色,从无图到VLA不断的做技术爆点。
一位头部主机厂的朋友表示,元戎的定位比较独特,和其他几个玩家都不一样,它这种定位能够迎合传统主机厂技术营销的需求,容易拿到旗舰车型的定点。
传统主机厂在旗舰车型的产品定义上,要塑造成同类竞品车型的技术性能代表,所以需要有技术爆点的高阶智驾,具备前沿和性能好的特点,才能够在技术营销上去竞争。在华为之外,元戎正好充当了这种角色,这是一些传统主机厂选择元戎的一个重要原因。
一位业界朋友表示, 25年的高阶智驾需求在井喷,这是水大鱼大的时候,大家都能吃到鱼。但是竞争的关键不是有没有吃到鱼,而是吃到什么样的鱼。最好的鱼当然是爆款的旗舰车型,能不能吃到就由战略定位决定了。
高阶智驾竞争的新阶段,头部玩家们都上牌桌了,传统主机厂可选择的玩家增多了,不再是一两家高阶做的早的玩家凭借稀缺性可以通吃的阶段。在这样的阶段里做的“早”的优势会弱化,做的“巧”的优势会放大。
另外,战略定位不仅决定了在现阶段能吃到什么样的鱼,还决定了未来能不能打通to B to C的商业闭环。
随着车位到车位的逐步量产上车,高阶智驾在用户的使用场景上基本就覆盖全了。不过,虽然面向to C的全场景走通了,但是to C的商业闭环还没有完全走通,这也是to C的最后一步,也是最重要的一步。
当前用户对高阶智驾非常典型的态度是:想要但又不想多掏钱。尤其是价位20W以上的用户,在国内主机厂血卷过度供给的市场背景下,这类用户的口味养的很叼,想要高阶智驾的意愿很强,但是为软件算法付费的意愿不强。
这就使得高阶智驾的to B to C的商业闭环没有走通。
没有走通最后一步的原因,是高阶智驾的”好用性“上做到了让用户想要的水准,还没有做到让用户愿意掏钱购买的水准。
一位资本人士表示,现在智驾行业就缺一个改变技术进步速度的技术爆点到来打通to B to C的商业闭环,VLA或许有这个可能。一旦有这样的技术爆点正式落地,像元戎这样做技术爆点的公司的商业价值就会出现颠覆性的变化。
如果走通的话,高阶智驾的逻辑就变了,就不再是高阶玩家做B端主机厂的生意,赚主机厂的开发费和license,而是联合主机厂一起赚C端用户的钱,一起推出类似”智驾礼包“的to C产品,让C端用户掏钱购买,然后一起分账。
只有如此,智驾才是真正的to B to C,也会正式迎来长坡厚雪的时代。
到那样的阶段,主机厂选高阶智驾供应商的逻辑就会出现根本性变化。擅长做技术爆点的供应商会受主机厂青睐,因为主机厂需要能帮着把智驾卖给C端用户的帮手。
结束语
目前高阶智驾才算是真正迎来第一波放量的大井喷周期,在这一轮井喷周期里,国内高阶智驾的几个头部玩家,各家的资源、禀赋、战略各不相同,如同八仙过海各显神通一般抢夺市场。
目前高阶智驾的市场格局远远没有确定,智驾是一轮又一轮的车轮战,现在谈市占率、谈规模、谈护城河壁垒还太早了。对于头部的高阶玩家们来说,想成为未来大赢家的必须具备两种能力:在市场策略上,能不能拿到主机厂的爆款车型;在技术策略上,能不能持续的做出来技术爆点。
这两点远远比当下的量产规模更重要,是构建护城河壁垒的真正基石。
未来的高阶玩家之间的竞争,到底谁能具备爆款车型+技术爆点的能力,做到脱颖而出,我们拭目以待!
#2025开春首场自动驾驶与新能源汽车线下展会
1月7日至1月11日,被称为“科技界春晚”的 CES2025(国际消费类电子产品展览会)在美国拉斯维加斯隆重开幕。作为今年开年第一个也是规模最大的科技盛会,吸引了来自世界各地的科技巨头参会。展会上,除英伟达、谷歌、亚马逊等标志性科技企业外,奔驰、大众、本田、长城、极氪等新老整车企业也纷纷亮相。大多数汽车企业和供应商聚焦于人工智能、沉浸式座舱和可实现的技术,与展会的主题“DIVE IN(沉浸)”相呼应。不难预测,为车主优先带来体验升级将会是未来一段时间内汽车产业技术应发展的主旋律。
长城汽车CTO吴会肖围绕“AI科技”进行了分享。长城汽车在本次CES上带来了“空间语言智能体大模型ASL(Agent of Space & Language)”。吴会肖表示,在ASL阶段,车辆可实现全方位、立体化的信息处理和智能决策,能真正独立根据目的地特点、乘客的需求和偏好,以及沿途的交通和环境信息,量身定制独一无二的体验,让智能汽车成为一辆真正的AI智能体。
智驾出海方面, 极氪带来了战略、技术及产品“四项最新发布”,包括与高通携手合作布局智能座舱;全球首家OEM量产自研英伟达NVIDIA DRIVE AGX Thor智驾域控制器平台。该平台凭借高算力、低功耗和丰富的通信及传感器接口,为用户提供了多场景的智能驾驶体验。尤其是基于该平台打造的极氪浩瀚智驾2.0,出色的表现已经实现类人化的智能驾驶水平;极氪能源首发海外800V超快充补能规划;首款量产原生自动驾驶汽车极氪RT将于2025年开启大规模交付;同时,极氪与谷歌母公司Alphabet旗下的自动驾驶公司Waymo联合开发的极氪RT—全球首款量产原生自动驾驶汽车,即将于2025年开启大规模交付。
吉利汽车聚焦在AI领域,发布了行业首个“智能汽车全域AI”技术体系,这这套体系之中,吉利以大模型AIOS作为平台,灵活适配各类终端,从而实现车辆、手机、平板、穿戴设备、智能家居、其他形式智能体等多种设备的打通。
小鹏汇天则让海内外小小震撼了一把。“陆地航母”分体式飞行汽车迎来海外首秀,向全球观众展示了其在飞行汽车技术领域的深厚积累和卓越成就。
随着汽车行业电动化、智能化和软件定义汽车的加速革新,CES 2025再次成为各大科技和汽车企业展示前瞻技术的重要舞台。从SDV到AI定义汽车,从自动驾驶到智能座舱,从智能汽车到人形机器人,每一项创新都预示着汽车行业的跃迁与重塑。
那么,国内有对标CES、专注新能源汽车的盛会么?
有的。就在2025CINEVE·中国国际新能源汽车技术、零部件及服务展览会,2025年2月21日至24日,北京新国展二期。同期的展位面积占地2万平方米。大会将更加聚焦新能源汽车产业的前沿技术和市场最新趋势,真正助力企业之间的有效交流与深度合作。
本次大会有几个亮点!
权威嘉宾阵容强大。本届大会将继续邀请国内外知名院士、专家及行业领袖参会,分享最新的研究成果和行业洞察,助力参会嘉宾获取行业前沿技术与趋势风向。
国际化交流再提升。本届大会将进一步加强国际合作与交流,邀请了多个国家和地区的优秀企业与专业嘉宾参会,多个国家的驻华大使馆将发布出海政策,介绍对中国新能源汽车产业出海的支持政策和市场机遇。同时,大会还将同期举办多场国际供需贸易洽谈会,为国内外企业提供更多的出海与国际合作机会。
前瞻、创新技术成果集中亮相。大会将继续举办产业优秀案例、技术、合作需求发布会,展示新能源汽车产业在技术创新、市场拓展、产业链协同等方面的最新成果。彰显行业蓬勃发展动力。
媒体助力,广泛传播。第三届中国国际新能源汽车供应链大会暨出海论坛将由中国日报网作为联合单位共同举办。同时,大会与数十家媒体达成宣传合作,将进一步提升大会的国际影响力,促进新能源汽车产业的全球交流与合作。
虽距离开展仍有时日,但已摘下多项『首个』和『最』:
1、国内首个涵盖领域最广的新能源汽车供应链专业展会;
2、国内新能源汽车供应链最受国外大使馆关注的展会;
3、国内汇聚车企需求最多的新能源汽车供应链展会;
4、覆盖最新最热门展品:机器人(车企关注)、V2X、车载健康、3D裸眼显示、固态电池、AI大模型、轮毂电机、高算力芯片等;
5、首个在展会现场现拆现装新能源汽车的供应链展会;
6、首个国外大使馆带着国际企业参展的新能源汽车供应链展会;
7、首个国外大使馆和国际企业带着采购需求举办贸易投资交流活动的展会。
#GPT4Scene
大步迈向VLA!港中文:从视频中理解3D场景~
人工智能是指能够通过与物理环境交互来执行各种任务的智能系统。它在工业检测、智能家居和智能城市中有着广泛的应用和发展前景。3D 场景理解涉及多模态语言模型理解室内环境整体布局和物体之间空间关系的能力。因此,坚实基础在于能否有效地理解场景内容。
目前,基于3D点云大语言模型是一种流行的理解室内场景的方法,使用点云数据作为输入,并将点云数据特征与LLM对齐以执行场景理解任务。然而,这种方法有以下几个方面的局限性。
- 点云提供的详细信息有限,例如精细的几何细节、材料特性和复杂的纹理
- 尽管一些点云大语言模型尝试使用点云和多幅图像作为输入,但它们在对齐文本、图像和点云模态方面面临挑战
- 点云数据与文本/视频数据的数据量明显不平衡,这也带来了进一步的复杂性
这些限制促使我们探索使用纯视觉输入的室内场景理解。这种方法更符合人类的感知模式,因为人们可以在不依赖点云等显式 3D 数据信息的情况下理解 3D 场景。视觉语言模型 (VLM) 在图像文本多模态任务中表现出色。然而,它们在理解沉浸式 3D 室内场景中的应用尚未得到很好的探索和开发。我们进行了一项初步研究,通过将场景视频直接输入到VLM模型中来调查这种潜力。我们的实验结果表明,这种方法导致VLM无法理解 3D 场景。我们认为其核心问题在于缺乏全局场景信息,以及每帧的局部位置与整体背景的不一致。
针对上述提到的相关问题,我们提出了一个名为GPT4Scene 的框架来帮助 VLM 建立空间关系,其整体结构如下图所示。
此外,我们也构建了一个由 165K 文本标注组成的处理后的视频数据集来微调开源的VLM模型,相关的实验结果表明,在所有 3D 理解任务上均实现了SOTA的性能。在使用 GPT4Scene 范式进行训练后,即使没有视觉prompt和 BEV 图像作为显式对应,VLM在推理过程中也可以不断改进。相关结果表明所提出的范式有助于 VLM 开发理解 3D 场景的内在能力。
论文链接:https://arxiv.org/abs/2501.01428
网络模型结构&细节梳理
在详细介绍本文提出的算法模型网络结构细节之前,下图展示了GPT4Scene算法模型的整体网络结构图,如下图所示。
GPT4Scene Framework
首先,我们假设捕获的视频是在室内场景中移动时拍摄的。整个视频由帧图像组成。使用 VLM 处理图像序列面临着图像容量有限、上下文消耗快和推理成本高等挑战。因此,我们均匀采样帧图像。其中,代表采样的帧。我们把这种采样后的视频记作如下的表示形式:
这种预选择大大减少了 VLM 在训练和推理过程中的时间和成本,同时又不会丢失重要的室内场景信息。
以自身为中心的视频仅仅捕获了局部信息,缺少更广泛的场景背景。为了解决这个问题,我们将整个场景重建为点云形式,并将全景图像渲染为鸟瞰图,为 VLM 提供完整的场景概览。具体来说,从室内场景视频和相应的相机外参开始,我们使用3D重建技术来生成3D网格和点云数据,其过程可以用下式的公式进行表示:
在公式中,表示重建过程,我们假设相机内参是已知的。然后,我们从全局点云生成场景的 BEV 图像,其过程可以用下式进行表示:
其中,代表自上而下视角相机的外参,代表基于相机外参相应视角的渲染过程,从而生成BEV场景的图片。值得注意的是,我们继续以图像的形式向 VLM 提供全局 3D 信息。
为了帮助 VLM 聚焦于特定目标,我们引入了 Spatial-Temporal Object Markers,确保 2D 帧和 3D BEV 图像之间的一致性。为了获取从输入视频重建3D点云,我们应用Mask3D等3D实例分割方法来生成实例Mask。
对于 BEV 图像,我们首先将 3D Mask投影到xy平面上,然后提取投影形成的边界框的中心坐标,然后将其显示在BEV 图像上。对于以自身为中心的 2D markers,我们首先将投影到视频帧上,然后使用 2D Mask形成的边界框的中心作为 2D标记。带有标记的 2D 帧和 BEV 图像可以用如下的公式进行表示:
Unlocking VLMs with Zero-shot Prompts
我们在零样本设置中评估 VLM,最初重点关注强大的闭源 VLM(例如 GPT-4o),以评估 GPT4Scene 框架是否能够有效地实现 3D 场景理解。这个过程被称为“unlock”,它使 VLM 能够通过提示理解 3D 场景,而无需额外的训练。具体而言,我们输入和。为了减少开销,我们将中的图像拼接起来形成一张大的图像。我们评估了三项任务:3D 问答、密集字幕和视觉grounding。
在 3D 问答中,目标是回答与场景相关的问题,例如“地板的颜色是什么?”在密集字幕中,任务是描述特定目标,例如“描述 C5 所代表的目标。”在视觉grounding中,目标是从描述中识别目标ID,例如“窗户旁边的黑色椅子的 ID 是什么?”虽然问答与目标标签无关,但密集字幕和视觉grounding需要目标标记。这些任务涉及检测目标并根据其边界框的 IoU 进行过滤。与 Chat-Scene和 Robin3D一致,我们使用 Mask3D 分割结果作为预测边界框来计算 IoU。
除了传统任务外,我们还在这种零样本设置中进行了进一步的实验。相关的实验结果如下图所示。
通过输入和,VLM 可以理解室内场景的全局特征。此时,GPT-4o 仍然可以接受额外的第一人称视角帧,使其能够理解场景中的当前位置以规划下一步动作。此外,使用 GPT-4o 作为agent,VLM 可以根据给定的问题确定任务类型并选择合适的prompt。因此,GPT4Scene 框架作为下一代核心技术展现出巨大的潜力。
Enhancing VLMs with ScanAlign Fine-Tuning
零样本prompt可以解锁强大的 VLM 的 3D 理解能力,但如下图所示,这种方法并不能改善较小的VLM的能力。因此,我们的目标是通过微调来增强开源、较小的 VLM。我们首先基于 ScanNet 构建一个室内场景数据集 ScanAlign,其中包含以自我为中心、BEV 图像和文本标注。
该数据集包括三个 3D 视觉相关任务,视觉输入包括带有 STO 标记的选定视频帧和 BEV 图像,表示从五个ScanNet标注中得出的文本标注,相关信息如下表所示。
我们使用提示随机改变标注格式以增加标注多样性。该数据集总共包含约 165K 条标注。由于我们的方法不需要额外的模态对齐步骤,我们可以直接在 ScanAlign 数据集上执行单阶段指令微调,以增强模型的 3D 空间理解能力。在训练阶段,训练损失是语言模型的交叉熵损失。我们的目标是通过最小化目标答案的负似然对数来优化可学习参数。我们统一了系统消息和用户的问题。因此,损失函数可以表示成如下的公式形式:
使用 ScanAlign 进行微调后,在推理过程中,我们可以输入,其中代表问题。或者,我们可以不使用 3D BEV 图像,而只使用进行推理。
对于 3D 问答任务,我们甚至可以删除所有目标标记,仅使用原始视频帧进行推理,而无需任何额外处理。对于 3D 问答任务,我们甚至可以删除所有目标标记,使用进行推理,仅使用原始视频作为输入。我们的实验表明,经过 ScanAlign 微调后,小规模 VLM 的 3D 场景理解能力得到显著增强。
实验结果&评价指标
各任务实验结果汇总
3D问答任务的实验结果汇总在下表当中。
我们将这些方法分为三类:专注于3D问答任务的经典任务特定模型、基于 3D点云LLM 的模型和基于视觉 LLM 的模型。GPT-4o(GPT4Scene)在零样本模式下的表现优于所有任务特定模型,凸显了 GPT4Scene 作为prompt的有效性。相比之下,开源 VLM 在零样本模式下表现不佳,没有使用 GPT4Scene 进行微调,这与我们的实验研究结果一致。使用GPT4Scene提出的策略,我们对Qwen2-VL-7B进行了微调,取得了优异的问答结果。
值得注意的是,Qwen2-VL-7B(GPT4Scene)的表现优于所有其他方法,达到了最先进的性能。此外,与原始Qwen2-VL 7B相比,ScanQA中的BLEU-1提高了56.1%(27.8→43.4),CIDEr提高了68.6%(53.9→90.9)。在SQA3D中,EM-1得分上升41.0%(40.7→57.4)。相对于零样本模式下的GPT-4o,这些指标分别提高了21.9%、23.7%和34.1%。我们的方法极大地提高了模型对3D室内场景的理解。
此外,为了更加直观的展示我们提出的算法模型的有效性。我们在图 4 中展示了在 GPT-4o 上以零样本设置进行的定性结果。拼接的帧提供了场景的概览,而单独的帧则捕捉了细节和动作。除了目标字幕、空间描述和计数等标准任务之外,GPT4Scene 还可以处理具体任务,例如指导用户从附近的书架上取回纸张。在最后一行中,粉红色突出显示的片段表示 BEV 图像作为输入,增强了导航功能。GPT4Scene 还擅长导航和巡逻任务,通过观察机器指示器执行工业检查。
我们还评估了模型在密集字幕和视觉grounding方面的表现,这与问答不同,因为它们需要标记来完成这些任务。实验结果如下表统计所示。
通过相关的实验结果可以看出,Qwen2-VL-7B 经过 GPT4Scene 微调,显著提高了 VLM 的 3D 字幕和基础能力。此外,在高分辨率和更大帧设置 (HD) 下,我们的模型实现了SOTA的性能,超越了所有现有的方法。
消融实验结果
图 2 表明BEV 图像和 STO 标记增强了空间理解。我们使用 3D 问答 (QA) 任务来进一步验证这一点,因为没有 STO标记或 BEV 图像的纯视频输入就足够了。同时,标记对于 3D 密集字幕和视觉grounding在评估过程中参考目标至关重要。如下表所示,在训练和推理过程中删除 BEV 图像会降低这两项任务的性能。进一步删除 STO 标记会导致 QA 性能进一步下降,凸显了 BEV 图像和 STO 标记在帮助 VLM 理解 3D 场景方面的关键作用。
同时,我们也以 3D 问答和视觉grounding为基准,对附加因素进行了消融实验。结果如下表所示。前三行的实验结果显示,图像分辨率显著影响视觉grounding性能,但对 QA 任务的改进有限。此外,实验结果的最后三行表明,增加帧数可以增强室内场景理解,与 QA 中的有限改进相比,对grounding性能的影响更为明显。
结论
在本文中,我们引入了 GPT4Scene,这是一个增强视觉语言模型 (VLM) 的框架,可直接从纯视觉输入理解 3D 场景。我们的实验研究表明,全局场景信息以及视频帧与全局文本中目标之间的对应关系对于提高 VLM 的 3D 理解至关重要。我们建议从输入视频重建 3D 点云,以生成用于全局信息的 BEV(鸟瞰图)图像。
我们通过在视频帧和 BEV 图像中添加时空对象标记来建立全局和本地数据对应关系。GPT4Scene 使用零样本推理与 GPT-4o等闭源 VLM 配合使用,实现了出色的性能。对于较小的 VLM,例如 Qwen2-VL,我们创建了 ScanAlign 数据集,其中包括视频帧、BEV 图像、STO markers和 165K 文本标注。经过微调后,VLM 在场景理解方面显示出显着的改进,在问答任务中达到了最先进的性能。此外,经过微调的 VLM 可以在仅使用原始视频帧的问答任务上表现良好,表明提出的GPT4Scene可以使 VLM 能够有效地理解 3D 场景。
#ADAS工程实践 | 相机标定参数
1.cam_D (畸变参数)
"cam_D": [-0.426717, 0.180019, 0.001187, -0.00015, 0.0]
- 描述相机镜头的 畸变系数,通常是一个5维向量:
-
[-k1, k2, p1, p2, k3]
-
k1, k2, k3
:径向畸变系数,用于校正图像的桶形或枕形畸变。 -
p1, p2
:切向畸变系数,校正因镜头与成像平面不完全平行而引起的偏差。
2. cam_K (内参矩阵)
"cam_K": [2175.553931, 0.0, 969.822873, 0.0, 2320.125728, 572.75404, 0.0, 0.0, 1.0]
- 相机的 内参矩阵,用3×3矩阵表示(这里是展开为一维数组):
-
fx, fy
:焦距(以像素为单位)。 -
fx = 2175.553931
,fy = 2320.125728
- | fx 0 cx | | 0 fy cy | | 0 0 1 |
-
cx, cy
:主点(光学中心)的像素坐标。 -
cx = 969.822873
,cy = 572.75404
失真模型
对于针孔型相机,失真模型分为为plumb_bob和rational_polynomial,具体取决于使用的径向畸变参数K的数量,当K为6时是rational_polynomial模型,其他则为plumb_bob。
5. binning_x 和 binning_y (图像分辨率的降采样)
"binning_x": 0, "binning_y": 0
-
binning_x
和 binning_y
表示图像在水平方向和垂直方向上的 降采样因子。
- 0 表示没有降采样,即原始分辨率。
6. roi (感兴趣区域, Region of Interest)
"roi": {"x_offset": 0, "y_offset": 0, "height": 0, "width": 0, "do_rectify": false}
- 定义图像的 感兴趣区域 (ROI),即图像处理时只关注的部分。
-
false
:不进行畸变校正。 -
x_offset, y_offset
:ROI的左上角坐标。 -
height
, width
:ROI的高度和宽度。 -
do_rectify
:是否应用图像矫正。
import numpy as np
# 给定的相机内参向量
intrinsics = [997.30810007, 979.18207798, 997.04838962, 517.0099155]
# 将内参向量转换为内参矩阵
cam_K = np.array([
[intrinsics[0], 0, intrinsics[1]],
[0, intrinsics[2], intrinsics[3]],
[0, 0, 1]
])
# 定义齐次变换矩阵
homogeneous_matrix = np.array([
[0.0784576, -0.996782, 0.0164255, 0.24498],
[0.160028, -0.00367006, -0.987106, 0.24341],
[0.98399, 0.0800744, 0.159225, -0.0729044],
[0, 0, 0, 1]
])
# 提取旋转矩阵 rotation
rotation = homogeneous_matrix[:3, :3]
# 提取平移向量 translation
translation = homogeneous_matrix[:3, 3]
# 将平移向量 translation 转换为列向量形式
translation = translation[:, np.newaxis]
print("相机内参矩阵 cam_K:")
print(cam_K)
print("旋转矩阵 rotation:")
print(rotation)
print("平移向量 translation:")
print(translation)
总结
这个数据描述了一个相机的标定信息,包括:
- 畸变矫正参数(
cam_D
); - 相机内参(
cam_K
); - ;
- 图像降采样因子(
binning_x, binning_y
); - 感兴趣区域(
roi
)。
坐标系 外参 centrenet
基于ROS的相机校准(camera_calibration & image_proc)_cameracalibrator.py-CSDN博客
https://github.com/315386775/DeepLearing-Interview-Awesome-2024/blob/master/IndustryAlgorithm/Reference.mdhttps://zhuanlan.zhihu.com/p/452886061
https://blog.csdn.net/MengYa_Dream/article/details/120233806?spm=1001.2014.3001.5506https://blog.csdn.net/shenquanyue/article/details/103262512?spm=1001.2014.3001.5506
相机标定(1)内\外参矩阵和畸变矩阵_相机内参矩阵-CSDN博客
#模型预测控制(MPC)
模型预测控制(MPC)是一种在复杂机器人系统动态约束下的强大反馈控制工具,通过在有限规划时域内优化近似动力学模型和成本函数,求解在线执行时遇到的每个状态的局部最优策略。在机器人操作领域,它可用于处理任务空间(如到达特定姿态、避免碰撞)和关节空间(如关节限制、奇异点避免)的成本优化问题。
然而,MPC 存在一些技术瓶颈:在调参方面,其参数调整较为困难,传统方法难以直接从调参参数预见控制器的闭环行为,且对于不同的任务和系统,需要大量的试验和经验来确定合适的参数,例如在机器人操作臂控制中,不同的目标函数权重选择会对控制效果产生显著影响,且在面对模型不匹配时,调整参数变得更加复杂。在约束处理上,尽管能够处理一些约束,但确保硬约束的满足具有挑战性,特别是在采样 - 基于的 MPC 算法中。此外,MPC 的性能受动力学模型质量和优化时域长度的限制,在实际应用中,获取准确的动力学模型往往较为困难,而较短的优化时域可能导致次优的控制决策。
迈向可扩展的多机器人控制:分布式MPC中的快速策略学习
在多机器人系统(MRS)领域,实现最优协调是一个关键的大规模最优控制难题。传统的分布式模型预测控制(DMPC)方法在处理非线性大规模 MRS 时面临困境,因其依赖数值优化工具在线计算局部控制序列,计算量巨大且缺乏可扩展性。同时,强化学习(RL)虽在机器人控制方面取得一定进展,但在多机器人控制场景下,训练可扩展性、样本效率及闭环保证等方面仍存在诸多挑战。本文提出了分布式学习预测控制(DLPC)框架。在模型框架方面,针对 MRS 中机器人的动力学模型,基于已有合作 DMPC 公式构建问题,通过分解优化问题,采用分布式策略学习算法求解。具体通过分布式在线 actor - critic 学习实现,在每个预测区间内逐步向前执行策略学习,结合后退时域优化策略更新控制策略,并利用终端惩罚矩阵保证稳定性。此外,还设计了基于力场的安全策略学习方法,应对状态和控制约束下的安全问题。
实验结论显示,该方法能够高效地在线学习近最优控制策略,可扩展性强,能处理规模达 10000 单位的 MRS。在不同计算平台上,计算负载随机器人规模呈线性增长。所学策略具有良好的转移能力,从 2 个机器人训练得到的策略可有效部署到 1000 个机器人上,且在实际的轮式机器人和多旋翼无人机实验中表现出色,在多种任务如编队控制、避障等方面均能实现有效控制,相比传统数值 DMPC 方法,计算效率显著提高,为大规模 MRS 的高效控制提供了新的可行方案。
多轴转弯驱动AMR的扫掠体积感知轨迹规划和MPC跟踪
在物流领域,多轴自主移动机器人(AMRs)至关重要,但多轴车辆转弯时的扫掠体积问题成为关键挑战,传统为标准车辆设计的系统难以应对,增加了安全风险。本文提出一种创新框架,将扫掠体积最小化与有符号距离场(SDF)路径规划及独立轮转向的模型预测控制(MPC)相结合。在轨迹规划方面,先用 A*算法生成初始路径,再经 MINCO 进行首次优化,通过最小化轨迹能量和时间消耗等平滑轨迹;接着进行二次优化,综合考虑能量、时间、安全距离和扫掠面积等因素,其中利用 SDF 计算障碍物安全距离相关成本函数,通过特定计算方式得出扫掠体积的成本函数及梯度并优化。在轨迹跟踪上,建立以车辆几何中心为原点的坐标系,得出离散化车辆控制状态空间方程,基于此构建目标函数并转化为二次规划问题求解,进而确定车辆最优控制向量,再计算各车轮的转速和转向角。
实验通过在 Gazebo 中设置街道地图模拟 5 轴转向驱动 AMR 车辆左转弯场景,以超出最小扫掠体积、规划时间、跟踪误差为评估指标。结果显示,与经典方法、分层方法和 SVSDF 方法相比,该方法的扫掠面积最小,仅为 23.14 m²,规划时间最短为 1.17 秒,且横向跟踪误差在 ±0.04 m 内,航向角误差在 ±0.03°内,显著提高了多轴 AMRs 在受限环境中的机动性、安全性和效率,为自主重型车辆的发展提供了有效方案。
VLMPC:用于机器人操控的视觉-语言模型预测控制
在机器人操作领域,模型预测控制(MPC)虽能预测系统未来状态,但缺乏环境感知能力,在复杂场景易失效;而大规模视觉语言模型(VLM)虽有强大感知与推理能力,但现有结合二者的方法仍存在不足,如未充分考虑机器人未来状态、视觉预测模型受数据集限制等。本文提出视觉语言模型预测控制(VLMPC)框架,在条件动作采样模块中,依据目标图像或语言指令以及当前观察,利用 VLM 生成采样分布并采样出候选动作序列,还利用历史信息缓解 VLM 幻觉现象。接着,通过构建的 DMVFN - Act 动作条件视频预测模型,依据候选动作序列预测未来帧。最后,设计包含像素距离成本和 VLM 辅助成本的分层成本函数,并通过 VLM 切换器综合评估视频预测结果,选择最优动作序列,机器人执行序列中的第一个动作,后续动作用于辅助采样。
实验中,VLMPC 采用 Qwen - VL 和 GPT - 4V 作为 VLM,对 DMVFN - Act 视频预测模型进行两阶段训练。在模拟环境实验里,于 RoboDesk 环境和 Language Table 环境分别与 VP2 等方法对比,结果显示 VLMPC 在多种任务中表现更优,如在 RoboDesk 环境的复杂任务中推理和规划能力突出,在 Language Table 环境的任务中成功率更高。在真实世界实验中,使用 UR5 机器人完成四项任务,尽管部分任务因存在干扰物体或多个子目标而成功率较低,但总体仍表现出对新物体和场景的良好泛化能力。通过消融研究还证明了各核心组件的有效性。总之,VLMPC 在模拟和真实场景表现良好,但视频预测和计算成本方面存在局限,未来需改进。
移动机器人和车辆模型预测控制有效规避椭球障碍物
在移动机器人的实际应用中,碰撞避免至关重要。通常,在受限环境下的全局运动规划由高级控制方案处理,但将局部碰撞避免集成到机器人运动控制中具有显著优势,能简化结构、提升效率并解决关键情况。然而,多数控制方法难以高效处理碰撞约束,虽模型预测控制(MPC)有潜力,但障碍物带来的约束评估困难且非凸,实时求解复杂。本文针对轮式移动机器人,提出一种将碰撞避免直接集成到 MPC 的方法。在模型框架方面,首先基于已有方法构建了用于检测两个(任意维度)椭球体是否重叠的高效测试方法,通过定义新的椭球体集合及相关参数,得出可判断重叠情况的度量指标,并针对二维情况给出具体计算方式。在 MPC 控制器中,考虑一般形式的机器人或车辆运动学方程,将其离散化后构建最优控制问题,在状态约束中为每个障碍物和离散时间步添加基于上述重叠测试的约束,确保机器人与障碍物不发生碰撞。
实验通过模拟和硬件实验验证。模拟中对全向移动机器人和差速驱动移动机器人分别设置场景,结果显示控制器能成功引导机器人避开障碍物到达目标点,同时给出了重叠度量指标和 OCP 求解时间。硬件实验中,实际机器人和障碍物为椭球体形状,利用运动捕捉系统跟踪,机器人成功避开所有障碍物,虽存在因模型失配、延迟和测量误差等导致的约束不完全满足情况,但通过调整求解器的约束违反容忍度等方法可有效防止实际碰撞,证明了该方法在实际硬件中的可行性。
从瞬时控制到预测控制:一种更直观、更可调的机器人MPC公式
在机器人操作臂控制领域,传统瞬时控制方法虽能应对干扰,但无法预见未来约束,而模型预测控制(MPC)虽有优势却面临调参难题,尤其在高混合、低产量应用中,这严重阻碍了其使用。近期基于学习的调参方法虽有进展,但仍受限于模拟环境、超参数调优等问题。
本文提出一种新的 MPC 公式:在目标函数上,受瞬时控制启发,定义了新的阶段成本,其中包含表示与一阶响应偏差的项,通过特定结构选择参数,保留了瞬时控制可直接指定任务误差时间常数的优势,且使调参更直观;在不等式约束方面,采用类似控制障碍函数(CBF)的约束方式,相比直接在最优控制问题(OCP)中强制约束,能更好应对未建模动态和短预测时域情况;在处理高阶动力学上,虽可指定但因计算成本高且无调参优势未深入研究。
通过二维示例及表面跟随任务验证。二维示例中,新公式在不同时域长度下表现稳定,调参更简便;表面跟随任务里,对 6 - DOF 机器人操作臂控制,新公式在短时域可行,延长时域可降低跟踪误差、加快工具移动速度并使关节加速度更平滑,且计算时间仍在控制回路采样时间内。总之,该 MPC 公式有效解决了从瞬时控制器向 MPC 控制器过渡的调参难题,兼具直观性与良好性能。
通过模型预测强化学习实现动态非预热物体传输
在机器人操作领域,让机器人从少量真实演示中快速学习新任务至关重要。模仿学习虽有进展,但行为克隆易受协变量偏移影响,在动态交互任务中,收集大量专家演示既耗时又昂贵,因此需要能从有限数据高效学习的方法。本文提出保守值模型预测控制(CV - MPC)框架:离线阶段,将机器人服务员任务建模为马尔可夫决策过程,从仅含末端执行器状态和稀疏成功/失败标签的任务空间演示数据中训练价值函数集成,以近似演示者的长期失败概率,每个集成成员通过优化贝尔曼误差目标独立训练。在线阶段,在模型预测控制中利用预训练的价值函数集成来近似轨迹回报,采用风险规避目标引入悲观估计,避免因数据覆盖有限导致的外推误差,且仅在初始状态计算悲观估计,该框架可与现有 MPC 框架集成。
实验使用 Franka Panda 机器人进行模拟和真实世界实验。模拟实验中,通过消融研究确定了悲观参数和集成大小等关键超参数,表明 CV - MPC 对超参数设置鲁棒性强;与多种基线方法对比,CV - MPC 性能优异,能改进次优演示。真实世界实验里,在案例研究 1 中对不同凸形物体的测试,以及案例研究 2 中对各种家用物体的测试,均显示 CV - MPC 能有效泛化,成功率较高。
参考文献
Toward Scalable Multirobot Control: Fast Policy Learning in Distributed MPC , https://arxiv.org/pdf/2412.19669
Swept Volume-Aware Trajectory Planning and MPC Tracking for Multi-Axle Swerve-Drive AMRs, https://arxiv.org/pdf/2412.16875
VLMPC: Vision-Language Model Predictive Control for Robotic Manipulation, https://arxiv.org/pdf/2407.09829
Efficient Avoidance of Ellipsoidal Obstacles with Model Predictive Control for Mobile Robots and Vehicles, https://arxiv.org/pdf/2412.11552
From Instantaneous to Predictive Control: A More Intuitive and Tunable MPC Formulation for Robot Manipulators, https://arxiv.org/pdf/2412.01597
Dynamic Non-Prehensile Object Transport via Model-Predictive Reinforcement Learning, https://arxiv.org/pdf/2412.00086
#连自动驾驶都搞不定,有什么资格做机器人
地平线苏菁
1月13日,地平线副总裁兼首席架构师苏箐的一段坦率发言,引发了行业的关注。RoboX将此次讲话全文稍加编辑,供大家分享。
同时附上苏箐简介:地平线副总裁&首席架构师,国内自动驾驶研发和量产的先行者,曾领导开发中国智能手机和汽车的先进处理硬件和架构,现整体负责地平线智驾系统Horizon SuperDrive的产品研发和量产落地。
以下为经过编辑的发言全文:
自动驾驶不是什么新东西,它发源自2004年的 DARPA project,那时我们就能看到其可能性。
我自己做自动驾驶,是从2012年前后开始的。当时,我看到Google X的两个创始人坐在一辆自动驾驶的丰田的普锐斯里,就觉得这玩意儿太酷了,它代表着未来。然后就不小心做了这么多年。
可到了今天,坦白讲,凯哥(余凯)是很乐观的,但我已经快抑郁了,因为自动驾驶真的非常难。
我有很多朋友已经改行了,去做了具身智能、机器人。自动驾驶不做了,受不了了。也有不少人问我,要不要去做具身智能?我想,咱们连自动驾驶都搞不定,有什么资格做机器人?
自动驾驶应该是第一个工作在物理世界和人交互的机器人,它处于半规则和半非规则的场景里。如果连这种东西都搞不定的话,去做一个非结构化的机器人是不可能的。
如果我们认清自动驾驶本身的比较对象是什么,大家就会发现这个问题比较麻烦。
因为自动驾驶的比较对象不是你的竞争对手,绝对不是国内的蔚小理、华为,甚至不是特斯拉,自动驾驶的本质比较对象是人类本身,它的价值是一个拐点式的价值——他比不过人的时候,其实就是高科技的玩具;当有一天比人好的时候,价值立刻就会跳上去,也就是两段式的价值。
很不幸的是,到目前为止还没有一个系统真正达到了这一拐点,我们只是看到了这个希望。
所以我有时想,干了十多年,每天看到这么多问题,全世界最聪明的人花了这么多钱干这件事情,都还没过这个拐点,我有时就会很绝望。
但是绝望归绝望,干了这么多年还是能看到希望,因为整个内核技术演进了5-6代以后,整套数据驱动范式起来以后,你会发现整个系统已经能看到曙光了。
你要说我们的优势和理念是什么,其实也很简单,我们并不打算和任何人比较。坦率地说,我干了这么多年,对每年出现的新概念的时髦的词已经完全没有感觉了,因为我看到像这种复杂的系统,它没有银子弹,也没有什么一招制敌的方法。你必须要有一个很Strong的工程团队,把系统和底座做得非常Solid。
你要比别人有更多的经验,要比别人愿意吃更多的苦,你要持之以恒每天面对这么多问题还不崩溃,一年又一年地运作。同时,你还要保证在新的技术出现的时候,快速把它吸收进来,而且要知道它的边界是什么。
大家都知道,一个新的方法起来以后,第一天你会觉得它很美好,能解决所有的问题;第二天又会对它引起怀疑;第三天你会发现边界就在那里。
每一个新方法都有这么一个过程,所以「正确的复杂系统」是不断在比较Solid的底座上,将新的方法集成进去,应用起来,不断地往前滚动,我觉得这是做大工程的经验之谈,我们现在也在做这方面的实践。
如果抛开和人类的比较,你一定要让我找一个对标对象,我还是会选择FSD,因为我确确实实觉得他们整个团队的素质和创新精神是值得让人敬佩的。
我自己去试过以后,能看到他们在技术上有很多独到之处,甚至在某些地方有断代式的领先。这点不妨承认,没什么关系,我们自己从中也能学到很多新的思想和思路,至少他们已经证明了这些东西是Work,我们就要去做。
反过来说,中国的自动驾驶和美国有些地方不一样:
1、中国在目前的状态下,不可能获得特斯拉的算力。
2、中国的「基建随意性」比美国大太多:它有很多以通用的Common sense搞不定的东西,这是美国没有的。
3、中国的大量外卖电动车,和不守规矩的开车行为,在美国也是没有的,导致大量的博弈问题需要处理,而这恰恰是现在的数据驱动不太能有效解决的。
所以我们自己选择的是一条比较务实的道路,系统的内核完全是一段式的端到端数据驱动,但是在数据比较稀疏,短期内用更大数据量也很难收敛的时候,我们也会用一些有经验的工程师做的规则的东西,可以认为是双并行的系统,目前实践下来是最有效的。
当然做Marketing宣传的时候,你可以讲得天花乱坠:例如说是端到端、数据驱动,有各种各样的新词。但是对普通消费者来说,他上车以后5分钟能不能感觉这个东西是完全与众不同的,他可以信赖的,这样的产品才能去卖。
我到现在为止最信仰的做产品的人还是Steve jobs,我觉得真正iPhone所有的细节做到位了,没有什么漏洞,这是目前这代产品人里没有看到有谁达到他那个高度,我希望地平线的产品以这种标准去做我们自己的产品,去解决真正的问题。
现阶段,自动驾驶是高科技的玩具。它逐渐地在高速上好用了,Urban里不太好用。目前就这么个状态,它的价值是起码很多时候不用看导航那么累了,只需要让它自己认路、开车,你去监督它就可以了。这个价值还不错,但这还不够。
因为中国和美国的情况不太一样,美国人通勤几乎都是走高速,中国不是,中国一年上不了几次高速,中国的Urban问题是Critical的问题。
系统的本质问题是:到底是系统依赖人,还是人依赖系统?谁给谁兜底?
你要真的想让系统有价值,就需要在天加班很累的时候,真正能安心地将系统激活,让它帮你开,这时系统才是真正有价值的,而且超越了玩具的价值,这是我们今年要做到的目标。
讲起来的话其实就是两个点,1、将一段式端到端的类人性做上去:其目的不是为了类人,而是要超越人——如果车辆能在你预判之前就完成了动作,这个系统才是对的,这才是我们的努力目标。
2、把车的紧急监管安全性至少提升100倍:这件事情非常难,但是我们正在做一些努力,也有了一些新的方法论线索。
这两件事情达到以后,我相信我们应该是和市场上所有的产品都不相同的产品。如果说让这么多人辛苦了这么多年,再去做一个和大家一样的东西,这不是我们这代人该做的事情。
我们应该去解决一些真正的问题,而不是天天活在营销里,我觉得中国这几年的氛围我是不太喜欢的,我觉得应该做一点正确的产品解决正确的问题。
#VLM/VLA和智驾新技术
VLM和VLA的区别,有点想以像L2功能,LDW和LKA,FCW和AEB的区别,一个是只有报警,一个是能提供具体执行功能,VLM关注的重点在于环境建模,VLA除了考虑环境建模,还需要关注规划和控制问题,这是两者的区别。所以我理解VLM和VLA其实就是多传感器融合的问题,只是这个传感器换成了包含人类知识的文本。
现在市面是比较热门的技术并没有什么理论创新,只是研发人员对智能驾驶的问题认识越来越深刻,如何解决这些问题呢?这时候正好AI相关的技术成果越来越多,AI踏着七彩祥云来拯救人们了,为这些问题提供了解决方法和手段。
举几个具体的例子:
- 端到端,无非是以前的感知-预测-决策-规划-控制的架构会造成传递过程中对传感器输入的环境模型存在信息传递损失,而且基于规则的方法中规则是由人来设计的。能不能让信息无损传递并且不去人工设计规则呢,AI提供了解决方案,AI说用端到端,直接从图像到执行指令,信息可以无损传递,并且AI自己去理解规则而不是人工定义规则。
- VLM, 上面提到了,我个人理解就是一个传感器融合的问题,以前的传感器融合只有对物理世界的信息采集,融合视觉,毫米波,激光雷达,现在要加入文本,即语言。语言是人类智慧的结晶,能用语言描述出来的即是知识,利用人类积累的知识作为传感器的输入,融合人类知识和观察到的物理世界信息,这个不就是多传感器融合的事情吗?再结合端到端的思想不就是VLA了吗?
- 无图,现在各家智能驾驶厂商都在推无图技术,要去高精地图和高精定位。但无图并不是什么新的技术,早在1V1R时代,即单摄像头和单雷达,就是无图方案呀,现在无非是现在要开发一个更高级点的算法能建更高级的车道线,更高级的动态目标了,你说不是吗?
现在新技术的发展,是因为随着行业领先者,像特斯拉,华为这些行业领先者对智能驾驶问题的理解越来越深,越来越接近这个问题的本质,而AI正好提供了这些问题的解决方案和方法。所以目前的智能驾驶技术的发展和趋势,依旧还是AI的发展。
其实AI颠覆智能驾驶,是早在mobieye时期就开始了,mobieye依靠它先进的视觉感知技术取代毫米波雷达感知技术占主导地位后就开始了,上面聊到的端到端,VLM,无图技术依旧是AI继续颠覆智能驾驶技术的延续。
所以你现在还在怀疑AI吗?AI必将颠覆世界!
#VINGS-Mono
5000万个高斯球?首个支持室外&公里级的单目SLAM单目GS-SLAM的重大挑战
现有的 3DGS SLAM 系统主要集中于有限数量的显示物体或小型室内空间,使用深度摄像头作为输入,并依赖传统的 SLAM 前端或深度点云的 ICP(迭代最近点)算法进行定位和高斯更新。而室外 GS-SLAM 方法相对稀缺,且仅限于重建几百米范围内的场景,严重依赖高功率的激光雷达传感器。然而,深度摄像头在室外环境中的表现较差,而激光雷达传感器的高成本限制了其在消费级应用中的普及。鉴于尺寸、重量和功耗的限制,低成本摄像头与 IMU 的组合成为实现 SLAM 的最低配置。因此,开发一个能够处理大规模环境的鲁棒单目(惯性)GS-SLAM 系统既重要又紧迫。
目前,支持单目输入的 3DGS SLAM 系统通过随机或稀疏特征点初始化高斯,但由于易受位姿漂移和几何噪声影响,无法应对大规模、快速移动的场景。此外,在大规模环境中,普遍存在显著的累积误差,这些误差通常需要通过闭环(Loop Closure)加以缓解。传统的闭环方法依赖于描述符或网络特征向量,需要额外的编码和词袋模型存储,效率较低,且随着场景规模的增加性能会下降。GO-SLAM通过维护帧之间的共视矩阵来识别闭环,但这导致了二次存储需求和计算开销的增加。
开发一个高效且高保真的单目 GS-SLAM 系统以应对大规模场景面临着几个重大挑战:
- 首先,表示大规模街景需要管理数千万个高斯,这既对存储又对计算资源提出了极高的要求。
- 其次,单目系统存在严重的尺度漂移问题,这会削弱重建场景的准确性和可靠性。
- 此外,在大规模环境中,累积误差显著。虽然传统的闭环技术在优化基于地标的地图方面效果显著,但检测闭环后修正稠密高斯地图极具挑战性,通常需要对所有历史帧重新训练。
- 最后,大城市环境中动态物体的存在带来了显著的伪影和噪声,进一步增加了优化的复杂性。
VINGS-Mono[1]是一个支持大规模城市场景的单目(惯性)高斯散点 SLAM 框架。该框架包含四个主要模块:VIO 前端、2D 高斯地图、新视角合成(NVS)闭环模块和动态物体擦除模块。为了解决高斯地图存储与优化效率的问题,开发了一个评分管理器,用于通过整合局部和全局地图表示来管理 2D 高斯地图。此外,设计了一个基于采样的光栅化器,以加速高斯散点的反向传播算法,从而显著提高计算效率。为了增强跟踪精度并减轻大规模场景中不可避免的漂移,提出了一个从单帧到多帧的位姿优化模块,该模块通过将单帧的渲染误差反向传播到视锥范围内的所有帧位姿,从而提高整体位姿一致性。对于累积误差,利用高斯散点的新视角合成能力进行闭环检测,并进一步提出了一种高效的闭环修正方法,该方法能够在检测到闭环后同时调整数百万个高斯属性,确保地图的全局一致性。最后,为了应对动态物体对建图的影响,设计了一种基于重渲染损失的启发式语义分割蒙版生成方法,确保动态物体被有效处理,从而提高了建图过程的鲁棒性。
项目链接:https://vings-mono.vercel.app/
主要贡献:
- 首次提出了一个能够在室外运行并支持公里级城市场景的单目(惯性)GS-SLAM 系统。
- 提出了一个包含采样光栅化器、评分管理器和从单帧到多帧位姿优化的 2D 高斯地图模块,确保我们的方法可以实时实现高精度定位和高质量高斯地图构建。
- 引入了一种基于 GS 的闭环检测方法,以及一种高效的闭环修正方法,该方法能够在检测到闭环后,通过单次操作修正数千万个高斯属性,从而有效消除累积误差并确保地图的全局一致性。
- 在不同场景(包括室内环境、无人机视角和驾驶场景)上进行了全面的实验,结果表明 VINGS-Mono 在渲染和定位性能方面均优于现有方法。此外开发了一款移动应用程序,并进行了真实场景实验,证明了方法的实际可靠性。
系统概述
提出的框架管道如图 2 所示。给定一系列 RGB 图像和 IMU 数据,我们首先利用视觉惯性前端(Visual-Inertial Front End,详见第 IV 节)选择关键帧,并通过密集束调整(Dense Bundle Adjustment,DBA)计算关键帧的初始深度和位姿信息。此外,我们基于深度估计过程中得出的协方差计算深度图的不确定性,过滤掉几何上不准确的区域和天空区域。接着,2D 高斯地图模块(详见第 V 节)利用视觉前端的输出,逐步添加并维护高斯椭球。我们设计了一种基于贡献分数和误差分数的管理机制,用于高效修剪高斯。同时,为了确保系统在大规模城市场景中的可扩展性,我们实现了 CPU-GPU 内存转移机制。
在新视角合成(Novel View Synthesis, NVS)闭环模块(详见第 VI 节)中,我们利用高斯散点的视图合成能力,设计了一种创新的闭环检测方法,并通过高斯-位姿对(Gaussian-Pose Pair)匹配修正高斯地图。此外,我们集成了动态物体擦除模块(Dynamic Object Eraser,详见第 VII 节),该模块通过蒙版屏蔽车辆和行人等动态物体,确保在静态场景假设下实现一致和准确的建图。
视觉惯性前端
密集束调整与视觉因子
视觉约束建模为反深度和位姿上的密集束调整(Dense Bundle Adjustment, DBA)优化问题,其中反深度 通过位姿 投影到帧 上以估计光流 :
对于相邻的 RGB 帧,我们基于编码后的特征图构建相关体积,并通过查找操作获得相关特征图。利用基于 GRU 的结构,我们将当前图像编码、相关特征图和 GRU 的隐藏状态作为输入,输出光流残差 和权重 ,用于后续上采样。为确保实时处理,我们下采样至原始 RGB 图像分辨率的八分之一。
GRU 输出修正后的光流场 ,我们将修正后的光流定义为 。随后,我们将 DBA 问题定义如下,通过迭代优化 和 :
其中 表示权重 的对角矩阵。
对于以帧 为锚点的边束,结合到 个共视帧,其合并的 Hessian 矩阵表示为:
其中, 是矩阵的子块。
我们采用高斯-牛顿方法同时优化位姿和反深度。在消去深度状态后,通过构造关于位姿的约束来实现高效计算:
更新位姿后,可通过以下公式更新反深度:
最后,利用 RAFT 定义的凸上采样方法生成全分辨率深度。
视觉惯性因子图
我们构建的因子图包含视觉因子和 IMU 预积分因子,其优化通过 GTSAM实现。IMU 预积分因子的状态变量定义为:
其中, 是 IMU 在世界坐标系下的位姿, 是速度, 是加速度计和陀螺仪的偏差。
视觉因子通过舒尔消元法计算,其形式如下:
其中, 表示摄像头到 IMU 的外参。
IMU 预积分残差定义为:
其中, 是 IMU 的位置和旋转矩阵, 是 IMU 的预积分项, 是重力加速度, 是时间间隔。
深度不确定性估计
我们的概率深度不确定性来源于密集束调整(DBA)过程中信息矩阵的计算。其目的是抑制噪声并减小伪影。基于 Hessian 矩阵的稀疏形式,可以计算每个像素反深度值的边缘协方差:
其中, 是下三角 Cholesky 分解矩阵。
利用视觉惯性前端提供的位姿 、深度 、对应的不确定性 和输入的 RGB 图像 ,我们可以逐步构建和维护 2D 高斯地图。
2D 高斯地图
在线建图过程
在建图模块初始化时,当 VIO 前端处理完第一批关键帧后,将初始化 2D 高斯地图。对于每一帧 ,深度或不确定性过大的像素将被屏蔽。随后,从这些像素中随机采样 点并投影到世界坐标系中以生成点云。高斯属性按照 2DGS中描述的方法初始化为:。
我们遵循 2DGS 的渲染方法渲染颜色 、深度 、法向量 和累积 ,如下公式所示:。
其中, 是高斯中心在相机坐标系中的深度值, 是高斯椭球的法向量,其正方向与射线方向一致。
建图模块和 VIO 前端作为两个独立线程并行运行。在后续的增量建图过程中,我们没有采用原始 3DGS 的克隆与分裂策略进行加密,因为在 GS-SLAM 环境下,重置透明度的操作表现不佳。相反,我们首先添加较多的高斯点,然后修剪多余的点,证明了这种策略的高效性。
当前端添加新的关键帧 时,在训练前会添加新的高斯椭球。首先,渲染 的颜色和深度。然后执行两项操作:删除冲突高斯点并添加必要的高斯点。视锥内深度或 RGB 损失较大的高斯点将被移除,同时投影半径过大的高斯点也将被删除。删除后重新渲染累积图,并根据深度信息在低累积区域添加新高斯点。新高斯点的数量与低累积像素区域的面积成比例。通过先冗余添加再选择性修剪,这种方法在性能上优于 GS-SLAM 的原始加密方法,尤其是在驾驶等前视场景中。
在添加新的高斯椭球后,我们从 VIO 前端的最新关键帧列表中随机采样帧进行训练。在训练过程中,损失函数 按照 2DGS中的公式计算:。
每次训练迭代时,我们记录并更新当前关键帧列表中每个高斯点的局部贡献分数和误差分数。这些变量用于高斯点的管理,具体将在以下子章节中详细解释。
评分管理器
我们提出了一种评分机制来管理每个高斯椭球,包括状态控制(稳定/不稳定)、存储控制和 GPU-CPU 转移。详细的算法流程见算法 1。
对于给定的关键帧列表,我们为每个高斯点定义贡献分数和误差分数。目标是确保每个高斯点在对帧的贡献最大化的同时引入的误差最小化。贡献分数 表示高斯点 在所有关键帧中的总贡献,计算公式如下:。
误差分数 代表高斯点在所有关键帧中引入的最大误差:。
高斯点的状态由以上两个分数决定。例如,分数较低且状态为不稳定的高斯点会被移除,而分数较高的高斯点会被保留。通过这种机制,我们可以有效地管理高斯点的状态、存储和内存分配。
采样光栅化器
在原始高斯散点方法中,反向传播过程与前向传播对称。我们针对每个 GPU 块对一个瓦片(16×16 像素)进行操作,并对瓦片中的每个像素反向传播损失。然而,这种像素并行化策略在每个线程中需要多次迭代,导致效率较低。
我们引入了一种优化方案,在前向传播阶段对中间变量进行分块存储,并在反向传播阶段按块分配 GPU 计算资源,从而显著减少每个线程的迭代次数。此外,我们仅对每个瓦片中损失最高的像素进行反向传播计算(如设置为 50% 的像素),实现了 273% 的加速效果。
单帧到多帧位姿优化
现有基于 GS 的 SLAM 方法通常通过高斯点传递梯度来优化位姿。然而,这种方法效率较低。我们提出了一种改进方案,通过将单帧渲染误差反向传播到多个关键帧的位姿,从而实现全局优化。优化后的位姿替换视觉前端的位姿缓存,以便进一步优化。
新视角合成(NVS)闭环
在缺乏尺度信息的单目配置中,闭环对于消除累积误差至关重要,尤其是在大规模环境中。我们提出了一种基于高斯散点的新视角合成(NVS)闭环检测和修正方法。与传统的词袋(Bag-of-Words, BoW)方法不同,我们利用高斯散点的视角合成能力,从新视角判断是否存在闭环(详见 VI.A)。随后,我们通过图优化修正位姿,并利用高斯点的帧索引(frame index)修正 2D 高斯地图。
闭环检测
如图 4 所示,我们的闭环检测过程分为三个主要步骤:匹配特征点与历史帧、通过匹配的特征点和渲染深度计算相对位姿,以及利用新位姿生成新视角以确认闭环的存在。
- 特征点匹配
我们在当前帧 的指定距离范围内,从历史帧 中提取特征点并进行匹配,同时保证这些历史帧与当前帧的帧索引差超过十帧。对于每个匹配成功的历史帧 ,我们记录成功匹配的特征点数量 。匹配点数超过阈值 的帧按匹配点数降序排列,记为集合 。 - 渲染深度与 PnP 求解
我们按匹配点数的降序依次处理 。首先,利用当前帧 渲染深度图 。然后,通过匹配的特征点 使用透视-n-点(PnP)方法计算历史帧 与当前帧 之间的相对位姿 。随后,根据全局位姿公式 计算当前帧的全局位姿。注意,为避免 PnP 在深度值较大的特征点上产生不稳定性,仅选择深度值低于固定阈值的点参与计算。 - 新视角合成
闭环检测的核心问题是判断两幅图像是否拍摄了同一场景。利用 3DGS 的视角合成能力,该问题可以转化为验证新捕获的图像是否能够作为高斯地图的一个新视角。通过计算新合成视角 与原始图像 的 L1 损失来直接评估闭环。如果颜色损失低于特定阈值或小于集合 中其他帧颜色损失中位数的十分之一,则视为检测到闭环。
闭环修正
在检测到闭环后以及建立相应的闭环约束后,我们需要修正历史关键帧的位姿和高斯地图。直接基于闭环约束优化高斯地图在大规模环境中并不可行,因为闭环误差通常较大。直接使用修正后的位姿重新训练高斯地图可能无法有效收敛。因此,我们采取以下两步进行修正:
- 高斯与位姿的配对
对于所有历史关键帧,我们前向传播并顺序记录每个高斯点在每帧中的贡献分数。每个高斯点选择其最高贡献分数对应的关键帧位姿作为匹配位姿。由于渲染速度极快,该过程对 1000 帧的处理仅需约两秒。 - 修正位姿与高斯
我们为所有历史帧 构建位姿图,并添加闭环约束以优化得到更新的全局位姿 。对于每个历史关键帧,根据修正前后位姿的平移向量模长比率计算其尺度。根据公式:
更新每个高斯点的中心位置 和旋转 ,保持其他属性不变。随后,在所有历史关键帧上进行 100 次迭代的全局训练,并记录贡献分数 。最后,我们基于贡献分数进一步修剪高斯点,以优化存储开销。
动态物体擦除器
高斯散点的基本假设是场景是静态的。然而,在实际应用中,尤其是在大规模环境中,动态干扰物(如车辆或行人)是普遍存在的。以往的动态高斯散点方法通常用于离线训练环境,这些方法通过建模 4D 空间并训练高斯属性与时间之间的关系,以离线方式处理整个数据集。然而,这些方法并不适用于需要增量加载数据的 SLAM 系统。
考虑到 SLAM 的建图是一个在线过程,并且高斯散点具备新视角合成的能力,我们设计了一种基于启发式的分割方法,以识别动态物体的蒙版。
方法
- 语义分割生成初始蒙版
首先,我们在整幅图像上应用一个加速的开集语义分割模型,生成一组语义蒙版 。 - 重渲染损失计算
当一个新的关键帧 到达时,我们在添加新的高斯点之前,利用当前帧的位姿 渲染当前帧的颜色图 。接着,我们分别计算重渲染图与新关键帧之间的结构相似性(SSIM)损失和 L1 损失。SSIM 对纹理变化敏感,而 L1 损失对颜色值差异敏感。将两者相乘即可得出每个像素的重渲染损失:
。
初始计算是逐像素进行的,随后取像素级损失的 90% 分位数,记为 。 - 动态区域蒙版生成
对于纹理相对平滑的动态物体,重渲染损失主要集中在边缘区域。为更有效地识别动态物体,我们引入深度不确定性(详见 IV.C)来调整重渲染损失:
。
通过以下条件筛选动态蒙版:
。
其中, 表示蒙版内像素数, 设置为 20%。当语义蒙版的重渲染损失超过阈值 且损失高于蒙版中 20% 像素的 90% 分位数时,该区域被识别为动态物体蒙版。 - 动态物体的屏蔽
对于识别出的动态物体区域 ,在新高斯点的添加及后续渲染过程中予以屏蔽,从而避免动态物体对高斯地图造成干扰。
实验效果
如图 5 所示,我们的动态物体擦除器能够有效过滤室内移动的人体和室外快速移动的车辆,防止动态伪影影响高斯地图。此外,与其他方法相比,动态物体擦除器提高了 SLAM 系统在动态场景下的稳定性和鲁棒性。
实验效果
总结一下
VINGS-Mono是一种单目(惯性)高斯散点SLAM框架,该框架通过四个主要模块(VIO前端、2D高斯地图、NVS闭环检测和动态擦除器)解决了大规模场景中SLAM系统面临的挑战。实验表明,该方法不仅在定位精度上达到或超越现有方法,还在建图和渲染质量方面显著优于其他方法。此外,该方法还支持通过智能手机进行实时高质量高斯地图生成。
未来工作:
- 进一步优化动态擦除器以适应更复杂的动态场景
- 扩展框架以支持更多传感器配置。
#Balanced 3DGS
加速近八倍!理想汽车提出均GPU均衡算法
- 论文题目:Balanced 3DGS: Gaussian-wise Parallelism Rendering with Fine-Grained Tiling
- 论文链接:https://arxiv.org/pdf/2412.17378
方案简介
尽管3DGS技术取得了很大的进步,训练3DGS模型仍然是一项充满挑战且耗时的任务,尤其是在负载不平衡的情况下。当像素和高斯球之间的工作负载不均衡时,会影响训练性能。具体来说,图形处理器(GPU)设计用于处理规则且同质化的任务,并以SIMT(单指令多线程)方式运行。因此,当像素和高斯球之间的工作负载存在差异时,一些线程会处于活动状态,而另一些线程则会处于空闲状态,从而降低整体性能。据我们所知,目前尚无研究在渲染计算层面解决这些不均衡问题。
在对3DGS训练过程进行深入分析和实验的基础上,本文确定并归纳了三种显著的负载不平衡问题:
- CUDA静态分配导致的流处理器(SM)负载不平衡:如果使用静态分配方法,在不同的SM之间会出现负载不平衡问题。尽管在不同的SM之间线程块任务的数量相同,但每个线程块的工作负载可能会有很大的差异。这是一个被忽视的性能因素,导致了SM之间的负载不均衡。
- 分块中的负载不平衡:在3DGS中,为避免每个像素派生高斯球的计算成本,图像最初被划分为多个不重叠的分块。每个分块包含16×16个像素。然而,如果基本的CUDA分配和分块策略保持不变,一些分块可能会拥有极大的工作负载,而其他分块的工作负载则很轻,从而导致SM之间出现严重的负载不平衡。
- 训练阶段的负载不平衡:在3DGS训练过程中,不同阶段的数据特性会发生显著变化。在初始阶段,像高斯分布这样的度量在不同块或线程之间存在显著差异。随着训练的进行,这些不平衡随着数据特性的变化而改善。在经过多次迭代后,极端的数据特性变得更加平衡。
如下图所示,是3DGS训练过程中不同计算每个线程和每个负载块对应的高斯球分布,可以看到不同线程、不同块及不同训练阶段负载分布都有显著差异,故需要针对这些负载分配的特点做高效的负载均衡方案。
为了解决上述负载不均衡问题,本文提出了Balanced 3DGS,其亮点包括:
- 首次提出了基于高斯球维度并行的负载均衡技术,以优化Warp内前向计算的渲染算子;
- 此外,创新性地提出了块间动态工作负载分配技术,通过在计算块之间均匀分配任务,最大限度地减少线程的空闲时间并最大化硬件资源利用率;
- 精细化复合负载均衡方法结合了以上两种技术,提供了一个完美的负载不平衡问题解决方案;
- 提出了一种基于实验的自适应渲染算子选择策略。这种策略克服了手动选择度量标准的局限性,能够更准确地反映训练过程的实际情况,并确保更好的性能和效率。
如下图所示,通过CUDA负载动态分配技术,使负载高的硬件单元SM分配的tiles任务少,负载低的硬件单元分配的tiles任务多,显著减少了因负载不均衡导致的硬件资源SM空转的时间,从而提高硬件利用率,加快渲染速度;
如下图所示,通过将warp内的32threads在高斯球维度做并行,在对应的在32个像素点维度做串行,这样就能很好的保证warp内32threads的负载均衡,从而提高硬件利用率,也提高了渲染速度;
如下图所示,结合上述CUDA负载动态分配技术和高斯球维度并行渲染技术,通过将tiles切分的更小,有效增强CUDA 负载动态分配的能力,完美解决了极端的负载不均衡的问题;
最后,如下图所示,与传统的神经网络训练不同,单一且固定的渲染算子已无法满足3DGS训练过程负载均衡分配的要求,考虑到训练过程负载分配多样性的特点,这里采用基于实验的自适应的渲染算子选择策略,来实现训练全过程负载自适应均衡分配。
实验结果
负载不均衡场景下,前向渲染计算算子性能最高提升7.52x;结合基于实验的自适应渲染算子选择策略,3DGS 端到端训练效率也有明显提升。
总结
我们引入了Balanced 3DGS(Balanced 3DGS),这是一种在 3DGS 训练过程中采用精细分块方法的高斯球维度并行渲染技术,完美地解决了负载不均衡问题。在负载不均衡的场景下,借助块间负载动态分配、高斯球维度并行渲染以及精细粒度的组合式负载均衡技术,前向渲染计算算子的性能能够得到显著提升。同时,3DGS 在训练过程中可以根据不同的负载均衡状况自适应地选择最佳的渲染算子,这有效地提高了训练效
#在imitation learning中是否存在scaling law
Zheng, Y., Xia, Z., Zhang, Q., Zhang, T., Lu, B., Huo, X., ... & Zhao, D. (2024). Preliminary Investigation into Data Scaling Laws for Imitation Learning-Based End-to-End Autonomous Driving.arXiv preprint arXiv:2412.02689. 主要回答了三个问题:
- Is there a data scaling law in the field of end-to-end autonomous driving?
- How does data quantity influence model performance when scaling training data?
- Can data scaling endow autonomous driving cars with the generalization to new scenarios and actions?
答案是:
- A power-law data scaling law in open-loop metric but different in closed-loop metric.
- Data distribution plays a key role in the data scaling law of end-to-end autonomous driving.
- The data scaling law endows the model with combinatorial generalization, which powers the model's zero-shot ability for new scenarios.
通过实验证明,本文证明了log-log scaling law存在,数据分布对模型训练结果有影响。scaling law能够提升模型的泛化能力。
文章的模型结构如下:
然后把数据分成了23类:
模型结构非常简约, 如图中所示,就不多说了。最后的loss是:
planning的ego query用于预测自车trajectory:“Then the queries are used to predict multi-modal future planning trajectories with corresponding scores.”其中planniing score是:
主要看看实验结果。
power law: 无论是开环测试还是闭环测试,都存在power law曲线,本文的线性曲线是xy轴都取了log的。从open loop的测试结果来看,随着数据增长,关系保持线性。
但是在close loop测试中,线性关系在2 million数据之后发生变化:
可以看到,各个指标得分虽然随数据增长score仍然在提升,但是到达某个阈值之后,线性曲线增长变慢:“about 2 million training demonstrations), the growth rate decelerates as data continues to expand”。
然后看下data quality和系统表现之间的关系,这里挑出了两组场景DOWN SUBROAD LC and SUBROAD TO MAINROAD HIGHWAY作为测试场景,这两个场景的系统表现比较差,所以文章将他们作为测试集来看随着数据增加,系统表现在这两个场景下的表现是否发生变化:结论是有变化。随着数据增加,这两个场景的系统表现也在提升:“The results reveal that for these long-tailed scenarios, doubling the specific training data while keeping the total data volume constant led to improvements in planning performance”。当数据干到原来的四倍的时候,效果有点明显:“Furthermore, quadrupling the specific training data yielded even more substantial gains, with performance improvements between 22.8% and 32.9%.”
然后再来看泛化能力,这里提出来两个场景的数据不用于训练,来看系统在没有见过的场景下的表现能力,为了能有更好的对比,我们再找出来一些类似的场景放在一起看看:
可以看到,在没有见过的数据集上面,所致额数据提升,系统表现也在提升,在类似的场景的数据集上系统表现的变化也是和数据相关的。然后还有一个有趣的现象,文章还发现,通过某些单一场景的训练,系统还学到了额外的泛化能力,他能在单一场景的组合表达的场景中提升系统表现:“By learning high-speed driving and low-speed nudging obstacles separately from the training data, the model acquired the ability to generalize to high-speed HIGHWAY NUDGE OBS scenarios; through learning to turn and queuing at red lights, the model developed the capability to generalize to WAIT TURN scenarios”。但是呢,其实这里的结论还是存在一定前提得,网络的设计和任务的定义也会在很大程度上影响着数据对网络的提升效果,如果网络设计不合理,或者参数量有限,能够存储的信息也就有限,所以也不一定能学到特别好的泛化能力。
#深入揭秘InternVL-2.5训练细节
理论与实操兼备1 前言
最近书生(internVL)2.5发布了一系列模型,包含78B、38B、8B等多种不同size的多模态模型,恰逢工作单位在清华大学开设了一个workshop,有幸听到通讯作者代季峰教授做了一个关于多模态导向与设计训练的分享,收益匪浅。由于之前做过关于internVL-2的微调,在OCR相关能力上表现非常不错。于是便萌生了写一篇对InternVL-2.5详细剖许的文章(如果后续有时间也会补一篇代码层面的剖析)。
Technical Report:Expanding Performance Boundaries of Open-Source Multimodal Models with Model, Data, and Test-Time Scaling
arxiv.org/abs/2412.05271
Huggingface模型权重下载页:
huggingface.co/collections/OpenGVLab/internvl25-673e1019b66e2218f68d7c1c
Github:
github.com/OpenGVLab/InternVL
模型训练官方指导文档:
internvl.readthedocs.io/en
本文旨在剖析internVL-2.5的技术报告,即在12月6日挂在arxiv上的文章,也会夹杂着分享一些近日workshop作者分享的一些观点。因为个人觉得internvl系列的代码是比较工整且优美的,完整剖析一遍可以有很大的收获,日后可能会代入小白的视角去更新implementation代码层面的剖析。
总体来说,这篇论文是一篇质量极高,并且清晰透露了技术细节,为书生团队点赞。
2 Model Architecture
InternVL-2.5模型框架
在模型框架上,InternVL-2.5仍然遵循:ViT-MLP-LLM这种MLLM的经典桥接式框架。但是组件做了细微的更改:
InternVL系列各模型组件概览
2.1 视觉编码器ViT
InternVL-2.5系列包含了两种参数大小的ViT:InternViT-6B 和 InternViT-300M,这两种大小的ViT适用于不同size的MLLM,小于8B的MLLM(1B、2B、4B、8B)InternViT-300M,而大于8B的MLLM(26B、38B、78B、pro)统一使用InternViT-6B。
InternViT-6B: 架构基于vanilla ViT,对QK-Norm以及RMSNorm进行了少量改动。ViT原本有48层,由于最后3层过于专注于clip的目标损失函数(contrastive loss),这最后三层优先考虑全局对齐导致部分细节信息丢失,所以最后三层被移除后用作MLLM的视觉编码器。最终,InternViT-6B-448px-V2.5包含45个layer,参数量为5.5B。
InternViT-300M: 由InternViT-6B蒸馏而来,知识蒸馏训练细节详见原文在此不过度展开。
2.2 大语言模型LLM
相较于InternVL-2,InternVL-2.5采用了更多样且先进的LLM,包含:InternLM 2.5系列和Qwen 2.5系列等。
3 训练策略
3.1 Dynamic High-Resolution for Multimodal Data
动态分辨率方案
基于上文,由于ViT支持的分辨率是448448,即所有的图像在进入ViT之前都需要去resize成448448的放图。若是一张输入图像不是方图或分辨率过高(例如报纸、财报),这种resize会导致图片中的严重变形失真或是信息模糊,从而影响MLLM的训练。
为了解决这类难题,U-reader提出了一种动态分辨率切片方案,通俗一点来说就是将原图切成固定分辩率的子图,i.e. 448448,然后将若干子图和resize过后的原图一起送入ViT转化成视觉特征。通常,我们称被切分后的子图为tile,而被resized过后的原图为thumbnail。本质上,动态分辨率方案增加了视觉信息的token数。分享一下代季峰教授在workshop时的一个观点:
高分辨率只是一个工程化的问题,不本质。通过切子图实现高分辨率对模型训练的上限不会有太大影响。关于分辨率的争论才CV发展的历史中比比皆是,不看好分辨率相关的突破会是下一个通往AGI的breakthrough。
动态分辨率最核心的点就是切图的准则,即给定一张任意分辨率的图片并且子图tile的分辨率已经固定,该将图片resize到什么分辨率从而可以切成固定的tiles?
InternVL系列采用了比较简洁且有效的准则,即根据图片的长宽比来选择pre-defined grids。这些grid即是图像可以去size到的分辨率,grid的长和宽皆是tile(448方图)的整数倍。
首先根据tile的数量定义grids,这里需要考虑显存的问题,子图越多,对应的visual token就越多,训练时sequence的长度就越大,就会占用更多显存。通过定义切图的下限,上限来确定pre- defined grids。
根据当前图片的长宽比选择最佳的grid,r为长宽比:
最后对原图进行resize成为thumbnail,将原图切分成多个子图(tiles):
动态分辨率切图的implementation一般在dataset中:
# internvl_chat/internvl/train/internvl_chat_finetune.py -> LazySupervisedDataset
# i.e. multi_modal_multi_image_get_item: 多图处理,部分核心代码
def multi_modal_multi_image_get_item(self, data_item):
# Build transformation function
transform = self.get_transform()
images, num_tiles = [], []
num_image = len(data_item['image'])
for image_path in data_item['image']: #遍历多图list
image_path = self.get_image_path(image_path)
image = self.load_image(image_path)
if self.dynamic_image_size: #动态分辨率方案对每张图片切子图
image = dynamic_preprocess(image, min_num=self.min_dynamic_patch,
max_num=max(1, self.max_dynamic_patch // num_image),
image_size=self.image_size, use_thumbnail=self.use_thumbnail)
images += image
num_tiles.append(len(image))
pixel_values = [transform(image) for image in images]
pixel_values = torch.stack(pixel_values)
num_patches = pixel_values.size(0)
# 计算多图中每张图片的visual token数量
num_image_tokens = [self.num_image_token * num_tile for num_tile in num_tiles]
# internvl_chat/internvl/train/dataset.py
# 自适应分辨率逻辑
def dynamic_preprocess(image, min_num=1, max_num=6, image_size=448, use_thumbnail=False):
orig_width, orig_height = image.size
aspect_ratio = orig_width / orig_height
# calculate the existing image aspect ratio
target_ratios = set(
(i, j) for n in range(min_num, max_num + 1) for i in range(1, n + 1) for j in range(1, n + 1) if
i * j <= max_num and i * j >= min_num)
target_ratios = sorted(target_ratios, key=lambda x: x[0] * x[1])
# find the closest aspect ratio to the target
target_aspect_ratio = find_closest_aspect_ratio(
aspect_ratio, target_ratios, orig_width, orig_height, image_size)
# calculate the target width and height
target_width = image_size * target_aspect_ratio[0]
target_height = image_size * target_aspect_ratio[1]
blocks = target_aspect_ratio[0] * target_aspect_ratio[1]
# resize the image
resized_img = image.resize((target_width, target_height))
processed_images = []
for i in range(blocks):
box = (
(i % (target_width // image_size)) * image_size,
(i // (target_width // image_size)) * image_size,
((i % (target_width // image_size)) + 1) * image_size,
((i // (target_width // image_size)) + 1) * image_size
)
# split the image
split_img = resized_img.crop(box)
processed_images.append(split_img)
assert len(processed_images) == blocks
if use_thumbnail and len(processed_images) != 1:
thumbnail_img = image.resize((image_size, image_size))
processed_images.append(thumbnail_img)
return processed_images
3.2 Single Model Training Pipeline
训练细节
InternVL-2.5的训练分为三个阶段,stage 1、stage 1.5(optional)和stage 2。stage 1和stage 1.5可以理解为预训练阶段,而stage 2可以理解为指令微调阶段。
- Stage 1 - MLP Warmup(预训练):
- MLP (Multilayer perceptron) 是modality interface(模态融合层)的一种。通常,modality interface将经过encoder的视听特征visual features (audio features)与linguistic features进行融合。一般是在token层面,即可以理解为将这些非语言学特征经过modality interface转化成与linguistic token相等价的token即可输入进LLM实现多模态理解。
- 这个阶段旨在先对MLP进行专项训练,使得模态融合到达一个可以接受的地步。该阶段仅MLP的参数被训练,其他component都被冻结。
- 由训练细节观察可知,stage 1的学习率相对于stage 1.5与stage 2都要高,目的是为了加速收敛。除了26B和8B的模型包含stage 1.5,其余size的模型的预训练仅包含stage 1。通常在token-level,预训练的数据要多于质量微调数据。
- Stage 1.5 - ViT Incremental Learning (预训练可选):
- stage 1.5选择训练ViT与MLP,这个阶段主要训练了web-scale datasets中缺少的领域数据,例如:多语言OCR数据、数学图表数据。这一阶段的目的是为了提高MLP + ViT这个组合处理特定领域视觉信息的能力。据我猜测,只所以没有普及这个stage 1.5是其提升的效果并不稳定(并不是对每个size的模型都有明显提升)。并且,如果一个size的模型没有进行stage 1.5,那么并不代表其缺少一些预训练领域数据(前文提到的多语言OCR数据等),只不过没有从stage 1中拆分出来。
- 由于是接着一阶段的模型续训,于是必须要考虑到灾难性遗忘的问题(catastrophic forgetting),这也是持续学习(continue learning)领域中最关键的核心问题,在不更改模型架构的情况下,最常见的做法是data replay,即将上一阶段训练的数据采样一定的比例,与这一阶段新加入的数据进行混训,通常采用一个更小的学习率。
- Stage 2 - Full Model Instruction Tuning(指令微调):
- 在该阶段,所有component参数都被放开 - LLM、ViT、MLP。在这个阶段特别强调数据的高质量,稍有一些低质量数据都会对该阶段的性能产生负面影响。
- 采用了简单的学习率设置方式,所有component的学习率保持一致。
- 在stage 2后可以进行高质量post-training或是强化学习preference optimization。
3.3 Progressive Scaling Strategy
现象:当一个LLM与ViT一同训练时,ViT encode的视觉特征也很容易被另外的LLM所理解。
基于这个现象,InternVL团队采用不同大小的LLM去与ViT对齐训练:
- 先用小参数量的LLM去和ViT jointly training把ViT的性能提上去。
- 再将小参数量的LLM替换成大参数量的LLM。
结果:与千问72b训了1.4 trillion tokens相比,InternVL2.5-78B只训了120 billions。大概用了不到其十分之一的计算资源,即可媲美千问72b的性能。
同时代教授也分享到,因为书生是一个偏公益研究的机构,所以没有那么多训练资源。
可能这就是激发出这样高效训练策略的核心原因吧。
3.4 Training Enhancements
文章介绍了几个可以提高benchmark得分和用户体验的小tricks。
- 数据增强 - Random JPEG Compression:随机将图片进行压缩。quality level在75%到100%之间。
def simulate_jpeg_degradation(quality):
def jpeg_degrade(img):
with io.BytesIO() as output:
img.convert('RGB').save(output, format='JPEG', quality=quality)
output.seek(0) # Move the reading cursor to the start of the stream
img_jpeg = Image.open(output).copy() # Use .copy() to make sure the image is loaded in memory
return img_jpeg
return jpeg_degrade
# Define the JPEG compression quality range, pre-create all JPEG compression functions
qualities = list(range(75, 101))
jpeg_degrade_functions = {quality: simulate_jpeg_degradation(quality) for quality in qualities}
2. Loss Reweighting
背景:动态拼接是一种常用的提升训练效率的方法,在小于max token per sequence的情况下,将多条sample的tokens拼接到一条sequence中进行训练。于是,计算loss可以选择两种策略:token average和sample average
文中先阐述了一下关于loss,token average和sample average的区别。
以下为文章中给出的公式,计算整体的loss。
- 为token所在sample的token总数
- 为当前token的loss weight.
假设将两个样本拼接成一个序列,表示为 [1, 1, 1, 2, 2](其中数字代表数据索引,用于区分样本),即第一个样本包含3个token,第二个样本包含2个token。
Token averaging:将拼接后的序列视为一个新的样本,该样本共有5个token。在计算最终的损失时,每个token对损失的权重相同。因此,未拼接前的样本对损失的影响不同,包含token越多的样本对损失的影响越大。
Sample averaging:每个token对loss的权重由其原始sample的数量决定。这样,每个样本对最终损失的贡献相同,无论其包含的token数量多少,从而确保每个样本在模型训练中的影响均等。
使用token averaging时,每个token对最终损失的贡献相等,这可能导致梯度偏向包含更多tokens的回答,从而降低基准性能。相比之下,sample averaging确保每个样本对损失的贡献相等,但可能使模型偏向较短的回答,进而影响用户体验。
为了平衡回答长度(避免出现过长或者过短的回答),InternVL对于token的权重进行了一个中和(reweighting)。
可能因为我在国外呆了5年的中文表述不太好,所以将相关代码贴出来以供理解 (详细代码可看github):
# internvl_chat/internvl/train/internvl_chat_finetune.py
def len2weight(x, loss_reduction):
if x == 0:
return x
if loss_reduction == 'token':
return 1
if loss_reduction == 'sample':
return 1 / x
if loss_reduction == 'square':
return 1 / (x ** 0.5)
raise NotImplementedError(loss_reduction)
# internvl_chat/internvl/train/internvl_chat_finetune.py -> main
if data_args.use_packed_ds:
collator = partial(
packed_collate_fn,
data_collator=concat_pad_data_collator,
max_item_length=data_args.max_packed_tokens if data_args.strict_mode else 0,
micro_num=training_args.train_batch_size,
len2weight=partial(len2weight, loss_reductinotallow=data_args.loss_reduction),
loss_reduction_all_gather=data_args.loss_reduction_all_gather,
)
# internvl_chat/internvl/train/dataset_packed.py -> packed_collate_fn
for feat_idx, feat in enumerate(features):
data_index = feat.pop('data_index')
curr_cu_seqlens, curr_indexes, curr_loss_weight = PackedDataset.get_cu_seqlens_and_indexes(
data_index=data_index,
input_ids=feat['input_ids'],
labels=feat['labels'],
len2weight=len2weight,
)
# internvl_chat/internvl/train/dataset_packed.py -> get_cu_seqlens_and_indexes
def get_cu_seqlens_and_indexes(
data_index: torch.LongTensor, # (seq_len,)
input_ids: torch.LongTensor, # (seq_len,)
labels: torch.LongTensor, # (seq_len,)
len2weight: callable,
):
indexes = []
cu_seqlens = [0]
loss_weight = []
start = data_index.min()
end = data_index.max() + 1
# refer to the group IDs
for i in range(start, end):
num_tokens = (data_index == i).sum().item()
indexes.extend(list(range(num_tokens)))
# 更新累积序列长度
cu_seqlens.append(cu_seqlens[-1] + num_tokens)
assert num_tokens > 0
# 确保当前数据块的所有 data_index 都等于 i,保证数据分组的正确性
curr_data_index = data_index[cu_seqlens[-2]:cu_seqlens[-2]+num_tokens]
assert (curr_data_index == i).all(), data_index
curr_labels = labels[cu_seqlens[-2]:cu_seqlens[-2]+num_tokens]
num_effective_tokens = (curr_labels != IGNORE_TOKEN_ID).sum().item()
loss_weight.extend([len2weight(num_effective_tokens)] * num_tokens)
assert len(indexes) == data_index.size(0), f'{len(indexes)=}, {data_index.size(0)=}'
loss_weight = torch.tensor(loss_weight, dtype=torch.float32)
return cu_seqlens, indexes, loss_weight
# internvl_chat/internvl/model/internvl_chat/modeling_internvl_chat.py -> forward
if labels is not None and loss_weight is not None:
loss_weight = torch.tensor(loss_weight, dtype=torch.float32, device=labels.device)
# Shift so that tokens < n predict n
shift_logits = logits[..., :-1, :].contiguous()
shift_labels = labels[..., 1:].contiguous()
shift_weights = loss_weight[..., 1:].contiguous()
# Flatten the tokens
loss_fct = CrossEntropyLoss(reductinotallow='none')
shift_logits = shift_logits.view(-1, self.language_model.config.vocab_size)
shift_labels = shift_labels.view(-1)
shift_weights = shift_weights.view(-1)
# Enable model parallelism
shift_labels = shift_labels.to(shift_logits.device)
shift_weights = shift_weights.to(shift_logits.device)
# per token loss
loss = loss_fct(shift_logits, shift_labels)
shift_weights_sum = shift_weights.sum()
if loss_reduction_all_gather:
dist.all_reduce(shift_weights_sum, op=dist.ReduceOp.AVG)
loss = loss * shift_weights
loss = loss.sum() / shift_weights_sum
if ignore_flag:
loss = loss * 0.0
4 数据安排4.1 Dataset Configuration
不同数据集的configuration
- Data Augmentation:前文提到的JPEG compression。
- Max Tile Number:动态分辨率方案切分子图(tiles)的最大数量。
- Repeat Factor:单一dataset的迭代轮数。对于一个特定的dataset,internVL的训练过程之中最多将其迭代4轮。
4.2 Multimodal Data Packing
数据拼接方案,通过将多个样本拼接成长序列来减少填充,从而最大化模型输入序列容量的利用率。一般而言,我们通常考虑max token per sequence即可,因为视觉信息通过ViT+MLP已经转化成了visual token。但是,internVL的训练代码对其进行了更细的限定:同时限定语言学信息:max linguistic token per sequence以及视觉信息:max tiles per sequence。在implementation层面,是先判断是否满足max tiles per sequence再判断是否满足max linguistic token per sequence。
# internvl_chat/internvl/train/dataset_packed.py ->PackedDataset.find_buffer
def find_buffer(self, buffer_list, new_sample):
# NOTE: use `bisect` to search might be faster
find = False
find_idx = -1
num_images_current = new_sample['pixel_values'].size(0)
for buffer_idx, buffer in enumerate(buffer_list):
num_images_buffer = buffer['pixel_values'].size(0)
if num_images_buffer + num_images_current <= self.num_images_expected: #判断tiles
num_merged_tokens = new_sample['input_ids'].size(0) + buffer['input_ids'].size(0)
if num_merged_tokens <= self.max_packed_tokens: #判断linguistic tokens
find = True
find_idx = buffer_idx
break
if self.allow_overflow and len(buffer_list) >= self.max_buffer_size // 2:
find = True
find_idx = buffer_idx
if find:
return buffer_list.pop(find_idx)
return None
5 结语
现在业界充斥着一些观点:模型架构已经几乎固定,模型效果的好坏全靠数据质量。但是internVL这篇技术报告还是给了不少比较令人耳目一新的训练策略。作为大模型训练从业者,不能仅仅把自己定位成一个数据搬运工,即训练代码细节全然不知仅仅在数据配比上做消融,这不是未来的核心竞争力。
由于我本科在英国学的就是CS的AI track,刚入门时我酷爱读paper却很少看代码,就导致经常眼高手低,觉得自己理论很充足但是一看代码就傻眼就看不懂,觉得那些不重要。后面到了硕士,导师(教授)在每周的meeting上都会和我一起讨论代码层面上的事情(虽然那个意大利人总是会阴阳怪气我代码能力差),他称之为:make your hand dirty with code。
后续如果有时间我甚至想找一个成熟的模型,把训练框架中每一块小小的积木都深度剖析一下,走到底层才能创新。