激光雷达目标检测

2019-07-30 16:23:02 浏览数 (1)

本文为美团点评无人配送部技术团队主笔,为您带来的是自动驾驶中的激光雷达目标检测。(本文来源:美团无人配送)

激光雷达原理

现在自动驾驶中常用的激光雷达为机械式激光雷达,其由若干组可以旋转的激光发射器和接收器组成。每个发射器发射的一条激光束俗称“线“,主要有单线、4线、16线、32线、64线和128线雷达。

常见机械式激光雷达中激光束是波长在900nm左右的近红外光(NIR),可以根据激光直接获得周围一圈的准确的三维空间信息。

这种雷达的成像原理比较简单:发射器和接收器连接在一个可以旋转的机械结构上,某时刻发射器将激光发射出去,之后接收器接收返回的激光并计算激光与物体碰撞点到雷达原点的距离。

由于每次发射/接收的角度是预先设定的,因此根据距离、水平角度和垂直角度就能求出碰撞点相对于激光雷达中心的坐标。每条线每次发射激光得到的数据由一个四元组(x,y,z,i)表示,其中(x,y,z)是三维坐标,i表示反射强度。

图1:一个32线激光雷达的成像原理示意图

以某款32线激光雷达为例,32根线从上到下排列覆盖15.0°到-24.9°。

工作状态时这32根线在水平平面旋转可以采集一周360°的数据。雷达的旋转速度和角分辨率是可以调节的,常用速度为10hz(100ms转一圈)对应每0.2°采集一次数据,即角分辨率为360/0.2=1800。

由于光速非常快所以在1800中任何一个位置进行一次发射和接收动作可以看作是瞬时完成的。受到硬件能力的限制,一般转速越快则发射和接收激光的次数越少,即角分辨率越小。常用雷达采集到的数据点距离雷达中心一般不会超过150米。

通常采集到的360°的数据被称为一帧,上面的例子中一帧数据在理论上最多包含32*(360/0.2)=57600个点。

在实际情况中如果雷达被放置在车的上方大约距地面1.9米的位置,则在比较空旷的场景中大约获得40000个点,一部分激光点因为被发射向天空或被吸收等并没有返回到接收器,也就无法得到对应的点。下图是典型的一帧数据的可视化图。(上海车展所拍)

激光雷达具有不受光照影响和直接获得准确三维信息的特点,因此常被用于弥补摄像头传感器的不足。激光雷达采集到的三维数据通常被称为点云,激光点云数据有很多独特的地方:

距离中心点越远的地方越稀疏;机械激光雷达的帧率比较低,一般可选5hz、10hz和20hz,但是因为高帧率对应低角分辨率,所以在权衡了采样频率和角分辨率之后常用10hz;

点与点之间根据成像原理有内在联系,比如平坦地面上的一圈点是由同一个发射器旋转一周生成的;

激光雷达生成的数据中只保证点云与激光原点之间没有障碍物以及每个点云的位置有障碍物,除此之外的区域不确定是否存在障碍物;

由于自然中激光比较少见所以激光雷达生成的数据一般不会出现噪声点,但是其他激光雷达可能会对其造成影响,另外落叶、雨雪、沙尘、雾霾也会产生噪声点;

与激光雷达有相对运动的物体的点云会出现偏移,例如采集一圈激光点云的耗时为100ms,在这一段时间如果物体相对激光有运动,则采集到的物体上的点会被压缩或拉伸。

激光雷达物体检测算法

在深度学习流行之前主要用传统的机器学习方法对点云进行分类和检测。

在这个领域对于这些学习方法本身的研究并不多,研究者更倾向于直接把理论上较为成熟的方法应用到激光点云数据中。研究者将研究重点主要放在对数据本身特性的理解上,从而设计出适合点云的算法流程。

上一节点云图中最明显的规律是地面上的“环”,根据点云的成像原理当激光雷达平放在地面上方时,与地面夹角为负角度的“线”在地面上会形成一圈一圈的环状结构。

因为这种结构有很强的规律性所以很多物体检测算法的思路是先做地面分割然后做聚类,最后将聚类得到的物体进行识别。为了提高算法的速度,很多算法并不直接作用于三维点云数据,而是先将点云数据映射到二维平面中然后再处理。常见的二维数据形式的有Range Image和Elevation Image。

从2014年开始深度学习广泛地被应用在各个领域,随着图片物体检测算法的发展,点云物体检测也逐步转向了深度学习。

现在自动驾驶中一般关注鸟瞰图中物体检测的效果,主要原因是直接在三维中做物体检测的精确度不够高,而且目前来说路径规划和车辆控制一般也只考虑在二维平面中车体的运动。

现在在鸟瞰图中的目标检测方法以图片目标检测的方法为主,主要在鸟瞰图结构的建立、物体的空间位置的估计以及物体在二维平面内的旋转角度的估计方面有所不同。

从检测结果来看这类算法比在三维空间中的物体检测要好。直接作用在三维空间中的物体检测方法在近年来也有所突破,其通过某种算子提取三维点云中具有点云顺序不变性的特征,然后通过特殊设计的网络结构在三维点云上直接做分类或分割。

这类方法的优点是能对整个三维空间任何方向任何位置的物体进行无差别的检测,其思路新颖但是受限于算法本身的能力、硬件设备的能力以及实际应用的场景,现在还不能在实际中广泛地使用。

自动驾驶对于检测算法有着比较特殊的要求:首先为了安全性考虑召回率要高,即不能漏检;其次因为检测到的物体是下游路径规划和运动决策算法的输入,这要求检测到的目标在连续帧中具有较好的稳定性,具体而言即在连续帧中检测到的同一个物体的类别、尺寸、位置和方向不能有剧烈的变化。与此同时因为激光点云的稀疏性,现有算法单用一帧点云数据无法在小物体、远处物体和被遮挡物体的检测上得到令人满意的结果。

因此近几年人们开始考虑结合多种传感器数据的方法、结合多个激光雷达的方法以及结合连续多帧的方法。虽然在学术界的排行榜中现在最好的方法是基于深度学习的算法,但是在实际问题中数据的预处理、后处理等对最终结果有着至关重要的影响,而这些部分的算法往往需要根据数据和使用场景有针对性的设计。

所以本节首先会介绍一些单帧目标检测中的非深度学习算法中对于激光数据的处理方式,然后会在下集介绍深度学习算法以及多帧目标检测算法中介绍几个具有代表性的方法。

非深度学习算法

2015年之前应用在激光雷达领域的检测和分类模型以线性模型、SVM和决策树为主。这些模型的泛化能力和复杂程度无法在实际场景中满足人们的需求,因此研究者将注意力更多的放在了对于点云数据特性的挖掘上。常见的算法流程为:

将三维点云映射为某种结构,例如Graph和Range Image;

提取每个节点或像素的特征;

将节点或像素聚类;

通过一定规则或分类器将一个或多个聚类确定为地面;

结合地面信息,通过分类器对其他聚类进行物体级别的识别;

把所有的检测、识别的结果映射回三维点云中。

从检测和分类的效果来说,这类方法远没有基于深度学习的方法好。但无论是基于Graph或是基于Range Image的结构都比单纯的点云蕴涵了更多的信息。在这些结构中有时使用简单的基于规则的方法就可以得到比较好的结果,这一点在实际应用中非常重要。例如在物体检测任务中出现了训练集合中未出现过的物体,基于学习的方法一般无法正确地将其检测出来。但是基于简单规则的方法却可以正常给出检测结果,虽然此时分类结果往往是未知。

在自动驾驶中检测算法的漏检问题远比错分类问题严重很多,从这个角度说基于简单规则的方法是保证安全的一把锁。从实时数据预处理的效率来说,在实际环境中为了提高检测精度需要将离散的噪声点和不在检测范围内的物体过滤掉。在Graph和Range Image中进行噪声数据的过滤有时比直接在点云上做效率高。

基于Range Image的方法

Range Image是指距离图,即一种类似图片的数据结构。以上节32线激光雷达的数据为例子,对应的Range Image宽360/0.2=1800像素,高32像素。每个像素值表示对应点到原点的距离。上节中的点云对应的Range Image的的可视化如下图,因为这个图非常细长所以只截取了一小段。黑色的部分缺少对应的点云信息,其他的不同颜色代表不同距离。

一个Range Image的例子

Zhu提出了一种在Range Image中建立无向图G = {N, E}的方法【3】。即在图中每一个像素代表一个节点,以每一个节点为中心在二维平面上以一定距离搜索其他节点,如果两个节点在三维空间中满足某些条件则建立一条边,边的权重是两个点在三维空间中的距离。建图之后使用基于图的分割算法(例如【4】)即可得到聚类结果。这种方法建图的速度非常快,在实际使用过程中还需要处理多个点映射到同一个像素的情况,其建图的结果和直接在三维点云中建图相比非常接近。Range Image不仅仅能为计算进行提速,还可以做到一些不方便在点云上直接处理的事情,因为其比点云包含了更多的信息。

Biasutti提出了一种对点云中被遮挡的部分进行还原的方法【5】。其思路是:首先将点云生成Range Image结构并在其中进行聚类,然后选择某个物体所代表的类并在图中抹掉,之后根据周围像素将抹掉的部分复原出来,最后将Range Image映射回点云。下图是论文中的算法的结果,可以看出白色的行人被抹掉了,而地面上的空洞被漂亮的填充了。

被遮挡点云和还原被遮挡点云的对比图,左图是原始点云,右侧是将人去掉后的点云。图片引用于【5】。

基于深度学习的算法

现在在激光雷达数据目标检测中最常用的算法是基于深度学习的算法,其效果与传统学习算法相比要好很多,其中很多算法都采用了与图片目标检测相似的算法框架。

早期的激光点云上的目标检测和图片上的目标检测算法并不一样,图片数据上常见的HOG、LBP和ACF【10,11,12】等算法并没有应用到点云数据中。这是因为激光点云数据与图片具有不同的特点,例如图片中存在遮挡和近大远小的问题而点云上则没有这些问题,反过来图片中也并不存在上节中讨论的点云的很多特点。

从2014年开始随着RCNN、Fast RCNN、Faster RCNN、YOLO和SSD【1,2,3,4,5,6,7】等图片目标检测算法的进步,研究者对于检测算法的理解也在不断深入。研究者发现虽然点云数据与图片数据有很多不一样的特点,但是在鸟瞰图中这两种不同的数据在目标检测的框架下具有相通之处,因此基于鸟瞰图的激光点云的目标检测算法几乎都沿用了图片目标检测算法的思路。

2016年PointNet【8】提出了另外的一种算法框架,其提出了一种在三维空间中与点云顺序无关的算子并结合CNN也在目标分割和识别上得到了很好的效果。这个方法为三维点云中的目标检测提供了新的思路,即有可能存在一种比基于鸟瞰图算法通用的三维目标检测方法。

如前文所述激光点云数据有一些无法克服的问题,其中最主要的就是稀疏性。提高雷达的线数是一个解决问题的途径,但是现有高线数雷达的成本过高很难真正落地,并且高线数也无法从根本上解决远距离的稀疏问题。为了解决这个问题一些研究者提出了激光数据和图片数据相融合的方法,这种方法尤其对小物体和远处的物体有很好的效果。

激光点云中目标检测的结果的稳定性也十分重要,传统的检测算法并不特别关注这个问题,其中一个原因是在后续的跟踪和关联算法中可以对检测到的目标的大小、尺寸进行滤波,从而得到稳定的结果。

近几年一些研究者尝试将“稳定算法输出”的任务交给深度神经网络,尝试根据连续的多帧数据对当前帧进行检测,这种方法可以增加算法输出结果的稳定性,减少后续跟踪算法的复杂程度,提高整个系统的鲁棒性。

接下来会介绍一些在基于单帧激光数据、图片和激光融合以及基于连续多帧激光数据这三个方面具有代表性的算法。

基于单帧激光雷达数据的方法

Zhou提出的VoxelNet是一个在激光点云数据中利用图片深度学习检测框架的很好的例子【13】。其先将三维点云转化成voxel结构,然后以鸟瞰图的方式来处理这个结构。这里voxel结构是用相同尺寸的立方体划分三维空间,这里每个立方体被称为voxel即体素。

当设定voxel的尺寸为(1,1,1)时可以将空间划分为200*200*4 = 160000个voxel。很多论文中称这种结构的维度为2.5维,如果把每个格子都看成一个像素那么这是一种类似二维图片的数据结构,而每个voxel的内部是三维空间结构。

VoxelNet的算法流程图,图片引用于【13】

VoxelNet有两个主要的过程,第一个被称为VFE(Voxel Feature Extraction)是voxel的特征提取过程,第二个是类似YOLO的目标检测过程。在VEF过程中所有voxel共享同一组参数,这组参数描述了生成voxel的特征的方法。论文中VFE的过程由一系列CNN层组成如下图。

VoxelNet算法中VFE部分的流程图,图片引用于【13】

VFE过程的结果是每个voxel都得到了长度相同的特征,将这些特征按照voxel的空间排列方式堆叠在一起形成了一个4维的特征图,以上面的例子来说特征图的尺寸为(200,200,4, l),这里l是voxel的特征长度。在目标检测过程中其首先将voxel特征通过三维卷积压缩成3维的形式(200,200,l'),然后对得到的特征图进行目标检测。和二维图片检测相比VoxelNet不仅要给出物体中心的二维坐标和包围盒的长宽,还需要给出物体中心在Z轴的位置、物体的高度和物体在XY平面上的朝向。

VoxelNet在实际使用中有两个问题:首先在VFE过程中因为所有的voxel都共享同样的参数和同样的层,当voxel数量很大时在计算上会引入错误或效率问题,一些神经网络的框架例如Caffe在bn和scale层的实现时没有考虑到这点,需要使用者自己去做调整;其次三维卷积操作的复杂度太高使得这个算法很难在自动驾驶车辆上实际使用的硬件设备上满足实时性要求。

基于多帧激光雷达数据的方法

为了得到较稳定的检测结果,可以在后处理中增加约束、也可以在跟踪算法中进行滤波。这些方法可以看作通过手工设计一些操作以减少各项检测结果的方差,从现有的理论上来看,通过学习类算法自动设计相关操作应该有更好的效果。Luo利用深度神经网络在鸟瞰图中通过连续帧的数据进行目标检测【20】。

其建立了一个“多入多出”的结构,即算法的输入是过去连续帧的鸟瞰图,而算法的输出是当前时刻和未来连续时刻的物体位置。Luo希望通过这种结构让网络不仅仅学习到物体在鸟瞰图中的形状,还可以学习到物体的速度、加速度信息。其步骤如下:

1. 设当前帧为i并设定时间窗口k,选取第i-k 1帧到第i帧的点云,并将这些点云根据GPS/IMU的信息映射到第i帧的坐标系下;

2.分别提取这k帧点云的特征;

3.融合这些特征;

4.输出第i帧和未来若干帧物体的信息,并建立轨迹。

这个方法可以在减少物体检测的噪声、增加召回率同时增加检测结果的稳定性。例如当道路上某辆车突然被其他其他的车辆遮挡,由于前面若干帧中是存在这个车的点云的,所以此时是可以通过网络猜测到其当前真实的位置。当被遮挡的车辆逐渐脱离遮挡区域时,虽然历史时刻中没有其对应的点云信息,但是当前时刻存在其点云,所以同样也可以检测到其位置。

这篇文章从一定程度上证明了这样做的可行性,但是还有一些方面值得继续挖掘:更好的特征融合的方式、每次不重复提取帧的特征以及更好的处理轨迹的方法等。

总结

本文介绍了自动驾驶中常用的激光雷达的成像原理及其生成数据的特点,并简单描述了相关的目标检测的数据结构和算法。基于激光雷达数据的目标检测不是一个很新的领域,但是随着在深度学习的广泛运用以及自动驾驶的兴起,这个领域在这几年不断出现更好的方法。下表是对本文中提到的方法的简单的总结。表中感知范围一栏表示约束算法检测范围的最主要的传感器。

在实际中设计相关算法时一般不是完整地应用其中某一个方法,而是首先采用某个方法的工作流程作为主体框架,然后根据在实际情况中遇到的问题再不断地对其进行修改。从长远来看,激光雷达未必是自动驾驶系统中必须的设备,因为多角度摄像头的图片结果理论上可以做到周围空间的三维感知。但是就现阶段来说,激光雷达还是一种非常可靠的感知手段。

随着工艺的进步,激光雷达的线数和可视范围会逐渐增加。对于目标检测算法来说,高线数激光雷达的数据一定比低线数雷达的要好,但是高线数也对算法的速度有着更高的要求,所以相关算法的效率的提高可能会是一个研究的方向。

由于激光雷达的本身的特性,小物体、远处物体和被遮挡物体的点云相对稀疏,提高这种情况下算法的效果可能会是相关研究的另一个方向。实际应用中激光雷达目标检测可能面临的问题更多,包括但不仅限于高效的数据标注、处理不平坦的地面、不同天气的影响、不同物体材质的区分、算法效果与复杂度的权衡、算法效果的评估等等。

向上滑动阅览

参考文献

[1] Moosmann, Frank, Oliver Pink, and Christoph Stiller. "Segmentation of 3D lidar data in non-flat urban environments using a local convexity criterion." Intelligent Vehicles Symposium, 2009 IEEE. IEEE, 2009.

[2] Douillard, Bertrand, et al. "On the segmentation of 3D LIDAR point clouds." Robotics and Automation (ICRA), 2011 IEEE International Conference on. IEEE, 2011.

[3] Zhu, Xiaolong, et al. "Segmentation and classification of range image from an intelligent vehicle in urban environment." Intelligent Robots and Systems (IROS), 2010 IEEE/RSJ International Conference on. IEEE, 2010.

[4] Felzenszwalb, Pedro F., and Daniel P. Huttenlocher. "Efficient graph-based image segmentation." International journal of computer vision 59.2 (2004): 167-181.

[5] Biasutti, Pierre, et al. "Disocclusion of 3D LiDAR point clouds using range images." ISPRS International Society for Photogrammetry and Remote Sensing (CMRT). 2017.

本文是来自美团无人配送文章,主要是自动驾驶中激光雷达的目标检测。如有补充请大家积极留言,并且希望大家能够在阅读论文或者有推荐的论文或者开源代码,只要和点云相关,都可以留言给群主,如果有必要将会出与你推荐相关的资料。希望大家能够积极参与分享。如有侵权请第一时间联系本平台,将及时删除。

0 人点赞