当前位置: 首页 > java >正文

51c自动驾驶~合集12

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

#LiCROcc

性能提升44%!浙大提出LiCROcc:Radar Occ的春天来了?

语义场景补全(SSC)是自动驾驶感知中至关重要的技术,经常面临天气和照明变化的复杂性。现有策略包括融合多模态信息以增强系统的鲁棒性。雷达作为3D目标检测中重要的传感器,逐渐在自动驾驶应用中取代激光雷达,并且可以提供更鲁棒的感知替代方案。本文们专注于3D雷达在语义场景补全中的潜力,开创了跨模态细化技术,以提高对天气和照明变化的鲁棒性,并增强SSC性能。

在模型架构方面,本文提出了一种三阶段的紧密融合方法在BEV上实现点云和图像的融合框架。基于此基础设计了三个跨模态蒸馏模块—CMRD、BRD和PDD。我们的方法通过将激光雷达和相机的丰富语义和结构信息蒸馏到 radar-only(R-LiCROcc)和雷达-相机(RC-LiCROcc)的配置中,增强了性能。最后本文提出的LC-Fusion(教师模型)、R-LiCROcc和RC-LiCROcc在nuScenes-Occupancy数据集上取得了最佳性能,其中mIOU分别超过基线22.9%、44.1%和15.5%。

源码链接:​​ https://hr-zju.github.io/LiCROcc/​​​

相关工作回顾

语义场景补全(SSC)作为自动驾驶中的一项关键技术,因其能够提供详细的3D场景信息而受到了广泛关注。相机和激光雷达是用于SSC任务最普遍的传感器,每种都有其优势和局限性。相机提供了丰富的语义上下文,但缺乏深度信息,并且容易受到光照和天气条件的影响。而激光雷达提供了精确的3D几何信息,但在处理高度稀疏输入时表现不佳,并且由于密集激光雷达传感器的高成本而限制了其广泛应用。另一方面,雷达作为一种在自动驾驶中越来越受欢迎的、能够抵抗恶劣天气条件的传感器,因其车规级设计和可负担性而受到重视。尽管雷达在多样化的天气和光照条件下具有鲁棒性,但其稀疏和嘈杂的测量结果对于大规模户外场景的SSC来说是一个重大挑战。

最近的大多数研究主要集中在基于雷达的检测上。仅有少数研究探索了雷达传感器在SSC任务中的应用。然而,它们只能使用雷达预测极少数类别的占用情况或作为多模态输入的补充。此外,我们发现尽管雷达在对抗不利天气条件和光照变化方面具有固有的优势,如表I和图1所示,但基于雷达的和基于激光雷达/相机的SSC方法之间仍然存在显著的性能差距。为了解决上述挑战,在这项工作中,我们探索将雷达作为SSC的核心传感器,并设定了新的性能标准。

图片

图片

最开始我们建立了基于雷达的基线R-SSC-RS。然而由于缺乏复杂细节,仅依靠雷达传感器无法实现高度精确和鲁棒的SSC。为了进一步提高基于雷达的SSC性能,我们设计了一个相机-雷达融合网络,以有效地将RGB图像的丰富语义上下文融合到BEV空间中的雷达中。通过这种方式雷达SSC得到了显著改进。

此外,我们发现到激光雷达-相机融合在室外SSC中实现了更优的性能,如图1和表I所示,为雷达特征学习提供了宝贵的指导。因此,我们提出了一种基于融合的知识蒸馏方法,从激光雷达-相机融合网络(教师)中提取有信息量的线索,并将它们转移到基于雷达的基线RSSC-RS和雷达-相机融合网络中,从而产生了我们的方法R-LiCROcc和RC-LiCROcc。

我们对激光雷达-相机和雷达-相机融合网络采用了相同的架构。对于基于融合的知识蒸馏模块,我们结合了跨模态残差蒸馏(CMRD)、BEV关系蒸馏(BRD)和预测分布蒸馏(PDD),以分层方式强制学生模型学习教师模型的特征表示和分布。通过这个提出的基于融合的知识蒸馏模块,我们的LiCROcc仅使用雷达(RLiCROcc)实现了与基于相机的方法相当的成果。此外,LiCROcc通过结合雷达和相机输入(RC-LiCROcc)接近基于激光雷达的方法的性能,同时在不利的天气条件和夜间视觉能力方面保持了鲁棒性。

总结来说,本文的主要贡献如下:

  • 我们旨在提高雷达在语义场景补全中的性能,同时保持现实世界中的实用性,利用雷达对各种天气条件的弹性。我们还从基于激光雷达的方法中建立了基于雷达的基准,促进了基于雷达的SSC研究,并考虑了一个相机-雷达融合网络以提高性能。
  • 我们提出了一个新的框架LiCROcc,它结合了CMRD、BRD和PDD模块,分层强制学生模型学习教师模型的特征表示和分布。
  • 在大规模的nuScenesOccupancy上进行的广泛实验证明了我们提出方法的有效性。

LiCROcc详解概述

如上所述,我们构建了基于雷达的基线,并设计了雷达-相机融合网络(图2的底部)以提升基线性能。为了利用激光雷达-相机融合中详细的几何结构和点表示的指导,我们进一步使用基于融合的知识蒸馏将知识从激光雷达-相机融合网络(图2的顶部)传递到基于雷达的基线和雷达-相机融合网络。我们采用相同的架构,即多模态融合网络,来建立上述两个融合网络。

图片

多模态融合网络

多模态融合网络主要由图像分支提取图像特征、点分支编码激光雷达/雷达点,以及多模态BEV融合网络高效整合点和图像特征。

图像分支。遵循FlashOcc,我们建议将周围图像特征投影到BEV空间进行后续处理,减轻了内存开销,同时保持占用预测的高精度。图像分支主要包括三个部分:相机编码器用于图像特征、PVto-BEV投影层用于3D场景的BEV表示,以及BEV编码器用于提取包含丰富语义上下文的多尺度BEV特征(  ,其中   )。提取的多尺度BEV特征被送入BEV融合模型与点特征交互,将在下文详细说明。

点分支。不失一般性,我们采用基于BEV的SSC-RS作为我们的点分支。该分支使用两个独立分支进行语义和几何编码。带有ARF模块的BEV融合网络聚合这些分支的特征,得到最终的语义场景补全。由于其解耦设计,SSC-RS轻量且具有强大的表示能力,非常适合用作点分支。点分支接收激光雷达/雷达点云    并输出多尺度BEV特征(  ,其中   )。对于激光雷达点云,   在   的范围内。对于雷达点云,  

多模态BEV融合网络。由于3D卷积用于密集特征融合的计算负担,我们引入了一个多模态BEV融合网络,灵感来自BEV感知任务。该网络有效地结合了语义丰富的视觉BEV表示(  )和几何信息丰富的激光雷达特征或抗天气雷达特征。为了简化融合过程,我们将激光雷达或雷达点云特征与    统一。类似于,我们的BEV融合网络采用了2D卷积U-Net架构。每个残差块将输入特征分辨率减半,以与语义/补充特征保持一致。在每个后续块之前,我们使用ARF将前一阶段的    与当前阶段的    整合得到   ,然后将缩放的    通过加法融合到   。解码器通过跳跃连接将编码器压缩的特征上采样三次,每次放大两倍。最终的解码器卷积生成了SSC预测   ,其中    表示语义类别的数量。为了表示体素语义占用概率,   被重塑为   。

为了训练所提出的融合模型,我们使用交叉熵损失    来优化网络。此外,我们还使用affinity损失    和   

基于融合的知识蒸馏模块

如图2所示,我们的教师和学生模型共享相同的网络结构。由于融合和蒸馏过程都在BEV下进行,学生模型的图像分支是可选的。在这一部分,我们用    表示学生模型的四个BEV特征,用   

图片

  1. 跨模型残差蒸馏:相机和激光雷达融合特征包含丰富的语义和几何信息。与它们相比,雷达点要稀疏得多。雷达的语义信息主要来自速度测量。观察到这种差距,我们认为直接强制雷达特征模仿多模态特征的标准方法可能效果不佳,因此我们设计了一个跨模型残差蒸馏模块。具体来说,我们使用公式(3)将学生特征    投影到具有相同维度的隐藏空间   。在该空间中,我们通过最小化它们之间的余弦相似度(由公式(4)计算)来拉近学生和教师特征之间的距离,最终将    作为信息补充加回到原始的   ,这避免了与直接特征模仿方法相比,干扰雷达特征的内在逻辑。此外,雷达在天气抗性和观测范围方面具有独特的优势。我们的目标是让学生模型在保持其独特特性的同时,学习教师模型的优势,而不仅仅是简单地复制教师。基于此,我们使用ARF动态计算将    与    整合的权重。特征传输的过程如下:

    假设    是在特征图    上索引为    的特征,则CMRD损失   

其中    如果该柱上有非空非噪声标签,否则   。换句话说,我们仅在被占用的位置约束特征相似度。如图3所示,我们为    计算了    和    的   ,其中绿色虚线框显示了计算损失的细节。

  1. BEV关系蒸馏:我们采用CMRD进行特征级跨模态蒸馏,保持了学生特征的完整性,同时用教师信息丰富了它们。这一节介绍了一种旨在保持场景级几何关系一致性的机制。为此,我们采用基于余弦相似度的亲和矩阵来比较教师特征图    和学生特征图   。最初,张量    和    定义在空间    中。然后我们将这些张量转换为   

, 其中     的余弦相似度,    

其中    分别表示学生和教师网络BEV特征图的亲和矩阵。如图3所示,我们为    计算了    和    的   ,其中灰色虚线框显示了计算损失的细节。为了减轻计算负担,我们将所有不同尺度的BEV特征调整为较小的分辨率,然后计算   。值得注意的是,BRD仅用于对学生模型的雷达-相机融合进行蒸馏。

  1. 预测分布蒸馏:我们的工作引入了一种新颖的知识蒸馏方法,利用KL散度。具体来说,我们计算由教师和学生模型预测的概率    上的KL散度,其中   

其中    是学生模型的预测概率分布,  

整体损失函数

在训练阶段,我们采用多任务训练策略,以有效指导各个组件。对于3D语义场景补全,我们使用    损失。为了增强蒸馏过程,我们结合了三个蒸馏组件:   和   。此外,我们还保留了SSC-RS中的语义(  )和占用(  )损失,以监督特征点云提取。总体损失函数表示如下:

其中    和   ​

实验分析

在本节中,我们将详细介绍评估数据集和指标、实施详情,以及与最先进方法的性能比较。此外,我们还进行了消融研究,以证明申报融合模块的有效性和蒸馏模块。最后,我们提供了实验来消除观察距离的影响和雷达在语义场景完成任务方面的独特优势。

实验细节

对于激光雷达输入,我们将10个激光雷达扫描合并为一个关键帧。ResNet50作为图像主干来处理输入分辨率为256×704的相机图像。在训练期间,我们将点云投影到相机视图上,以提供LSS的深度监督。对于雷达输入,我们采用CRN中的预处理过程,使用汽车上的5个雷达传感器拼接雷达扫描。对于数据增强,我们对图像随机应用水平和垂直翻转以及裁剪。点云通过在x轴和y轴上随机翻转进行增强。我们使用AdamW优化器,权重衰减为0.01,初始学习率为2e-4。我们使用余弦学习率调度器,在前500次迭代中进行线性预热。所有实验都在8个NVIDIA A100 GPU上进行,总批量大小为32,训练24个周期。

定量结果

表I展示了与SOTA的比较结果。与所有先前方法相比,我们的LiCROcc在相同配置下取得了最佳性能。例如,我们的激光雷达-相机融合模型LCFusion显示出显著的改进,与基线(M-CONet)相比,mIoU增加了23%,IoU增加了18%。同时,LC-Fusion在mIoU和IoU得分上分别比PointOCC提高了3.3%和2.3%,这强调了我们提出的多模态BEV融合的有效性。

为了全面评估我们提出的方法的有效性,我们修改了几种现有的基于激光雷达和多模态方法(CONet [4],SSC-RS,PointOcc和CoOCC),以适应雷达输入,作为我们的比较。如表I的第二部分所示,我们的R-LiCROcc在mIoU得分上超过了次好的方法(PointOcc)和基线(R-SSC-RS)13.3%,证明了我们提出的基于融合的知识蒸馏的有效性。我们发现R-LiCROcc的IoU得分略低于PointOcc。我们解释说,这可以归因于PointOcc在三个平面上投影特征并使用更大的模型,这对于占用预测可能更有利。对于雷达-相机融合,我们以CONet和CoOCC作为基线。结果显示在表I的第三部分,表明我们提出的雷达-相机融合版本RC-Fusion已经达到了与这些基线相当的性能。提出的基于融合的知识蒸馏进一步提高了性能,mIoU和IoU分别提高了1.5和0.8。我们还提供了可视化结果,在图4中展示了我们的RC-LiCROcc和R-LiCROcc如何实现更完整的场景补全和更精确的目标分割。

图片

消融实验

我们进行了一系列实验来验证所提出的模块以及雷达作为语义场景补全任务传感器的潜力。所有实验都在相同的训练配置下进行,并根据nuScene-Occupancy [4]验证数据集进行评估。

  1. 融合模块的效果: 我们研究了在第III-B节中提出的多模态BEV融合网络中不同融合阶段的影响。相应的结果显示在表II中。"Stages=0"意味着仅使用点云作为输入,这作为基于点的基线。从表II中,我们可以看到多阶段融合策略在不同尺度上融合BEV特征,并有效提高了语义场景补全的准确性。

图片

  1. 蒸馏模块的效果: 在本节中,我们深入研究了我们提出的基于融合的知识蒸馏中不同蒸馏组件的各自贡献。详细的结果在表III中说明。我们通过将它们纳入两个不同的配置:R-LiCROcc(表III的第一部分)和RC-LiCROcc(表III的第二部分),系统地评估了这些模块的影响。

图片

表III的两部分结果都表明CMRD、BRD和PDD组件显著增强了性能。其中,PDD在跨模态知识蒸馏中具有最关键的作用,为R-LiCROcc贡献了7.6%的mIoU改进,为RC-LiCROcc贡献了4.9%的mIoU改进。

  1. KD的视觉场优势: 雷达的固有能力是能够穿透物体并绕过前景障碍物,这使其比激光雷达和相机传感器提供了更广的视野。然而,雷达点云的稀疏性随着距离的增加而增加,这对于SSC特别不利,如表IV的第2行和第3行所示。

图片

为了进一步分析LiCROcc带来的改进,我们进行了统计分析,以评估系统在不同距离范围内对语义场景补全的有效性,详细见表IV。我们分别在[0m, 20m]、[20m, 30m]和[30m, 50m]的语义场景补全中测量了教师模型、学生模型和R-LiCROcc的IoUs和mIoUs。表IV揭示了知识蒸馏(KD)显著增强了学生模型的性能,特别是在短距离区域。有趣的是,我们发现当从激光雷达-相机融合到基于雷达的模型执行KD时,远程区域的mIoU得分改进远小于近程和中程区域。这一观察表明,由于其相对较短的视觉范围,激光雷达-相机融合的优势随着距离的增加而丧失。值得注意的是,教师和学生模型在远程区域的性能都严重下降,特别是在mIoU得分上。例如,教师模型在20米内比RC-LiCROcc高出10.96 mIoU。然而,当范围在[30m, 50m]时,这一优势急剧下降到3.76点(几乎减少了65%)。

  1. 雷达的天气鲁棒性: 本研究评估了雷达在各种天气条件下的性能。详细结果在表V中揭示了模型的性能随天气场景(晴朗的白天、雨天、夜晚和雨夜)的变化而波动。

图片

首先,如表V所示,三种传感器类型的天气属性显示出不同程度的鲁棒性。雷达的mIoU从晴朗的一天到雨夜仅下降了3.25,而激光雷达和相机的mIoU分别下降了10.33和10.46点。这表明雷达对不利天气和照明条件最为弹性。特别是,在晴朗的白天,教师模型在mIoU得分上比R-LiCROcc高出16.32,比RC-LiCROcc高出7.43。然而,在雨夜条件下,这种优势缩小到7.95和5.26,主导性能分别下降了51.3%和29.2%。此外,很明显nuScenes数据集中的雨并不特别大,导致对激光雷达点云的影响没有预期的那么显著。在更广泛的天气条件下检查雷达性能是我们未来工作的重点。

在晴朗的白天条件下,蒸馏效果带来了最佳性能。R-LiCROcc模型与学生模型相比,在IoU上提高了2.8%,在mIoU上提高了13.8%。同样,RC-LiCROcc模型在IoU上增加了3.2%,在mIoU上增加了10.3%。这种增强归因于教师模型在晴朗条件下的最佳性能。相反,在雨天和夜晚,激光雷达和相机的能见度受到损害,导致学生模型的增强效果不那么明显。事实上,R-LiCROcc模型在雨天的性能略有下降。​

结论

在本文中,我们探讨了雷达在语义场景补全(SSC)任务中的应用。我们首先开发了一个融合网络,该网络整合了点云和图像,并辅以三个蒸馏模块。通过利用雷达的优势并在SSC任务上增强其性能,我们的方法在不同设置下取得了优异的成果。天皓智联 开发板商城 视觉等相关设备

#MARS

纽约大学最新MARS数据集,支持多agent、多次穿越和多模态 !

大规模数据集推动了基于人工智能的自动驾驶车辆研究的近期进展。然而,这些数据集通常是从单一车辆一次性通过某个地点收集的,缺乏多代理交互或对同一地点的多次穿越。这类信息可能导致自动驾驶车辆的感知、预测和规划能力的变革性提升。

为了弥补这一差距,作者与自动驾驶公司 May Mobility 合作,推出了MARS数据集,该数据集统一了支持多代理、多次穿越和多模态自动驾驶车辆研究的环境。更具体地说,MARS是通过一队自动驾驶车辆在特定地理区域内行驶时收集的。每辆车都有自己的路线,不同的车辆可能会出现在附近的位置。

每辆车都配备了激光雷达和全景RGB摄像头。

作者在MARS中精心策划了两个子集:一个促进多辆车同时出现在同一地点的协作驾驶,另一个通过多辆车异步穿越同一地点来实现记忆回顾。

作者在地点识别和神经重建方面进行了实验。更重要的是,MARS引入了新的研究机会和挑战,如多次穿越的3D重建、多代理感知和无监督物体发现。

作者的数据和代码可以在https://aitce.github.io/MARS/找到。

1 Introduction

自动驾驶技术有望从根本上提高道路安全性和交通效率,近年来通过人工智能技术取得了显著进展。大规模、高质量的实时数据对人工智能驱动的自动驾驶车辆(AVs)提高其感知和规划能力至关重要[1, 15]:AVs不仅可以从标注数据集中学习检测目标[16],还可以基于过去的驾驶记录生成数字孪生,以创建安全关键情景[17]。

开创性的KITTI数据集[1]为检测和跟踪等任务设立了最初的基准。自其推出以来,已有许多数据集被提出以促进自动驾驶的发展;见表1。

图片

两个具有代表性的数据集是nuScenes[8]和Waymo数据集[9],它们引入了从相机和测距传感器收集的多模态数据,提供了360度全景视野的场景理解。这些数据集将关注点从KITTI的单目相机转移开,受到了视觉和机器人学领域的广泛关注。

现有的驾驶数据集通常关注地理和交通多样性,但没有考虑到两个实际维度:多代理(协作)和多遍历(回顾)。协作维度强调了位于同一空间区域内的多辆车之间的协同作用,促进它们在感知、预测和规划方面的合作。回顾维度使车辆可以通过利用之前访问同一地点的视觉记忆来增强其3D场景理解。融合这些维度可以解决在线感知的感测能力有限和离线重建视角稀疏等问题。然而,现有的数据集通常是由单个车辆在一次特定地理位置的遍历中收集的。为了推进自动驾驶车辆的研究,尤其是在协作和回顾维度上,研究界需要一个更全面的、真实驾驶场景下的数据集。为了填补这一空白,作者推出了Open MARS 数据集,它提供了多代理、多遍历和多模态记录,如图1所示。所有记录都来自May Mobility1在密歇根州安娜堡运行的自动驾驶车辆。多代理。作者部署了一支自动驾驶车队在一个指定的地理区域内导航。这些车辆可以同时处于同一地点,允许通过车辆间通信进行协作3D感知。

图片

多遍历。作者在相同的空间区域内捕获了多次遍历,这些遍历在不同的光照、天气和交通条件下进行。每次遍历可能遵循独特的路线,覆盖不同的驾驶方向或车道,从而产生多条轨迹,提供了3D场景的多样化视觉观察。多模态。作者为自动驾驶车辆配备了具有360度全景视野的RGB相机和激光雷达。这套全面的传感器套件能够实现多模态和全景场景理解。

作者在位置识别和神经重建方面进行了定量和定性实验。更重要的是,MARS为视觉和机器人学社区引入了新的研究挑战和机遇,包括但不限于多代理协作感知和学习、重复遍历下的无监督感知、持续学习和多代理或多遍历的神经重建及新颖视图合成。

2 Related Works

自动驾驶数据集。 高质量的数据集对推进人工智能驱动的自动驾驶研究至关重要[18, 19, 8]。开创性的KITTI数据集在机器人感知和地图绘制领域引起了广泛关注。从那时起,大量数据集被提出,通过解决多模态融合、多任务学习、恶劣天气和密集交通等挑战,推动了该领域的发展。近年来,研究行人提出多智能体协作以摆脱单一智能体感知的限制,例如频繁的遮挡和远距离稀疏性。以前在整理多智能体数据集方面的努力通常受到模拟环境的限制[33, 34]。最近的V2V4Real[13]支持现实世界中的车辆间协同目标检测和跟踪,但双相机设置不足以进行环视感知。另一个相关数据集Ithaca365[12],在不同光照和天气条件下对同一路线的重复穿越进行记录,但只用前视相机收集数据。一些工作收集多穿越数据用于地图变化,如Argoverse 2数据集[4],而一些近期工作基于Argoverse 2建立3D重建方法或模拟器[35, 36]。

还有几项工作专注于长期视觉定位[37],例如牛津RobotCar数据集[38]和CMU Seasons数据集[39]。然而,这些数据集没有考虑多智能体驾驶的情景。为了填补这一空白,作者的MARS数据集提供了具有全景相机视角的多智能体、多穿越和多模态驾驶记录;见表1。值得注意的是,May Mobility车队的持续和动态运营使作者的MARS数据集在规模和多样性方面脱颖而出,具有单个地点数百次穿越的记录,并支持多达四辆车的协同驾驶,从而创下了穿越次数和智能体数量的记录。

视觉地点识别。 在计算机视觉和机器人学领域,视觉地点识别(VPR)具有重要意义,它基于视觉输入实现特定地点的识别[40]。具体来说,VPR系统通过将给定的 Query 数据(通常是图像)与现有的参考数据库进行比较,并检索与 Query 最相似实例来工作。对于在GPS不可靠环境中运行的基于视觉的机器人,这种功能至关重要。VPR技术通常分为两类:传统方法和基于学习的方法。传统方法利用手工制作的特征[41, 42]生成全局描述符[43]。然而,在实际应用中,_外观变化_和_有限视角_会降低VPR性能。为了解决_外观变化_的挑战,基于学习的方法利用深度特征表示[44, 45, 46]。除了基于图像的VPR,还提出了基于视频的VPR方法[47, 48, 49],通过视频剪辑实现了更好的鲁棒性,缓解了_有限视角_的问题。此外,CoVPR[50]引入了协同表示学习用于VPR,在多智能体协作与地点识别之间架起了桥梁,并通过利用合作者的信息解决了_有限视角_的问题。除了2D图像输入,PointNetVLAD[51]探索基于点云的VPR,为地点识别提供了一个独特的视角。在本文中,作者评估了单一智能体VPR和协同VPR。

自动驾驶中的NeRF。 神经辐射场(NeRF)[52]在无边界驾驶场景中最近受到了很多关注,因为它不仅促进了高保真神经模拟器[17]的发展,还实现了对环境的高分辨率神经重建[53]。关于新颖视图合成(NVS),研究行人已经解决了可扩展的神经表示与局部块[54, 55]、具有组合场的动态城市场景解析[56, 57]以及具有目标感知场的全景场景理解[58, 59]等挑战。关于神经重建,研究行人已经实现了基于激光雷达点云和图像输入的体面重建[60, 61]。同时,在无需依赖激光雷达的多视图隐式表面重建方面也做了许多努力[53]。基于NeRF的现有方法受到有限视觉观察的限制,通常依赖于沿狭窄轨迹收集的稀疏相机视角。利用额外的相机视角(无论是来自多个智能体还是重复穿越)丰富视觉输入并提高NVS或重建性能,还有很大的潜力尚未挖掘。

3 Dataset Curation

Vehicle Setup

表2:每辆车的May Mobility传感器套件规格

图片

图2:用于数据收集的车辆平台传感器设置

图片

传感器设置。_May Mobility_的车队包括四辆丰田塞纳,每辆车上都安装有一个激光雷达、三个窄角度RGB相机、三个广角度RGB鱼眼相机、一个IMU和一个GPS。这些传感器具有不同的原始输出频率,但所有传感器数据最终都会同步采样到10Hz。为了节省存储空间,相机图像会被降采样。这些传感器的详细规格列于表2中。一般来说,激光雷达位于车辆前部顶部。三个窄角度相机位于车辆的前方、前左方和前右方。三个鱼眼相机位于车辆的后部中央、左侧和右侧;见图2。IMU和GPS位于车辆顶部中央。这些传感器的显式外部参数以旋转和平移的形式表示,将传感器数据从其自身的传感器坐标系变换到车辆的自坐标系。对于每辆车上的每个相机,作者提供了相机的内在参数和失真系数。失真参数是通过AprilCal校准方法[62]推理得出的。

坐标系。有四个坐标系:传感器坐标系、自坐标系、局部坐标系和全局坐标系。传感器坐标系代表一个以单个传感器中心为原点的坐标系。自坐标系代表一个以自车后轴中心为原点的坐标系。局部坐标系代表一个以自车当日轨迹起点为原点的坐标系。全局坐标系是世界坐标系。

Data Collection

目前,May Mobility专注于微服务交通,在各个方向和顺序上运行固定路线的穿梭车辆。全程超过20公里,涵盖住宅、商业和大学校园区域,在交通、植被、建筑和道路标记方面具有多样化的环境。车队每天在下午2点到8点之间运营,因此涵盖了各种光照和天气条件。总的来说,May Mobility独特的运营模式使作者能够收集多遍历和多代理自动驾驶数据。

多遍历数据收集。作者在驾驶路线上总共定义了67个位置,每个位置覆盖一个直径为50米的圆形区域。这些位置涵盖了不同的驾驶场景,如交叉口、狭窄街道和长直路,以及各种交通条件。每天在不同时间,每个位置都会从不同方向进行遍历,确保对这一区域在物理和时间上的全面感知。作者通过车辆的GPS位置确定它是否正在穿越目标位置,并在车辆位于50米半径区域内时收集数据。遍历被过滤,使得每次遍历的时长介于5秒到100秒之间。

多代理数据收集。作者数据集的一个亮点是,作者提供了真实世界的同步多代理协同感知数据,实现了极其详细的空间覆盖。根据车辆的GPS坐标,作者提取了30秒的场景,在这些场景中,两辆或更多的自主车辆在9秒以上的时间里彼此距离不足50米,集体在同一时间从不同角度提供对同一区域的覆盖性感知。对于遭遇持续时间不足30秒的场景,将遭遇部分置于30秒持续时间的中心,前后分别填充相等时间的非遭遇部分(例如,20秒的遭遇部分通过在前后各增加5秒扩展为一个30秒的场景)。这种遭遇可以在地图的任何地方发生,构成了如图7所示的沿直线道路尾随和交叉口相遇等场景。作者的方法还确保了场景中的至少一辆车辆在30秒内行驶超过10米。

图片

Dataset Statistics

图4:多穿越子集统计。

图片

图5:每个地点的穿越次数和帧数。

图片

图3:多代理子集统计。

图片

图6:日景和夜景的比例。

图片

多穿越子集包含了从2023年10月4日至2024年3月8日共26个不同天数的数据,其中4天有雨。作者总共收集了5,757次穿越,包含每个摄像头超过140万帧的图像以及360度激光雷达点云数据。在67个地点中,有48个地点超过20次穿越,23个地点超过100次穿越,6个地点超过200次穿越。平均每次穿越含有250帧(25秒),大多数穿越包含100到400帧(10到40秒)。所有地点穿越和帧的具体分布分别展示在图4和图5中。多代理子集包含了从2023年10月23日至2024年3月8日共20个不同天数的数据。作者收集了53个持续30秒的场景,每个场景稳定地包含297到300帧,总计超过15,000帧的图像和激光雷达点云数据。在53个场景中,52个涉及两辆车,1个涉及三辆车。每对自车之间的距离在每一帧都进行了分析。分布表明,大多数遭遇发生在两辆车彼此距离小于50米的情况下,如图3所示。

4 Benchmark Task and Model

Place Recognition

问题定义。作者考虑一个由M张图像组成的 Query 集和一个由N张图像组成的参考数据库。在这个任务中,目标是给定中的,找到中的,使得和在同一位置捕获。

评估指标。作者采用K位置的召回率作为VPR的评估指标。对于一个 Query 图像,作者选择与和之间Top-K余弦相似度的K个参考图像。如果选出的图像中至少有一个是在

基准模型。作者采用NetVLAD [44],PointNetVLAD [51],MixVPR [45],GeM [63],Plain ViT [64],和CoVPR [50]作为基准模型。

  • NetVLAD 由基于CNN的主干网络和NetVLAD池化层组成。NetVLAD用可学习的软分配替代了VLAD [43]中的硬分配,以提取的特征作为输入,生成全局描述符。
  • MixVPR 由基于CNN的主干网络和特征混合器组成。将主干网络的输出展平为,然后使用行和列的MLP馈送到特征混合器,展平为单个向量,并进行归一化。
  • PointNetVLAD 由主干网络、NetVLAD池化和MLP组成。作者将主干网络的输出维度从1024减少到256,并省略了最后的MLP层以进行有效计算。
  • GeM 由基于CNN的主干网络和GeM池化组成。GeM池化定义为,其中是图像块特征,这里作者选择p=3。
  • Plain ViT[64] 由标准的 Transformer 编码器层和cls Token 上的归一化组成。
  • CoVPR[50] 由VPR模型和相似性正则化融合组成。VPR模型为 ego 代理和合作者生成描述符,融合模块将它们融合为一个单一的描述符。

Neural Reconstruction

问题定义。根据可用的遍历次数,作者将重建任务分为两种场景。第一种是单次遍历(动态场景重建),输入是一个图像序列,这些图像是一次遍历视频捕获的。目标是重建包括移动目标在内的逼真场景视图。第二种是多遍历(环境重建),输入是同一场景的图像序列集合。在此任务中的目标是重建环境并移除动态目标。

评估指标。基于早期工作中使用的方法[65],作者在动态重建的实验中使用了PSNR、SSIM和LPIPS指标。PSNR定义为,通过比较最大像素值和均方误差来评估图像质量。SSIM通过计算,衡量合成图像和真实图像之间的相似性,同时考虑均值、方差和协方差。LPIPS与前面两种指标不同,它使用预训练的神经网络模型来评估两张图像之间的感知相似性。

基准模型。对于单次遍历任务,作者采用EmerNeRF[66]和PVG[65]作为基准模型。此外,为了比较,作者还进行了使用iNGP[67]和3DGS[68]的实验,这些模型并不直接针对这个问题。关于多遍历重建,没有专门为这一任务设计的算法。因此,作者采用iNGP作为基本模型。此外,为了增强模型移除动态目标的能力,作者还测试了RobustNeRF[69]和结合了Segformer[70]的iNGP。

  • 单次遍历:动态场景重建。
  • 基于神经场,EmerNeRF是一种自监督方法,有效学习动态驾驶场景的空间-时间表示。EmerNeRF通过将场景分解为静态和动态场来构建混合世界表示。通过利用涌现流场,可以进一步聚合时间信息,提高动态组件的渲染精度。将2D视觉基础模型特征提升到4D时空空间,增强EmerNeRF的场景语义理解。
  • 基于3DGS,PVG通过向每个高斯点引入周期性振动来模拟这些点的动态运动。为了处理目标的显现和消失,它还为每个点设定了时间峰和生命周期。通过学习这些参数以及高斯函数的均值、协方差和球面谐波,PVG能够以节省内存的方式重建动态场景。
  • 多遍历:环境重建。
  • RobustNeRF替换了原始NeRF的损失函数以忽略干扰物,在作者的案例中,作者认为动态目标是干扰物。此外,RobustNeRF在其损失估计器中应用了一个盒状核,以防止高频细节被识别为异常值。
  • SegNeRF利用预训练的语义模型SegFormer[70]来移除可移动目标。

5 Experimental ResultsVisual Place Recognition

数据集详情。作者在多遍历和多功能代理数据上进行了VPR任务的实验。在多遍历情况下,编号大于或等于52的交叉口用于测试。在多功能代理设置中,编号大于或等于50的场景用于测试。输入图像被调整至大小,输入点云被下采样至1024个点。

实施细节。作者在第4节提到的模型上评估作者的数据集,其中CoVPR [50]用多功能代理数据评估,其他所有模型用多遍历数据评估。Backbone 网络在ImageNet1K [71]上进行预训练。作者为NetVLAD和CoVPR使用ResNet18 [72]作为 Backbone 网络,为MixVPR和GeM使用ResNet50 [72],为PointNetVLAD使用PointNet [73]。基于NetVLAD的方法中的簇数量为32。模型使用Adam [74]优化器进行训练,PointNetVLAD的学习率为1e-3,其他的学习率为1e-4,衰减率为1e-4,直至收敛。NetVLAD-based方法的批处理大小为20,其他方法的批处理大小为10。

结果讨论。定量结果在表3中展示。尽管GeM在池化方法中具有轻量级特点,但与使用较小 Backbone 网络的NetVLAD相比,其性能不佳。尽管ViT的 Backbone 网络比ResNet更强,但在没有特定任务池化方法的情况下,在VPR中的表现较弱。MixVPR实现最佳性能,因为其特征混合机制提供了更丰富的特征。PointNetVLAD利用点云,在输入尺寸较NetVLAD更小的情况下获得了更好的性能。在多功能代理数据的背景下,CoVPR一致性地优于其单代理对应物。定性结果在图8中描绘。作者的数据集包含白天和夜晚的场景,在各种天气条件下,如晴朗、多云和雨天。困难示例源自于夜晚场景和受雨水或逆光影响的摄像机。

图片

Neural Reconstruction 2024-06-17-04-31-34

数据集细节. 在作者单次穿越动态场景重建的实验中,作者选择了10个不同的地点,每个地点一次穿越,旨在捕捉和表现复杂的城市环境。对于作者的多次穿越环境重建实验,作者总共选择了50次穿越。这包括10个独特的地点,每个地点5次穿越,使作者能够捕捉光照条件和天气的变化。

实施细节. 在所有重建实验中,作者使用三个前置摄像头中的100张图像以及激光雷达数据作为每次穿越的输入。单次穿越实验: iNGP和EmerNeRF模型都使用Adam [74]优化器进行10000次迭代训练,学习率为0.01,权重衰减率为0.00001。对于EmerNeRF,作者利用来自DINOv2 ViT-B/14 [75]基础模型的dino特征。该模型中使用的估计器是PropNet,包括线性视差和均匀采样。对于3DGS和PVG,作者将训练迭代次数设置为20000,学习率与原作[65]中的相同。作者将3DGS视为PVG方法的一个特例,运动振幅为,寿命为无限,作者在实验中将其设置为。_多次穿越实验:_ 作者在这个实验中的NeRF模型是带有图像嵌入和DINO特征的iNGP [67]。对于RobustNeRF,作者实现了原文[69]中描述的鲁棒损失和 Patch 样本。在SegNeRF中,作者应用了在Cityscapes [76]数据集上训练的SegFormer-B5 [70]模型。在SegFormer模型的19个类别中,作者将'人'、'骑车人'、'汽车'、'卡车'、'公交车'、'火车'、'摩托车'和'自行车'识别为动态类别,并为它们生成 Mask 。

图片

结果讨论。单次穿越实验:根据表4中呈现的结果,PVG获得了更高的SSIM分数和更低的LPIPS分数,表明其增强了结构细节。PVG这种卓越性能可能归功于其灵活的高斯点设置,

6 机会与挑战

作者的MARS数据集用多智能体驾驶记录引入了新的研究机会,以及大量对同一地点的重复穿越。作者概述了几项有前景的研究方向及其相关挑战,为未来的研究开辟了新途径。

3D重建。 重复穿越可以产生一个3D场景的众多相机观测,便于在多视点重建中进行对应搜索和捆绑调整。作者的数据集可以用于研究仅用相机的多次穿越3D重建,这对于自主地图绘制和定位至关重要。主要挑战是处理重复穿越随时间变化的外观变化和动态物体。例如,一项近期工作,3D高斯映射[77],利用多次穿越的一致性将场景分解为高斯溅射表示的3D环境图和2D物体 Mask ,无需任何外部监督。

神经仿真。 多代理和多遍历记录对于构建能够重建和模拟场景及传感器数据的神经仿真器非常有价值。高保真度仿真对于开发感知和规划算法至关重要。主要挑战在于复制现实世界的动态和可变性,例如建模动态目标的行为、环境条件以及传感器异常,确保模拟数据提供一个全面且真实的测试平台。

例如,一项近期工作提出了一种神经场景表示方法,它可扩展到大规模动态城市区域,处理从多次遍历中收集的异构输入数据,并显著提高渲染速度[36]。另一项同时进行的工作提出了一种多级神经场景图表示,它可以扩展到成千上万的图像,来自数十个包含数百个快速移动目标的序列[35]。

无监督感知。 在无监督的3D感知中利用场景先验具有重大价值,特别是在多次遍历驾驶场景中,先前访问的丰富数据可以增强在线感知。这种方法不仅通过随时间积累的知识促进对环境的更深入理解,而且无需使用手动标注的训练即可实现无监督感知。

7 Conclusion

作者的MARS数据集在自动驾驶车辆研究方面代表了显著的进步,它通过整合多代理、多遍历和多媒体维度,超越了传统的数据收集方法。

MARS为探索3D重建和神经模拟、协作感知和学习、具有场景先验的无监督感知等开辟了新的途径。

未来的工作包括为在线感知任务提供标注,如在多代理和多遍历情境中的语义占用预测。

作者坚信MARS将在人工智能驱动的自动驾驶车辆研究中建立一个新的基准。

#MVPBEV

所有指标均优于SOTA!MVPBEV:具有可控和泛化性的BEV环视生成

这项工作旨在解决从给定的鸟瞰图(BEV)语义信息的文本提示中生成多视角RGB图像的问题。与以往忽视布局一致性、缺乏处理详细文本提示的能力或无法泛化到未见视角的方法不同,MVPbev通过两阶段设计同时生成不同视角的跨视角一致图像,从而在测试时实现目标级控制和新颖视角的生成。具体来说,MVPbev首先利用相机参数将给定的BEV语义信息投影到透视图中,使模型能够泛化到未见视角。然后,引入了一个多视角注意力模块,其中采用了特殊的初始化和去噪过程,以明确强制跨视角单应性变换下重叠视图之间的局部一致性。最后但同样重要的是,MVPbev通过优化预训练的文本到图像的扩散模型,进一步实现了测试时的实例级可控性。在NuScenes数据集上进行了广泛的实验,结果表明,提出的方法能够从数千个训练样本的文本描述中生成高分辨率的光照真实感图像,在各种评估指标下均优于最先进的方法。此外,我们还借助新颖的评估指标和全面的人为分析,进一步展示了我们的方法在泛化性和可控性方面的进步。

当前领域背景

多视图图像对自动驾驶任务非常有益。如今,包括安装在前部和侧部的多视图摄像头已成为大型驾驶数据集(如NuScenes、Argoverse和Waymo)中的基本要求。通常,来自多个摄像头视角的图像会被感知并进一步以鸟瞰图(BEV, Bird-Eye-View)的形式表示,随后进行预测和规划等下游任务。直观上,BEV提供了对现实世界的直观接口,因此具有更高的可解释性,对高级建模和决策制定非常有益且实用。

尽管在自动驾驶任务中非常重要,但可靠的BEV表示在训练阶段需要大量的数据,这些数据的获取或标注可能非常耗时。解决这一数据问题的一个直观方法是使用生成模型来获取多样化的视角RGB图像及其对应的BEV语义信息。与对应的视角RGB图像或语义信息相比,多样化且合理的BEV语义信息在参数化表示的帮助下更容易以现实的方式进行模拟。因此,假设已知BEV语义信息而非视角RGB图像是自然而实用的。接下来的问题就是如何利用已知的BEV语义信息生成跨视角且在视觉和语义上保持一致的逼真RGB图像。

为此,本文提出了一种新颖的两阶段方法MVPbev,旨在通过明确执行跨视角一致性来生成具有给定BEV语义和文本提示的可控多视角RGB图像(见图1)。与现有工作中缺乏测试时泛化能力的方法不同,MVPbev进一步允许在测试时更改视角和详细的文本提示,从而在无需额外训练数据的情况下,通过人工分析获得令人满意的性能。为实现这一目标,MVPbev包括两个阶段,即视角投影和场景生成阶段。前一阶段根据相机参数将给定的BEV语义转换为多个视角视图。一方面,它通过明确的几何变换强制跨视角的全局一致性。另一方面,这种设计将两个阶段解耦,使第二阶段能够更好地捕获与视角无关的属性。MVPbev的第二阶段从一个预训练的稳定扩散(SD)模型开始。通过明确引入跨视角一致性模块,结合我们的噪声初始化和去噪过程设计,它能够生成多视角视觉上一致且逼真的图像,特别是在重叠的视野(FOV)中。为了进一步提高测试时对象的泛化能力,我们的MVPbev分别处理前景实例和背景布局,从而在推理过程中实现更好的可控性。

在NuScenes上验证了我们的想法,并遵循了标准的数据集划分。与那些专注于改进下游任务或语义一致性的方法不同,我们进行了额外的大量人工分析,特别是针对多个视角重叠视野中的视觉一致性、测试时视角和文本提示的变化。证明了提出的方法不仅提供了更好的测试时可控性和泛化能力,而且还生成了高质量的跨视角RGB图像。简而言之,贡献可以概括如下:

• 一种新颖的多视角图像生成方法,能够仅使用数千张图像作为训练数据,从BEV语义中生成语义和视觉上一致的视角RGB图像。

• 一种更可控且可扩展的算法,能够生成逼真的视角RGB图像。

• 在大型驾驶数据集上实现了最先进的性能,并进行了全面的人工分析。

相关工作

图像编辑和生成是计算机视觉中的热门话题。尽管这可能与大量文献相关,但这里将重点关注两个研究方向,即条件图像生成和新视角图像合成,因为它们密切相关。

条件图像生成:生成模型,如高斯混合模型和贝叶斯网络,一直是机器学习和计算机视觉领域长期的研究问题,因为它们能够解释复杂的数据分布。特别是,图像生成模型不仅对无监督特征学习具有重要意义,而且还支持图像编辑等应用。随着深度学习技术(如自回归模型、变分自编码器(VAEs)和生成对抗网络(GANs))的兴起以及海量数据的出现,我们观察到了质量极高的逼真图像。其中,条件GANs已被广泛研究,考虑了包括离散标签、文本和图像在内的各种约束。最近,稳定扩散模型被广泛用于根据文本描述生成详细的图像。与现有技术相比,它们不仅展示了最先进的图像生成质量,而且在基础模型的帮助下展现了出色的泛化能力。随后,Controlnet通过允许多样化的条件控制(如深度、语义或草图),在保持原有鲁棒性的同时,大大提高了扩散模型的整体性能。尽管取得了令人印象深刻的进展,但多视角或跨视角文本到图像的生成仍然面临计算效率和跨视角一致性的问题。

为此,MVDiffusion提出了一种新颖的对应关系感知注意力模块,该模块能够从文本中创建多视图图像,并保持全局对应关系。尽管MVDiffusion能够提供良好的多视角RGB图像,但它无法推广到更剧烈的视角变化或更小的重叠区域。可能包括BEVGen、BEVControl和MagicDrive在内的并行工作与我们的工作最为接近。第一个工作通过采用具有跨视角注意力的自回归转换器,基于BEV语义生成了多视角视觉一致的图像。而后两个工作则结合图像草图/语义和文本,利用跨视角跨对象注意力来更专注于单个内容的一致性。然而,现有的工作都没有实现测试时的泛化能力,例如视角变化或详细的实例级文本提示。它们也没有对图像生成质量进行人工分析。相比之下,我们提出了同时利用全局和局部一致性来增强语义和视觉连贯性的方法,并结合我们的无训练目标控制方法来加强详细的实例级控制。此外,我们还提供了全面的人工分析,以更可靠地证明我们方法的有效性。

新视角图像合成:新视角图像合成方法大致可分为基于几何的方法和基于学习的方法两大类。前者试图首先估计(或伪造)近似的基础三维结构,然后对输入图像中的像素应用一些变换以产生输出。而后者则认为新视角图像合成从根本上说是一个学习问题,因为否则它将是严重缺乏约束的。最近,属于第二类的神经辐射场(NeRF)在特定场景的新视角图像合成方面表现出了令人印象深刻的性能,它通过神经网络隐式地编码volumetric密度和颜色。从小规模场景开始,也提出了场景级NeRF,如Block-NeRF,从而通过重建大规模环境来支持重要的用例,如自动驾驶和航空勘测。相比之下,我们的方法将BEV语义和文本描述作为输入,并输出多视角RGB图像。

MVPbev方法介绍

本文的方法旨在根据给定的像素级BEV语义对应关系,从文本提示中生成多视角图像。具体来说,将BEV语义表示为,其中自车位于中心。、和分别是B的高度、宽度和语义类别数量。论文的目标是在M个虚拟相机视角下生成一组分辨率为𝐻×𝑊的透视RGB图像,或特别地表示为{𝐼𝑚}𝑚。其中,第m个透视图像被称为,其中m = {1, ..., 𝑀}。特别地,假设第m个相机的内参、外旋和外平移是已知的,并分别用、和来表示。

如上所述,通过隐式和显式地利用全局和局部一致性来获得视觉上连贯的多视角图像。具体来说,方法包括两个阶段。第一阶段将BEV语义B以及{𝐾𝑚, 𝑅𝑚,𝑇𝑚}𝑚作为输入,并根据每个视角的相机参数集将BEV语义投影到每个透视视图上,将第m个视角的结果表示为。第二阶段将和文本提示作为输入,并从M个透视视角生成RGB图像。

并且它根据M个透视视角生成RGB图像。表示从第m个视角生成的RGB图像。更具体地说,第一阶段投影过程通过几何变换的帮助,显式地强制BEV和透视视图之间的全局语义一致性。同时,生成阶段通过多视角注意力模块隐式地在重叠的透视视图之间施加一致性。最后,提出通过新颖的训练初始化和去噪设计,显式地强制重叠视野(FOV)中的视觉线索保持连贯。MVPbev的总体流程可以在图2中找到。​

1)语义一致性的视图投影

假设使用现有的模拟方法可以毫不费力地获得各种但合理的BEV语义B,那么我们的方法应该解决的第一个基本问题是保持从B到透视图{𝐼𝑚}𝑚的跨视图语义一致性。其次,重叠视野(FOV)中的内容也应该是一致的。例如,不仅背景类别(如建筑物或树木),而且前景道路参与者在不同视角出现时也应该具有相似的apperance。为此,首先提出使用相机参数将BEV语义投影到M个视角上,生成)透视角语义。与现有工作相比,投影步骤通过几何约束确保了BEV和透视图之间的语义一致性,从而在生成步骤中减少了累积误差。​

2)视角一致的图像生成

仅仅关注单个透视角的语义可能导致不同视图之间的内容不一致,特别是在重叠的视野(FOV)中。例如,在多个视图(如前方、前右方、后方和后左方)的视野中出现的建筑物和植被具有不同的外观。这是由于跨视图相机之间缺乏交互。这里想要指出的是,这种不一致性既不会通过鸟瞰图(BEV)布局分割来反映,也不会通过目标检测指标来反映,因为它仅影响背景类别。

受此启发,我们提出在方法上和实验上都应关注这些重叠区域。就提出的方法而言,通过估计重叠区域的单应性,对背景内容施加强烈的连贯性约束,然后利用多视角注意力模块隐式地强制不同视图的风格与估计的对应点保持一致。在这种情况下,不仅可以在提供语义的背景布局区域上强制外观一致性,而且还可以在缺少控制信号的其他区域上强制外观一致性。就评估目的而言,引入人为分析来提供可靠评估,以判断生成的图像,特别是重叠区域,是否真实。

单应性估计:这里通过估计重叠区域来迈出在重叠视野(FOV)中强制视觉一致性的第一步。为此,提出计算具有重叠视野的图像之间的单应性。正如许多驾驶数据集所示,一个视野通常与其左右两侧的视野重叠。因此,对于第m个视野,我们只需要考虑和,它们分别是第m个视野的左侧和右侧视野。然后估计从视野到视野m的单应性,并将映射函数表示为。因此,第m个视野中的p = [x, y]坐标将被映射到视野中的p̂ = [x̂, ŷ]坐标。或者p̂ = 。类似地,我们定义了一个逆映射,它将中的p̂映射到中的p。

多视图注意力模块:是什么使得一组视图看起来不真实?首当其冲的是图像之间的不一致性。换句话说,真实的视图必须看起来是一致的,就好像它们是在同一天的同一物理位置拍摄的。更具体地说,这组图像的视觉风格需要保持一致,以便它们看起来都是在同一地理区域(如城市与乡村)、同一天的时间、相同的天气条件下等创建的。为此,我们引入了一个多视角注意力模块,以便在生成第m个视图的RGB图像时,考虑其左右两侧的视图。对于位于第m个视图生成的特征图中位置p的标记,根据由视图m̄ ∈ {mr, ml}生成的特征图中对应的像素K(p̂)来计算注意力输出,其中p̂ * ∈ K(p̂)表示以p̂为中心的KxK区域。在数学上,遵循与[30]中类似的公式,并将我们的多视角注意力模块定义为:​

3)模型训练与推理

为了训练我们的模型,我们引入了多视角潜在扩散模型(LDMs)损失。基本上,原始的LDMs由一个带有编码器E和解码器D的变分自编码器(VAE)、一个去噪网络δθ和一个条件编码器τθ组成。输入图像通过ε映射到潜在空间,其中。按照惯例设置,并且它们都等于8。之后,潜在变量将被转换回图像空间,得到。去噪网络δθ是一个时间条件UNet,它利用交叉注意力机制来结合条件编码τθ(c)。在我们的案例中,c由文本提示和透视视图中的语义组成。

在每个训练步骤中,首先为所有多视角图像统一地从1到T中采样一个共享噪声水平t,并将它们表示为ε。其中,ε。为了利用跨视角一致性,进一步强制要求如果噪声对应于相同的像素,则这些噪声必须相同。从第一个视角或m=1开始,我们将ε在坐标x, y上的值或ε重新赋值为ε。重复此过程,直到。在图5中提供了一个初始化的ε示例集。最后,模型训练目标定义为:

图片

推理:如上所述,MVPbev可以扩展到实例级别的可控性。MVPbev允许用户点击目标实例并提供特定颜色的要求。为了实现这一点,提出了一种针对多个前景目标控制的特殊机制,该机制通过操纵交叉注意力层的响应来准确指导实例级别的合成。假设可以通过现有方法或简单检索在每个视图中获得实例级别的掩码。首先分别使用其配对的提示获得实例级别和场景级别的潜在变量。然后,它们与这些二进制实例级别掩码有效结合,从而实现更一致的空间性能。请注意,MVPbev在前景对象上的这种能力是无需训练的,从而导致了更好的可扩展性和测试时可控性。

实验对比

数据集:在NuScenes数据集上验证了我们的想法,该数据集由六个camera提供的360度全景覆盖。它包含了波士顿和新加坡的1000个街景场景示例,每个场景持续20秒,以12Hz的频率捕获。除了140万张摄像头图像外,NuScenes还提供了多模态数据,包括全局地图层和在4万个关键帧上标注的3D目标边界框。遵循700/150/150的标准划分来进行训练、验证和测试。

#ParkingE2E

 Camera-based End-to-end Parking Network, from Images to Planning

论文作者:Changze Li, Ziheng Ji, Tong Qin, and Ming Yang

作者单位:上海交通大学未来技术全球研究院

本文一作为秦通课题组学生Changze Li,最近成功入选IROS24,实现了从图像到规划的端到端泊车网络,通过收集大量专家级的泊车轨迹数据,并采用基于学习的方法克隆人类的驾驶轨迹,可以有效地解决泊车问题。

自动泊车是智能驾驶系统中一项至关重要的任务。传统的泊车算法通常基于模块化设计实现。然而,由于算法设计复杂,在面对复杂的泊车场景时,这些方法的效果往往不尽人意。相比之下,人类的驾驶轨迹往往比机器基于模块化设计的航点更为直观且易于理解。通过收集大量专家级的泊车轨迹数据,并采用基于学习的方法克隆人类的驾驶轨迹,可以有效地解决泊车问题。本文运用模仿学习,通过模仿人类的驾驶轨迹来执行从RGB图像到路径规划的端到端规划。所提出的端到端方法使用目标查询编码器融合摄像头和目标特征,并利用基于transformer的解码器自回归地预测未来的航路点。本文在真实世界场景中进行了广泛实验,结果表明,所提出的方法在四个不同的实际场景中平均泊车成功率达到了87.8%。真实车辆实验进一步验证了本文所提方法的可行性和有效性。论文被接受后,代码将会开源。

智能驾驶涵盖三项主要任务:城市驾驶、高速公路驾驶以及泊车操作。自动代客泊车(AVP)与自动泊车辅助(APA)系统作为智能驾驶中关键的泊车任务,显著提高了泊车的安全性和便利性。然而,主流的泊车方法多基于模块化,需要将整个泊车过程分解为环境感知、建图、车位检测、定位及路径规划等多个阶段。由于这些复杂模型架构的繁琐性,它们在狭小停车位或复杂场景下更容易遇到难题。

端到端(E2E)自动驾驶算法通过将感知、预测与规划组件整合进统一的神经网络进行联合优化,减轻了各模块间累积误差的问题。将端到端算法应用于泊车场景,有助于减少泊车系统对人工设计特征和模块化的依赖,提供了一个全面、整体且用户友好的解决方案。

尽管端到端自动驾驶已展现出显著优势,但大部分研究集中于仿真环境,未验证算法在真实世界的有效性。与城市环境的复杂性及高速公路驾驶的风险相比,泊车场景提供了更高的可控性。这种可控性为逐步在车辆中部署端到端自动驾驶能力提供了一条可行途径。本文开发了一个端到端泊车神经网络,并验证了该算法在真实泊车情境下的可行性。

图片

▲图1|展示了整个工作流程的示意图。该模型接收环视摄像头图像和目标车位作为输入,并输出预测的轨迹路点,这些路点随后由控制器执行

本工作基于模仿学习开发了一种端到端泊车算法。算法接收车载摄像头捕捉的环视图像,生成路径规划结果,并根据提供的航点执行控制。一旦用户指定泊车位,端到端泊车网络即与控制器协作,自动操纵车辆进入停车位直至完全停稳。本文贡献总结如下:

●设计了一个执行泊车任务的端到端网络。该网络将环视图像转换为BEV表示,并利用目标停车位特征查询摄像头特征,实现两者的融合。鉴于轨迹点具有序列性,本文采用了基于transformer解码器的自回归方法来生成轨迹点;

●在真实车辆上部署了端到端模型进行测试,验证了网络模型在多种真实场景泊车中的可行性和泛化能力,为端到端网络部署提供了一个有效方案。

■3.1 BEV感知

BEV表示相较于透视表示至少有两个优势:首先,它因具有清晰的物理可解释性而能轻松整合不同模态的输入;其次,BEV避免了透视失真问题,从而降低了下游任务(如规划)的复杂性。

近年来,BEV表示已在感知系统中得到广泛应用。与以往由特征提取模块和任务头部模块组成的深度学习感知算法不同,BEV感知在此基础上增加了一个视点转换模块。此转换模块促进了传感器视图与BEV之间的转换。代表工作包括LSS的深度估计与投影、DETR3D的稀疏查询三维检测、PETR的三维位置嵌入、BEVFormer的空间时间注意力机制、BEVDepth的深度增强学习以及BEVFusion的多模态特征融合。

■3.2 端到端的自动驾驶

与传统的基于模块的自动驾驶解决方案相比,端到端能够缓解累积误差,防止模块间的信息损失并最小化冗余计算,因此已成为自动驾驶领域一个热门且突出的研究主题。

初期研究如ChauffeurNet关注城市驾驶策略学习。众多研究采纳编码器-解码器结构,如Transfuser、Interfuser、NEAT等利用GRU进行自回归航点预测;CIL与CILRS则直接将视觉与导航信息映射至控制信号。近年来,针对泊车场景的端到端网络发展迅速,如两阶段学习框架预测转向和档位(Rathour等人)、CNN控制转向速度(Li等人)、ParkPredict系列的泊车位与航点预测。现有方法虽有成效,但也面临着计算需求高、实车部署难等问题。本文提出一种新颖的端到端泊车网络,利用自回归变压器解码器,结合RGB图像和目标车位信息预测航点。

■4.1 基础概念:问题定义

本文采用端到端神经网络来模仿专家轨迹进行训练,定义数据集为:

图片

其中,轨迹索引,轨迹点索引,相机索引,RGB图像,轨迹点和目标车位。本文将数据集重新组织为:

图片

以及

图片

这里,表示预测轨迹点的长度,表示RGB摄像头的数量。

端到端网络的优化目标如下:

图片

其中,表示损失函数。

■4.2 基于摄像头的端到端神经规划器

◆概述:

如图2所示,本文开发了一种端到端神经规划器,该规划器以RGB图像和目标车位作为输入。所提出的神经网络包含两个主要部分:输入编码器和自回归轨迹解码器。当输入RGB图像和目标车位后,RGB图像被转换以获取BEV特征,并将这些特征与目标车位特征融合。随后,神经网络利用transformer解码器以自回归方式生成下一个轨迹点。

图片

▲图2|基于摄像头的端到端停车方法概述

◆输入编码器:

BEV提供了车辆周围环境的俯视图,使车辆能够识别停车位、障碍物和地面标线。同时,BEV在不同的驾驶视角之间提供了一致的观察点表示,从而降低了轨迹预测的复杂性。基于这些理由,本文选择在鸟瞰视图中对输入信息进行编码。

相机编码器:在生成BEV流程的开始,首先利用EfficientNet从RGB输入中提取图像特征。受LSS启发,本文学习图像特征的深度分布,并将每个像素提升到3D空间中。然后,本文将预测的深度分布与图像特征相乘,以获得含有深度信息的图像特征。利用相机的外参和内参,将图像特征投影到BEV体素网格中,生成相机特征。鸟瞰特征在x方向上的范围表示为米,y方向上的范围为米。

目标编码器:为了使目标车位与相机特征对齐,本文基于指定的停车位在鸟瞰空间中生成目标热力图。随后,本文使用深度CNN神经网络提取目标车位特征。在训练过程中,目标停车位根据泊车操作中最终直线轨迹段的外部包络线确定。

目标查询:通过在鸟瞰空间中对齐相机特征和目标编码特征 ,并利用注意力机制使用目标特征查询相机特征,本文可以有效地融合这两种模式。位置编码确保了在特定BEV位置关联特征时,相机特征与目标特征之间的空间对应关系得以保持。利用作为查询,相机特征作为键和值,并采用注意力机制,得到融合特征。

图片

▲图3|目标查询的架构说明,本文对目标特征和相机特征添加了相同的位姿编码,以便建立两种特征之间的空间关系

◆轨迹解码器:

许多端到端规划研究采用了GRU解码器,以自回归方式从高维特征向量预测下一个点。然而,高维特征向量缺乏全局感受野。受Pix2seq的启发,本文将轨迹规划视为一个序列预测问题,使用transformer解码器来解决。这涉及到自回归地、一步一步地预测轨迹点。本文的方法有效结合了低维轨迹点与高维图像特征。

轨迹序列化:通过对轨迹点进行序列化,可以将回归问题转换为分类问题。随后,本文可以利用transformer解码器来预测自身坐标系下的轨迹点。本文采用以下序列化方法:

图片

其中,定义为序列可表示的最大值,序列化轨迹点的符号表示为Ser(·)。

对于每一个轨迹点,本文定义在该点的泊车进度为,它代表了在泊车操作中第条轨迹的第个点的整体进展。当车辆从左侧开始泊车过程时,赋值为-1;从右侧开始时赋值为1;当车辆成功停在指定停车位内时,赋值为0。令表示第条轨迹中第个点与第个点之间的距离。可以表示为:

图片

当从左侧泊车时,需乘以-1。泊车进度的序列化过程如下:

图片

序列化之后,第ii条轨迹可以表示为:

图片

其中,BOS代表开始标志,EOS代表结束标志。

轨迹解码器:BEV特征作为键和值,而序列化的队列则作为查询,利用transformer解码器以自回归的方式生成轨迹点。在训练过程中,本文向序列点添加位置嵌入,并通过屏蔽未知信息来实现并行化。在推理过程中,给定BOS标记,transformer解码器预测第一个点。然后,将预测的点附加到序列中以进行下一步,重复此过程,直到遇到EOS或达到指定的预测点数量为止。

■4.3 横向与纵向控制

在控制过程中,定义泊车起始时刻为,该时刻可根据端到端神经规划器为路径规划预测得出,即。从初始时刻到当前时刻的相对姿态可通过视觉里程计获得,记为。目标转向角可采用后轮反馈(RWF)方法计算得到,表达式如下:

图片

依据底盘提供的速度反馈和转向反馈,以及设定的目标速度和计算得出的目标转向角,采用级联PID控制器实现横向与纵向的控制。每当生成新的预测轨迹后,将和重置,这样在整个车辆控制过程中就不必持续依赖全局定位。

■5.1 数据集收集

数据集通过车载设备进行采集。实验车辆配备有四个摄像头和一个惯性测量单元(IMU)。环视摄像头用于捕捉RGB图像,同时实现了一个视觉惯性里程计,用于车辆定位,这对于确定车辆行驶轨迹至关重要。实验平台的布局及所使用的传感器如图4所示。

图片

▲图4|本文以长安汽车为实验平台(该车辆搭载英特尔NUC设备以运行模型推理与控制)

数据收集涵盖了多种泊车场景,包括地下车库和地面车库,如图5所示。从多样化的环境中收集数据有助于增强神经网络的泛化能力。一部分来自车库I和II的停车位数据被用于训练。而未参与训练的车库I和II中的其余停车位数据,以及从车库III和IV收集的所有停车位数据,则用于测试。

图片

▲图5|系统训练和测试使用了多个不同的停车场

■5.2 实现细节

在训练过程中,使用环视摄像头图像(摄像头数量R为4)作为输入,而目标停车位由泊车结束时的一些点确定。轨迹序列点被用来监督端到端预测结果。

在推理过程中,采用指定的目标车位、环视摄像头图像以及预设的BOS信号。模型以自回归方式预测后续n个轨迹点的位置。路径规划结果指导控制器基于路径、自身位姿及反馈信号来操纵车辆,直至车辆停入指定车位。值得注意的是,目标点及所有预测的轨迹点均表示当前车辆坐标系下的位置,确保了轨迹序列与BEV特征的一致性。这一设计也使得整个系统独立于全局坐标系。

就神经网络细节而言,BEV特征的尺寸为200×200,对应实际空间范围为,,分辨率为0.1米。在transformer解码器中,轨迹序列化最大值为1200。轨迹解码器生成长度为30的预测序列。

本文使用PyTorch框架实现了该方法。网络在NVIDIA GeForce RTX 4090 GPU上进行训练,批大小为16,总训练时间约为8小时,使用了40,000帧数据。测试数据集包含大约5,000帧。

■5.3 评估指标

◆模型轨迹评估:

在进行真实场景实验之前,为了分析模型的推理性能,本文对模型进行初步评估并设计了一些评估指标。

L2距离(L2 Dis.):指的是模型预测轨迹上的路点与真实轨迹上相应路点之间距离的平均值。这一指标从离散路点的角度评价模型推理的精确度和准确性。

豪斯多夫距离(Haus Dis.):在预测轨迹上选取一点,计算该点到真实轨迹上所有点的最短距离,再选取这些最短距离中的最大值。这一指标从轨迹集合的角度评价预测轨迹与真实轨迹的匹配程度,但对异常值敏感。

相似度:结合了 Frechet距离和Procrustes分析,范围在0到1之间。首先对预测轨迹和真实轨迹进行对齐,然后计算两者曲线间的Frechet距离。这允许从整体曲线的角度评估两条轨迹的相似性,反映模型推理结果的一致性。

◆端到端实车评估:

在实车实验中,本文使用以下指标评估端到端泊车性能。

泊车成功率(PSR):描述了自主车辆成功停入目标车位的概率。

无车位率(NSR):未能停入指定车位的失败率。

泊车违规率(PVR):指车辆略微超出指定车位边界,但未阻碍或妨碍邻近车位的情况发生频率。

平均位置误差(APE):在成功泊车时,目标泊车位点与自主车辆停止位置之间的平均距离。

平均方向误差(AOE):成功泊车时,目标泊车位点与自主车辆停止位置之间的平均方向差异。

平均泊车得分(APS):综合考虑泊车过程中的位置误差、方向误差和成功率进行综合评估得出的分数,分布在0到100之间。

平均泊车时间(APT):多次泊车操作的平均泊车耗时。泊车时间从启动泊车模式开始计算,直至车辆成功停入指定车位,或因异常或失败终止泊车过程。

■5.4 定量结果

图片

▲表I|闭环实车测试结果

为了验证本文所提出系统的性能,本文在四种不同环境条件下的停车场进行了闭环车辆测试。车库I为地下车库,而车库II、III和IV为地面车库。场景A为两侧无障碍物的停车情境,场景B为左侧或右侧有车辆停放的停车情境,场景C则为附近有障碍物或墙体的停车情境,结果如表I所示。在实验中,本文测试了四个不同的车库,并且对于每个车库,本文使用了三种不同的实验场景。针对每种实验场景,本文随机选择了三个不同的停车位。对于每个车位,分别在左右两侧大约进行了三次泊车尝试。实验结果显示,本文提出的方法在不同场景下达到了较高的泊车成功率,展示了良好的泛化性能。同时,本文发现停车位旁边若已停有车辆,可能会提供额外的特征信息,进一步提高泊车成功率。

尽管最近出现了越来越多的端到端泊车方法,但它们大多集中在解决驾驶场景的问题上。虽然像ParkPredict这样的方法也被应用于泊车场景,但它们的任务与本文的特定任务显著不同。目前可能尚无可以直接与本文方法相比较的有效现有方法。基于上述分析,表II中比较了本文方法(基于Transformer的解码器)与Transfuser(基于GRU的解码器)的结果。得益于Transformer中的注意力机制,基于Transformer的解码器在推理期间提高了预测准确性。

图片

▲表II|性能对比评估

■5.5 消融研究(Ablation Study)

本文设计了多种消融实验来分析不同网络设计对轨迹预测性能的影响。在神经网络结构方面,本文针对编码器和解码器进行了消融实验,具体结果如表III所示。在特征编码器部分,本文比较了基线(目标查询)、特征拼接和特征元素级相加这几种方法的结果。目标查询方法利用注意力机制和空间对齐机制,全面整合目标信息和鸟瞰图像信息。它明确约束了目标车位与鸟瞰图像之间的空间关系,以此达到最高的轨迹预测准确度。在解码器部分,本文分析了预测轨迹点数量变化对推理性能的影响。预测过多的轨迹点可能导致由于停车位内的遮挡等因素而降低预测精度。本文在基线情况下预测了30个点,这在推理过程中实现了准确性和速度的最佳平衡。

图片

▲表III|编码器与解码器的消融研究

在表IV中,本文对比了增加泊车进度标记对预测性能的影响。结果显示,泊车进度标记有助于提高推理准确性。进度标记使网络模型能够跟踪泊车的整体进度,并确保在泊车过程结束时能够适时刹车。

图片

▲表IV|泊车进度标记的消融研究

■5.6 可视化展示

图片

▲图6|不同场景下泊车过程的示意图。每行展示了一个泊车案例。即便是在相邻停车位被车辆或墙壁等障碍物占用的情况下,本文的方法仍然能够有效地操纵车辆并将其停在指定的位置

图6展示了在不同场景下的泊车过程。结果证明,本文的算法在各种场景下都表现出了良好的泛化能力。即使在目标停车位附近存在其他车辆或墙壁等障碍物的情况下,算法也能有效地操控车辆,使其停在指定位置。图7描绘了自动泊车过程中预测的轨迹与实际行驶轨迹。从图中可以看出,规划的轨迹提供了精确的引导,而控制器则高效地执行了规划的轨迹。

图片

▲图7|泊车轨迹的示意图。蓝色轨迹代表预测轨迹,而白色轨迹代表自动泊车过程中实际行驶的轨迹(简称为AD Traj.)。第二行将自动泊车过程中的实际行驶轨迹与预测轨迹叠加显示,彰显了强大的轨迹预测与控制能力

■5.7 局限性

尽管本文提出的方法在泊车任务上展现出了优势,但仍存在一些局限性。首先,系统对动态目标的适应性较差。受限于当前数据量和分布,泊车模型对于移动目标的适应性不佳。通过不断扩充数据集,可以增强模型对移动物体的适应能力。其次,由于训练过程中使用了专家轨迹,无法提供有效的负面样本。此外,在泊车路径出现较大偏差时,缺少强有力的纠正机制,最终可能导致泊车失败。为了解决这些问题,后续计划利用NeRF(神经辐射场)和3DGS(三维高斯溅射)构建接近真实世界的模拟器,通过深度强化学习训练端到端模型,以增强泊车系统的鲁棒性。最后,尽管本文的端到端泊车方法已取得良好成效,但与传统的基于模块化的泊车方法相比仍有一定差距。不过,随着端到端技术的不断进步,这一问题将会得到解决。也期待未来端到端泊车算法在复杂场景下展现出更多优势。

本文提出了一种基于摄像头的端到端泊车模型。该模型输入目标车位和环视RGB图像,通过目标查询在BEV下获得融合特征,并采用transformer解码器以自回归方式预测轨迹点。轨迹规划的结果随后用于控制。本文广泛地在多种场景下评估了所提方法,结果表明其可靠性和泛化能力。然而,与高度优化的基于模块化的泊车方法相比,本文的端到端泊车算法仍存在性能差距。

作者表示,将在未来工作中进一步提升端到端泊车算法的性能,期望基于学习的方法最终能超越传统方法。相信本文的研究与实践将激励和启发同行研究人员及工程师的思考与创新。

#端到端~下的智驾人

“要么拥抱端到端,要么几年后离开智驾行业。”

特斯拉率先吹响了方案更新的号角,无论是完全端到端,还是专注于planner的模型,各家公司基本都投入较大人力去研发,小鹏、蔚来、理想、华为都对外展示了其端到端自动驾驶方案,效果着实不错,非常有研究价值。

为什么需要端到端?

首先我们聊一下当前的主流自动驾驶方案,主要核心部分包括:感知模块、预测模块、规控模块。每个模块相对独立,感知模块给预测模块提供动静态障碍物信息;预测模块为规控模块提供规划的参考,规划再转换为控制指令。从传感器端到控制端,需要多个功能支持,这就不可避免导致了累积误差,一旦碰到问题,需要整个pipeline做分析。而且每个模块的优化,并不能保证整个系统达成最优解。

图片

这个时候,就希望有一种模型能够完成感知信息的无损传递,即从传感器端到输出控制策略端,这也是端到端自动驾驶提出的原因。传统定义上感知和规划模块的对接一般是通过白名单(比如机动车、行人、甚至occ输出的非通用几何障碍物)的检测与预测来完成,是人为定义的规则和抽象。随着产品的迭代,每一次都需要添加各类case,设计各种博弈的策略,从模型训练到工程部署再到逻辑设计,时间和人力成本高昂。

图片

而且这种方式无法罗列所有情况,那么是否可以通过对整个场景的学习抽象,无损的将所有信息传递给PnC部分?这就是我们期望的端到端。端到端核心是优化最终目标且全局可导,作为一个完整的优化任务来看,直接求最优解,而不是先求感知再求规控的最优解。

端到端效果怎么样?

今年各大自动驾驶公司都在预研和落地相关端到端方案,小鹏、蔚来、华为、理想也都对外展示了其端到端方案。由于端到端模型的优势明显,各大自动驾驶公司都在拼命布局揽人,对应岗位薪资水涨船高,某想甚至开出了七位数给到该岗位。

那么各家的端到端自动驾驶效果怎么样呢?先来看看国外的特斯拉:

再来看看国内的UniAD效果:

不得不说,端到端是一个更简约的方法,更具有全场景的优化能力。

端到端有哪些技术栈?

行业里面的端到端主要分为完全端到端方案、专注于planner的端到端方案(包括某鹏的XPlanner)。顾名思义,完全端到端是从传感器直接到规控;而专注于planner的端到端以感知模块的输出作为先验,替换原来以规则作为主要形式的PnC模块。

图片

从传感器到控制策略的(如果把条件再放松下也可以到轨迹输出)完全端到端方案更为简约,但同样面临一个问题,可解释性差。UniAD用分阶段监督的方法逐步提高了可解释性,但训练仍然是个难题。在足够体量和质量的数据群下,效果能够得到保证,泛化性能也不错。

图片

而专注于planner的端到端方案,如果深究的话,只能算狭义上的端到端,但更贴合当下的量产方案和任务,而且可解释性也较高,是目前主机厂和自动驾驶公司优先推行和落地的。

如果从信息输入的角度上来看,又可以分为纯视觉方案(UAD、UniAD这类)和多模态方案(FusionAD这类),传感器成本不断在下降,多模态方案也一直是行业里面都在关注的点。

#InvRGB+L Inverse Rendering of Complex Scenes with Unified Color and LiDAR Reflectance Modeling

首个自动驾驶RGB和Lidar紧耦合逆渲染框架InvRGB+L,直接SOTA~

  • 论文标题:InvRGB+L Inverse Rendering of Complex Scenes with Unified Color and LiDAR Reflectance Modeling
  • 论文链接:https://arxiv.org/abs/2507.17613

1 简介

本文提出了InvRGB+L,一种新颖的逆渲染(inverse rendering)模型,首次将LiDAR强度应用于逆渲染,可以从单一的RGB+LiDAR序列中重建大规模、可重光照的动态场景。传统的逆渲染方法主要依赖RGB输入,将LiDAR仅用于几何信息的重建,而图像输入常常由于可见光干扰导致材质估计不理想。我们发现,LiDAR的强度值在不同光谱范围下通过主动照明采集,为在变化光照条件下进行稳健的材质估计提供了互补信息。受到这一发现的启发,InvRGB+L通过两个关键创新利用LiDAR intensity提升复杂场景的逆渲染结果:(1) 一种新颖的基于物理的LiDAR着色模型;(2) RGB–LiDAR材质一致性损失。该模型可以生成城市和室内场景的新视角RGB和LiDAR渲染结果,并支持重光照、夜景模拟和动态物体插入,在城市级逆渲染和LiDAR模拟任务中取得了超过当前最先进方法的表现。​

核心挑战:

  1. RGB图像对光照高度敏感,在不同照明条件下(如阴影、夜晚、车灯)材质估计易受干扰,导致逆渲染结果不准确。
  2. 传统方法忽视LiDAR强度信息,仅将LiDAR用于几何建模,未充分利用其在材质估计中的物理潜力。
  3. RGB与LiDAR来自不同模态,直接融合存在表征不一致的问题,难以协同估计材质。​

解决方案:

  1. 基于物理的LiDAR着色模型(LiDAR Shading Model):精确建模激光强度的生成过程(包括反射率、入射角、距离衰减等),使模型能够从LiDAR强度反推出物体表面属性。
  2. RGB–LiDAR材质一致性损失(Consistency Loss):在训练中引入RGB和LiDAR反射之间的监督一致性,提升跨模态材质估计的稳定性和精度。

2 基于物理的 LiDAR 反射模型

为了准确建模LiDAR 强度值(intensity)与场景表面的材质属性(如反射率、粗糙度等)的关系,本文提出了一个新的LiDAR反射模型。LiDAR 遵循经典的渲染方程,在假设无介质散射的前提下,其反射辐射度可以表示为:

其中:

  • x:表面点的位置;
  • n:该点的法向量;
  • 、:入射光方向和出射光方向;
  • :入射辐射亮度;
  • :双向反射分布函数(BRDF)。

由于 LiDAR 脉冲具有高度方向性,Li(x,)可视为沿某个特定方向的窄束内的常数。由于激光能量在传播过程中会衰减,因此该方向上的辐射亮度满足:

其中:

  • :发射功率;
  • d:传感器到表面点x 的距离。

现有文献大多假设为 Lambertian漫反射模型,然而该模型无法解释实际场景中常见的镜面反射现象,如金属车身或水面上的聚光反射。因此,本文采用 Cook-Torrance 模型扩展 LiDAR 的反射建模,最终得到的反射模型表达式为:

通过显式建模镜面反射项,本文所提出的 LiDAR 反射模型在结构上与 RGB 图像常用的着色模型保持一致,为后续 RGB 与 LiDAR 的联合逆向渲染提供了统一的物理基础。

3 逆渲染框架

图片

本文提出了一种用于逆渲染的Relightable场景表示,旨在同时支持场景的几何、材质以及光照的解耦与联合建模,从而实现高质量的重光照与动态场景渲染。具体来说,该表示由以下几个核心组成部分构成:

1. 带材质属性的3DGS

采用3DGS来表征场景的几何和颜色信息,每个3D高斯不仅包含颜色和透明度,还附加了物理材质属性(如反照率,粗糙度、法线方向等),使得场景能响应不同光照条件,实现物理正确的光照交互。

2. 环境光照建模

引入完整的环境光照模型,包括天空光与环境辐射,为场景提供自然且可控的光照变化基础,支持多时段、多天气的光照模拟。

3. 动态物体的时间属性

该表示同时具备对动态物体的时序建模能力,允许插入或编辑动态元素,保持时间一致性。

基于该场景表示,本文实现了基于物理的可微分正向渲染过程。渲染过程中,利用每个体元的材质属性(包括漫反射率、镜面反射率和粗糙度等)与入射光照进行物理计算,生成高质量的RGB图像,从而促进材质与几何参数的联合优化。除RGB图像外,渲染还同步模拟LiDAR强度响应,结合本文提出的物理LiDAR反射模型,准确预测激光反射强度,有效增强对材质估计的物理约束能力。

训练过程的损失函数如下:

前两项为渲染损失,分别衡量生成的RGB图像和LiDAR强度与真实观测之间的差异;第三项和第四项则利用扩散先验(diffusion prior)对材质和法线进行监督优化,提升估计的物理合理性。此外,本文还引入了一种RGB–LiDAR一致性损失,用以约束通过RGB和LiDAR两条路径估计出的材质参数保持一致,有效避免单一模态带来的估计偏差:

4 实验结果

定量结果

这张表格展示了InvRGB+L与UrbanIR在waymo数据集上重打光任务中的定量结果,结果表明InvRGB+L显著优于UrbanIR。此外,加入一致性损失进一步提升了性能,主要是由于更准确的材质估计。

图片

为了验证InvRGB+L的LiDAR强度公式的有效性,本文在Waymo数据集上评估了LiDAR强度的新视图合成。下表展示了定量结果,结果表明InvRGB+L能够有效地捕捉底层物理现象,从而实现更准确的LiDAR强度建模。

图片

定性结果

下图是逆渲染的定性比较结果。InvRGB+L通过利用反射率有效地将阴影与反照率分离,从而获得了更平滑的反照率估计,相比之下,UrbanIR和FEGR都难以将照明杆投射的阴影与车辆下方的阴影从反照率中分离,导致在第一场景的光照重建结果中汽车旁边出现不真实的阴影。

图片

下图展示了场景编辑的结果,展示了InvRGB+L在光照重建和物体插入方面的多样性。第一行展示了将街灯和车头灯光照应用于输入的白天场景进行夜间模拟的结果。第二行展示了不对插入节点进行重打光的结果:插入的汽车与场景不匹配。相比之下,经过光照重建后,汽车与环境无缝融合。第三行展示了同时对场景和插入物体进行光照重建的结果。

图片

5 结论

这项工作将 LiDAR 融入逆向渲染,提出了InvRGB+L,一种能够从 RGB+LiDAR 序列中重建大规模、可重光照且动态变化场景的逆渲染模型。通过利用 LiDAR 与 RGB 反照率之间的一致性,InvRGB+L提升了材质估计的准确性,并支持包括重光照、物体插入和夜间模拟在内的多种场景编辑应用。然而,仍存在一些局限性。首先,InvRGB+L采用基于 BVH 的光线追踪器对三维高斯体元进行光线投射,但由于高斯体元的不透明性质,可能导致阴影渲染不够准确。此外,光照模型仅考虑了天空光和太阳光,对于夜间等复杂环境下的逆向渲染仍显不足,这部分将在未来工作中予以改进。

#关于理想VLA司机大模型的22个QA

原文:来自微博用户红石驾驶员

原文链接:https://weibo.com/7983184984/PDnOJkyiI

问题1:从无图NOA到端到端生命周期都比较短,半年到一年左右就开始转架构了。VLA的技术潜力如何?大部分人在端到端都已经拥有了1000万Clips的数据量,基本上已经饱和到了边际数据递减,开始转向VLA架构,VLA会是一个长期架构么?是否能支持到城区自动驾驶?

郎咸朋:VLA有很强的技术潜力,端到端让自动驾驶从人工变成AI,但仅靠V(视觉)和A(动作)不够,VLA架构思路来源于机器人和xxx智能,是长期架构。从某种程度上看,自动驾驶也是四轮机器人,VLA架构会延续到机器人繁荣之后才可能被替代,技术潜力大,更符合人类智能发展规律,能支持城区自动驾驶。

问题2:您认为VLA在Thor-U芯片上的运转速度能到多少?目前的10Hz应该只是一个起点,是否可以做到更高?特斯拉最新的FSD运转速度是多少?

詹锟:Thor-U架构支持先进的推理精度和混合精度,目前使用INT8和FP8(业界主流),已做到10Hz。Thor-U支持FP4,FP4算力是FP8的一倍(FP8为700算力时,FP4可达1400算力),推理帧率可从10Hz提升到20Hz。此外,通过优化底层数据、算法架构和硬件适配,未来几个月可能达到20Hz、30Hz。(未提及特斯拉FSD运转速度)

问题3:VLA在双Orin平台能部署到什么情况?Thor平台上能做到10Hz的推理帧率,在双Orin平台上能做到多少?

郎咸朋:VLA模型研发之初就决定支持每个平台,且无差别支持,重点关注模型部署帧率和差异,两个平台同步推进。功能和模型表现上,双Orin平台与Thor平台同步且无差别,请AD Max车主放心。目前内部在优化模型,每天迭代,最终交付时帧率会优于现在。

问题4:有些友商在自研芯片,未来理想汽车会不会自研芯片?是否自研芯片是基于什么去决策和判断的?

郎咸朋:目前VLA技术架构和模型尚未最终定型。自研芯片对自身模型支持更好,而英伟达通用芯片对各种模型和算子的通用性更强。理想目前用英伟达芯片部署和探索模型,希望保持通用性,不被锁死在特定算子和架构上,待模型架构通用性解决后,可能考虑其他可能性。

问题5:VLA里的L(语言)对行车的体验是锦上添花还是雪中送炭?用新的方式或新的架构带来的收益或提升会是怎样的?这个变化会很明显吗?

郎咸朋:语言理解能力是必要的(除非依赖先验地图等其他信息)。若未来实现L4或纯无人(如MEGA Home),无语言能力无法操作车辆。更本质的是,有了L之后,CoT(思维链)能力增强,能提升模型对复杂或未知场景的处理能力。有无L是模型是否具备深度思考能力的关键,并非锦上添花或雪中送炭,而是核心能力的提升,变化会很明显。

问题6:未来其实是这种泛化的表现吗?比如场景。

郎咸朋:VLA的泛化能力并非仅依赖数据输入,而是通过强化学习或训练形成思维能力,遇到新问题时能自主思考。类似人类从经验中学习处理问题的方式,无需反复碰壁就能成长,具备对新场景的泛化处理能力。

问题7:请详细介绍一下3.2B的MoE车端模型的升级周期。业界对于扩散模型的出轨迹的时延问题一直比较难解,理想在做VLA时为何可以通过几步较快去噪并实现一个比较稳定收敛的轨迹?

詹锟: 3.2B的MoE车端模型升级周期分两种:重新训练预训练(改变基座)以月为单位更新,与基座模型团队合作,每月更新并提升空间理解、语言理解、文字识别等能力;后训练更新取决于问题,引入数据或新增prompt即可解决,与大模型迭代思路一致。

扩散模型能快速去噪是因为采用新方法(如DPIM、flow matching流匹配),可大幅减少迭代步骤。目前用流匹配2-3步即可出轨迹,且多轨迹并行生成,芯片算力足够,时延低(约15毫秒)。

问题8:VLA本身是具备思维链的过程,在VLA的阶段超级对齐这件事儿还有意义吗?思维链本身就是在做一次对齐,人类规则包括现实的一种对齐,VLA还需要做吗?

詹锟:有意义。CoT是VLA/VLM的思考模式(用Token思考),而超级对齐关注思考模式是否符合人类价值观和用户期望的驾驶行为,包括RLHF模型对齐、人类偏好对齐等。VLA中会继续存在,先用超级对齐RLHF优化CoT,例如采样8种CoT逻辑,通过偏好模型筛选符合人类价值观的。

问题9:今天体验发现它的能力还是会在部分的环境有点退步,比如说我们遇到了一个慢车,就会一直迟疑着没有超车。但如果现在是我现在的理想L9可能就超过去了(当时的路段是双向的,但是每个向只有一个车道,左边中间是虚线它是可以借道超车的情况,旁边没有别的车,只有前面一辆车),这是为什么?

郎咸朋:与价值观对齐有关,当前VLA更偏安心舒适、合规,仿真评分中合规性优于OTA7.5版本。若场景中是虚线,理论上可借道,但目前版本调优偏好偏稳妥。若对VLA下达“超过前面的三轮车”的指令,它可能回复“当前单车道不想跨实线”。

问题10:地库里现在最快只能15公里每小时,但实际上人类的话肯定要超过这个时速的,如果是我的话,我就不会去用它了,我会很着急那这个问题怎么解决?

郎咸朋:进一步提升能力并做好测试后,会逐步提高车速上限(目前已从10公里提升到15公里)。

问题11:现在靠边停车的动作还有比如说让它往前走几米这种动作,以及还有掉头的动作都会比较缓慢,这和帧率是有一定关系的吗?

詹锟:与帧率无关。往前走几米无需快速起步,所以缓慢;掉头动作较慢是因当前版本处于初期调试阶段,涉及底盘控制信号的挂挡问题,属工程实现层面调整,与时延无关。

问题12:目前的状态下,如果我在路边接人,我可能不会去使用。因为现在我得告诉它往前开,我一脚油过去,然后一脚油刹住,让人赶紧上来。感觉离能够使用还比较远,我现在看不到它能做成什么样。那么未来到底怎么使用?它能做到实用吗?

郎咸朋:不同人群会逐步接受产品(早期领先者→早期大众→晚期大众)。对晚期大众而言,关键是信任感和体验与自身驾驶方式一致。VLA会先确保核心技术能力(如倒车轨迹规划正确),再整合工程能力和产品体验,目前是第一个版本,后续会加快迭代,最终能做到实用。

问题13:比如在园区里远程召唤过来的功能,当车还不在视野里的时候特别希望能看到这个车周围的影像,这个功能我们会不会做?

郎咸朋:该功能已实现,在手机上可查看车周围的影像。

问题14:之前试驾i8的时候,当时还是端到端+VLM的版本。我把手挡在左边A柱的摄像头上或我闭着眼睛,它好长时间都没有提示让我去观察路况,这是不是太宽松了?

郎咸朋:当时的DMS(驾驶员监控系统)是中间版本,试驾活动时做了调整(因之前觉得太敏感),那几天处于优化过程中。

问题15:今天的MEGA巴士是后台有人可以操作那个车,这个只是针对这种体验而来的对吧?

郎咸朋:如非必要不会介入,展示的是为后续更高级别自动驾驶积累的能力(包括成片区域仿真能力),属于研发和预研阶段的能力积累。

问题16:以后比如这些功能真的法规落地可以用了,后台也会有人在看着吗?

郎咸朋:国家法规允许后,不会用大量人力,会用AI接管。目前展示中后台有人是为了保护和方便理解,后续会推进AI接管。

问题17:请教两个问题。今天体验的时候没有机会穿过园区的大门。第一个问题,VLA上车以后,行车、泊车和AEB三个模块是不是都在一体训练了?第二个问题,特斯拉6月底到7月上旬一系列的动作关注度都比较高,想听一下评价,你们看特斯拉目前做的Robotaxi、FSD、Grok4等,这一系列动作对咱们驾驶这块有什么可以参考的?或者换个角度说,理想现在正在做的努力,跟特斯拉有什么差别,或者有哪些相同的地方?

詹锟:

第一个问题:VLA推送时,行车、泊车、AEB已一体训练,当前版本均包含这些模块。

第二个问题:理想关注特斯拉进展,有北美调研团队,认为其Robotaxi路线需更谨慎和细致研发。理想目标是通过技术迭代实现全场景自动驾驶,会借鉴特斯拉在远程接管、路线采集等方面的探索。双方技术栈均瞄向高级别自动驾驶,但理想更注重逐步迭代和全场景能力积累。

问题18:刚才郎博说一年内能实现,从技术能力上讲,是不是一年内实现L4?

郎咸朋:技术上希望如此,但目前技术先进性和差异度未充分体现,易被认为宣传不实。VLA架构与人类思维相似,最可能实现L4;正与国家相关机构讨论L4政策,深度参与法规建设;内部目标是提供安全的辅助驾驶,并探索更高可实施性,VLA迭代速度快。去年端到端发展迅速,VLA会更快(因摒弃人工测试,依赖无人仿真)。今年年底目标是MPI达到400-500公里(目前为百公里量级),明年达千公里量级。

问题19:咱们说“我们要成为更好的家庭司机”,其实每个人对司机的要求和驾驶感受不一样,有的需要激进一点,有的需要稳妥一点,甚至同样的人也有不一样的需要。今天我们体验到的是在这个路段上开快一点,后续是否有能力做到让它全程开快一点?

郎咸朋:能。未来会提供多种驾驶风格,并非预设,而是根据用户使用偏好调整(如不同路段速度适配),通过强化学习实现。将来会在端侧做强化学习,在用户车上训练专属模型,让车的驾驶风格越来越像用户。

问题20:是否可以理解成这个能力是VLA或理想的技术路线专属的?和其他的友商路线比起来,从产品体验上看,这可以成为一个差异化的地方吗?

郎咸朋:可以。VLA基于强化学习实现该能力,每家友商路线不同,理想的VLA架构可支撑这些产品思路,形成差异化。

问题21:刚才说VLA是很符合人类驾驶逻辑的,但人类还有一个逻辑“有下意识”,突然有东西闯入或侵入的时候,下意识会以安全为主,比如先刹停。像前两天有媒体做了测试,我们看到只要这个策略是保守的,它就可以通过它刹停。我们刚才一直在讨论时延的问题,时延再低也有时延,这个安全兜底的问题是怎么解决的?除了VLA,有没有其他的机制?

湛逸飞:AEB功能会一直保持,理想AEB帧率高,在极端场景下(包括人驾和功能开启状态)可做最后的安全兜底,直接使用感知结果。

问题22:如果车开出来就像自己的话,那驾驶员不同时怎么切换?

郎咸朋:上车时通过FaceID切换驾驶风格。

#xxxx

#xxxx

#xxxx

#Qcnet->SmartRefine->Donut

Argoverse v2上SOTA的进化之路~

笔者这段时间阅读了来自ICCV2025的论文DONUT: A Decoder-Only Model for Trajectory Prediction

这篇论文以qcnet为baseline,基于decoder-only架构配合overprediction策略,在argoversev2上取得了SOTA

联想到之前笔者所阅读的论文SmartRefine,该论文也是基于Qcnet的基础上对refine部分进行改进,也在argoverse v2上取得了SOTA;

因此,本着学习的态度,笔者想在此简单总结这三篇论文

Query-Centric Trajectory Prediction--CVPR 2023

SmartRefine: A Scenario-Adaptive Refinement Framework for Efficient Motion Prediction--CVPR 2024

DONUT: A Decoder-Only Model for Trajectory Prediction--ICCV 2025

先看qcnet​

Query-Centric Trajectory Prediction--CVPR 2023

两个关键点

笔者理解该文有两个关键点:

  • 以查询为中心的场景编码范式

这种场景编码范式使得模型学习的表示是独立于全局时空坐标系的,带来一个好处,可以复用过去的历史计算,无需重新规范化和重新编码输入

  • propose+refine两阶段轨迹解码范式

首先采用无锚query以循环方式生成轨迹proposal;然后通过refiner将proposal 轨迹作为锚点,基于锚点的query细化预测轨迹

接下来具体看这两个关键点​

以查询为中心的场景编码范式

  • 传统的场景编码方式--当前时刻的直角坐标系下状态表示

传统的编码方式是利用时间网络来压缩时间维度,然后仅仅在当前时间步执行map-agent, agent-agent的融合;这种方式没有factorized attention更好;factorized attention在每个时间步中进行特征融合,因此,因子化注意力可以捕获更多信息,例如代理和地图元素之间的关系如何在观察范围内演变。

轨迹预测是一项流式处理任务;但是传统的场景编码方式中依赖于当前时刻的局部坐标系,这导致后续时间步的推理过程中无法直接使用之前时间步计算得到的特征

  • 以查询为中心的编码范式--每个时刻的极坐标系下的状态表示

引入一种以查询为中心的编码范式,用于学习独立于场景元素全局坐标的表示;如下图所示

具体来说,我们为每个场景元素建立一个局部时空坐标系,在其局部参考系中处理查询元素的特征,然后,在执行基于注意力的场景上下文融合时,我们将相对时空位置注入到键和值向量中。

图片

换个更加容易理解的语言来阐述,其实就是以每个时刻的位置为极坐标的极点,heading vector的方向为极轴表示agent自身状态,map元素,agent之间的相对状态,agent-map之间的相对状态;
具体来说就是表示agent自身位移矢量,速度矢量,map元素中点的位置及相对位置矢量,agent-agent之间相对位置矢量,以及agent-map相对位置矢量
这个地方插一嘴,为啥叫query-centric编码范式?这是由于每个时刻的状态在每个时刻的局部坐标系下表示后,经过编码,然后在注意力操作中会成为query,所以称之为query-centric的场景编码范式;换个名字叫every-timestamp local centric都行

直接看代码理解更清晰!

1. 先看怎么表示agent自身状态--位移矢量+速度矢量在极坐标系下拆分成大小和方向

下面是qcnet代码中对agent的输入状态的构成,分为位移大小,位移向量同航向向量的夹角,速度大小,速度矢量同航向向量的夹角

x_a = torch.stack([torch.norm(motion_vector_a[:, :, :2], p=2, dim=-1),        #计算位移向量的大小angle_between_2d_vectors(ctr_vector=head_vector_a, nbr_vector=motion_vector_a[:, :, :2]),  #计算航向向量同位移向量之间的角度差异torch.norm(vel[:, :, :2], p=2, dim=-1),                    #计算速度矢量的大小angle_between_2d_vectors(ctr_vector=head_vector_a, nbr_vector=vel[:, :, :2])], dim=-1)     #航向同速度向量之间的夹角

通过一个FourierEmbedding对象self.x_a_emb进行编码

x_a = self.x_a_emb(continuous_inputs=x_a.view(-1, x_a.size(-1)), categorical_embs=categorical_embs) #车辆历史轨迹的编码

得到傅里叶特征之后同语义特征级联

2. 再看agent-agent之间的相对状态怎么表示--相对位置矢量大小,相对位置矢量方向,相对方向以及时间差

我们为场景元素对准备相对位置嵌入,它将被合并到基于注意力的运算符中,以帮助模型了解两个元素的局部坐标系之间的差异。

用4D的描述符来总结他们的相对位置;具体来说,对于两个坐标系 和 

4D描述符包含,两个坐标系原点之间的距离,两个坐标系的相对方向

图片

以及两个坐标系的方向差,时间差S-T;经过堆叠的MLP后得到fourier features,表示为 

这个地方有补充,agent-agent之间的相对位置表示不仅仅是不同agent之间的,同一个agent不同时刻也可以看作是两个agent之间的相对状态,也需要按照上述方式表示并进行编码

以下是同一个agent不同时间步相对位置编码的代码

# mask_t 是按照时间步是否存在构建的智能体到智能体之间的邻接矩阵mask_t = mask.unsqueeze(2) & mask.unsqueeze(1)      edge_index_t = dense_to_sparse(mask_t)[0]       #这一行将密集的邻接矩阵mask_t转换为稀疏格式,可能是边索引的列表。[0]表示只关注第一个输出,edge_index_t = edge_index_t[:, edge_index_t[1] > edge_index_t[0]]   #??? 这过滤掉自环边,并确保图没有无向边,只保留边(i, j),其中j大于i。edge_index_t = edge_index_t[:, edge_index_t[1] - edge_index_t[0] <= self.time_span] #进一步基于时间条件过滤边,只保留表示在self.time_span时间范围内的连接的边。rel_pos_t = pos_t[edge_index_t[0]] - pos_t[edge_index_t[1]] # 构建车辆之间的相对位置向量rel_head_t = wrap_angle(head_t[edge_index_t[0]] - head_t[edge_index_t[1]])r_t = torch.stack([torch.norm(rel_pos_t[:, :2], p=2, dim=-1),angle_between_2d_vectors(ctr_vector=head_vector_t[edge_index_t[1]], nbr_vector=rel_pos_t[:, :2]),  #计算车辆之间的相对位置向量与航向向量之间的夹角rel_head_t,                # 相对航向差异edge_index_t[0] - edge_index_t[1]], dim=-1)            # 时刻差异r_t = self.r_t_emb(continuous_inputs=r_t, categorical_embs=None)

以下是不同agent之间相对状态的编码

edge_index_a2a = radius_graph(x=pos_s[:, :2], r=self.a2a_radius, batch=batch_s, loop=False,max_num_neighbors=300)edge_index_a2a = subgraph(subset=mask_s, edge_index=edge_index_a2a)[0]rel_pos_a2a = pos_s[edge_index_a2a[0]] - pos_s[edge_index_a2a[1]]rel_head_a2a = wrap_angle(head_s[edge_index_a2a[0]] - head_s[edge_index_a2a[1]])r_a2a = torch.stack([torch.norm(rel_pos_a2a[:, :2], p=2, dim=-1),angle_between_2d_vectors(ctr_vector=head_vector_s[edge_index_a2a[1]], nbr_vector=rel_pos_a2a[:, :2]),rel_head_a2a], dim=-1)r_a2a = self.r_a2a_emb(continuous_inputs=r_a2a, categorical_embs=None)

3. 再看如何表示map元素中的点及相对位置矢量--地图元素在polygon级别表示为第一个点+第一个点的方向,在点级别表示为相邻点矢量大小+矢量方向

qcent中对map元素的处理分为点级别和polygon级别(类似于vectornet,这个polygon级别可以理解为就是一个实例级别,可能是一个lane_segment,也可能是一个cross_walk)

对于polygon级别:取每个polygon第一个点的位置及方向

lane_segment_idx = polygon_ids.index(lane_segment.id)centerline = torch.from_numpy(centerlines[lane_segment.id].xyz).float() #获得指定lane_segment的中心线坐标的numpy矩阵,维度为[n 3]polygon_position[lane_segment_idx] = centerline[0, :self.dim]polygon_orientation[lane_segment_idx] = torch.atan2(centerline[1, 1] - centerline[0, 1],            #按照两个centerlines上的点的坐标计算方向,得到夹角centerline[1, 0] - centerline[0, 0])    polygon_height[lane_segment_idx] = centerline[1, 2] - centerline[0, 2]polygon_type[lane_segment_idx] = self._polygon_types.index(lane_segment.lane_type.value)    #lane_type 指示哪些车辆类型可以使用此类车道polygon_is_intersection[lane_segment_idx] = self._polygon_is_intersections.index(lane_segment.is_intersection)

就是取lane_segment中的中心线中第一个点的坐标及方向,cross_walk中起始位置和方向作为polygon的位置及方向

对于点级别:取相邻点构成的矢量和方向

map元素中点的位置表示倒是很简单,取的是相邻点坐标构成的矢量,这段代码在数据集预处理argoversev2Dataset中

left_boundary = torch.from_numpy(lane_segment.left_lane_boundary.xyz).float()right_boundary = torch.from_numpy(lane_segment.right_lane_boundary.xyz).float()point_position[lane_segment_idx] = torch.cat([left_boundary[:-1, :self.dim],            #获得指定lane_segment的左边界、右边界和中心线的坐标,截止到倒数第二个点right_boundary[:-1, :self.dim],centerline[:-1, :self.dim]], dim=0)       #此lane_segment的所有点的位置信息left_vectors = left_boundary[1:] - left_boundary[:-1]           #left_boundary是从何而来right_vectors = right_boundary[1:] - right_boundary[:-1]center_vectors = centerline[1:] - centerline[:-1]point_orientation[lane_segment_idx] = torch.cat([torch.atan2(left_vectors[:, 1], left_vectors[:, 0]),torch.atan2(right_vectors[:, 1], right_vectors[:, 0]),torch.atan2(center_vectors[:, 1], center_vectors[:, 0])],dim=0)point_magnitude[lane_segment_idx] = torch.norm(torch.cat([left_vectors[:, :2],right_vectors[:, :2],center_vectors[:, :2]], dim=0), p=2, dim=-1)      #计算lane_segment中每个点到点之间向量的长度point_height[lane_segment_idx] = torch.cat([left_vectors[:, 2], right_vectors[:, 2], center_vectors[:, 2]],dim=0)

上述代码列举了lane_segment中点的状态处理,point_magnitude就是矢量的长度,point_orientation是矢量的方向

写至此处,其实已经将qcnet中对于地图元素如何表示的部分阐述完毕了;但是仅仅依赖上述内容还不便于理解;下面再看下map encoder如何处理

总体思路类似于vectornet,现在polygon内部聚合特征(同一个polygon的点之间),然后是polygon之间聚合特征(polygon之间交互)

具体代码如下,位于qcnet中的QCNetMapEncoder对象的forward中;

#调用contiguous产生一个新的tensor,其数据在内存中是连续的pos_pt = data['map_point']['position'][:, :self.input_dim].contiguous()     #map_point position中存放了当前地图中所有lane_segments和cross_walks的点的坐标orient_pt = data['map_point']['orientation'].contiguous()                   #存放地图中所有点的方向,角度pos_pl = data['map_polygon']['position'][:, :self.input_dim].contiguous()   #存放地图中所有的lane_segments中心线的第一个点的坐标以及cross_walks的中心线的两个点的坐标orient_pl = data['map_polygon']['orientation'].contiguous()                 #存放地图中中心线中的第一个点的方向orient_vector_pl = torch.stack([orient_pl.cos(), orient_pl.sin()], dim=-1)  #地图中的lane_segments和cross_walks的中心线的第一个点的方向向量if self.dataset == 'argoverse_v2':if self.input_dim == 2:x_pt = data['map_point']['magnitude'].unsqueeze(-1)     #data['map_point']['magnitude']存放的是点到点之间的长度x_pl = Noneelif self.input_dim == 3:x_pt = torch.stack([data['map_point']['magnitude'], data['map_point']['height']], dim=-1)x_pl = data['map_polygon']['height'].unsqueeze(-1)else:raise ValueError('{} is not a valid dimension'.format(self.input_dim))x_pt_categorical_embs = [self.type_pt_emb(data['map_point']['type'].long()),self.side_pt_emb(data['map_point']['side'].long())]    #对点的类型和边的类型进行embeddingx_pl_categorical_embs = [self.type_pl_emb(data['map_polygon']['type'].long()),self.int_pl_emb(data['map_polygon']['is_intersection'].long())]else:raise ValueError('{} is not a valid dataset'.format(self.dataset))x_pt = self.x_pt_emb(continuous_inputs=x_pt, categorical_embs=x_pt_categorical_embs)        #对点的位置和类型进行embeddingx_pl = self.x_pl_emb(continuous_inputs=x_pl, categorical_embs=x_pl_categorical_embs)        #对边的位置和类型进行embedding

默认的input_dim为2,取polygon中点的矢量的大小,使用fourier_emb编码得到傅里叶特征x_pt

polygon内部的特征聚合代码如下,需要构造polygon内部中点点之间相对状态表示及编码

edge_index_pt2pl = data['map_point', 'to', 'map_polygon']['edge_index'] #描述当前地图中点与多边形之间所属关系的“边索引”(edge index)rel_pos_pt2pl = pos_pt[edge_index_pt2pl[0]] - pos_pl[edge_index_pt2pl[1]]   #所有点的坐标减去各自所属的多边形的中心线的第一个点的坐标,产生相对位置向量# rel_orient_pt2pl每个对象中点的方向同中心线第一个点的方向之间的角度差值,此处是点的方向同中心线第一个点的方向之间的角度差值rel_orient_pt2pl = wrap_angle(orient_pt[edge_index_pt2pl[0]] - orient_pl[edge_index_pt2pl[1]])      #限制角度在if self.input_dim == 2:r_pt2pl = torch.stack([torch.norm(rel_pos_pt2pl[:, :2], p=2, dim=-1),         #计算相对位置向量的长度,rel_pos_pt2pl存放每个点的方向angle_between_2d_vectors(ctr_vector=orient_vector_pl[edge_index_pt2pl[1]], #orient_vector_pl 折线中的中心线的第一个点的方向向量nbr_vector=rel_pos_pt2pl[:, :2]),             # 折线中所有点同中心线第一个点之间形成的方向向量rel_orient_pt2pl], dim=-1)             #每个点的方向同中心线第一个点的方向之间的角度差值elif self.input_dim == 3:r_pt2pl = torch.stack([torch.norm(rel_pos_pt2pl[:, :2], p=2, dim=-1),angle_between_2d_vectors(ctr_vector=orient_vector_pl[edge_index_pt2pl[1]],nbr_vector=rel_pos_pt2pl[:, :2]),rel_pos_pt2pl[:, -1],rel_orient_pt2pl], dim=-1)else:raise ValueError('{} is not a valid dimension'.format(self.input_dim))r_pt2pl = self.r_pt2pl_emb(continuous_inputs=r_pt2pl, categorical_embs=None)

polygon之间的自注意力依赖于polygon之间相对状态的表示及编码

# 描述当前地图中多边形与多边形之间所属关系的“边索引”(edge index)# 第一行是pred/succ/nbr等多边形的id,第二行是所从属的lane_segment的id,两者构成edge_index_pl2pledge_index_pl2pl = data['map_polygon', 'to', 'map_polygon']['edge_index']# 基于节点的距离生成图的边       edge_index_pl2pl_radius = radius_graph(x=pos_pl[:, :2], r=self.pl2pl_radius,            #pos_pl存放地图中所有lane_segment和cross_walk中心线的第一个点的坐标batch=data['map_polygon']['batch'] if isinstance(data, Batch) else None,loop=False, max_num_neighbors=300)type_pl2pl = data['map_polygon', 'to', 'map_polygon']['type']# edge_index_pl2pl_radius.size(1)是edge_index_pl2pl_radius的列数,表示建立的图的边的数量# new_zeros 被用来创建一个与这些边数目一样长的全零张量,每个元素类型设置为 torch.uint8。type_pl2pl_radius = type_pl2pl.new_zeros(edge_index_pl2pl_radius.size(1), dtype=torch.uint8)# merge_edges用于合并来自多个源的图边及其相关属性(如边类型)# 首先,使用 torch.cat(edge_indices, dim=1) 将所有的边索引张量沿着第一个维度(列)进行拼接,形成一个更大的张量,包含了所有的边。# 然后,调用 coalesce 函数(很可能是PyTorch Geometric库中的函数)。# coalesce 函数的作用是去重合并边。当图中存在多个连接相同节点的边时,coalesce 函数会把这些边合并为一条边,# 并且根据 reduce 参数指定的方法来合并它们的属性。如果 reduce 参数是 'max',则对于每一对连接的节点,只保留具有最大属性值的那条边。edge_index_pl2pl, type_pl2pl = merge_edges(edge_indices=[edge_index_pl2pl_radius, edge_index_pl2pl],edge_attrs=[type_pl2pl_radius, type_pl2pl], reduce='max')rel_pos_pl2pl = pos_pl[edge_index_pl2pl[0]] - pos_pl[edge_index_pl2pl[1]]       #地图中对象(lane_segment或cross_walk)与对象之间的相对位置向量rel_orient_pl2pl = wrap_angle(orient_pl[edge_index_pl2pl[0]] - orient_pl[edge_index_pl2pl[1]])if self.input_dim == 2:r_pl2pl = torch.stack([torch.norm(rel_pos_pl2pl[:, :2], p=2, dim=-1),angle_between_2d_vectors(ctr_vector=orient_vector_pl[edge_index_pl2pl[1]],nbr_vector=rel_pos_pl2pl[:, :2]),rel_orient_pl2pl], dim=-1)elif self.input_dim == 3:r_pl2pl = torch.stack([torch.norm(rel_pos_pl2pl[:, :2], p=2, dim=-1),angle_between_2d_vectors(ctr_vector=orient_vector_pl[edge_index_pl2pl[1]],nbr_vector=rel_pos_pl2pl[:, :2]),rel_pos_pl2pl[:, -1],rel_orient_pl2pl], dim=-1)else:raise ValueError('{} is not a valid dimension'.format(self.input_dim))r_pl2pl = self.r_pl2pl_emb(continuous_inputs=r_pl2pl, categorical_embs=[self.type_pl2pl_emb(type_pl2pl.long())])

得到各个表示之后进行注意力操作

for i in range(self.num_layers):x_pl = self.pt2pl_layers[i]((x_pt, x_pl), r_pt2pl, edge_index_pt2pl)x_pl = self.pl2pl_layers[i](x_pl, r_pl2pl, edge_index_pl2pl)x_pl = x_pl.repeat_interleave(repeats=self.num_historical_steps,dim=0).reshape(-1, self.num_historical_steps, self.hidden_dim)

4. 最后看agent-map之间的相对状态怎么表示

此处类似于agent-agent之间相对位置的表示及编码方式

以下是agent-map之间相对状态的表示及编码

# pytorch_geometric的radius方法,意在创建从一组源节点x(如代表智能体位置的pos_s)到一组目标节点y(如代表地图多边形的pos_pl)的边索引edge_index_pl2a。# 这些边基于空间近邻原则建立,即当源节点和目标节点的距离小于或等于给定半径(r=self.pl2a_radius)时,它们之间就会建立边edge_index_pl2a = radius(x=pos_s[:, :2], y=pos_pl[:, :2], r=self.pl2a_radius, batch_x=batch_s, batch_y=batch_pl,max_num_neighbors=300)     edge_index_pl2a = edge_index_pl2a[:, mask_s[edge_index_pl2a[1]]]        #过滤到不满足在指定时间步存在的agent同pl之间的边rel_pos_pl2a = pos_pl[edge_index_pl2a[0]] - pos_s[edge_index_pl2a[1]]   #计算agent同pl之间的相对位置向量rel_orient_pl2a = wrap_angle(orient_pl[edge_index_pl2a[0]] - head_s[edge_index_pl2a[1]])r_pl2a = torch.stack([torch.norm(rel_pos_pl2a[:, :2], p=2, dim=-1),angle_between_2d_vectors(ctr_vector=head_vector_s[edge_index_pl2a[1]], nbr_vector=rel_pos_pl2a[:, :2]),rel_orient_pl2a], dim=-1)r_pl2a = self.r_pl2a_emb(continuous_inputs=r_pl2a, categorical_embs=None)

encoder流程

下图是qcnet中encoder的结构图

图片

如上图所示,编码器中需要进行temporal attn,agent-map attn以及social attn;由于特征编码时,均是在各自的local坐标系下,elements之间的相对位置关系丢失,因此在进行交叉注意力时,需要额外注入agent历史时刻之间,agent与map元素,agent与agent之间的相对位置信息,以下是代码

for i in range(self.num_layers):x_a = x_a.reshape(-1, self.hidden_dim)x_a = self.t_attn_layers[i](x_a, r_t, edge_index_t)     #智能体历史轨迹特征提取x_a = x_a.reshape(-1, self.num_historical_steps,self.hidden_dim).transpose(0, 1).reshape(-1, self.hidden_dim)x_a = self.pl2a_attn_layers[i]((map_enc['x_pl'].transpose(0, 1).reshape(-1, self.hidden_dim), x_a), r_pl2a,edge_index_pl2a)         #智能体同折线对象之间的特征提取x_a = self.a2a_attn_layers[i](x_a, r_a2a, edge_index_a2a)   #智能体之间社交特征提取x_a = x_a.reshape(self.num_historical_steps, -1, self.hidden_dim).transpose(0, 1)

propose+refine两阶段轨迹解码范式

下图是qcnet中的两阶段解码部分;

DETR范式的解码器利用多个可学习查询交叉参与场景编码并解码轨迹。然而,这些模型同其他无锚方法一样,存在训练不稳定和模式崩溃的问题

我们基于查询的解码器通过利用循环的无锚proposal模块来生成自适应轨迹锚点,然后使用基于锚点的模块进一步细化初始proposal,从而克服了这些限制。

图片

1.先看循环的无锚propose阶段

上图展示的非常清楚,mode2scene和mode2mode重复次;mode2mode没啥好说的,就是mode query之间进行自注意力操作

mode2scene操作就是以input queries与target agent的时间维度上的嵌入,当前时刻的邻居agent的嵌入以及地图嵌入进行交叉注意力;

propose阶段有两点需要注意

第一个点,重复解码次得到最终的propose轨迹;假设预测未来6s的轨迹,取=3,也就是说每次循环生成20个点,即未来2s的轨迹;

第二个点,进行交叉注意力时需要为input queries假想一个其所处的坐标系,这个坐标系就是当前时刻agent的位置和航向构成的坐标系;

说人话就是指,由于我们需要解码出各个agent当前时刻坐标系下的未来轨迹,在进行交叉注意力时,类似于编码器中的操作,需要为key和value注入相对位置嵌入,通过各个scene elements的embedding到当前agent坐标系的相对状态产生相对位置嵌入

2.再看基于锚点的refine阶段

refine阶段的输入是propose阶段得到的proposal轨迹编码得到的anchor-based mode queries;这个编码是通过使用一个GRU来嵌入每个轨迹锚点,GRU最终的隐藏状态作为新的模式查询。

输送至refine模块中,refinement module预测偏差offset。此偏差是基于无锚估计得到的锚点/航路点

再看SmartRefine​

SmartRefine: A Scenario-Adaptive Refinement Framework for Efficient Motion Prediction--CVPR 2024

smartrefine,顾名思义就是对qcnet中的refine部分进行了改进;下图是samrtrefine的结构图

图片

改进的点主要有以下几点​

第一点,自适应anchor选择及上下文范围获取 Adaptive anchor/context selection

  • 对于Anchor的选择

传统的refine中的锚轨迹是选取一整条proposal轨迹,这样计算量大;

因此选择将未来轨迹点进行切分,划分成一段一段的,每一段的终点作为锚点

  • 对于上下文的获取

选择锚点周围固定半径或矩形来提取上下文的策略是次优的,针对这种情况,引入以下上下文信息动态获取范围的机制

一个anchor获取上下文的范围取决于两点,一个是迭代次数  ,另外一个是target agent在anchor处的速度;因此引入一个自适应检索策略,每个锚的检索范围R取决于细化迭代次数和agent在锚点anchor周围的平均速度

motivation:相较于早期迭代,细粒度的上下文信息只用在后期的细化迭代中;早期细化迭代中不需要细粒度的上下文信息;速度越快,越需要更大范围的上下文

范围公式为 , 是任何随着迭代次数单调递减的函数即可,本文取 ,其中  是一个常数;

  • 废话不多说总结此机制到底是干什么的

首先smartrefine一文中对refine过程的轨迹也进行分段的细化,类似于qcnet中的propose阶段的分阶段;同时,smartrefine中每次分段refine的时候,其各个锚点获取的上下文的范围是动态变化的,随着迭代次数的变化以及anchor附近agent速度而变化

图片

第二点,anchor为中心的上下文编码 Anchor-Centric Context Encoding

  • 先说motivation

回想一下,qcnet在refine阶段的整体流程;是通过GRU将proposal轨迹编码成新的mode queries;然后再走一遍mode2scene以及mode2mode

smartrefine中提到,qcnet在进行mode2scene时,keys和values还是源自于当前时刻的target agent周围的context,keys和values中所注入的相对位置信息还是周围scene elements相对于当前时刻agent坐标系的;

但是本文认为refine的过程,实际是希望沿着未来轨迹去捕获上下文的

  • 再看smartrefine怎么做的

于是乎smartrefine在refine的过程中,将周围的上下文特征转换到对应锚点坐标系下

此处再细嗦一下:

为什么要转换到对应锚点坐标系下的需求是明确的;因为希望能获取更多的场景信息;假设只使用当前时刻target agent周围的context来细化,信息还是有限的;通过上一步,已经有对应的anchor点了,取anchor附近的context信息注入到模型,肯定是有用的;在这个过程中,需要将anchor周围的context信息转换到对应的锚点坐标系下,此处所说的转移,应该也是通过相对位置信息注入的形式,这个相对位置是anchor周围的context相对于anchor坐标系的

context中的地图信息好搞,但是周围agent的信息如何整?每个agent都有多个预测轨迹,难道取概率最大的轨迹编码,得到nbr agent的嵌入,再去进行处理嘛?​

第三点,循环和多次迭代细化 Recurrent and Multi-Iteration Refinement

anchor-centric的上下文嵌入同轨迹特征嵌入相融合来细化轨迹

每条轨迹分为了N个片段segments,每个片段对应于一个锚anchor,细化每一条轨迹需要N次过程,完成整个N个片段的细化之后才算完成整体细化的一次迭代iteration

使用交叉注意力融合轨迹嵌入和上下文嵌入得到新的轨迹嵌入

新的轨迹嵌入用于预测轨迹段segment中waypoint的偏移

更新之后轨迹嵌入作为新的查询来优化下一个分段。在一次迭代中的N个步骤之后,整个轨迹都将被调整

图片

第四点,自适应细化迭代次数 Adaptive Number of Refinement Iterations

细化迭代次数越多,模型表现越好;但同时带来了计算时间的增大,为了权衡两者,提出了一种自适应细化策略;

细化迭代的次数是根据当前的预测质量和剩余的潜在细化改进进行动态调整。

因此,smartrefine除了预测轨迹,轨迹对应的概率,同时还输出一个质量分数score

第i次iteration中quality score 的定义如下

图片

其中是所有iteration中最大的预测误差;是当前第i个iteration时的预测误差,是所有iteration中最小的预测误差;上述分数的设计使得score位于0到1之间,使用绝对值-的话,不同场景差异比较大,不好

训练的时候,上面这个公式产生的各个iteration的质量分数作为gt,samrtrefine使用GRU处理所有多个trajectory features,然后再用MLP预测该iteration的分数

后续smartrefine中指定了几个策略,当满足指定的条件时,停止迭代,实现自适应refine iteration次数​

最后最后,总结一下smartrefine,前面废话太多不看也行

这篇论文的出发点是简单直白的;将refine过程变得更加智能;

怎么变得智能呢?把refine变成多次多段;在每一段每一次的refine都智能

先说每段中的智能,论文对propose得到的轨迹进行分段,每一段进行refine,这称之为多段;

  • 每段refine轨迹的智能体现在--自适应的context获取范围及anchor-centric的场景编码:

refine每段轨迹时,都有自适应的上下文获取范围,对应上图中红色圈圈的大小;上下文获取范围根据迭代次数以及agent在anchor附近的速度而定;同时,确定范围之后,获取的context信息都是基于anchor-centric编码的

  • 每次refine轨迹的智能体现在--自适应的refine迭代次数

假设轨迹分成N段,完成N段的refine之后称之为一次iteration,这才是完整的一次refine;本文的模型还输出一个score,用以衡量该iteration的分数,当满足一定条件时,就不继续refine了;自适应的控制refine的次数,更加智能

最后看DONUT​

DONUT: A Decoder-Only Model for Trajectory Prediction--ICCV 2025

这篇论文也是以qcnet为baseline进行改进,取得了argoverse v2上单agent轨迹预测的sota表现

论文中花了一节细细讲解了qcnet的结构,这是怕篇幅不够嘛哈哈

下图是DONUT的结构图

图片

先说DONUT的整体结构

DONUT最核心的内容为,两个模块proposer,refiner以及一个overprediction机制;

通过上面的结构图可以看到,本文会将所有agent的轨迹划分为子轨迹时间长度的子轨迹

从先前时间步的预测子轨迹开始 ,proposer用来预测下一个子轨迹片段,以及下下一个子轨迹片段(这个机制称之为overprediction)

将下一个子轨迹片段调整其参考点,输入至refiner中,得到细化的offset,同原始的proposal轨迹相加得到predicted sub-traj

上述过程说的比较笼统,具体再细看proposer和refiner的结构​

接着说proposer和refiner的结构及流程

先说两个模块,proposer和refiner,这两个模块的结构一样,结构图如下

图片

proposer的输入是长度的轨迹片段;

tokenizer的过程:

输入的轨迹片段通过tokenizer进行编码,得到token;轨迹片段的状态包含位置,航向,运动向量以及速度,都是在轨迹片段端点endpoint的坐标系下的

计算每个时间步的fourier特征,将多个时间步的特征送入一个MLP中,把结果concat后送入一个MLP,结合agent type的embedding后得到;下图是tokenizer的细节

图片

之后进行temporal attention,map-agent以及social attention,mode之间的自注意力操作,重复两次

temporal attn/map-agent attn/social attn的过程:

这个过程就类似qcnet;在进行attn时,keys和values需要注入的相对位置关系,是其他scene elements同ref point构成的坐标系之间的相对位置关系

proposer预测处一条sub-traj后,再输入进refiner前,会对该sub-traj调整参考点,将其中的状态调整到所预测的sub-traj端点所处的坐标系下;因此,在refiner中进行attn操作时,注入的相对位置信息是相对于这个新的ref point的坐标系

此处预测sub-traj并调整ref point和smartrefine中的操作一样,都是分阶段预测,同时调整到ref point坐标系下;

detokenizer的过程:

detokenizer用来解码轨迹,同时一个MLP输出overprediction的结果,同时输出一个logit,表示各个模式的概率

还有个问题,初始时proposer和refiner中Agent tokens from previous steps如何获取?

为了用历史tokens初始化模型,本文将历史轨迹输入至proposer以及refiner中

由于唯一的目的是为时间注意力生成历史agent令牌,我们可以放弃预测。我们在单峰设置下运行,即K=1。在历史轨迹的最后一个时间步之后,我们沿着模态维度复制令牌。从这一点来看,该模型是多模态的。

此处没太懂;但笔者认为此处为了在初始时获得历史步的agent token,会将来自历史轨迹的sub-traj输送至只有temporal attn,map-agent attn以及social attn的proposer和refiner,然后在mode维度重复K次;
这是不是将历史轨迹走了一遍qcnet的encoder,然后得到了历史步的agent tokens

还有个问题,初始时proposer的输入怎么来?

初始时还没有前一步预测多模态轨迹,此时怎么来?难道是历史轨迹真值复制K份嘛

refiner的结构同proposer相同​

最后看下实验结果和消融实验

图片

在非ensembling模型中,除了Demo之外,基本都能打过;和Demo互有胜负

消融实验

图片

decoder-only的架构提升明显

#xxxx

#xxxx

#xxxx

#xxxx

#xxxx
http://www.xdnf.cn/news/16753.html

相关文章:

  • 图像处理中级篇 [2]—— 外观检查 / 伤痕模式的原理与优化设置方法
  • MELF电阻的原理,特性和应用
  • 8,FreeRTOS时间片调度
  • 技术速递|GitHub Copilot for Eclipse 迈出重要一步
  • Leetcode-206.反转链表
  • 当过滤条件不符合最左前缀时,如何有效利用索引? | OceanBase SQL 优化实践
  • 免费语音识别(ASR)服务深度指南​
  • 39.MySQL索引
  • 基于深度学习的医学图像分析:使用YOLOv5实现医学图像目标检测
  • react+ant design怎么样式穿透-tooltip怎么去掉箭头
  • 限流算法详解:固定窗口、滑动窗口、令牌桶与漏桶算法全面对比
  • 实现implements InitializingBean, DisposableBean 有什么用
  • 【2025/07/30】GitHub 今日热门项目
  • arkui 动画曲线
  • 分布式搜索和分析引擎Elasticsearch实战指南
  • SpringBoot 2.7.18 升级 3.4.6
  • duiLib 自定义资源目录
  • C#垃圾回收机制:原理与实践
  • 极致业务弹性 密度性能双管齐下—联想问天 WR5220 G5 服务器测试
  • Spring AI 海运管理应用第2部分
  • Android Animation Transitions:打造流畅的用户体验
  • 全栈:SSH和SSM和Springboot mybatisplus有什么区别?
  • WPFC#超市管理系统(3)商品管理
  • 如何判断一个数据库是不是出问题了?
  • 2025年6月电子学会青少年软件编程(C语言)等级考试试卷(二级)
  • SpringBoot学习 |springboot概念+微服务架构
  • Python并发与性能革命:自由线程、JIT编译器的深度解析与未来展望
  • 滚珠导轨在电子制造中的流畅性优势
  • Electron + Fabric 打包遇到error LNK2001
  • 从数据到预测:InfluxDB+Prophet时间序列分析案例实战