0

    BEV在线实时局部地图构建的经典方案对比和思考(HDMapNet/VectorM

    2023.06.26 | admin | 195次围观

    ADAS巨卷干货离线地图有用吗,即可获取

    今天自动驾驶之心很荣幸邀请到苹果姐来分享BEV在线实时局部地图构建的经典方案对比和思考,如果您有相关工作需要分享,请在文末联系我们!

    >>点击进入→自动驾驶之心【高精地图】技术交流群

    自动驾驶之心原创 · 作者| 苹果姐

    编辑 | 自动驾驶之心

    众所周知,由于离线高精地图High-Definition Map(HDMap)制作成本高昂,且难以实时更新,基于自车实时感知生成的在线局部地图已经逐渐成为替代解决方案或是冗余方案,因为离线地图精度较高且具备全局信息,在线地图虽然不具备全局信息但具有实时性,二者可以互为补充。

    博主在这个领域做了简要的调研,总结比较经典的方案主要有三个:清华赵行MARS Lab(和这个组杠上了)的HDMapNet, VectorMap,和华中科技大学与地平线合作的MapTR,觉得三个模型在框架和思路上也有内在联系和演进的过程,并且和BEV动态目标检测也有相通之处,在此做个简要的对比和分析,并加入自己的思考。

    首先,传统在线局部地图生成方式大多基于多个透视视角的语义分割,通过IPM投影和拼接等方式转换为鸟瞰视角,再经过比较复杂的后处理得到最终需要的地图要素和拓扑结构,这里不做过多介绍.BEV范式出现后,可以先通过多种方法得到BEV feature,然后在BEV feature上进行后续操作,使整个过程简洁了很多.HDMapNet 是相对较早的BEV在线局部地图构建方案。

    1.HDMapNet (2022.3)[1]

    [1] HDMapNet: An Online HD Map Construction and Evaluation Framework

    HDMapNet框架

    HDMapNet延续了传统方法上基于语义分割的思路.首先使用VPN[2]方法生成BEV Feature,然后地图head分为三个分支,第一个给出在bev feature上做语义分割的结果,将关注的车道线,道路边线,路口等作出分割,这个比较好理解,但是只有分割结果肯定是不够的,我们知道在高精地图的表达形式中,车道线等地图要素是用实例(Instance)来表示的,具体在车道线上代表一段车道线,内部由线段上具有一定顺序的点来表示,实例之间也存在一定的拓扑关系,所以我们需要的是一个由实例构成的适量图.这里作者通过后两个分支和后处理来得到需要的结果。

    [2]

    第二个分支给出实例嵌入(Instance embedding),论文里面介绍比较详细,我的理解是为BEV Feature的每个像素分配一个embedding,类似于NLP中的词向量,通过损失函数的设计,最终训练出属于同一实例相似度较高,不属于同一势力相似度较低的embedding,后续通过对embedding进行相似性度量,即可区分出不同的实例.参考上图对instance embedding的可视化. 第三个分支会给出车道线上每个点的方向,这个方向是由相邻两个点的连线方向确定的,并且可以有两种可能性,模型都会给出,并且只有真正落在车道线中心的点才给出方向,这一点通过在训练阶段将不落在车道线中心的点的方向真值赋为0来实现。

    有了语义分割,实例嵌入和方向,即可在后处理阶段建立三者的联系,最终给出矢量地图.可以看出这种方法是比较直观,容易理解的,但劣势也是显而易见的,计算量较大,耗时较长,且不够End-to-End,部署难度高,缺少了BEV范式的优美气质,但作为基线也是很难得了。

    那能不能通过模型直接得到矢量地图而不需要后处理呢?(感觉各个方向的演进都是这个套路)赵行大佬最后给出了VectorMapNet。

    2.VectorMapNet(2022)[3]

    [3] VectorMapNet: End-to-end Vectorized HD Map Learning

    VectorMapNet

    VectorMapNet摒弃了通过语义分割得到地图的思路,而是使用目标检测的思路(不知道是不是第一个这样做的),将不规则的地图要素实例抽象成几个关键点(可以是bounding box,最大最小值,起点中点终点等等),这样就和目标检测的范式对齐了!是不是很惊艳.当然只有关键点肯定是不够的,论文中后续通过Polyline Generator,即生成的方式逐个得到最终需要的有序点集,不需要后处理,实现了端到端生成矢量地图。

    地图要素的关键点

    具体来讲,VectorMapNet主要分为三个阶段,第一阶段是通过多高度(−1m, 0m, 1m, 2m)的IPM方式对地图要素投影到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,即可得到我们需要的二级结果。

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

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

    说到这里,熟悉DETR的同学肯定会想到,为什么要这么麻烦呢,我们只定义m个实例query,让每个query预测n个关键点不就可以吗,为什么要一个query预测一个关键点,定义两级的query呢,我的第一反应也是这个,但仔细想一下,地图要素和动态目标的区别还是很明显的.首先一帧图片中的地图元素实例不可能很多的,一般只有几个或更多一点,我们没有必要定义过多的query,多了反而可能影响效果,这样限制了query的数量.其次,每个实例由于长度比较长,且形状不规则,内部信息其实是比较多的,这样每个关键点相对独立,不像动态目标形状比较规则,每个关键点具有强相关性,只需要定义多个query即可覆盖多种目标的信息.所以如果地图元素检测只定义比较少的m个实例query不是不可以,效果肯定会差一点,作者应该也有这样的考虑.而且如果每个实例不是对应少量关键点而是多个点,两种方法的区别会更加明显。

    第三阶段是Polyline生成阶段,关于生成(Generator)的领域,也就是现在大火的GPT-4的基础技术博主了解不是很多,简单地说就是通过自回归的方式,从第二阶段的关键点生成完整的地图要素有序点集.这里点集中点的数量是不固定的,通过生成End of Sequence token (EOS)标志位代表结束,也是类似于NLP的技术,可见目前NLP和cv的结合越来越紧密,因为内核都用了同样的transformer大杀器.数量不固定是生成方法的优势,可以表征不同长度的地图要素,但它的劣势就是生成过程是序列性的,只能做到多个instance的并行,instance内部无法并行,降低了效率.还有一个隐藏的劣势就是有序性,其实地图要素的点虽然是有序的,但起点不是唯一的,例如车道线可以有两种起点,闭合的元素如路口,任意一个点都可以作为起点,而生成的方式只能有唯一的起点,相当于对此做了不必要且不合理的约束,对结果肯定有一定的影响。

    有没有更加简洁而合理的方案呢?那就是下面的MapTR了。

    3.MapTR(2023.1)[6]

    [6] MapTR: Structured Modeling and Learning for Online Vectorized HD Map Construction

    BEV在线实时局部地图构建的经典方案对比和思考(HDMapNet/VectorM

    MapTR

    MapTR可以说和VectorMapNet联系相当紧密了,从大的框架来看,本质上其实就是只使用了VectorMapNet的地图要素检测模块,而丢弃了后面的生成模块.也就是说,MapTR没有先生成地图要素关键点,而是直接使用基于DETR和Deformable DETR的目标检测方式生成最终的地图要素点,但是是固定长度的,文中是20个点.query的设计方式与VectorMapNet完全一致.根据上文的分析,如果只设计m个实例query,那一个query需要预测20个毫无规则的点,显然信息量是不够的,所以二级query的方式更加显得有必要。

    当然MapTR相比于VectorMapNet还有其他的改进.第一,它是permutation-equivalent,类似于平移不变性.这是相对于VectorMapNet用生成的方式只能得到唯一的顺序,MapTR去掉了这个不合理的约束.具体方案是将地图要素分为两类处理,一类是Polyline,即开放的要素,一类是Polygon,即封闭的要素,二者通过起点终点的距离来区分.对于Polyline,支持两种方向,因为起点有两种可能,对于Polygon,支持2k种方向(k代表点集的大小),因为起点有k种可能.将Polyline和Polygon的gt都设计成2k大小(Polyline进行padding),使预测值与每一种gt都进行匹配,取误差最小的一种作为匹配结果,这就去掉了顺序唯一的约束.实验表明permutation-equivalent机制的确有较大提升。

    MapTR两类地图元素

    permutation-equivalent提升效果

    permutation-equivalent图示

    第二是训练阶段在匈牙利匹配过程中也分为两级,先进行instance级的匹配,匹配成功的再进行point级的匹配,一是更符合二级query的设定,第二也是为了保证一定的顺序(2种和2k种),并且做到permutation-equivalent.而VectorMapNet由于只检测关键点,不涉及顺序,所以只要一次匹配就可以。

    另外MapTR使用了GKT[7]作为多视角图像得到BEV feature的方式,文中说效率高且容易部署。

    [7] Efficient and Robust 2D-to-BEV Representation Learning via Geometry-guided Kernel Transformer

    下面是三种经典方案的效果对比:

    结果对比

    可见MapTR无论精度还是效率都比前两种有显著的提升,且整个框架简洁优美端到端,可以说是目前BEV在线局部地图领域非常优秀的方案了.这个领域博主其实也是刚刚接触,没想到绕来绕去又绕回DETR了,有个感慨是一切皆可BEV,一切皆可DETR,还有什么是一个优秀的query得不到的呢?大家有其他优秀见解欢迎留言讨论. 最后上一张MapTR的效果图.

    mapTR效果

    (一)视频课程来了!

    自动驾驶之心为大家汇集了毫米波雷达视觉融合、高精地图、BEV感知、多传感器标定、传感器部署、自动驾驶协同感知、语义分割、自动驾驶仿真、L4感知、决策规划、轨迹预测等多个方向学习视频,欢迎大家自取(扫码进入学习)

    (扫码学习最新视频)

    视频官网:

    (二)国内首个自动驾驶学习社区

    近1000人的交流社区离线地图有用吗,和20+自动驾驶技术栈学习路线,想要了解更多自动驾驶感知(分类、检测、分割、关键点、车道线、3D目标检测、Occpuancy、多传感器融合、目标跟踪、光流估计、轨迹预测)、自动驾驶定位建图(SLAM、高精地图)、自动驾驶规划控制、领域技术方案、AI模型部署落地实战、行业动态、岗位发布,欢迎扫描下方二维码,加入自动驾驶之心知识星球,这是一个真正有干货的地方,与领域大佬交流入门、学习、工作、跳槽上的各类难题,日常分享论文+代码+视频,期待交流!

    (三)【自动驾驶之心】全栈技术交流群

    自动驾驶之心是首个自动驾驶开发者社区,聚焦目标检测、语义分割、全景分割、实例分割、关键点检测、车道线、目标跟踪、3D目标检测、BEV感知、多传感器融合、SLAM、光流估计、深度估计、轨迹预测、高精地图、NeRF、规划控制、模型部署落地、自动驾驶仿真测试、产品经理、硬件配置、AI求职交流等方向;

    添加汽车人助理微信邀请入群

    备注:学校/公司+方向+昵称

    版权声明

    本文仅代表作者观点。
    本文系作者授权发表,未经许可,不得转载。

    发表评论