当前位置:   article > 正文

自动驾驶合集33

自动驾驶合集33
# GAD

量产直达!GAD:集预测到规划与一体的自动驾驶生成式学习

论文题目:GAD-Generative Learning for HD Map-Free Autonomous Driving
论文链接:https://arxiv.org/pdf/2405.00515
github链接:https://github.com/weijian-sun/GAD

近年来,基于深度学习的技术已广泛应用于量产的自动驾驶领域,主要关注感知模块,一些工作将此方法扩展到预测模块。然而,下游规划和控制模块仍然采用大量手工规则进行设计,以基于优化的方法(例如二次规划或模型预测控制)为主。这导致自动驾驶系统出现性能瓶颈,因为极端情况根本无法通过枚举手工制定的规则来解决。新的规则也必须根据不同的驾驶场景和新的极端情况进行设计和重新调整。这个过程成本高昂,而且扩展性很差,因为自动驾驶车辆(ADV)的场景空间是无限的,而规则的数量却有限。随着特斯拉开始了端到端范式的布局,工业界也越来越多的人开始这个方向的探索。该文章提出了一种基于深度学习的方法,将预测、决策和规划模块结合在一起,并试图克服基于规则的方法在自动驾驶的实际应用中的缺陷,特别是在城市场景中。作者提出的 DNN 模型仅使用 10 小时的有效人类驾驶员数据进行训练,并且支持迄今为止市场上所有量产的 ADAS 功能。该方法已部署到极越测试车上。

相关工作

端到端学习和验证

最近有大量研究表明,端到端自动驾驶已成为一个重要的研究热点。这些方法使用神经网络产生规划轨迹或控制命令,其中许多方法专注于闭环模拟器实验。然而,模拟环境与现实世界之间存在持续的域差异,特别是在传感器数据的精确度以及智能体的的动态状态方面。智能体行为的准确建模和闭环环境中的真实世界数据模拟仍然有尚未解决的巨大挑战。最近,用真实世界数据的开环实验引起了更多关注。像 UniAD 这样的方法声称它们通过学习中间任务来提高最终规划性能的有效性。然而,它依赖于额外的最优控制模块来获得可行的轨迹并防止碰撞, 这违背了打破运动规划任务中基于优化的缺陷的最初目的。然而,开环实验的有效性在数据分布不平衡和度量限制方面受到了的挑战。我们通过现实世界的闭环道路测试严格验证我们的方法来解决这些有争议的问题,其中所提出的方法避免了对传统优化算法的依赖,以得出符合指定约束的轨迹。

数据驱动的预测

先前的研究广泛探索了基于actor的未来驾驶动态预测方法。这些方法要么产生特定的轨迹,要么使用生成模型来概述可能的结果。为了对场景上下文进行编码, 可以将经典的 CNN 架构应用于光栅化地图来预测 2D 坐标。最近的方法已经开始利用从高清地图获得的拓扑图,以便更好地表示车道连接性。VectorNet 将地图和智能体编码为具有全局交互图的折线polylines。LaneGCN 分别地处理参与者过去和车道图,然后将它们与一系列注意层融合。另一方面,时间占用图提供了另一种在场景级别预测网格或heatmap的选项。我们也遵循在场景级表示建模中的理念,但提出了一个多阶段管道来以两种格式来实现预测。此外,与严重依赖轨迹输出精度的典型方 法不同,我们的智能体结果主要在安全层中采用并增强我们的一些采样器。

数据驱动的规划

对于基于模仿的方法,采用轨迹预测的建模策略,构建在人类演示监督下训练的模仿解码器。除了端到端的工作之外,SafetyNet 开发了一个机器学习规划器并在旧金山市中心进行了测试,但如果没有后备层的帮助,该模型很难避免碰撞。VAD 将驾驶场景建模为完全矢量化表示。PlanT 在参与者级表示中提出了一种基于 transformer 的骨干,并在仿真中进行了验证。然而,单调的单轨迹模拟存在鲁棒性和缺乏可解释性,因此难以按情况进行调整,并且难以规模化。最近,有良好可解释性的显式方法已被证明可以更好地适应更具挑战性的环境。此类方法通常使用轨迹采样器构建cost,以通过选择cost低的最佳候选者来生成所需的轨迹。cost直接从网络学习。从 NMP 的开创性工作开始,DSDNet 和 P3 进一步发展,将人工设计的cost和基于学习的cost结合起来,以获得总的cost。在后续工作中,MP3 引入了无地图方法,而 ST-P3 则探索基于视觉的输入。我们还采用这种组合来选择最佳轨迹,但通过使用模块化感知输出增强生成算法来扩展系统的鲁棒性。与上述所有仅依赖于基于规则的采样器的方法相比,我们的模型利用多模态模仿学习来构建多样化的混合轨迹集,并通过在可解释的cost中进行评估作为场景占用和智能体动作。

论文方法

输入

本文的目标是提出一种以集成方式从预测到运动规划的深度学习pipeline;因此,不会详细讨论感知。在我们的工作中,感知模块遵循典型的主流设计,通过合并来自一组具有不同 FoV 的独立摄像机的图像来提供跟踪实体、地标和占用体素,以形成360度环绕视图。感知模块有一个深度神经网络,可以直接以鸟瞰图(BEV)形式拼接特征,并使用transformer来捕获空间和时间上下文。占用也是该感知模块输出的一个组成部分,提供了三维世界的有用场景表示,为 SDV 提供了自由空间来导航。为了对不同用途的上游输出进行编码,我们设计了场景(scene)和实例(instance)级别的表示,分别应用于轨迹评估和生成。

Scene Representation:我们使用光栅化来进行场景表示。与实例矢量化相比,带有卷积前向的场景光栅化可以更好地捕获场景级线索,最大程度地避免信息丢失。由于卷积网络利用空间局部相关性的特性,无论建筑区域、交通锥体和路障等未定义或不规则的元素如何组织以及是否具有规则的形状,都可以将其纳入统一的设计中。由自由空间或占用所描述的附加场景信息,缺乏参数描述,很难涉及矢量化表示,并且一旦被忽略,对于安全系统可能是致命的。为了合格的轨迹评估器,BEV 光栅化尽可能多地涉及来自在线感知输出的环境线索,以捕获细节。我们将不同的场景元素(例如智能体、车道、占用、路线)光栅化到不同的二进制通道中,以便能够分别对不同的元素进行推理。

Instance Representation:采用实例表示来解决场景编码的缺点,即光栅化容易扭曲高度组织和结构化的信息,使其变得杂乱无章。由于此过程是不可逆的,因此检索车道中心线、道路边界和其他元素的实例编码具有挑战性。在运动预测任务的准确性和效率方面,与 Transformer 相结合的矢量化表示已被证明优于 BEV 栅格上的 CNN 模型。为了利用这种形式的建模,我们采用矢量化将感知输出编码为矢量集。具有参数描述的实例以向量形式编码,包括路线点、自车和智能体历史、车道中心线和道路边界,而非参数输出被忽略,如占用、建筑面积、路障和其他不规则元素。每个元素包括位置和类型特征,位置相对于自车姿态进行描述。不同元素之间的关系被表示为一个graph。

模型结构

路线

当高清地图可用时,输入路线通常以 ADV 应遵循的车道序列的形式给出。然而,在无高清地图时,这是不可能的,特别是对于没有领先地标的交叉路口的转弯场景。在我们的无地图设置中,路线信息源自不同场景的视觉地标和人类通勤轨迹,以替代那些缺失的线索。由地标构建的车道中心线主要用于巡航和变道场景,而在转弯场景中,提前记录起止位置,一旦车辆接近路口,就会以人类通勤轨迹作为路线。

预测

轨迹评估

轨迹生成

给定学习的cost,可以通过最小化上述方程来计算最终轨迹。然而,这种具有物理约束的优化是 NP 困难的。一方面,我们通过结合先验知识和结构化输出,通过更复杂的设计来评估和扩展先前关于轨迹采样的工作感知和预测。此外,我们在生成器训练期间利用基于 GAN 的方法来解决优化问题。接下来,我们将描述采样和生成算法。主要可分为基于参考线和无参考线的算法。结合参考信息的方法可以在循环中生成长期一致的输出。由于此信息很少随时间变化, 因此桥接连续帧可以提高跨帧稳定性。然而,仍然需要处理难以获取参考相关信息的场景。为了 增强系统的可扩展性,我们按照在无参考线的情况下构建基于曲线和检索的采样器。接下来将解释所提出的Lattice采样器、Imitation 规划器和基于 GAN 的规划器。它们结合了由视觉地标或通勤轨迹构建的参考信息。

Lattice Sampler:车道中心和周围智能体的运动是构建 ADV 执行的潜在轨迹的强先验。当地标可用时,可以利用车道几何形状来指导轨迹采样过程。另一方面,可以结合预测的轨迹来生成交互式行为车。我们的采样轨迹包括横向上的车道保持、车道变换、微移、侧超,以及纵向上的跟随、超车、让行、停止。

GAN Based Planner:上述模仿生成器通过不同的头与我们的评估器分开进行训练。为了以最小的cost生成轨迹,我们提出了一种 基于GAN 规划器,对训练范式进行了修改,桥接了孤立的优化目标,使得等式(4)可以通过学习来解决。对于标准对抗性损失,generator尝试最小化以下函数,而discriminator尝试最大化它。

安全层

对于自动驾驶运动规划,安全策略是必要的。感知占用和轨迹预测结果用于验证候选轨迹的安全性。因为解码时没有假设先验。我们根据评估的cost对轨迹进行排序,并迭代它们以检查模块化形式的基本规则(如轨迹和边界框),直到我们按升序缓存足够的候选者。为了确保跨帧一致性,我们以最低的成本重新提供 n 个经过验证的轨迹,并将它们与最后一帧中的规划输出进行比较。上述目标提高了系统对于我们的模型无法处理的极端情况的鲁棒性。

实验结果

预测

开环规划

对于开环规划,我们的分析优先考虑两个关键评估指标:L2 误差和碰撞率。规划范围为 3.0 秒。我们通过量化规划轨迹与人类驾驶轨迹的偏差来确定 L2 误差,并评估 ADV 与其他道路智能体发生潜在碰撞的频率。表中描述了与先前方法的全面比较。值得注意的是,模仿策略会产生与轨迹与经验真值轨迹的偏差成正比的惩罚,从而导致所有检查范围内的 L2 误差最小。

闭环实验

最初,我们进行了消融研究,以评估封闭道路环境中各种采样器的必要性。随后,我们确定了最佳采样器组合,以进一步评估开放的城市道路。这些方法在人口稠密的城市进行了全面的真实测试。在长达 30 多 公里的公路测试中,该模型熟练地执行了各种复杂的操作,例如车道跟随、并道、让行人等。这些道路测试的结果记录在表中。

值得注意的是,表现出优越模仿指标的方法并不总是在闭环评估中表现出增强的性能。这种差异可能是由于模拟指标在充分评估规划任务的复杂性方面存在局限性。尽管如此,多模态模仿生成器和基于 GAN 的生成器显着提高了系统在开环和闭环设置中的性能,主要体现在规划器的智能和连续帧之间的连续性方面。效率和舒适度指标均显示出数据驱动生成器带来的提高。闭环结果表明,多模态减轻了模仿学习固有的脆弱性,而lattice采样器进一步增强了整个系统的鲁棒性。为了严格评估所提出的方法的有效性,我们也对 GAD 和传统的模块化、用户级、基于规则的系统(称为 DPQP)进行了比较分析。可以看出,在系统的稳健性和舒适性方面仍然存在明显的性能差异。我们认为增加训练数据大小可以改善这种差异。

# MapTR继往开来的18篇论文剖析

实时局部建图的深入思考

实时局部建图领域自从端到端方案MapTR(2023.1)[1]问世后已经又涌现出非常多优秀的工作,基本是在MapTR基本框架的基础上进行一系列改进,包括原班人马的升级作品MapTRv2(2023.8)[2].博主准备从MapTRv2开始至今(2024.5)发表的比较优秀的论文按时间顺序做一个梳理,大概18篇,因为数量较多不具体介绍每个模块,只按自己的理解概括最核心的创新点,在文章结尾会对18篇论文做一个简要总结,希望对从事相关领域研究的同学和业内人士有所帮助.

[1] MapTR: Structured Modeling and Learning for Online Vectorized HD Map Construction
[2]MapTRv2: An End-to-End Framework for Online Vectorized HD Map Construction

1.BeMapNet(2023.6][3]

[3] End-to-End Vectorized HD-map Construction with Piecewise Bezier Curve

BeMapNet是在MapTR之后发表的,但没有借鉴MapTR架构,而是在基于图像分割+复杂后处理得到向量化地图元素的模型,如HDMapNet[4] 的基础上,首次提出使用分段的贝塞尔曲线来表征地图元素,实现端到端的目的.关于贝塞尔曲线可参考这篇博客:启思:从零开始学图形学:10分钟看懂贝塞尔曲线(https://zhuanlan.zhihu.com/p/344934774).

BeMapNet架构

为了能更加准确且高效地表示形状复杂多变的地图元素,论文中使用分段的贝塞尔曲线,并且使用固定的阶数和可变的分段数.由Bezier Decoder输出实例级的贝塞尔曲线特征,再由Piecewise Bezier Output Head输出point级的贝塞尔曲线控制点序列.文中还使用IPM-PE Align Layer为bev feature提供IPM投影的几何先验信息.

2.MapTRv2(2023.8)[2]

是MapTR的提升版,文中总结的第一个创新点是置换等价(permutation-equivalent)建模方法,也就是对gt建立多个按不同顺序排列的点集副本,目的是消除排列顺序的影响,然后用分层二分匹配(Hierarchical bipartite matching)的方式与query的预测结果做匹配,匹配的标准是与距离最近的一种排列的gt的距离,有点绕,因为在原版MapTR已经用到,不过多介绍.

第二个创新点是MapTRv2的核心,是对decoder的self-attention和cross-attention都做出了改进.对self-attention的改进是使用分层query embedding的方案代替之前的全量query embedding,就是建立实例级的instance query 和关键点级的point query两个集合,分别在集合内部做self-attention,再用广播相加的方式代表全量的query集合,这种共享权重的方式不仅能为每个point赋予对应的instance信息,还能极大地减少计算量,在精度和性能上都有很大提升.对cross-attention的改进主要是混合了BEV-based和PV-based cross-attention,充分利用BEV和PV信息.下图可以直观展示这种设计:

MapTRv2 的Map decoder结构

还有一个创新是结合了one-to-one和one-to-many匹配.one-to-one自不必说,one-to-many是另外设计了一组instance query,与复制了K次的gt进行匹配,这样可以增加正样本的匹配成功概率,加快模型的收敛.

3.StreamMapNet(2023.8)[4]

[4]StreamMapNet: Streaming Mapping Network for Vectorized Online HD Map Construction

StreamMapNet主要在时序方面对MapTR进行了提升.核心策略是近期出现的streaming strategy,在去年发布的VideoBEV [5],StreamPETR [6], Sparse4D v2 [7]等论文都有应用,不同于传统的单iteration迭代多帧或者stacking多帧的方式,streaming strategy单iteration只迭代一帧,在iteration之间做时序融合,可以实现时序模型的训练时长与单帧模型相当,且能融合长时序数据,大幅提升了训练效率.在StreamMapNet的时序融合中,使用了稠密bev feature和稀疏query同时融合的方式,bev feature采用Gated Recurrent Unit [8] (GRU)模块进行融合,稀疏query采用和Sparse4D v2类似的方式,按置信度取top k个query迭代到下一帧,与下一帧新初始化的query进行合并,再用一个transformation loss进行约束.

Stacking 和 Streaming 策略对比

[5]Exploring recurrent long-term temporal fusion for multi-view 3d perception

[6] Exploring object-centric temporal modeling for efficient multi-view 3d object detection

[7] Sparse4d v2: Recurrent temporal fusion with sparse model

[8] Empirical evaluation of gated recurrent neural networks on sequence modeling

文中还使用了Multi-Point Attention代替原始deformable DETR的cross-attention设计,参照MapTRv2, 本质上是只使用了instance query,没有point query,一个instance query负责预测多个点,生成多个reference points,而不是原始deformable DETR中一个query预测一个点,生成一个reference points,加多个offset.这样是为了适应地图元素的non-local特性.我认为本质上与区分instance query和point query差不多.

Multi-Point Attention

4. InsightMapper(2023.8)[9]

[9] InsightMapper: A closer look at inner-instance information for vectorized high-definition mapping

InsightMapper也是在MapTR基础上做出一些改进.第一是细化了地图元素预处理,如下图所示,将原Polyline的复杂形状都在交点切分成多个简单形状,降低模型学习难度.

地图元素预处理

第二是提出MapTR的分层query embedding的设计有一个问题是instance之间共享了point query的权重,导致不同instance的points错误地有了一定的关联性.所以文中没有设定共享point query权重,而是对每个instance设置不同的point query,称为Hybrid query, 消除这种错误的关联.在做self-attention进行instance内部信息交互的时候设计一个attention-mask,让属于不同的instance的point query之间不可见,只在instance内部进行交互.

Hierarchical query和Hybrid query对比

5. MapPrior(2023.8)[10]

[10] MapPrior: Bird's-Eye View Map Layout Estimation with Generative Models

MapPrior是一种结合感知和先验的地图模型,先验用的是预训练生成模型,整体结构如下:因为对生成模型了解不是很深,就不具体介绍了.

MapPrior架构

6.PivotNet(2023.9)[11]

[11] PivotNet: Vectorized Pivot Learning for End-to-end HD Map Construction.

PivotNet针对MapTR使用固定数量且地位一致的点表征复杂地图元素会引起形状信息损失的问题,提出了用关键点(pivot)和共线点(collinear point)表征地图元素的端到端框架.关键点即对元素形状产生决定性影响的点,如下图所示.

Pivotnet架构

首先在query的设定上并没有采用分级的架构,而是只有point query,在Line-aware Point Decoder模块中,由最多N个point query concate起来经过MLP得到Line feature,再与BEV feature相乘得到一个可学习的Line-aware mask,通过与BEV 语义分割的真值做bce loss和dice loss进行约束,得到query与instance的关系.

最关键的部分在于关键点预测和匹配模块,不同于MapTR同样数量的dt和gt做一对一匹配,这里先计算出一个实例的gt的T个关键点,T是动态变化的,然后在N个dt里找到最优的T个组合,即为dt的关键点,剩下即为共线点,都是带有顺序的.为了提高效率,文中还使用了一些优化措施.匹配结束后,利用对关键点和共线点不同的约束条件进行约束.实验证明Pivotnet比起MapTR能够更好地预测元素的形状和角度.

7.MapVR(2023.10)[12]

[12] Online Map Vectorization for Autonomous Driving: A Rasterization Perspective

MapVR(Map Vectorization via Rasterization)通过一个额外的可微栅格化模块来学习更好的向量化地图,架构如下:

MapVR架构

文中提出,类似MapTR的向量化地图模型的问题是使用Chamfer distance做gt和dt的匹配存在两个缺陷,一是没有尺度不变性,即对于大尺度和小尺度地图元素采用一样的标准不合理,二是这种方式忽略了形状和几何特性,会得出不合理的结果,图示如下:

Chamfer Distance匹配的问题

而如果使用栅格化地图,就可以以mIOU为标准,匹配更加准确,如下图所示:

mIOU匹配

文中首次使用近期相关研究中提出的一种无参数的可微分的栅格化[11]来作为向量化地图和栅格化地图的桥梁.在训练阶段可以更准确地实现gt和dt的匹配,使loss计算更加准确,帮助模型收敛,在推理阶段可以移除这个模块,输出更好的向量化地图.

[13] Soft rasterizer: A differentiable renderer for image-based 3d reasoning

8.MapEX(2023.11)[14]

[14] Mind the map! Accounting for existing map information when estimating online HDMaps from sensor data

在实际工程应用中,往往还不能完全抛弃传统高精地图,但传统高精地图有着生成周期长,更新慢的缺点,MapEX就是利用已有的未更新的先验地图数据,结合传感器实时感知,给出一个实时的地图结果,是一个非常有实际工程价值的模型,比起只使用传感器输入有质的提升.

MapEX架构

如果是在工程中存在发生变化的真实地图数据,那可以直接作为输入的EX-GT(Existing map GT),如果使用开源数据集不存在发生变化的场景,文中做了一些场景模拟,来模拟地图的变化,如元素缺失,元素加噪,元素彻底变化等等,随机对GT做一些处理后作为输入的EX-GT.

MapEX的模拟场景

MapEX的框架也是建立在MapTR框架的基础上,将decoder原来使用的初始化query的一部分替换为从EX-GT的位置和类别编码而来的EX-query,编码的方式如下图所示:

Ex query编码

然后在匹配过程中并不是直接使用匈牙利匹配,而是对EX-query做一个预匹配,即对与真实GT实例的所有点的平均距离小于1m的EX-query直接匹配为对应的GT,剩下的query再进行匈牙利匹配,降低模型学习的难度.这样就可以充分利用已有地图数据的先验信息,得到更加准确的实时输出.

另外MapEX还有一个地图变化检测模块,即使用一个独立的change detection query,与decoder每一层的全部query做cross-attention,融合所有query的信息,最后回归出地图变化的置信度.

9.GeMap(2023.12)[15]

[15] Online Vectorized HD Map Construction using Geometry

GeMap也是利用几何先验对地图元素进行约束的模型.对比BeMapnet,PivotNet等模型,大多基于绝对坐标,不具备旋转平移不变性,且没有考虑到实例之间的相关性,如车道线之间一般平行,且距离与车道宽度有关,车道线与路口一般垂直等.GeMap基于实例的位移矢量(displacement vectors),从它自身的形状线索和不同位移矢量之间的相关性线索对输出实例和点集进行约束,能够更加准确地利用地图元素的几何特征.

GEMap框架

具体是通过Geometry-Decoupled Attention和Euclidean loss实现的.前者设计了两个解耦的attention模块,通过不同的attention-mask,一个关注于实例内部的形状信息,一个关注于实例之间的相关性信息.后者是分别对形状和相关性进行约束,公式如下(实际操作中使用了优化效率的策略),另外也使用了segmentation, depth, dorection 和pts loss.

Euclidean Loss

10. ScalableMap(2024.1)[16]

[16] ScalableMap: Scalable Map Learning for OnlineLong-Range Vectorized HD Map Construction ScalableMap

ScalableMap使用一种类似于缩放的方式来更好地还原出地图元素的结构化信息,实现长距离场景的性能提升,在整个架构上都做出了一些改进.

ScalableMap架构

首先是BEV特征提取部分,第一步是分为两个分支,一个通过DETR架构得到类似BEVFormer的position-aware的全局BEV特征, 另一个利用MLP得到的基于每个视角的instance-aware的k个BEV特征,多视角BEV特征再通过线性层融合成为统一的BEV特征.第二步是两个BEV特征经过Structure-Guided 特征融合模块,并加入一个额外的分割头,对两个BEV特征分别进行矫正和融合,使其同时具备准确的位置和形状信息.

其次是使用渐进的Decoder来实现多尺度的地图表示和监督,核心是HSMR策略,即定义地图密度为地图元素中曲率超过阈值的顶点数量, 获得渐进的不同密度的地图元素表示.在gt中,对顶点过多的元素进行采样,对顶点较少的元素进行插值,可以获得不同密度的gt; 在Decoder每层的query设定中,采用动态插入的方法,即利用相邻顶点之间的位置约束生成新的query,动态地插入到原始query序列中,以此获得不同密度的query序列.

在loss约束上也使用渐进的loss约束,一是Vertex loss, 分别对原始顶点和新加入的顶点进行约束,前者使用L1 loss,后者使用顶点到所属边的距离,二是Edge Loss对形状进行约束.

11.mapNeXt(2024.1)[17]

[17] MapNeXt: Revisiting Training and Scaling Practices for Online Vectorized HD Map Construction

mapNeXt是从实际工程的角度对mapTR进行优化.首先通过分析mapTR对gt的置换等价处理,即对每个gt增加所有可能的排列再进行匈牙利匹配,发现如果使用无序的Chamfer Distance作为距离代价,可以忽略置换等价带来的影响.作者通过增加decoder中query的组数,采用并行的方式进行一对一的匈牙利匹配,得到了较好的效果,且不影响推理效率.另外没有采用隐式的位置编码,而使用显式的无参数的sin位置编码提供位置先验可以提升效率.

在模型迁移和缩放方面,分析了各种预训练模型的性能,由于decoder增加了更多的query,选择使用更强的VoVNetV2 backbone+FFN并做了规模扩展的适配,而且在使用PETRv2的nuScenes BEV地图分割任务上预训练,实现更好的模型迁移.

12.Stream Query Denoising(SQD)(2024.1)[18]

[18] Stream Query Denoising for Vectorized HD Map Construction

Stream Qurty Denoising(SQD)是在StreamMapNet[4]的基础上进一步结合了去噪的思想,帮助模型更好的收敛.去噪的思想由DN-DETR[19]等一系列论文启发,是通过对gt加噪声构建denoise query,直接绑定对应的gt而不需要匈牙利匹配,使transformer减少被匈牙利匹配不稳定的特性所影响,实现更快的收敛.

[19] Dn-detr: Accelerate detr training by introducing query denoising.

SQD架构

SQD整个架构与StreamMapNet类似,通过stream的方式实现时序融合,包括bev feature的融合和top k query的融合,这里前序帧query对应的gt,以及前序帧的bev feature都根据ego-motion进行了转换.

SQD核心改进在于Denoising模块,和DN-DETR不同的是SQD是对前序帧的gt进行加噪.首先针对curve的特性,采取和bbox不同的加噪方式: line shifting, angular rotation, 和scale transformation,再编码成位置嵌入,构造noise query,和当前帧的query以及前序帧的top k query进行拼接,一起输入decoder.

进一步地,文中考虑到前一帧gt转换到当前帧后可能带来的偏差,如新增,缺失,位置偏差等,设计了Adaptive Temporal Matching和Dynamic Query Noising模块作为补充和增强.前者计算了前序帧经过时序转换以后和当前帧的Chamfer Distance,只把小于阈值的gt用来与当前帧的query做匹配.后者在对前序帧加噪的过程中设计了decay rate,结合实例的变化尺度进行有针对性的加噪.

13.ADMap(2024.1)[20]

[20] ADMap: Anti-disturbance framework for reconstructing online vectorized HD

ADMap架构

ADMap提出由于MapTR预测的点会发生抖动和移位,导致预测的实例会变得扭曲和锯齿状.为了提高模型的抗干扰能力,在MapTR的基础上对网络和Loss做出一些改进,主要有三个部分:Multi-Scale Perception Neck (MPN), Instance Interactive Attention (IIA) and Vector Direction Difference Loss(VDDL).

MPN类似于FPN,将bev feature通过下采样和上采样得到不同尺度的bev 特征,便于decoder能得到多尺度的信息.

IIA首先在分级query(instance query 和point query)设计的基础上,改变了MapTR中instance query的生成方式:通过point query的维度转换和多层MLP学习而来,先经过Instance-self-attention进行实例之间的信息交互,再与point query相加,经过Points-self-attention学习实例内部的点之间的信息交互.

VDDL则设计了带权重的向量方向损失,来进一步约束实例向量的形状和方向.方向损失由逐点与gt的夹角余弦获得,权重取决于gt的方向变化,即对方向变化剧烈的实例给予更大的权重.

14.MapQR(2024.2)[21]

MapQR致力于在MapTR的基础上进一步挖掘查询机制(query)的潜力,只使用instance query,共享同一地图中的内容信息,避免使用points query发生同一地图元素的信息不一致性,同时可以减少计算量.

MapTR和MapQR的Decoder对比

作者称这种实例查询机制为Scatter-and-Gather Query,首先定义N个Instance query,经过self-attention后通过Scatter操作每个扩展为n个副本,根据不同的n个reference points生成不同的Positional Embedding,再concate后输入cross-attention,最后将输出的query通过Gather操作恢复为instance query,每个query负责预测n个点.另外,在reference points的设计上,MapQR考虑了不同高度的影响.

15.EAN-MapNet(2024.2)[22]

[22] EAN-MapNet: Efficient Vectorized HD Map Construction with Anchor Neighborhoods

EAN-MapNet架构

EAN-MapNet提出,建图模型一般使用DETR decoder,这种query构建机制缺少对地图元素临近的局部位置特征的关注,所以参照anchor思想,在BEV空间初始化多组anchors,每个anchor设计了查询单元(query units)机制,由neighborhood central query和non-neighborhood central query构成,同样GT除了target points, 也在半径为r的区域增加gt neighborhoods,neighborhood central query与target points相匹配,non-neighborhood central query与gt neighborhoods中的随机点相匹配.

文中还设计了Grouped local self-attention(GL-SA)模块适应这种query机制,分为局部特征提取,组间特征交互,组内特征交互三步,以更好地利用局部特征.损失函数方面也同时考虑了center和none-center区域的损失.

16.HIMap(2024.3)[23]

[23] HIMap: HybrId Representation Learning for End-to-end Vectorized HD Map Construction

HIMap架构

HIMAP也是在query机制和decoder设计上对MapTR进行改进,使模型能够更好地学到实例级的特征.首先设计了混合的HIQuery,包含E个element query和E* P个point query,再把两种query分别输入element特征提取器(参照Masked Attention[24])和point特征提取器(参照DAB-DETR[25]),point query属于一个实例的positional embedding的加权和作为element query的positional embedding.更新好的point query和elementquery会输入point-element hybrider进行信息融合,具体方式是属于同一个实例的point query会与对应的element query相加,然后每个element query会与对应的所有point query的加权和相加,这样point query 和element query都同时拥有了点的信息和实例信息,再作为新的HIMAP输入下一层decoder.

[24] Masked-attention mask transformer for universal image segmentation.

[25] Dab-detr: Dynamic anchor boxes are better queries for detr.

为了保证point query和element query的一致性,作者做了一致性约束,即计算point query的加权和与对应的element query的交叉熵加到总loss中.

17.MapTracker(2024.3)[26]

[26] MapTracker: Tracking with Strided Memory Fusion for Consistent Vector HD Mapping

MapTracker架构

MapTracker是用跟踪的方式更好地进行时序增强,从而使建图更加准确和一致性,鲁棒记忆机制是核心.文中借鉴MOTR[27]的端到端目标跟踪思想,一共用到两种记忆机制,一是BEV feature的记忆,会从前面10帧中选取更接近1m/5m/10m/15m的4帧,经过ego-motion转换后用两层卷积层融合.二是Vector记忆,每帧由100个新初始化的vector和若干历史帧保存的预测score超过阈值的positive vector经过时空变换和MLP拼接而成,对应于同一个地图元素的历史vector会被融合.

[27] MOTR: End-to-End Multiple-Object Tracking with Transformer

训练过程中同时考虑BEV loss,VEC loss和Transformation loss,同时对BEV特征,地图元素匹配和跟踪,时序融合的一致性进行约束.采用增强每帧的几何特性,前后两帧之间建立匹配关联的方式提高gt的一致性,并采用带有一致性信息的mAP做为评测标准.文中没有具体说推理机制,应该与训练机制一致.

18.P-MapNet(2024.3)[28]

[28] P-MapNet: Far-seeing Map Generator Enhanced by both SDMap and HDMap Priors

P-MapNet是除MapEX[14]外另一种结合已有地图先验来辅助当前建图的方式,与MapEX采用直接替换query不同,P-MapNet主要使用cross-attention和MAE[29] finetune的方式来融合二者信息.

[29] Masked autoencoders are scalable vision learners.

P-MapNet架构

文中同时利用了比较粗的SDMap和比较精细的HDMap先验进行信息融合.首先是SDMap融合模块.SDMap信息可以从GPS获取,经过CNN网络得到SDMap特征,与传感器(包括camera/lidar)融合和视角转换得到的BEV feature(经过下采样)通过cross attention进行融合,再接一个segmentation head得到一个较粗的分割地图.

然后是HDMap融合模块.这里首先有一个MAE预训练步骤,与原生的MAE不同,这里的预训练是输入带有mask的栅格地图原始image,再通过一个segmentation head输出语义分割地图,与原生MAE的作用相同,都是作为一个具有较强恢复能力的autoencoder,结构大体是VIT+segmentation head.预训练结束后,将SDMap和传感器融合的segmentaion结果输入MAE,得到refine的segmention结果.

看到这大家可能有点confused, 最后对上面18个模型做个简短的总结:

使用地图元素的几何特性进行约束: BeMapNet, PivotNet, GeMap, ADMap
对MapTR 的query机制进行改进: MapTRv2, StreamMapNet, InsightMapper, ADMap, MapQR, EAN-MapNet, HIMap
时序优化: StreamMapNet, SQD(加去噪), MapTracker(跟踪)
使用先验信息: MapPrior, MapEX, P-MapNet
其他: MapVR(栅格化辅助), mapNeXt(工程优化)

# 特斯拉自动驾驶看懂了行人手势 | 初探行人决策和手势识别

1.特斯拉礼让行人并看懂行人手势

在下图中,行人速度比较快,特斯拉将其横穿马路的意图预测的很准确,并且做出了减速让行的决策。

行人停下脚步以后,可以看到,渲染的行人变成了迎面走来的姿态。(当然,这个是渲染的行人,算法里真正拿到的行人意图可能与它不一致)。特斯拉做出了继续等待行人的决策。

随后,行人挥手示意车辆通过,特斯拉做出了相应的决策,输出了轨迹,并加速离开。

2.自动驾驶中关于行人的决策

在自动驾驶中,高动态的障碍比如车辆和行人,自车需要与它们进行交互甚至博弈。对于车辆的行驶意图,它受到路沿、黄线、车辆运动学等等众多的约束,并且还有转向灯、刹车灯、倒车灯等信号提示,对于这类障碍物的意图预测,是比较准确的。但是对于行人的意图预测就很难了。

这个场景就是一个典型的自车与横穿行人交互的场景,按照传统的方法,也可以实现。首先是感知模块检查到动态行人,然后预测模块预测出行人横穿的意图,接下来,决策模块做出礼让行人的决策(比如在车前方加上停止线),最后规划模块优化出轨迹。那特斯拉基于端到端的方法,可能就没有这么多模块了,直接拿数据去驱动,只要训练的数据里有这种场景,它就能处理。

如果用传统的方法,怎么实现在行人挥手后,加速离开呢。这个好说,在预测模块中,增加人类手势识别的功能,将识别到的手势,给到决策模块,决策模块再根据这个场景,手写一些规则,如果满足这些规则,比如

if 行人速度为零 && 行人挥手 && 行人与自车一定距离 && 其他   决策-->加速绕行else    停车等待

如果用端到端的方法,无论是完全的端到端,还是类似于UniAD那种分成几个模块端到端的,通过大量的训练后,自动驾驶车辆在看到这个场景时,就会做出相应的决策和行为。

大部分场景,基于数据驱动的方式能做的,手写规则也能做,只是手写规则毕竟是人脑想出来的,一旦规则变得越来越多,各种规则之间相互影响,就很难再增加新的规则了。而基于数据驱动的方式,数据集可以一直加,模型可以一直训练。

3.手势识别的方法

本文重点还是记录一下手势识别的方法,通过这个来进一步了解机器学习的相关知识。重点学习基于视觉的手势识别。

3.1 基于雷达的手势识别

这个比较有名的是goolge的Soli项目,Soli雷达是由谷歌和英飞凌合作,专门为近距离感知任务研发的一款60GHz毫米波雷达产品。将各个特征沿着多普勒维连接在一起,利用3x3卷积提取运动信息。提取到的特征被送入LSTM模型进行分类预测,时间序列长度被设置为12帧。

算法就是CNN+LSTM。利用8层的CNN进行特征提取,利用LSTM对CNN提取的特征进行时序特征的提取和手势分类。

可能是由于手势定义过于精细,雷达精度达不到,最终这个手势识别的功能没有完整的应用到google手机上。不过CNN+LSTM的套路,是值得学习的,之后有时间我会实践一下,看下效果。

3.2 基于视觉的手势识别

opencv,CNN都可以做手势识别,本文重点记录一下google的开源框架MediaPipe,可以方便的在安卓,web,嵌入式设备中部署使用。

论文:https://arxiv.org/pdf/2111.00038项目:https://ai.google.dev/edge/mediapipe/framework?hl=zh-cn

下边是实践代码,用opencv和MediaPipe实现的手部检测,只涉及手部追踪,下一次再学习手势分类。

需要安装:​​​​​​​

1. 下载安装python2. 下载安装vscode(其他ide也可以)3. pip install opencv-python4. pip install mediapipe
  1. import cv2
  2. import mediapipe as mp
  3. import time
  4. cap = cv2.VideoCapture(0)
  5. mpHands = mp.solutions.hands
  6. hands = mpHands.Hands()
  7. mpDraw = mp.solutions.drawing_utils
  8. handLmsStyle = mpDraw.DrawingSpec(color=(0,0,255), thickness=5)
  9. handConStyle = mpDraw.DrawingSpec(color=(0,255,0), thickness =10)
  10. pTime = 0
  11. cTime = 0
  12. while True:
  13. ret, img = cap.read()
  14. if ret:
  15. imgRGB = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
  16. result = hands.process(imgRGB)
  17. # print(result.multi_hand_landmarks)
  18. imgHeight = img.shape[0]
  19. imgWidth = img.shape[1]
  20. if result.multi_hand_landmarks:
  21. for handLms in result.multi_hand_landmarks:
  22. mpDraw.draw_landmarks(img,handLms,mpHands.HAND_CONNECTIONS, handLmsStyle,handConStyle)
  23. for i, lm in enumerate(handLms.landmark):
  24. xPos = int(lm.x * imgWidth)
  25. yPos = int(lm.y * imgHeight)
  26. cv2.putText(img,str(i),(xPos-25,yPos+5),cv2.FONT_HERSHEY_SIMPLEX,0.4,(0,0,255),2)
  27. print(i,xPos, yPos)
  28. cTime = time.time()
  29. fps = 1/ (cTime-pTime)
  30. pTime = cTime
  31. cv2.putText(img,f"FPS : {int(fps)}",(30,50), cv2.FONT_HERSHEY_SIMPLEX,1,(255,0,0),3)
  32. cv2.imshow('img',img)
  33. if cv2.waitKey(1) == ord('q'):
  34. break

下边是代码参考的视频,感兴趣的可以看一看:

  1. https://www.youtube.com/watch?v=x4eeX7WJIuA
  2. https://www.bilibili.com/video/BV1GR4y1W7KS/?spm_id_from=333.337.search-card.all.click&vd_source=c22e088abc8e5f41edd4d4ebc99ecc48

Taobao 天皓智联  whaosoft aiot http://143ai.com 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/720960
推荐阅读
相关标签
  

闽ICP备14008679号