在线高精地图生成算法调研

  • Post author:
  • Post category:其他


一、HDMapNet

整体的网络架构如图所示,最终的Decoder输出三个分支,一个语义分割,一个embedding嵌入分支,一个方向预测。然后通过后处理将这些信息处理成向量化的道路表示。方向预测把360度分为N份,然后GT的话是有两个方向为1,其余为0,我们得到两个方向,分别乘以步长得到下一个点,后处理就这样贪婪的将其连接。

img2bev的方式之前有IPM,通过假设地面的高度都为0来完成转换,但是因为存在地面倾斜和车的颠簸,我们并不能保证车道线被正确投影到BEV上。而LSS的话,由于没有显式的深度作为监督,所以效果也不是很好。这里我们采用VPN的方式,使用全连接网络来学习如何进行视角变换。

二、MapTR

1.论文创新点:

1.受DETR的影响,设计了一种端到端的矢量化地图构建算法,采用一种分层查询嵌入方案,灵活编码实例级和点级的信息,并进行分层二分匹配,依次分配实例和点。同时提出点对点损失和边缘方向损失对点和边缘级别的几何方向信息进行监督。

2.提出一种置换等价建模方法,将每个地图元素构建为一个具有一组等价置换的点集。

3.相比于HDmapNet的复杂耗时后处理,之前的vectorMapNet也是将每个地图元素表示为一个点序列,但是他是利用自回归解码器对点进行顺序预测,导致推理时间较长以及置换的不确定性。

2.置换等价建模

地图元素可以分为两种,一种封闭形状的polygon,一种开放形状的polyline,两者都可以表示为有序的点集。第一种有2n种排列方式,第二种有两种排列方式,其实他们都可以用来表示一个地图元素,而vectormapnet里将GT的一个固定排列点集作为监督显然是不合理的。为此我们将一个地图元素所有的排列可能都作为匈牙利匹配的对象,相当于构建一种等价置换集合。

3.层级匹配

先并行推测一个固定大小的地图元素集合N,同时我们也会对GT的地图元素使用空集填充,将其长度填充到N,每个地图元素包含(一个元素标签 + 地图元素点集 +  点集的所有排列组合),然后模型预测的地图元素包含(一个元素标签 + 一个地图有序点集),引入层级二分图匹配算法,按照顺序执行实例级别的匹配和点级别的匹配。


实例级别匹配

:首先在预测的地图元素和真值之间找到最优的实例级别的标签分配,使得cost最小。代价有两部分,一个是标签的focal loss损失,一个是两个点集的位置匹配损失。


这里埋个坑,点集的位置匹配损失是指?有序点集还是无序点集,看公式应该是预测的有序点集和GT里面的无序点集,很奇怪这个和下面的点集匹配有啥区别



后续看了这个老哥的解读,上面说其实这个位置匹配损失和下面的点级别匹配损失一摸一样。



MapTR阅读笔记 环视车道线 – 知乎 (zhihu.com)






点级别匹配:

实例级匹配完,和GT非空实例匹配的地图元素被看作正样本,我们对他们进行点级别匹配。也就是模型预测的点集和所有的GT点集排列组合求匹配成本,选择最小匹配成本的GT点集排列。这里求的是点与点之间的曼哈顿距离损失

4.模型结构

使用纯相机来生成在线高精地图,img2bev使用的地平线提出的GKT方法,对于BEV query,先通过内外参得到其在图像上的先验位置(可能对应多张图),并提取附近w*h核区域的特征,然后和bev query做交叉注意力机制。

得到BEV特征之后, 论文中使用一个类似于DETR结构的解码器,作者引入了两种query embedding,一个是实例级别的查询向量(有N个),一个是点级别的查询向量(有NV个),点级别的查询向量被所有的地图元素(也就是实例)共享使用。那么第i个地图元素的第j个点的分层查询表达式为其对应的实例级别查询向量 + 点级别对应的查询向量。

得到每一个点的特征后,我们先将其送入多头自注意力机制,让分层查询相互交换信息(包括实例级以及点集之间),然后再采用可变形注意力机制来让分层查询与BEV特征之间进行交互,每个查询qij预测一个二维归一化的BEV上的xy坐标点,然后在坐标点附近来采样BEV特征,并更新这个查询qij的特征,就这样不断的迭代。最终每个地图元素都是一组参考点集合,把这个送入预测头,得到一个分类score和2Nv维度的向量,表示预测点集中Nv个点的位置。

5.损失构成

对于实例级别的最优匹配结果,我们使用focal loss计算其分类损失。

然后点级匹配完成后,我们对点与点之间求曼哈顿的距离损失,来对点的位置进行约束。

但是,仅仅约束点的位置,对于边缘线的方向并没有很好的约束,所以加入了边缘方向损失,作者考虑配对点集里的预测边缘和真值边缘之间的余弦相似度,来进行约束。

三、SuperFusion

采用多层级的图像点云特征融合来做。

首先是数据层面的融合,先将点云投影到图像,然后稀疏深度与图像进行concate,同时利用双线性插值得到密集深度图,对LSS的深度估计进行监督。

特征层面的融合,将点云的BEV特征作为Q去查询图像的特征,做cross-attention得到新的BEV特征,并通过一系列的卷积融合。得到点云BEV最终特征。

BEV层面的融合,将图像特征通过LSS转到BEV后,与点云BEV特征融合,但是由于内外参以及深度估计误差,所以直接concate会导致特征对不齐。所以它先concate然后学习一个flow field,根据据flow field对图像BEV特征进行重新计算(每个位置一个流动方向,然后双线性插值得到流动后的特征来作为当前图像BEV特征),然后再将两者concate。

其后处理部分和HDMapNet是一样的。

四、MachMap

五、MapVR



版权声明:本文为slamer111原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。