虽然业界有很多的争执,然而 LiDAR 在目前的 L3/L4 级智能驾驶系统中依然是无法或缺的传感器,由于它可以提供浓密的 3D 点云,十分准确的测量物体在 3D 空间中的位置和状态,而这是摄像头和毫米波雷达很难做到的。那么相应的,基于 LiDAR 点云的感知算法也就成为了近年来智能驾驶研发的重点之一。与图像的感知算法相似,LiDAR 点云的感知算法也分为物体检测(包括跟踪)和语义宰割两大类。这篇文章关键关注基于 LiDAR 点云的物体检测算法,语义宰割算法留待再做引见。
很多综述性的文章把 LiDAR 点云的物体检测算法粗略分为四类:Multi-view 方法,Voxel 方法,Point 方法,以及 Point 和 Voxel 联合的方法。这种基于分类的综述更像是一个算法图书馆,读者可以依据关键字(或许说关键技术)启动索引,繁难于查问和归档,或许更适宜于该畛域内的上班者。然而我想并不是一切的读者都对这个方向有比拟深化的了解,间接讲方法分类和技术细节或许会从一开局就让读者迷失在算法的森林里。所以,与普通的综述不同,在这篇文章里我以期间为线索,将 LiDAR 点云物体检测的开展历程粗略地划分为了四个萌芽期,起步期,开展期和成落地期。我会从技术开展的角度,联合自己在钻研中的一些体会来引见各种算法。这篇综述的目的不在于包罗这个方向一切的文章,我只会选一些在技术开展的路线上具备关键意义的上班。当然自己水平有限,其中必需会有疏漏。然而,假设大家读完能够对该方向的开展头绪有一个基本的意识,那我想我的目的就到达了。
基本概念在进入详细的引见之前,还是有必要繁难说一下一些基本的概念。LiDAR 的输入数据是 3D 点云,每一个点除了蕴含 X,Y,Z 坐标,还蕴含一个反射强度 R,相似与毫米波雷达里的 RCS。3D 物体检测的目的是要依据点云数据来找到场景中一切感兴味的物体,比如智能驾驶场景中的车辆,行人,静态阻碍物等等。下图以车辆为例,来说明输入结果的格局。繁难来说,检测算法输入多个 3D 矩形框(术语称为 3D BoundingBox,简称 3D BBox),每个框对应一个场景中的物体。3D BBox 可以有多种表示方法,普通最罕用的就是用中心点 3D 坐标,长宽高,以及 3D 旋转角度来表示(繁难一些的话可以只思索平面内旋转,也就是下图中的θ)。检测算法输入的 3D BBox 与人工标注的数据启动对比,普通驳回 3D IoU (Intersection over Unoin)来权衡两个 BBox 重合的水平,高于设定的阈值就被以为是一个成功的检测,反之则以为物体没有被检测到(False Negative)。假设在没有物体的区域发生了 BBox 输入,则被以为是一个误检(False Positive)。评测算法会同时思索这两个目的,给出一个综合的分数,比如 AP(Average Precision)以此为规范来评价算法的优劣。由于不是本文的重点,详细的细节这里就不做赘述了。
基于LiDAR 点云的 3D 物体检测示用意
萌芽期(2017 年之前) 有了前面的铺垫,上方咱们的算法之旅正式开局了。话说物体检测算法的兴起关键来自于计算机视觉畛域,自从 2012 年深度学习发生以来,图像和视频中的物体检测算法在功能上有了大幅度的提高,各种经典算法也是层数不穷,比如最早的 R-CNN,到起初的 Faster RCNN,再到 YOLO 以及最新的 CenterNet 等等,可以说曾经钻研的十分透彻了。那么,在做点云中的物体检测时,人们人造的就会想到要自创视觉畛域的成功阅历。VeloFCN 就是其中的代表性方法。它将 3D 点云转换到与图像相似的正视图(Front View),失掉一个「点云伪图像」。这种数据在格局和性质上与图像十分相似,人造的也就可以照搬图像上的物体检测算法。然而这种表示的缺陷也很清楚,首先多个点或许映射到图像坐标的同一个位置,这样会形成消息的失落。更为关键的是,将 3D 的点映射到 2D 平面,丢掉了深度消息,而这个消息对 3D 物体检测来说是十分关键的。因此,人们又想到可以把 3D 点云映射到仰视图(也称作俯瞰视图,Bird's Eye View, 简称 BEV)。这种映射是十分直观的,你可以繁难的以为把 3D 点的高度坐标疏忽(将其看作点的特色),从而失掉 2D 平面上的数据表示。MV3D 就是将 3D 点云同时映射到正视图和仰视图,并与 2D 图像数据启动融合。以上说的都是数据构建和特色提取,至于后端的检测算法,普通来说这个期间都是驳回基于 R-CNN 或许相似的方法。
进入 2017 年,在这个年份里发生了两个在点云物体检测畛域可谓里程碑式的上班:VoxelNet 和 PointNet++。这两个上班代表了点云处置的两个基本方向,VoxelNet 将点云量化为网格数据,而 PointNet++ 间接处置非结构化的数据点。上方我会稍微详细的引见一下这两个方法,由于之后点云物体检测畛域简直一切的方法都离不开这两个上班里的概念。VoxelNet 这个上班是 2017 年由苹果公司的两位钻研人员提出的,并且宣布在了 CVPR 2018 上(计算机视觉和形式识别畛域的顶会)。其思绪并不复杂,首先将点云量化到一个平均的 3D 网格中(下图中的 grouping)。每个网分内部随机采样固定数量的点(无余的就重复),每个点用 7 维特色表示,包括该点的 X,Y,Z 坐标,反射强度 R,以及该点相对网格质心(网格内一切点位置的均值)的位置差 ΔX,ΔY 和ΔZ。全衔接层被用来提取点的特色,而后每个点的特色再与网格内一切点的特色均值启动拼接,失掉新的点特色。这种特色的好处在于同时保管了单个点的个性和该点周围一个部分小区域(网格)的个性。这个点特色提取的环节可以重复屡次,以增强特色的形容才干(下图中的 Stacked Voxel Feature Encoding)。最终网格内的一切点启动最大池化操作(Max Pooling),以失掉一个固定长度的特色向量。以上这些步骤称为特色学习网络,其输入是一个 4D 的 Tensor(对应 X,Y,Z 坐标和特色)。这与普通的图像数据不同(图像是 3D Tensor,只要 X,Y 坐标和特色),因此还没法间接驳回图像物体检测的方法。VoxelNet 中驳回 3D 卷积对Z维度启动紧缩(比如 stride=2)。假定 4D Tensor 的维度为 HxWxDxC,经过若干次 3D 卷积后,Z 维度的大小被紧缩为 2(也就是 HxWx2xC'),而后间接将 Z 维度与特色维度兼并,生成一个 3D 的 Tensor(HxWx2C')。这就和规范的图像数据格局相似了,因此可以接上图像物体检测网络(比如 Region Proposal Network,RPN)来生成物体检测框,只不过这里生成的是 3D 的检测框。从上方的引见可以看出,VoxelNet 的框架十分繁复,也是第一个可以真正启动端对端的学习的点云物体检测网络。试验结果标明,这种端对端的形式可以智能地从点云中学习到可用的消息,比手工设计特色的形式更为高效。
VoxelNet 网络结构PointNet++该方法的前身是 PointNet,由斯坦福大学的钻研者在 2017 年宣布,这也是点云处置畛域的开创性上班之一。PointNet 处置的是点云分类义务,其关键思绪是间接处置原始的点云。除了一些几何变换之外,PointNet 关键有两个操作:MLP(多个全衔接层)提取点特色,MaxPooling 失掉全局特色。物体分类网络驳回全局特色作为输入,而宰割网络则同时驳回全局特色和点特色。繁难来说,你可以把 PointNet 分类网络看做一个分类器,比如可以了解为传统方法中的 SVM。然而要启生物体检测的话,就还须要一个相似于 Sliding Window 的机制,也就是说在场景内的各个位置运行 PointNet 来辨别物体和背景,以到达物体检测的成果。当然关于相对稀疏的点云数据来说,这种做法是十分低效的。因此,PointNet 的作者同年就提出了更新版本,也就是 PointNet++。其关键思绪是用聚类的形式来发生多个候选区域(每个区域是一个点集),在每个候选区域内驳回 PointNet 来提取点的特色。这个环节以一种层级化的形式重复屡次,每一次性聚类算法输入的多个点集都被当做笼统后的点云再启动下一次性处置(Set Abstraction,SA)。这样失掉的点特色具备较大的感触野,蕴含了部分邻域内丰盛的高低文消息。最后,在多层 SA 输入的点集上启动PointNet分类,以辨别物体和背景。雷同的,这个方法也可以做点云宰割。
PointNet++网络结构与 VoxelNet 相比,PointNet++ 的好处在于:1,没有量化带来的消息损失,也无需调理量化超参数;2,疏忽空白区域,防止了有效的计算。然而缺陷也显而易见:1,无法应用成熟的基于空间卷积的2D物体检测算法;2,虽然防止了有效计算,然而GPU关于点云的处置效率远低于网格数据,因此实践的运转速度甚至更慢。开展期(2018 年 - 2020 年)在 VoxelNet 和 PointNet++ 相继提出后,3D 物体检测畛域迎来了一个极速开展期,很多算法被提出,用来改良这两个上班中的无余。对Voxel 方法的改良VoxelNet 的关键疑问在于数据表示比拟低效,两边层的 3D 卷积计算量太大,造成其运转速度只要大概 2FPS(Frame Per Second),远低于实时性的要求,因尔后续很多上班针对其运转效率的疑问启动了改良。SECOND 驳回稀疏卷积战略,防止了空白区域的有效计算,将运转速度优化到了 26 FPS,同时也降低了显存的经常使用量。PIXOR 提出经过手工设计的形式,将 3D 的 Voxel 紧缩到 2D 的 Pixel。这样做防止了 3D 卷积,然而损失了高度方向上的消息,造成检测准确度降低很多。PointPillar 的思绪也是 3D 转 2D,也就是将点 3D 云量化到 2D 的 XY 平面网格。然而与 PIXOR 手工设计特色的形式不同,PointPillar 把落到每个网格内的点间接叠放在一同,笼统的称其为柱子(Pillar),而后应用与 PointNet 相似的形式来学习特色,最后再把学到的特色向量映射回网格坐标上,失掉与图像相似的数据。这样做一来防止了 VoxelNet 中的 3D 卷积和空白区域的有效计算(运转速度到达 62 FPS),二来防止了手工设计特色造成消息失落和网络顺应性不强的疑问,可以说是很奇妙的思绪。不好的方面是,点特色的学习被限度在网格内,无法有效的提取邻域的高低文消息。
PointPillar 网络结构对Point 方法的改良PointNet++ 驳回基于聚类的方法来层级化的提取邻域特色以及取得物体候选,这种做法效率比拟低,而且也很难做并行减速。而这凑巧是传统的 2D 卷积网络的强项,因尔后续的上班逐渐将 2D 物体检测算法中的一些思绪拿上来,用来处置 PointNet++ 中的疑问。Point-RCNN 首先在这个方向了启动了探求,可以称得上 3D 物体检测畛域的又一个里程碑式的上班。从名字上就能看出,这个方法将点云处置和 2D 物体检测畛域的开山之作 Faster RCNN 联合了起来。首先,PointNet++被用来提取点特色。点特色被用来启动前景宰割,以辨别物体上的点和背景点。同时,每个前景点也会输入一个 3D 候选 BBox。接上去就是将候选 BBox 内的点再做进一步的特色提取,输入 BBox 所属的物体类别,并且对其位置,大小启动细化。看到这里,相熟 2D 物体检测的好友必需会说,这不就是一个典型的两阶段检测模型嘛。没错,但不同的是,Point-RCNN 只在前景点上生成候选,这样防止了 3D 空间中生成浓密候选框所带来的渺小计算量。虽然如此,作为一个两阶段的检测器,加上 PointNet++ 自身较大的计算量,Point-RCNN的运转效率依然不高,只要大概13FPS 。Point-RCNN起初被裁减为Part-A2[11],速度和准确度都有必定的优化。
Point-RCNN 网络结构3D-SSD 经过对之前 Point-based 方法的各个模块启动剖析,得出论断:FP(Feature Propagation)层和细化层(Refinement)是系统运转速度的瓶颈。FP 层的作用是将 SA 层笼统后的点特色再映射回原始的点云,可以了解为上图中 Point-RCNN 的 Point Cloud Decoder。这一步十分必要,由于 SA 输入的笼统点并不能很好的笼罩一切的物体,会造成很大的消息失落。3D-SSD 提出了一种新的聚类方法,同时思索点与点之间在几何空间和特色空间的相似度。经过这种改良的聚类方法,SA 层的输入可以间接用来生成物体 Proposal,防止了 FP 层带来的大计算量。同时,为了防止 Refinement 阶段的 Region Pooling,3D-SSD 间接驳回 SA 输入的代表点,应用前面提到了改良聚类算法找到其邻域点,用一个繁难的 MLP 来预测类别和物体框 3D BBox。3D-SSD 可以以为是一个 Anchor-Free 的单阶段检测器,这也合乎整个物体检测畛域的开展趋向。经过以上改良,3D-SSD 的运转速度可以到达 25FPS。
3D-SSD 网络结构关于非结构化的点云数据,用图模型来表示也是一种很人造的想法。然而图神经网络相对比拟复杂,虽然近些年开展也很快,然而在 3D 物体检测上的上班并不多。PointGNN 是其中一个比拟典型的上班。其流程关键分为三步:首先依据一个预设的距离阈值来树立图模型;而后更新每个顶点以失掉邻域点的消息,用来检测物体类别和位置,最后融合多个顶点输入的 3D 物体框,作为最终的检测结果。这种基于图模型的方法在思绪上十分陈腐,然而训练和推理环节的计算量太大。论文中指出成功一次性训练须要破费将近一周的期间,这大大降低了该类方法的适用性。
PointGNN网络结构Voxel 和Point 方法的融合以上回忆了 Voxel-based 和 Point-based 两个关键方向上的改良。其实,在这个阶段,钻研者曾经有意有意的将两种战略启动融合,以扬长避短。PointPillar 就是一个例子,虽然点云被依照相似 Voxel 的形式启动量化,然而点特色的学习是驳回相似 PointNet 的形式。虽然说算法的功能并不是最好的,然而其思绪还是十分值得思索的。沿着这个方向,后续又发生了很多不错的上班。在引见更多的上班之前,有必要来总结一下之前的代表性方法,看看它们在检测率和速度上的对比如何。这里咱们驳回行业内最盛行的 KITTI 数据库来作为评测的基准。至于更大规模和更针对智能驾驶运行的 nuScenes 和 Waymo 数据库,咱们留在前面再探讨。KITTI 驳回 Velodyne 激光雷达,在市区路线环境下采集数据,其 3D 物体识别义务的类别包括车辆,行人和骑车的人。由于早期一些算法只提供了车辆检测的正确率,因此这里咱们就只对比车辆这个类别。这里算法的准确度驳回中等难度测试集上的 AP 作为目的,而速度则驳回 FPS 来权衡,这两个目的都是越高越好。
从上表的对比中可以看出,基于Voxel的方法速度较快,准确度偏低。基于 Point 的方法速度清楚偏慢,然而准确度相对较高。一个成功的算法要同时思索速度和准确度,在两者之间寻求最优的平衡。
那么再来回忆一下 Voxel 和 Point 的关键疑问。前者十分依赖于量化的参数:网格大的话消息损失比拟大,网格小的话的计算量和内存经常使用量又十分高。后者很难提取邻域的高低文特色,并且内存的访问是不规定的(大概 80% 的运转期间都消耗在数据构建,而不是真正的特色提取上)。因此,两者融合的基本思绪是:应用较低分辨率的 Voxel 来提取高低文特色(比如 PV-CNN )或许生成物体候选(Fast Point RCNN ),或许二者兼有(比如 PV-RCNN,SA-SSD),而后再与原始的点云联合,这样单个点的特色和点点之间的空间相关也可以同时保管。在 PV-CNN 中,一个分支驳回低分辨率的 Voxel 来提取具备邻域消息的特色,而后再经过插值的方法映射回每个点上。另一个分支间接从原始点登程,应用MLP来提取点特色,这时虽然没有邻域消息,然而单个点的特色提取是相对准确的。最后把两个分支的特色启动拼接,作为下一步的输入。
PV-CNN 网络结构相似的,PV-RCNN 的一个分支将点云量化到不同分辨率的 Voxel,以提取高低文特色和生成 3D 物体候选。另外一条分支上驳回相似于 PointNet++ 中 Set Abstraction 的操作来提取点特色。这里比拟特意的是,每个点的畛域点并不是原始点云中的点,而是 Voxel 中的点。由于 Voxel 中的点具备多分辨率的高低文消息,点特色提取也就同时统筹了单个点以及邻域消息,这与 PV-CNN 中的思绪是相似的。值得一提的是,PV-RCNN 和 Fast Point RCNN 都属于两阶段的检测方法,有一个 ROI Pooling 的步骤,因此运转速度会收到影响(PV-RCNN 只要 12.5 FPS,Fast Point R-CNN 也只要 16.7 FPS)。
SA-SSD 经过附加的前景宰割和物体中心点预计义务疏导 Voxel 分支去更好的学习点特色和应用点之间的空间相关,同时也防止了 3D 物体候选框和 ROI Pooling 步骤。作为一个单阶段的检测器,SA-SSD 可以到达 25 FPS,准确度也仅比 PV-RCNN 略低(79.79% vs. 81.43%)。
SA-SSD 网络结构落地期(2020 年至今)在之前的极速开展期中,3D 物体检测的各种战略都被充沛的钻研和试验,人们也取得了很多贵重的阅历。那么,下一步很人造就是须要确定最优的战略,以及如何将算法与实践的运行相联合。因此,在这一阶段,钻研的重心开局往算法的适用性上和可落地性上转移。针对智能驾驶运行来说,基于激光雷达的 3D 物体检测一方面是关键的感知信号起源,是智能驾驶系统的**之一,因此咱们须要充沛的思索实时性和准确性的平衡。
另一方面,激光雷达在很多时刻会作为辅佐的传感器来辅佐离线的数据标注。比如,毫米波雷达的点云十分稀疏,底层数据又无法直观的了解,因此很难在其上启动准确的物体标注。这个时刻激光雷达或许摄像头的辅佐就变得十分关键。普通来说,智能的物体检测算法会和人工标注启动联合,以提高标注效率。在这种运行中,最关注的是检测算法的准确度而不是速度。因此,团体以为现阶段 3D 物体检测的开展有两个趋向:一个是谋求速度和准确度的平衡,另一个是在保障必定速度的前提下最大化准确度。前者普通会驳回 Voxel 加单阶段检测器,后者普通会融合 Voxel 和 Point,甚至驳回两阶段的检测器,以取得更为精细的物体框。上方联合几个 2021 年最新的上班,来做进一步的剖析。SIENet 是一个基于 Voxel 和 Point 融合的两阶段检测方法,其融合战略与 PV-RCNN 相似。为了处置远处物体点云相对稀疏的疑问,SIENet 驳回了一个附加分支,将 Voxel 的网格看做额外的点,以此来对远处物体启动补全。SIENet 在 KITTI 车辆检测上的 AP 为 81.71%,然而速度只要 12.5 FPS,基本上与 PV-RCNN 相当。
SIENet网络结构Voxel R-CNN 也是一个两阶段检测器,然而只驳回了 Voxel 来做特色提取,其结构愈加繁复。经过一个特意设计的 Voxel ROI Pooling 模块,该方法可以进一步提高物体检测的准确度。其他的部分与普通的基于 Voxel 方法十分相似,这里就不详细形容了。Voxel RCNN 在 KITTI 车辆检测上的 AP 为81.62%,与 SIENet 相当,然而速度优化了一倍,到达 25.2 FPS。
CIA-SSD 是一个基于 Voxel 的单阶段检测方法。其特色提取阶段与 SECOND 相似,都是驳回稀疏 3D 卷积。不同的是 CIA-SSD 将网格内点的均值作为起始特色(没有驳回 VoxelNet 中的多阶段 MLP),而且经过不时降高空间分辨率来进一步缩小计算量,最后将Z方向的特色拼接以失掉 2D 特色图(相似 VoxelNet 中的做法)。作为一个单阶段的检测器,CIA-SSD 自创了图像物体检测畛域的一些技巧。比如,为了更好的提取空间和语义特色,CIA-SSD 驳回了一种相似于 Feature Pyramid Network (FPN)的结构,当然这里的细节设计稍微复杂一些。此外,为了处置单阶段检测器分类置信度和定位准确度之间的差异疑问,CIA- SSD 驳回了 IoU 预测分支,以批改分类的置信度和辅佐 NMS。联合以上这些战略,CIA-SSD 在 KITTI 车辆检测的 AP 到达 80.28%,速度为 33 FPS。CIA-SSD 之后被裁减为 SE-SSD,速度不变,AP 优化到 82.54%,这其实曾经逾越了基于 Voxel 和 Point 融合的两阶段检测器。
CIA-SSD网络结构新的数据库和基准评测以上关于检测准确度和速度的剖析都是基于 KITTI 数据库。近两年来,为了更好的评测 3D 物体检测算法,并且愈加贴近智能驾驶场景,工业界构建了两个更大规模的数据库:Waymo Open>