面向自动驾驶应用的激光雷达地点识别

发布于 2023-5-25 11:33
浏览
0收藏

地点识别基础理论

在自动驾驶的行驶过程中,一定会面临一个至关重要的问题:如何知道本车所处的位置。


目前有两种主流的方法,一种是使用GNSS组合导航系统进行定位,另一种是基于地图和传感器的观测进行定位。前者存在着GPS信号未覆盖、GPS信号被高楼隧道等环境遮挡导致的定位不准确、漂移等问题,但可以直接输出全局的绝对位置。


后者则需要环境地图的相应信息,对环境、外观更加敏感。但是可以在不依赖GPS的情况下实现更加精确的定位。因此这两种方法各有优劣,在自动驾驶车辆运行的时候都是非常有必要存在的,从而实现优势互补。今天的内容则重点关注基于地图和传感器观测定位的方式。


基于地图和传感器观测定位方式主要包括两类技术,一个是同步定位与建图,即slam,另一个是地点识别,也叫位置识别,是今天介绍的重点


对于在室外大规模场景下运行的自动驾驶车辆而言,基于视觉图像输入的算法性能会受到光照、天气、季节变化的影响比较大。所以,自动驾驶车辆其实更适合搭载一些以激光雷达点云为输入的地点识别算法。以图1为例,在同一个地点,不同的天气、光照天件下捕获的图像的信息差异非常大,不利于地点的识别和车辆定位,但是激光雷达捕获的点云结构却相对稳定。

面向自动驾驶应用的激光雷达地点识别 -汽车开发者社区

图1 相同地点不同环境下图像与点云对比


对自动驾驶车辆而言,地点识别是识别当前地点为此前行驶过的地点,此前行驶可能是多少分钟、几个小时前的行驶,也可能是几天几个月甚至几年前的行驶。地点识别在自动驾驶方面有两大应用。一个是用来为车辆提供全局定位,另一个是为Slam提供闭环的一个先验位置。


基于地点识别的全局定位,如图2所示,表示车辆第一次行驶在这些路段,然后采集下来这个路段行驶过程中的每一帧点云,还有相应的一个全局的定位信息。下方这张图相当于车辆第二次在这个路段中行驶。那么这次行驶与第一次行驶之间可能相差几天,也可能相差几个月,相差一年多都有可能。


目前车辆是行驶在五角星这个地点,但想知道这个地点的全局位置,那么其实就是将历史数据作为database,然后利用当前query观测,在database中寻找候选点来实现全局定位,也就是拿这一帧激光与里面存储的所有激光点云进行一个匹配,然后找到最像当前观测的那个激光点云,也就是识别到的对应地点,从而认为database匹配激光对应的那个位置是全局定位的结果。

面向自动驾驶应用的激光雷达地点识别 -汽车开发者社区

图2 第一次行驶与第二次行驶


基于地点识别的闭环检测和全局定位不同之处在于,闭环检测针对的是单次行驶任务中的Slam,即在一次行驶过程中,行驶过的区域对应的数据作为database,而当前的激光点云作为一个query,然后在database中寻找最相似的匹配点云,匹配点云对应的位置就是Slam闭环检测的先验位置,后续可以跟一个迭代优化,得到最终的一个六自由度的一个回环边。


因此,地点识别用于全局定位和闭环检测一个最大区别其实就在于query和database的时间跨度,全局定位的时间跨度可能非常长,闭环检测仅仅针对单次的行驶场景,时间跨度不会很长。所以对于地点识别而言,全局定位任务更具有挑战性,因为长时间的跨度会带来环境结构的一些改变,比如建筑的搭建和拆除、树木的茂盛和凋零、停放的车辆开走等等一些情况都会使得同一个地点的表征发生变化,进而影响地点识别。


识别相似地点的任务其实是估计当前帧的激光点云,也就是query点云与所有参考帧点云,即database中参考帧点云的相似度。那么,与点云query最相似的database中的点云,可认为它对应了识别地点。对于估计点云间的相似度主要有两种方法,一种是直接回归相似度的数值。另一种通过点云描述子来计算相似度。如图3所示为两种估计点云相似度方法,左边为直接回归法,右边为点云描述子法。

面向自动驾驶应用的激光雷达地点识别 -汽车开发者社区

图3 两种估计点云相似度方法


自动驾驶的应用当中地点识别技术面临一些挑战,首先是车辆的视角变化,即车辆以不同的yaw角去驶入同一地点时,不同的行驶方向会导致观测数据产生差异,进而影响识别的结果;第二点是长时间跨度;第三点是多种大规模行驶场景,自动驾驶车辆是相当于是一个室外运行的场景,而场景越大,对于地点识别算法的挑战就会越大,也就是需要算法对于地点的表征更具有特异和分辨率;第四点是实时性的要求,自动驾驶车辆的行驶速度比较快,相比于小型机器人自动驾驶定位算法的实时性要求更高一些。

OverlapNet

OverIapNet是一种基于深度学习的激光雷达闭环检测算法,最早是在2020年的RSS会议上提出,网络结构如图4所示,可以看到它是一个连体网络,或是孪生网络。虽然是一个闭环检测算法,但也可以用于局部小规模场景的一个地点识别。网络采用直接回归相似度数值的思路,把两帧点云直接输入到算法模型里面,然后进行端到端的输出,描述两帧点云是否相似。

面向自动驾驶应用的激光雷达地点识别 -汽车开发者社区

图4 OverIapNet结构


OverIapNet是以激光点云的多类信息作为输入。首先让激光点云通过球面投影生成二维图,每一个像素值代表落在像素激光点对应返回的距离信息。如果把图像上的像素值更改为对应激光点的法向量值,那其实是一个normal map。如果像素值是强度信息的话,就是intensity map。然后把上述一系列的二维图沿着通道方向进行拼接,得到输入到overlapNet的多类信息图。然后将两帧点云的多类信息分别输入到两个共享权重的网络层中,然后进行多类信息的融合和压缩,然后将两个压缩的结果输入到Delta head中,最后回归出两帧点云的overlap。


overlap的定义是:假设有一帧query点云,然后把它投影得到二维图,剩下一些reference点云则根据与query之间的相对位资,把reference点云转换到query激光雷达坐标系下面,然后再将其投影成二维图,然后将两个位置相减,统计相减后的这张图中小于阈值的像素占所有有效像素的比例,将这个比例看作是一个overlap。


OverIapNet作为2020年提出的算法,提出了overlap的概念描述点云的相似度使用。首次多类信息作为输入,同时估计overlap和车辆的要角,在当时是十分新颖的一种深度学习闭环检测算法,但是它有一定的局限性。OverIapNet为检测闭环,需要将query点云与所有的参考的reference点云逐次输入网络,效率比较低,然后随着行驶过程中database越来越大,算法的速度也会变得越来越慢。此外,以多类信息图作为输入,虽然一定程度提升了算法的精度,但是严重影响了算法在不同场景下的鲁棒性。

OverlapTransformer

考虑到OverIapNet的局限性以及自动驾驶车辆在大规模场景中完成地点识别任务的一个需求,在此基础上进一步开发了激光雷达点云识别算法OverlapTransformer。与OverIapNet不同的是,OverlapTransformer采用了点云描述子来计算点云相似度,而不是端到端的去回归两帧点云的overlap。好处在于database中所有的点云都可以提前转换成描述子向量储存下来,当在database中寻找query点云最相似点云的时候,只需要将当前的query点云也转换成描述子的形式,再与database的描述进行匹配即可。


OverlapTransformer有这么几个特点,首先是仅使用激光点云的位置作为输入,保证了在多个场景中行驶时算法的泛化性;第二个是利用了transformer结构去增强全局描述子的特异性,提高识别的精度;第三是利用NetVLAD将yaw角旋转等变的特征图转化为yaw角旋转不变的全局描述子,提高yaw角地点识别的精度。其网络结构如图5所示。

面向自动驾驶应用的激光雷达地点识别 -汽车开发者社区

图5 OverlapTransformer网络结构


图5中左下角这块是Range Image Encoder,是将激光点云全面投影得到range image,其实range image经常可以由激光雷达设备直接输出。值得注意的是,range image是具有旋转等变的性质,也就是点云绕Z轴的旋转等价于range image的列平移。


严格来说,range image是一个全景的360度环视的,所以不仅是平移,那边缘信息也会回到另一边,但是整体的信息并没有发生增减。然后使用overlapLeg进行空间维度的压缩和通道维度的扩张,这里保留了yaw角旋转等变的性质,因此是使用了竖条形的剪辑来压缩特征的高度方向,把高度逐渐压成一,宽度保持不变。如果range image进行平移,那对应overlap输出的特征图也进行相同程度的偏移。


transformer是通过自注意力的机制来代替传统处理序列数据采用的循环神经网络,取得了很好的效果。transformer所使用的多头自注意力机制可以感知到输入像素的全局信息,在全局范围内提取不同基本特征单元间深层次的关联性,因此可以处理更加复杂的问题。这里transformer引入激光雷识识别算法,也是基于上述的原理。这里强调transformer模块依然是yaw角旋转等变的,即点云绕Z轴的旋转,对应的range image进行平移,然后也会引起transform输出进行同步的列平移。


然后将transform增强后的结果和增强前的结果进行拼接,然后输入到最后的MLP中, 输出最终的全局的描述词。NetVLAD是特征聚合的结构,与输入向量级的顺序无关,因此可以把之前保留的yaw角旋转等变转化为yaw角旋转不变的性质。


下面介绍如何去训练这个地点识别算法。OverlapTransformer是采用了三元损失函数。对于一帧query点云,然后输入它对应的正样本和负样本。分别为正负样本生成描述子,然后损失函数的作用是将query和正样本描述子拉近,然后将query和负样本描述子推远,使得模型真正有识别地点的能力。确定query点云的正负样本是借鉴了之前介绍overlap的概念,overlap大于等于百分之三十的点云被认为是正样本,否则是负样本。很多其他地点识别算法是通过距离去判断正负样本,距离近的认为是正样本,否则是负样本,但事实上,使用overlap去衡量正负样本是更为自然更为合理的方式,因为它能够直接的表达点云的相似度,排除了一些距离近但受到遮挡影响导致相似度较小的假的正样本,能够保证训练的合理性,提升对应后续点云配准的质量。


这里展示了overlap的一个评估结果,如表1所示,可以发现此算法在保证高实时性的同时保证了高精度的识别性能。由于网络结构的设计比较轻量化,因此算法的速度非常快,运行频率高于500赫兹,比较适用于这种自动驾驶的这种对实时性要求比较高的场景。 


表1 网络评估结果

面向自动驾驶应用的激光雷达地点识别 -汽车开发者社区

SeqOT

基于overlap算法,进一步开发了SeqOT地点识别算法。它为多帧序列化点云生成时空特征融合的描述子进行地点识别。多帧连续观测包含了比单帧观测更广泛、更具有分辨率的特征,可以实现更高精度的地点识别,并且在长时间跨度下更加可靠,稳定性更好一些,模型结构如图6所示。

面向自动驾驶应用的激光雷达地点识别 -汽车开发者社区

图6 SeqOT结构


模型输入是序列化的激光点云投影而成的range image,对于每一帧的range image,使用单帧模块进行压缩和特异性增强,然后使用多帧模块进行时空信息的融合。具体是输入序列中每一帧点云的特征和相邻两帧特征进行拼接,输入到多帧transformer中,进行一个时空特征提取,然后输入到NetVLAD中,得到一系列的一级描述,最终由池化把序列化的一级描述子聚合成最终序列的地点识别描述子。


图7展示了多帧信息融合的过程,输入序列中的每三帧的相邻点云先通过一个单帧模块分别进行空间特征提取,然后分别生成yaw角旋转等变的特征图,拼接后输入到多帧的transformer提取时空特征,并且通过NetVLAD和MLP生成yaw角旋转不变的一级描述子。最后通过池化得到yaw角旋转不变的最终描述子。考虑到自动驾驶有一个节省算力和实时性的问题,所以对于一个长序列来说,只仅拼接其中的每三帧点云,然后过传transformer来生成序列化的一级描述子,然后把整个序列的一级描述子聚合成最终的描述。

面向自动驾驶应用的激光雷达地点识别 -汽车开发者社区

图7 多帧信息融合过程

CVTNet

CVTNet是基于单帧点云输入,使用了cross transformer融合来自不同投影的空间特征,生成了更具有分辨力的全局描述子,进一步提升地点识别精度。其特点在于,以多层的range image view和多层的birds eye view作为输入,并且挖掘出了二者的关联性,从而进行地点识别。第二是利用cross transformer融合multi views对齐的关联特征,增强全局描述子的特异性,提升地点识别的精度。第三是经过一系列卷积和各类transformer增强之后,依然能够输出旋转不变的全局描述。网络结构如图8所示。

面向自动驾驶应用的激光雷达地点识别 -汽车开发者社区

图8 CVTNet结构


多视角多层二维图生成器是图8左下角第一个模块,它将点云坐标系空间就按照一定的range间隔分成多个子空间,然后对球坐标系空间的点云子集分别做球面投影,生成多层的range image,然后对欧式子空间的点云子集分别自上而下投影,然后生成多层的birds eye view。多层的好处能够为网络提供信息量更加丰富的输入,并且可以通过卷积层对来自于不同range的特征图和不同高度的点云信息进行加权融合,提升特征的特异性。然后就把它们分别沿着通道方向进行拼接,输入到中间对齐特征编码器的两个分支当中。


如果range image和birds eye view采用相同的分辨率,它们在空间上是对齐的,即某个激光点投影到range image和birds eye view上的时候会落在同一列上,且具有yaw角等变性。range image和birds eye view相同的列索引对应了三维空间的同一处点云,因此认为他们是对齐的。


接下来的对齐特征编码器是借鉴了overlap的想法,使用cross transformer分别进行特征内部增强,生成了对齐特征,依据yaw角旋转的等变性,所以range image和birds eye view会做相同的列变化。所以两个分支的输出其实相对于yaw角变化来说一直同步,即对齐。


对于基于多模态CVTNet和其他baseline的一些数据对比如表2所示。可以看见在多个数据集上,CVTNet都达到了较高的地点学习精度,运行的帧率接近30赫兹,比较适用于自动驾驶场景。

表2 CVTNet和其他baseline的对比数据

面向自动驾驶应用的激光雷达地点识别 -汽车开发者社区

未来展望

展望一下现在地点识别领域几个未来的发展方向:


(1)跨模态定位。在采集database的时候,使用的传感器和做定位时使用的传感器属于不同的模态。


(2)终身学习,持续学习一个地点识别算法,使得车辆搭载的地点识别算法持续适应新的行驶环境,同时克服遗忘问题,保持对旧环境的记忆。


(3)大规模的地图合并,由于地点识别技术逐渐被用于大规模场景的地图合并,能够有效识别分段地图间的重叠部分,


(4)结合CV领域研究热点


文章转载自公众号:深蓝AI

分类
收藏
回复
举报
回复
相关推荐