实时感知建图

分析完目前汽车高阶智驾方面的形势(汽车智驾领域关于定位的思考-CSDN博客),实时感知建图方案的发展越来越快,而且是智能驾驶不能避开的技术,因此我决定背着“传统SLAM的包袱”,研究一下实时感知建图方案中的开源项目,那就从华中科技大学和地平线的MapTR开始吧。

MapTR

框架采用简单的编码器-解码器Transformer架构和分层二部图匹配,通过所提出的排列等价建模来进行地图元素学习。解决了实时建图的问题,也可解决车道线与周围的拓扑关系的问题。MapTR 是第一个实时和 SOTA 矢量化的高清地图构建方法,具有在复杂多样的驾驶场景中表现稳定、鲁棒。

置换等价点集:

每一个实例是均匀采样点的点集(见fixed_num_sampled_points(self)),当然对于点对点匹配最后回归的是20个点。点集主要分成了两种,包括polygon和Polyline。

Polyline和polygon采用不同的处理方式,polyline只需要分成正向和反向,polyon 不只分正向和反向,还需要根据起点生成不同的组合。详见 shift_fixed_num_sampled_points_v2(self):

Encoder

Encoder从多个车载摄像头的图像中提取特征,并将这些特征转换为统一的特征表示,即鸟瞰图(BEV)表示。

作者利用一个传统的骨干网络来生成多视角特征图,然后,2D图像特征 F 被转换为 BEV 特征 。作者采用 GKT 作为基本的2D到BEV转换模块,考虑到它易于部署和高效的特性。MapTR兼容其他转换方法,并且能够保持稳定的性能,对IPM, LSS等等进行消融实验。最后作者在MapTRV2里面还是用了LSS,对于数据量较少的情况,这种纯几何投影的还是收敛的快一些,而且效果也挺不错的。

Decoder

作者提出了一种分层query的embedding方案,用于显式编码每个地图元素。具体来说,定义了一组实例级别的query\left \{ q_{i}^{ins} \right \}_{i=0}^{N-1}和一组点级别query\left \{ q_{j}^{pt} \right \}_{j=0}^{N_v-1},这两组query在所有实例之间共享,这里先是·通过一个扩维操作,让每个query既有instance信息,又有point信息,最后再view回去组成每一个Instance信息。

每个地图元素(索引为 i)对应于一组分层query\left \{ q_{ij}^{hie} \right \}_{j=0}^{N_v-1} 。第 i 个地图元素的第 j 个点的分层query的表达式为:

q_{ij}^{hie}=q_i^{ins}+q_j^{pt}

Map的decoder一般包含6层,它们通过迭代更新分层查询。在每个解码器层中,作者采用多头自注意力机制(MHSA),让分层query相互交换信息(包括实例间和实例内)。然后,采用Deformable Attention来让分层query与BEV特征进行交互(这个思想受到BEVFormer的启发)。每个query的 q_{ij}^{hie}预测参考点 p_{ij}的的二维归一化 BEV 坐标(x_{ij},y_{ij})。然后,作者在参考点周围采样 BEV 特征,并更新query。这样,可以通过迭代更新query和交互的BEV 特征来逐步优化地图元素的表示,从而实现更好的地图元素建模。

Map元素通常具有不规则的形状,需要具备长程上下文。每个地图元素对应于一组参考点 ,这些参考点具有灵活和动态的分布。这些参考点可以适应地图元素的任意形状,并捕获用于地图元素学习的丰富上下文信息。通过使用参考点,MapTR可以更好地对地图元素进行建模和表示,从而提高地图理解的性能。

MapTR在单次推断中并行地推断出一个固定大小的地图元素集合N,遵循DETR的端到端范例。N被设置为大于场景中地图元素的典型数量。真值元素Y=\left \{ y_i \right \}_{i=0}^{N-1}=\left \{ (c_i,V_i,\Gamma _i) \right \}_{i=0}^{N-1}包括 目标类别标签、点集和排列组。预测出的结果\hat{y}_i=(\hat{p}_i,\hat{V}_i)包括预测的分类分数和预测的点集。为了实现结构化的地图元素建模和学习,MapTR 引入了层次双分图匹配,即按顺序进行实例级别的匹配和点级别的匹配

匹配和损失函数

MapTR的预测头非常简单,由一个分类分支和一个点回归分支组成。分类分支用于预测实例的类别得分,而点回归分支用于预测点集 \hat{V}的位置。对于每个地图元素,点回归分支输出一个2Nv维的向量,表示Nv个点的归一化BEV坐标。这样,MapTR可以直接输出地图元素的类别和位置信息,实现对地图元素的高效预测。

这里和detr的匹配是差不多的,匹配就用二分图匹配的思想, 然后损失函数中的实例级的损失大概就是向量化的余玄损失。

1. 真值匹配

1.1 实例级匹配

首先,作者需要在预测的地图元素 和真值地图元素之间找到一个最优的实例级别标签分配 ,它具有最低的实例级别匹配cost,使得真值和预测值的点匹配cost最小。

实例类别匹配项,使用Focal loss进行计算。位置匹配损失损失。在DETR之后,匈牙利算法被用来找到最优的实例级别分配。

2.2 点级匹配

在点级别匹配中,通过比较不同排列的匹配成本,选择具有最小成本的排列:

曼哈顿距离是两个点在直角坐标系中沿坐标轴方向的绝对差值的总和。

2. 训练损失

MapTR是基于最优的实例级别和点级别分配进行训练的。损失函数由三部分组成:分类损失、点对点损失和边缘方向损失:

点对点损失只监督折线和多边形的节点,而不考虑边缘(相邻点之间的连接线)(啥意思?描述相邻点间的向量相似性,也就是点的顺序)

MapTR V2 

V2主要对MapTR加了一些trick。与MapTR的区别如下:

  1. 引入了为分层查询机制量身定制的解耦自注意力,这大大减少了内存消耗并带来了收益;
  2. 引入了辅助的一对多集预测分支来加快收敛速度;
  3. 在透视图和鸟瞰图上都采用了辅助密集监督,这大大提高了性能;
  4. 实例中增加了centerline,对下游运动规划非常重要。
  5. 线性的实例使用了固定方向
  6. 加了一些辅助头监督(只要性能不够就加辅助头)
  7. 做了bev和pev的消融实验,但是最后用的还是bev
  8. decoupled self attention: 如果所有的点都做attention, 那么计算量就会太大。那么我们可以让每个实例对应序号的点继续self attention, 但是这样得到空间信息还不是太够,所以还会让每个实例内的点做attention

Map Encoder

地图编码器从传感器数据中提取特征,并将特征转换为统一的BEV特征表示。支持各种PV2BEV转换方法,例如CVT、LSS、可变形注意力、GKT和IPM。在MapTRv2中,为了显式地利用深度信息,我们选择基于LSS的BEVPoolv2作为默认转换方法。

Map Decoder

地图解码器由地图query和几个解码器层组成。每个解码器层利用自注意和交叉注意来更新地图query。

分层查询。每个地图元素对应于一组分层查询。第i个地图元素的第j个点的分层查询被公式化为:

自注意力变体。为了减少计算和内存的预算,我们采用了解耦的自注意力,即沿着inter-ins维度和intra-ins.维度,解耦的自注意力大大降低了内存消耗和计算复杂度。

Cross-Attention变体。解码器中的交叉注意力被设计为使地图查询与输入特征交互。我们研究了三种交叉注意:基于BEV、基于PV的和混合的交叉注意。

对于基于BEV的交叉注意力,我们采用可变形注意力使层次查询与BEV特征交互。

对于基于PV的交叉注意力,我们将参考点投影到PV图像,然后对投影的参考点周围的特征进行采样。密集的BEV特征已弃用。

混合交叉注意是上述两种交叉注意方式的结合。

预测头。由一个分类分支和一个点回归分支组成。

训练

分层二分匹配

为了实现结构化地图元素建模和学习,MapTRv2引入了分层二分匹配,按顺序执行实例级匹配和点级匹配。

实例级别匹配,一般使用匈牙利算法

点级别匹配

一对一集合预测损失

匹配好后,将一一对应的要素根据下式计算损失。

其中边缘方向损失,

辅助一对多集合预测损失

辅助密集预测损失

为了进一步利用语义和几何信息,我们引入了三种辅助密集预测损失:

深度预测损失参考BEVDepth。添加了一个额外的BEV分割头辅助训练。进一步为了充分利用密集监督,我们利用地图GT结合相机内外参得到在透视图上前景mask并使用辅助PV分割头训练网络。

参考

地平线最新!MapTRv2:端到端实时SOTA的在线矢量化高精地图构建方法-CSDN博客

GeMap

主页:https://invictus717.github.io/G

论文:https://arxiv.org/abs/2312.0334

代码:GitHub - cnzzx/GeMap: Online Vectorized HD Map Construction using Geometry

原文试验结果中,GeMap的效果由于MapTRv2.

几何性质的不变性

以往的工作,不论是使用朴素的折线表示,还是使用带控制点的多项式曲线(比如贝塞尔曲线、分段贝塞尔曲线),都基于绝对坐标,并在绝对坐标基础上端到端优化。基于绝对坐标的优化目标本身不具备刚性不变性,因此很难期待模型陷入的局部最优解包含对几何性质的理解。因此,一种能充分刻画几何性质且具有一定不变性的表示是必要的。

几何解耦的注意力机制

现有的方法MapTR,PivotNet等都是将元素上的每一个点对应到一个查询的Transformer架构,这样的方法对前文提到的两类的几何性质不进行区分。

问题在于,在自注意力中,所有查询(也就是“点”)之间都平等地相互作用。然而,地图元素的形状实际上对应着一组又一组的查询。而这些组之间的交互,在感知元素形状时就成为了累赘。反之在感知元素之间关联的时候,形状亦成为了冗余的因素。

将自注意力分成两个步骤进行:

1)每个地图元素包括 个查询,在这个查询内部进行注意力,用以处理几何形状

2)补充跨元素的注意力关系,用以处理几何关联 形象化地表示见下图,左侧为单个元素内部进行的形状注意力,右侧为元素之间进行的关联注意力。我们的实现直接使用注意力掩码来控制范围。事实上,由于这两种注意力是互补的,合理地实现有可能将时间复杂度减半。

HDMapNet

HDMapNet延续了传统方法上基于语义分割的思路。采用了点图融合方式生成BEV特征,其中点云分支使用PointPillar+PointNet方式提取特征,图像分支则使用MLP方式实现PV2BEV转换,即将PV空间到BEV空间的变换看作变换矩阵参数,并通过MLP去学习(拟合)该参数。

地图head分为语义分割,实例嵌入和方向三个分支,可在后处理阶段建立三者的联系,最终给出矢量地图.可以看出这种方法是比较直观,容易理解的,但劣势也是显而易见的,计算量较大,耗时较长,且不够End-to-End,部署难度高

VectorMapNet

VectorMapNet是HDMapNet的后续工作(来自清华和理想),摒弃了通过语义分割得到地图的思路,而是使用目标检测的思路。

VectorMapNet主要分为三个阶段,

第一阶段是通过多高度(−1m, 0m, 1m, 2m)的IPM方式对地图要素投影到BEV空间。IPM是传统的PV2BEV转换方法,但需要满足地面高度平坦的假设。现实中,该假设通常较难满足,因此该工作假设了4个不同地面高度下(-1m,0m,1m,2m)的BEV空间,分别将图像特征经过IPM投影到这些BEV空间上,然后将这些特征concatenate起来得到最终的BEV特征。

第二阶段即地图要素检测阶段,使用了经典的DETR[4]和Deformable DETR[5]范式,得到地图要素的关键点,只是这里query的设计比较特殊。在动态目标检测中,我们一般只需要定义几百个地位相同的query,直接输入transformer就可以,但地图要素和动态目标有点不同,我们首先要给出一定数量(数量一般不会很多)的实例,假设最多m个,每个实例又包括一定数量的关键点,假设固定n个,最终需要得到m*n个点,但这些点不是相互独立的,而是有一个二级的继承关系.如果我们设定每个query预测一个点,一共需要定义m*n个query, 如果直接把m*n个query输入transformer,结果肯定无法体现这种继承关系. 文中给出一个比较巧妙的方法,即先定义m个实例query,假设维度为dim, 大小为m * dim, 再定义n个关键点query, 大小为n* dim,使用广播的方式让二者相加,即可得到m*n个同时拥有实例信息和关键点信息的query,依次输入transformer.由于属于同一个instance的query实际上代表一个整体,只能有一种类别,所以类别分支输入的是同一个instance的query的平均值,得到分类score.最终筛选出score高于阈值的多组query,即可得到我们需要的二级结果。

第三阶段是Polyline生成阶段。从第二阶段的关键点生成完整的地图要素有序点集.这里点集中点的数量是不固定的,通过生成End of Sequence token (EOS)标志位代表结束。

[4] End-to-End Object Detection with Transformers

[5] Deformable DETR: Deformable Transformers for End-to-End Object Detection

StreamMapNet

依赖于单帧输入的方法限制了它们在复杂场景(如遮挡)中的稳定性和性能,主要是由于缺乏时间信息。此外,当应用于更广泛的感知范围时,它们的表现会减弱。StreamMapNet是一个新的在线建图pipeline,擅长于视频的长序列时间建模。StreamMapNet采用多点注意力和时间信息,使大范围的局部高精地图具有高稳定性,并进一步解决了现有方法的局限性。

模型架构包括三个主要组件:一个通用图像主干,配备用于BEV特征提取的BEV编码器,一个利用多点注意力生成预测的转换器解码器,以及一个存储传播的内存特征的内存缓冲区。

PivotNet

大多数现有方法将地图构建视为一种语义学习 (semantic learning) 问题。它们将地图表示为一组固定数量的网格,并为每个网格预测类别标签, 最终通过复杂的后处理生成下游所需的向量化地图。这种语义表示存在明显的局限性,包括冗余信息、忽略网格之间和内部的几何关系以及复杂后处理中的时间消耗和累计误差。

为了解决当前语义学习方法的问题,一些方法提出以端到端的方式生成矢量化表示。MapTR 使用固定数量的点来表示不同复杂度的地图元素。这种方法存在的问题是:首先,均匀化的表示包含了对几何性影响较小的冗余点。其次,使用固定数量的点表示动态形状的线可能会丢失地图元素的关键细节,特别是对于圆角和直角

因此,为了学习准确且紧凑的表示,我们将地图元素建模为有序的枢纽点列表,这种表示方法紧凑、适合处理角点且具有几何鲁棒性。然而,由于不同地图元素内枢纽点的数量动态变化,这给基于枢纽点的表示方式带来了新的挑战。前人的工作利用粗到细的框架和自回归解码来解决这些挑战,但自回归的特性会导致推理时间较长且会累积误差。

PivotNet采用了 set prediction 的范式,使用统一的基于枢纽点的地图表示对地图元素进行准确建模实现了端到端的精确而紧凑的矢量化建图。PivotNet引入了点线掩码模块 (point-to-line mask module)、枢纽点动态匹配模块 (pivot dynamic matching module) 和动态矢量化序列损失 (dynamic vectorized sequence loss),以实现准确的地图元素建模。

参考

MapTR/MapTRV2,实时建图万字长文 - 知乎 (zhihu.com)

BEV在线实时局部地图构建的三个经典方案对比和思考 - 知乎 (zhihu.com)

  • 14
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值