点击进入—>3D视觉工坊学习交流群

0. 笔者个人体会

高精度(High-Definition, HD)语义地图是目前自动驾驶领域的一个重要研究方向,近年随着Transformer和BEV的大火,很多大佬团队都开展了HD语义地图构建相关的工作。2021年7月,清华大学MARS实验室提出了HDMapNet。紧随其后,同一团队又在今年6月公开了后续工作VectorMapNet。同时,MIT和上海交通大学也在今年5月提出了BEVFusion。今年11月底的时候,苏黎世联邦理工学院、毫末、国防科大、阿尔托大学又联合开发了SuperFusion。这四种方案基本上就是目前HD地图构建的主流方案。

本文将带领读者深入探讨这四种方案的优势与不足,通过对比方案来思考HD地图构建的重点与难点。当然笔者水平有限,如果有理解错误的地方欢迎大家一起讨论,共同学习。

温馨提示,本文讨论的方案都是开源的,各位读者可以在这些工作的基础上开展自己的研究!文末附原文链接和代码链接!

1. 为什么自动驾驶都要做BEV感知?

先说答案:因为自动驾驶要求的是空间感知

单纯的前视摄像头输入,看到的只是有限视角内的画面。而自动驾驶任务要求的是对车辆周围整体空间范围内的感知,因此往往需要对输入的环视相机/激光雷达进行投影,转到BEV视角下进行HD地图的构建。

那么BEV感知的难点是什么呢?

在自动驾驶的车道线检测、可行驶区域检测等任务中,都是针对前视摄像头输入进行逐像素的分割/检测,每个输入像素都对应一个输出类别。这种一一对应的关系使得我们可以很容易得应用CNN/Transformer模型进行分割/检测。

但自动驾驶BEV感知已经不仅仅是2D感知问题,在空间变换的过程中像素很有可能发生畸变!比如,前视摄像头中的车辆,转换到BEV视角下可能已经不是车辆的形状了!再比如,前视摄像头中相邻很近的两个物体,转换到BEV视角下变得相隔很远。

既然如此,可不可以先针对图像进行分割处理,然后再投影到BEV视角呢?

理论上来说这是一个很好的解决思路,避免了三维物体在投影过程中产生的畸变,但在实际操作过程中,会发现很容易造成多相机之间的不一致问题

因此,需要直接针对BEV空间进行处理以构建HD地图!此外,BEV空间也使得相机和雷达的融合变得简单。

2. 传统的HD语义地图构建有什么问题?

先说说传统的HD地图构建方案:

基本上目前SLAM的落地方案都是分成两部分,一个是配备高精度传感器的地图采集车,用于对环境信息进行高精度的采集和处理,一个是乘用车,也就是大家所熟知的SLAM中的仅定位。

具体思路是,首先利用高精度传感器(雷达/IMU/相机/GPS/轮速计)在园区上来回往复运行,得到带有回环的轨迹以后基于SLAM方法获得全局一致性地图,后面交友标注员进行手工处理,得到静态HD地图。后面的乘用车就是将自身提取到的特征和前面构建的HD地图进行特征匹配,进行仅定位。

这么做有什么问题呢?

(1) 整体的Pipeline非常长,导致工艺流程非常繁琐。

(2) 手工标注需要消耗大量人力。不知道大家有没有手动打深度学习标签的经历,真的是非常痛苦。

(3) 需要在实际运行过程中更新地图。我认为这也是最重要的一点,上述基于手工方法构建的HD地图是完全的静态地图,但实际运行场景必然与之前构建的地图有所区别(比如某个车移动了位置,某个箱子转运到了其他位置)。所以乘用车在实际运行过程中需要实时更新并存储HD地图,这也是个非常繁琐的课题。但基于学习的端到端的方案是可以解决这一问题的,虽然从目前来看基于学习的方案在精度上还稍有不足,但相信这一问题可以很快被解决。

我们希望实现什么效果呢?

(1) 简单,最好是端到端的网络架构。

(2) 自动、在线得构建HD地图。

(3) 能够不受动态环境影响,直接构建HD地图。

3. 清华大学开源HDMapNet

清华大学2021年7月开源的HDMapNet,其主要思路是输入环视相机和雷达点云,将相机和雷达点云分别进行特征提取后投影到BEV空间,在BEV空间里进行特征融合。注意,在BEV空间里进行特征融合是非常有优势的!之后,便是在BEV空间内进行解码。解码器共有三个输出,第一是地图的语义分割结果,里面包含了地图里哪个是车道线、哪个是路标、哪个是人行横道线。第二是实例Embedding,里面包含了实例信息,主要表达车道线和车道线直接、路标和路标之间的实例区分。第三是方向信息,主要表达了HD地图中每条线的方向。最后,语义分割HD地图首先和实例Embedding进行融合,得到实例化的HD地图,并融合方向信息以及NMS得到矢量化的HD地图。

需要特别注意的是,HDMapNet并不一定需要做多传感器融合,纯相机或者纯雷达也是可以基于HDMapNet构建HD地图,只是效果相对要弱一些。HDMapNet的结果显示,相机对于车道线、人行横道线这种视觉纹理丰富的特征识别的较好,雷达对于路沿这种物理边界的效果更好。

但纯相机或纯雷达的操作真的给一些经费受限的小伙伴带来了福音!

一句话总结:HDMapNet实现了多模态BEV视角下的HD地图构建

4. 清华大学后续工作VectorMapNet

我们可以发现,HDMapNet的重点在于BEV空间下的特征提取。

但问题是,这个Pipeline仍然有点长了,有没有更加端到端的方案?也就是说,直接输入图像和雷达,经过某个深度神经网络,直接输出HD地图。为解决这个问题,清华大学MARS实验室今年6月又开源了新的工作VectorMapNet。

他们的思路是啥

(1) 需要找到一种更合适的图形来表示HD地图,MARS实验室认为折线更有利于HD地图的表达。此外,谷歌2020年的CVPR论文VectorNet: Encoding HD Maps and Agent Dynamics from Vectorized Representation也提出了这种用折线来表达HD地图的方案,谷歌官方没有开源,但Github上有Pytorch实现https://github.com/Henry1iu/TNT-Trajectory-Prediction,感兴趣的小伙伴可以复现一下,但目前该网络仍然需要非常大的显存(128G+)。

(2) 之前的HDMapNet还是处理的分割问题,但如果将分割问题转换为检测问题,会更有利于矢量地图的构建。

(3) 基于DETR进行开发有利于HD地图的构建。

其实,VectorMapNet的网络架构就是三个部分:投影、检测、生成。投影就类似HDMapNet,将输入的相机和雷达转换到BEV视角,得到BEV特征图。检测就是提取HD地图元素,具体来说就是基于Query来提取关键点,这里的关键点可以是车道线的起点、终点、中间点。这个检测的思想其实非常巧妙,它没有在中间过程就得到非常多的输出点,而是选取了更简洁更统一化的表示!生成就是指得到折线化矢量化的HD地图,也是一个自回归模型,具体思路也是基于Transformer回归每个顶点坐标。

虽然整体来看架构有些复杂,但这个网络是直接端到端的,有利于训练和应用。笔者个人感觉,VectorMapNet的一个更有意思的点在于,它是一个端到端的多阶段网络。也就是说,网络不再是一个完全的黑盒子。如果网络的输出结果出现漏检/误检,那么我们可以打印出中间的关键点,看看具体是哪一个阶段出现了问题。

结果显示,VectorMapNet这种基于检测的方案性能远超HDMapNet。例如在人行横道上的预测AP提升了几乎32个点,在整体的mAP上也提升了22.7个点。

从定性结果也可以看出,VectorMapNet对于细节的把握是非常好的。HDMapNet和STSU经常出现漏检,但VectorMapNet很少。在Ground Truth上的车道线有时会出现一些细小的波折,HDMapNet和STSU很难检测出来,但VectorMapNet提取的HD地图轮廓与真值更吻合。

说到这里,也肯定有小伙伴关心VectorMapNet端到端方案和HDMapNet后处理方案之间的优劣。可以发现的是,HDMapNet在进行一些后处理时,很容易将一条检测线检测为两条,这主要是由于分割过程中对于车道线的分割结果过宽导致的。在实际使用中,这种将一条车道线检测为两条的结果会导致很严重的问题。这也说明了基于检测的HD地图方案要优于基于分割的HD地图方案。

不仅如此,VectorMapNet更强大的地方在于,它甚至可以检测出来未标注的车道线!从下图可以看出,在原始的数据集中漏标了一条车道线,HDMapNet无法检测出来,但VectorMapNet却输出了这一结果。

一句话总结:VectorMapNet基于检测思路优化了HDMapNet

5. MIT&上交&OmniML开源BEVFusion

这篇文章大家就都比较熟悉了, MIT韩松团队开源的BEVFusion,文章题目是BEVFusion: Multi-Task Multi-Sensor Fusion with Unified Bird's-Eye View Representation。注意和NeurIPS 2022论文BEVFusion: A Simple and Robust LiDAR-Camera Fusion Framework要区分开。

单从网络架构上来看,感觉和HDMapNet原理非常类似,都是先从相机、雷达输入分别提取特征并投影到BEV空间,然后做BEV视角下的解码,输出结果不太相同,BEVFusion除了HD地图外还输出了3D目标检测的结果。

这篇文章其实解答了困惑我很久的一个问题,就是为什么不先把图像投影到雷达,或者雷达投影到图像,然后再一起转到BEV空间下,而是要分别提取特征再到BEV空间下进行特征融合。这是因为相机到激光雷达的投影丢掉了相机特征的语义密度,对于面向语义的任务(如三维场景分割)有非常大的影响。

感觉BEVFusion的主要创新点还是基于BEV池化提出了两个效率优化方法:预计算与间歇降低。

预计算:

BEV池化的第一步是将摄像头特征点云的每个点与BEV网格相关联。与激光雷达点云不同,摄像头特征点云的坐标是固定的。基于此,预计算每个点的3D坐标和BEV网格索引。还有根据网格索引对所有点进行排序,并记录每个点排名。在推理过程中,只需要根据预计算的排序对所有特征点重排序。这种缓存机制可以将网格关联的延迟从17ms减少到4ms。

间歇降低

网格关联后,同一BEV网格的所有点将在张量表征中连续。BEV池化的下一步是通过一些对称函数(例如,平均值、最大值和求和)聚合每个BEV网格内的特征。现有的实现方法首先计算所有点的前缀和,然后减去索引发生变化的边界值。然而,前缀和操作,需要在GPU进行树缩减(tree reduction),并生成许多未使用的部分和(因为只需要边界值),这两种操作都是低效的。为了加速特征聚合,BEVFusion里实现一个专门的GPU内核,直接在BEV网格并行化:为每个网格分配一个GPU线程,该线程计算其间歇和(interval sum)并将结果写回。该内核消除输出之间的依赖关系(因此不需要多级树缩减),并避免将部分和写入DRAM,从而将特征聚合的延迟从500ms减少到2ms。

通过优化的BEV池化,摄像头到BEV的转换速度提高了40倍:延迟从500ms减少到12ms(仅为模型端到端运行时间的10%),并且可以在不同的分特征辨率之间很好地扩展。

输出结果也很漂亮:联合实现了3D目标检测和语义地图构建。

一句话总结:BEVFusion大幅降低了计算量

6. 苏黎世联邦理工开源SuperFusion

说实话,这项工作感觉非常惊艳!

HDMapNet和VectorMapNet的指导老师赵行教授也表示过,现有的基于学习的HD地图构建方案的主要问题在于,所构建的HD地图仍然是短距离地图,对于长距离表达还有一些不足。而SuperFusion这项工作就专门解决了这个长距离HD建模问题,它可以构建90m左右的HD地图,而同年提出的HDMapNet建模长度也不过30m。

如下图所示,红色汽车代表汽车当前的位置,蓝色星星代表目标。结果显示,SuperFusion在生成短程(30 m)的HD语义地图基础上,预测高达90 m距离的远程HD语义地图。这给自动驾驶下游路径规划和控制模块提供了更强平稳性和安全性。

SuperFusion整体的网络结构是利用雷达和相机数据在多个层面的融合。在SuperFusion中体现了三种融合策略:

数据层融合:融合雷达的深度信息以提高图像深度估计的精度。

特征层融合:使用交叉注意力进行远距离的融合,在特征引导下进行BEV特征预测。

BEV级融合:对齐两个分支,生成高质量的融合BEV特征。

最后,融合后的BEV特征可以支持不同的头部,包括语义分割、实例嵌入和方向预测,进行后处理生成高清地图预测。

定性和定量结果也表明,SuperFusion相较于其他HD语义地图构建方案来说,性能提升很明显,尤其是长距离建模。这种长距离建模能力使得SuperFusion更有利于自动驾驶下游任务。

一句话总结:SuperFusion实现了长距离HD语义地图构建

7. 结论

本文带领读者探讨了自动驾驶任务中的HD语义地图构建的主要问题,并介绍了4种主流的HD语义地图构建方案,分别是清华大学开源的HDMapNet和VectorMapNet、MIT&上交开源的BEVFusion、苏黎世联邦理工&毫末&国防科大&阿尔托开源的SuperFusion。四种方案主要都是在nuScenes上进行评估的,其中HDMapNet和VectorMapNet主要解决的是如何端到端的实现HD地图构建问题,BEVFusion主要解决的是计算效率问题,SuperFusion主要解决的是长距离HD地图构建问题。四种方案的底层架构其实都是Transformer,这也说明了Transformer在多模态和CV领域的影响力越来越大了。其实,现有的HD语义地图中表达的语义信息也都是像车道线、人行横道线的这种低级语义。笔者个人认为,在未来,HD语义地图的发展趋势是提取更高级别的语义,比如车辆识别到了一个正在横穿马路的行人,我们想知道的不仅仅是马路上有个人,我们更想让自动驾驶车辆理解的是,这个人的具体意图是什么。

参考文献:

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

来源:2022 ICRA

原文链接:https://arxiv.org/abs/2107.06307

代码链接:https://github.com/Tsinghua-MARS-Lab/HDMapNet

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

来源:2023 ICLR

原文链接:https://arxiv.org/abs/2206.08920

代码链接:https://github.com/Mrmoore98/VectorMapNet_code

[3] BEVFusion: Multi-Task Multi-Sensor Fusion with Unified Bird's-Eye View Representation

来源:2022 arXiv

原文链接:https://arxiv.org/abs/2205.13542

代码链接:https://github.com/mit-han-lab/bevfusion

[4] SuperFusion: Multilevel LiDAR-Camera Fusion for Long-Range HD Map Generation and Prediction

来源:2022 arXiv

原文链接:https://arxiv.org/abs/2211.15656

代码链接:https://github.com/haomo-ai/superfusion

本文仅做学术分享,如有侵权,请联系删文。

点击进入—>3D视觉工坊学习交流群

干货下载与学习

后台回复:巴塞罗自治大学课件,即可下载国外大学沉淀数年3D Vison精品课件

后台回复:计算机视觉书籍,即可下载3D视觉领域经典书籍pdf

后台回复:3D视觉课程,即可学习3D视觉领域精品课程

3D视觉工坊精品课程官网:3dcver.com

1.面向自动驾驶领域的3D点云目标检测全栈学习路线!(单模态+多模态/数据+代码)
2.彻底搞透视觉三维重建:原理剖析、代码讲解、及优化改进
3.国内首个面向工业级实战的点云处理课程
4.激光-视觉-IMU-GPS融合SLAM算法梳理和代码讲解
5.彻底搞懂视觉-惯性SLAM:基于VINS-Fusion正式开课啦
6.彻底搞懂基于LOAM框架的3D激光SLAM: 源码剖析到算法优化
7.彻底剖析室内、室外激光SLAM关键算法原理、代码和实战(cartographer+LOAM +LIO-SAM)

8.从零搭建一套结构光3D重建系统[理论+源码+实践]

9.单目深度估计方法:算法梳理与代码实现

10.自动驾驶中的深度学习模型部署实战

11.相机模型与标定(单目+双目+鱼眼)

12.重磅!四旋翼飞行器:算法与实战

13.ROS2从入门到精通:理论与实战

14.国内首个3D缺陷检测教程:理论、源码与实战

15.基于Open3D的点云处理入门与实战教程

16.透彻理解视觉ORB-SLAM3:理论基础+代码解析+算法改进

重磅!粉丝学习交流群已成立

交流群主要有3D视觉、CV&深度学习、SLAM、三维重建、点云后处理、自动驾驶、多传感器融合、CV入门、三维测量、VR/AR、3D人脸识别、医疗影像、缺陷检测、行人重识别、目标跟踪、视觉产品落地、视觉竞赛、车牌识别、硬件选型、ORB-SLAM系列源码交流、深度估计、TOF、求职交流等方向。

扫描以下二维码,添加小助理微信(dddvisiona),一定要备注:研究方向+学校/公司+昵称,例如:”3D视觉 + 上海交大 + 静静“。请按照格式备注,可快速被通过且邀请进群。原创投稿也请联系。

▲长按加微信群或投稿,微信号:dddvisiona

3D视觉从入门到精通知识星球:针对3D视觉领域的视频课(三维重建系列、三维点云系列、结构光系列、手眼标定、相机标定、激光/视觉SLAM、自动驾驶等)源码分享、知识点汇总、入门进阶学习路线、最新paper分享、疑问解答等进行深耕,更有各类大厂的算法工程人员进行技术指导。与此同时,星球将联合知名企业发布3D视觉相关算法开发岗位以及项目对接信息,打造成集技术与就业为一体的铁杆粉丝聚集区,6000+星球成员为创造更好的AI世界共同进步,知识星球入口:

学习3D视觉核心技术,扫描查看,3天内无条件退款

高质量教程资料、答疑解惑、助你高效解决问题

觉得有用,麻烦给个赞和在看~  

高精度语义地图构建的一点思考相关推荐

  1. 基于ORB-SLAM2的语义地图构建

    github: ORBSLAM2_Semantic_Mapping 注:这个版本使用C++调用python环境,运行冲突比较多,很多设置了绝对路径.改进的办法是将语义分割部分写成了服务端,参考基于OR ...

  2. 基于深度卷积神经网络的语义地图构建

    (一)相关研究及特点 语义分割 语义信息:物体类别.目标检测.语义分割等. 语义分割即对图像中每个像素分配类别标签.目前最主流的是深度学习方法,代表性的方法是全卷积神经网络(fully convolu ...

  3. HDMapNet:高精度语义地图的动态构建

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 编辑丨算法邦 今天和大家分享工作的是自动驾驶中高精度语义地图的动态构建.内容主要是解读我们组最新的论文 ...

  4. 【硕士论文】《动态场景下的语义三维地图构建 》西南科技大学 余东应

    概述 主要研究机器人在未知动态场景中实现鲁棒的定位及语义地图构建 针对动态场景定位.鲁棒性差.针对三维地图实用价值不高的问题. 动态场景下定位 对特征点匹配算法做出改进,提出自适应窗隔匹配模型,可剔除 ...

  5. Aloam+deeplabv3+ 构建语义地图+行人车辆检测(kitti数据集)

    代码和数据网盘链接 链接: https://pan.baidu.com/s/11e1ICOxjYAZxdM4Gx0zlJg 提取码: inp1 --来自百度网盘超级会员v4的分享 若在我给出的代码之上 ...

  6. 【论文速读】城市自动驾驶应用的概率语义地图

    点云PCL免费知识星球,点云论文速读. 标题:Probabilistic Semantic Mapping for Urban Autonomous Driving Applications 作者:D ...

  7. 自动驾驶系统进阶与项目实战(四)自动驾驶高精度地图构建中的三维场景识别和闭环检测

    自动驾驶系统进阶与项目实战(四)自动驾驶高精度地图构建中的三维场景识别和闭环检测 闭环检测(loop-closure detection)是SLAM中非常关键的一部分,当然也是自动驾驶高精度地图(HD ...

  8. 四维图新:高精度地图构建的实时物体检测和分割

    四维图新在欧洲成立Advanced Research Lab,该实验室专家谈"高精度地图构建的实时物体检测和分割".

  9. 模型实践 | 高精地图构建模型HDMapNet助力更精准的自动驾驶

    实验 | Freja   算力支持 | 幻方AIHPC 高精地图是自动驾驶系统的关键模块,可以有效提升自动驾驶汽车的行驶安全度,强化自动驾驶系统的整体感知能力和决策能力.然而传统的高精地图构建流程复杂 ...

最新文章

  1. iperf3与netperf使用
  2. java web服务需要哪些基础知识_java web 基础知识
  3. cucumber jvm_用Cucumber JVM编写BDD测试
  4. 【转】ABP源码分析四十一:ZERO的Audit,Setting,Background Job
  5. 修改浏览器的默认最小字号限制(以chrome为例)
  6. 仓库管理数据库系统设计
  7. ssh 命令连接服务器
  8. 伟豪带你逛郑州商业技师学院⑨:电气工程系
  9. summit超级计算机gpu温度,揭秘Summit:加速计算赋力全球最快超级计算机
  10. HTML5前端开发实战04-儿童摄影
  11. 软件架构师的“不归之路“——架构师的职责
  12. 如果可能,与孤独为友!
  13. 开源夺宝抽奖一元系统,java+uniapp开发
  14. Golang中log日志包的使用
  15. Jmeter 阶梯线程组
  16. mdx和mdd格式的词典解析Android JNI方式实现
  17. 视频素材剪辑制作的方法分享
  18. 蓝牙协议栈开发板 STM32F1 跑蓝牙协议栈 --传统蓝牙串口协议SPP演示以及实现原理
  19. 5W1H分析法 什么是5W1H分析法?
  20. Android 连接Mysql数据库步骤(新手步骤)

热门文章

  1. Qt5.12实战之菜单栏工具栏与状态栏使用
  2. 如何在WordPress中创建RSVP表单(简易)
  3. like作连词it作形式宾语
  4. linux中嵌套循环,linux中的嵌套循环
  5. Android 热敏打印机开发(蓝牙)
  6. C++奇淫巧技 可继承单例
  7. MATLAB最好用字体
  8. MyBatis中mybatis-generator代码生成的一般过程
  9. 快速幂算法(C++)
  10. 马尔可夫链蒙特卡罗算法(MCMC方法)