来源:自动驾驶之心
本文约16000字,建议阅读10+分钟
本文将演示如何通过阈值调优来提高模型的性能。本文的结构安排如下:首先,第2节中介绍了3D目标检测问题的定义、数据集和评价指标。然后,我们回顾和分析了基于LiDAR传感器(第3节)、相机(第4节)和多模态数据输入(第5节)。
近年来,自动驾驶因其减轻驾驶员负担、提高行车安全的潜力而受到越来越多的关注。在现代自动驾驶系统中,感知系统是不可或缺的组成部分,旨在准确估计周围环境的状态,并为预测和规划提供可靠的观察结果。
3D目标检测可以智能地预测自动驾驶车辆附近关键3D目标的位置、大小和类别,是感知系统的重要组成部分。本文回顾了应用于自动驾驶领域的3D目标检测的进展。首先,我们介绍了3D目标检测的背景并讨论了该任务中的一些挑战。
其次,我们从模型和传感器输入方面对3D目标检测的进展进行了全面调查,包括基于LiDAR、基于相机和多模态检测方法。我们还对每一类方法的潜力和挑战进行了深入分析。此外,我们系统地研究了3D目标检测在驾驶系统中的应用。
最后,我们对3D目标检测方法进行了性能分析,并进一步总结了多年来的研究趋势,展望了该领域的未来方向。
自动驾驶,旨在使车辆智能地感知周围环境,并在很少或无需人力的情况下安全行驶,近年来取得了快速发展。
自动驾驶技术已广泛应用于自动驾驶卡车、无人驾驶出租车、送货机器人等多种场景,能够减少人为错误,提高道路安全。作为自动驾驶系统的核心组成部分,车辆感知通过各种传感器输入帮助自动驾驶汽车了解周围环境。
感知系统的输入一般是多模态数据(来自摄像头的图像数据、来自LiDAR的点云、高精地图等),并且会预测道路上关键要素的几何和语义信息。高质量的感知结果可作为轨迹预测和路径规划等后续步骤的可靠依据。
为了全面了解驾驶环境,感知系统涉及到许多视觉任务,例如目标检测和跟踪、车道线检测、语义和实例分割等。在这些感知任务中,3D目标检测是车辆感知系统中最不可或缺的任务之一。
3D目标检测旨在预测3D空间中关键目标的位置、大小和类别,例如机动车、行人、骑自行车的人等。与仅在图像上生成2D边界框并忽略目标与本车的实际距离信息的2D目标检测相比,3D目标检测侧重于对真实世界3D坐标系中目标的定位和识别。
3D目标检测在现实世界坐标中预测的几何信息可以直接用于测量本车与关键目标之间的距离,并进一步帮助规划行驶路线和避免碰撞。
3D目标检测方法随着深度学习技术在计算机视觉和机器人领域的发展而迅猛发展。现有的3D目标检测方法都试图从特定方面解决3D目标检测问题,例如从特定传感器类型,数据表示等,与其他类别的方法缺乏系统的比较。
因此综合分析各种类型的3D目标检测方法的优缺点,可以为相关研究人员提供一些参考。基于此目的,本文全面回顾了自动驾驶应用中的3D目标检测方法,并对不同方法进行深入分析和系统比较。
与现有的综述文章[5, 139, 215]相比,本文广泛涵盖了该领域的最新进展,例如基于深度图像的3D目标检测、自/半/弱监督3D目标检测、端到端自动驾驶系统中的3D目标检测等。
与之前仅关注点云[88、73、338]、单目图像[297、165]和多模态输入[ 284]相比,我们的论文系统地研究了来自所有传感器类型和大多数应用场景的3D目标检测方法。
这项工作的主要贡献可以总结如下:
我们从不同的角度全面回顾了3D目标检测方法,包括来自不同传感器输入的检测(基于LiDAR、基于摄像头和多模态)、时间序列检测、标签高效检测、以及3D目标检测在驾驶系统中的应用。
我们从结构和层次上总结了3D目标检测方法,对这些方法进行了系统分析,并为不同类别方法的潜力和挑战提供了有价值的见解。
对3D目标检测方法的综合性能和速度进行分析,确定多年来的研究趋势,并为3D目标检测的未来方向提供深刻的见解。
本文的结构安排如下:首先,第2节中介绍了3D目标检测问题的定义、数据集和评价指标。然后,我们回顾和分析了基于LiDAR传感器(第3节)、相机(第4节)和多模态数据输入(第5节)。
接下来,我们在第6节中介绍利用时空数据的检测方法,并在第7节中使用较少有标签数据的方法。我们随后在第8节中讨论3D目标检测在驾驶系统中的应用。
最后,我们进行速度和性能分析,对研究趋势进行了探讨,并在第9节中展望3D目标检测的未来方向。分层结构的分类如下图所示。
3D目标检测是通过输入传感器数据,预测3D目标的属性信息的任务。如何表示3D目标的属性信息是关键,因为后续的预测和规划需要这些信息。
大部分情况下,3D目标被定义为一个立方体,(x,y,z)是立方体的中心坐标,l,w,h是长宽高信息,delta是航向角,比如立方体在地平面的偏航角,class是3D目标的类别。
vx、vy描述3D目标在地面上沿x轴和y轴方向的速度。在工业应用中,一个3D目标的参数可以进一步简化为鸟瞰图上一个长方体的4个角位置。
许多类型的传感器都可以为3D目标检测提供原始数据,相机和LiDAR(激光雷达)传感器是两种最常采用的传感器类型。相机价格便宜且易于使用,并且可以从某个角度捕捉场景信息。
相机产生图像W×H×3用于3D目标检测,其中W和H是一幅图像的宽高,每个像素有3个RGB通道。尽管价格便宜,但相机在用于3D目标检测方面存在内在限制。首先,相机只捕捉外观信息,不能直接获取场景的3D结构信息。
另一方面,3D目标检测通常需要在3D空间中进行准确定位,而从图像估计的3D信息(例如深度)通常具有较大的误差。此外,基于图像的检测很容易受到极端天气和时间条件的影响。在夜间或雾天从图像中检测目标比在晴天检测要困难得多,这样的自动驾驶系统无法保证鲁棒性。
作为替代解决方案,LiDAR传感器可以通过发射一束激光束,然后测量其反射信息来获得场景的细粒度3D结构信息。一个LiDAR传感器在一个扫描周期内发射光束并进行多次测量可以产生一个深度图像,每个深度图的像素有3个通道,分别为球坐标系中的深度r、方位角α和倾角φ。
深度图像是激光雷达传感器获取的原始数据格式,可以通过将球坐标转换为笛卡尔坐标进一步转换为点云。一个点云可以表示为N×3,其中N表示一个场景中的点数,每个点有3个xyz坐标通道。
附加功能,例如反射强度,可以附加到每个点或深度图像素。深度图像和点云都包含由LiDAR传感器直接获取的准确3D信息。因此,与相机相比,LiDAR传感器更适合检测3D空间中的目标,并且LiDAR传感器也更不易受时间和天气变化的影响。
然而,LiDAR传感器比摄像头贵得多,这限制了在驾驶场景中的大规模应用。3D目标检测图解,见下图:
旨在在图像上生成2D边界框的2D目标检测是计算机视觉中的一个基本问题。3D目标检测方法借鉴了2D目标检测方法的许多设计范式:proposal generation and refinement、anchors、NMS 等。
然而,从多方面来看,3D目标检测方法并不是2D目标检测方法对3D空间的简单适配。
3D目标检测方法必须处理多样化的数据。点云检测需要新的算子和网络来处理不规则的点数据,而点云和图像的检测需要特殊的融合机制。
3D目标检测方法通常利用不同的投影视图来生成目标预测结果。与从透视图检测目标的2D目标检测方法相反,3D方法必须考虑不同的视图来检测3D目标,例如鸟瞰图、点视图、柱面视图等。
3D目标检测对目标在3D空间的准确定位有很高的要求。分米级的定位误差可能导致对行人和骑自行车的人等小目标的检测失败,而在2D目标检测中,几个像素的定位误差可能仍然保持较高的IoU指标(预测值和真值的IoU)。因此,不论是利用点云还是图像进行3D目标检测,准确的3D几何信息都是必不可少的。
室内3D目标检测也是3D目标检测的一个分支,室内数据集比如SUN RGB-D [247],利用RGB-D和3D标注信息重建房间结构,包括门、窗、床、椅子等。室内场景中的3D目标检测也是基于点云或图像。然而,与室内3D目标检测相比,驾驶场景中存在独特的挑战。
自动驾驶场景的检测范围远大于室内场景。驾驶场景中的3D目标检测通常需要预测很大范围内的3D目标,例如Waymo[250]中为150m×150m×6m,而室内3D目标检测通常以房间为单位,而其中[54]大多数单人房间小于10m×10m×3m。那些在室内场景中工作的时间复杂度高的方法在驾驶场景中可能无法表现出好的适应能力。
LiDAR和RGB-D传感器的点云分布不同。在室内场景中,点在扫描表面上分布相对均匀,大多数3D目标在其表面上可以接收到足够数量的点。而在驾驶场景中,大多数点落在LiDAR传感器附近,而那些远离传感器的3D目标仅接收到少量点。因此,驾驶场景中的方法特别需要处理3D目标的各种点云密度,并准确检测那些遥远和稀疏的目标。
驾驶场景中的检测对推理延迟有特殊要求。驾驶场景中的感知必须是实时的,以避免事故。因此,这些方法需要及时高效,否则它们将无法落地。
自动驾驶3D目标检测相关数据集较多,具体见下表。主要的数据集建立需要继续干以下四件事:
增大数据规模。
增加数据多样性,不只有白天夜晚,还要包括阴天、雨天、雪天、雾天等。
增加标注类别,除了常用的机动车、行人、非机动车等,还应包括动物,路上的障碍物等。
增加多模态数据,不只有点云和图像数据,还有高精地图、雷达数据、远程激光雷达、热成像数据等。
未来的数据集应该包括感知、预测、规划、建图等一整套数据,这样可以为端到端的自动驾驶系统服务,而不仅仅是考虑一个3D目标检测任务。
针对3D目标检测的评价,一种是将2D任务的AP指标扩展到3D,比如KITTI就包括 AP-3D、AP-BEV指标,分别用到预测值与真值的3D-IoU、BEV-IoU来衡量。其它比如基于中心距离的匹配,或者匈牙利匹配等。
另一种则通过下游任务来衡量,只有对下游任务(运动规划)有帮助的检测方法,才能在实际应用中确保驾驶安全。包括PKL[230]和SDE[56]等工作。
不同评价指标的利弊。基于AP的评价指标[80,15,250]自然继承了2D检测的优势。然而,这些指标忽略了检测对驾驶安全的影响,而这在现实应用中至关重要。
例如,在AP计算中,本车附近的目标漏检和本车远一点的目标漏检可能都只是一个漏检,但在实际应用中,近处的目标漏检实质上比远处的目标漏检更危险。
因此,从安全驾驶的角度来看,基于AP的指标可能不是最优选择。PKL[203]和SDE[56]通过考虑下游任务中检测的影响,部分解决了这个问题,但在对这些影响建模时将引入额外的挑战。
PKL[203]需要一个预先训练的运动规划器来评估检测性能,但预先训练的规划器也有固有误差,可能会使评估过程不准确。SDE[56]需要重构目标边界,这通常是复杂和具有挑战性的。
激光雷达数据主要包括点云、深度图数据等,以下时间轴将较为经典的算法做了个列举。
点云数据和深度图数据与一般的图像不同。点云是稀疏、不规则的,需要设计特殊模型提取特征。而深度图是密集紧凑,深度像素存的是3D信息,而不是RGB值。
这些都是需要打破原先的常规卷积网络的固有思维,而且自动驾驶需要检测目标的实时性,推理要快,如何设计一个在点云和深度图上推理更快的模型也是一个挑战。
基于点的目标检测成功在点云上应用深度学习方法,提出了一系列框架,可以直接从原始点数据来预测3D目标。将点云通过基于点的主干网络,通过点云算子来提取点云特征,基于下采样的点和特征预测3D框。
基于点的3D目标检测器主要组成部分为:点云采样和特征学习。整体流程示意图和代表性工作见下图和表。
点云采样。PointNet++[208]的FPS在基于点的检测器中被广泛采用,这种检测器从原始点集中依次选择最远处的点。PointRCNN[234]是一项开创性的工作,它采用FPS逐步下采样输入的点云,并从下采样点中生成3D候选。
类似的设计范式在随后的许多工作中也被采用,并进行了分割引导滤波[318]、特征空间抽样[321]、随机抽样[189]等改进。
特征学习。上下文点首先用一个预定义的查询球半径进行选择,然后上下文点和特征经过多层感知机和max-pooling,得到新的特征。其它点云操作,包括图操作、注意力操作、Transformer等。
基于点的3D目标检测器受制于特征学习中采用的上下文点数量和上下文半径。增加上下文点数量可以获得更强的表达能力,但会增加内存,在球查询中,上下文半径太小,会造成上下文信息不足,半径太大,造成3D细粒度信息丢失。
对于大部分的基于点的3D目标检测器,推理时间上的瓶颈是点云采样。随机均匀采样因为可以并行,效率最高,但激光雷达扫描点分布不均匀,随机均匀采样会对点云密度高的地方过采样,而稀疏的地方欠采样。
最远点采样及其变体通过从已有的点集中依次选择最远点获得更加均匀的采样结果,但其不能并行,耗时较大,较难做到实时。
基于网格的3D目标检测器首先将点云栅格化为离散的网格表示,即体素、柱体和鸟瞰视图(BEV)特征图。然后应用传统的2D卷积神经网络或3D稀疏神经网络提取特征。最后,可以从BEV网格中检测出3D目标。
下图展示了基于网格的3D目标检测的示例,下表给出了基于网格的检测器的分类。网格检测有两个基本组成部分:基于网格的表示和基于网格的神经网络。
基于网格的表示。目前有3种主要的网格表示类型:体素、柱体和BEV特征图。
体素。体素是3D立方体,体素细胞内包含点。点云可以很容易地通过体素化转化为体素。由于点云分布稀疏,3D空间中的大部分体素细胞都是空的,不包含点。在实际应用中,只有那些非空体素被存储并用于特征提取。
VoxelNet[359]是一项利用稀疏体素网格的开创性工作,提出了一种新的体素特征编码(VFE)层,从体素细胞内的点提取特征。此外,还有两类方法试图改进用于3D目标检测的体素表示:
多视图体素。一些方法从不同的视角提出了一种动态体素化和融合方案,例如从鸟瞰图和透视图[360],从圆柱形和球形视图[34],从深度视图[59]等。
多尺度体素。一些论文生成不同尺度的体素[323]或使用可重构体素。
柱体。柱体可以被视为特殊的体素,其中体素的大小在垂直方向上是无限的。通过PointNet将点聚集成柱状特征[207],再将其分散回去,构建二维BEV图像进行特征提取。PointPillars[117]是一个开创性的工作,介绍了柱体表示,随后的是[283,68]。
BEV特征图。鸟瞰特征图是一种密集的二维表示,其中每个像素对应一个特定的区域,并对该区域内的点信息进行编码。BEV特征图可以由体素和柱体投影到鸟瞰图中获得,也可以通过汇总像素区域内的点统计数据,直接从原始点云中获得。
常用的统计数据包括二进制占用率[314,313,2]和局部点云高度和密度[40,10,342,3,245,346,8,119]。
基于网格的神经网络。目前主要有两种基于网格的网络:用于BEV特征图和柱体的2D卷积神经网络,以及用于体素的3D稀疏神经网络。
与BEV特征图和柱体2D表示相比,体素包含更多结构化的3D信息。此外,可以通过3D稀疏网络学习深度体素特征。
但是,3D神经网络会带来额外的时间和内存成本。BEV特征图是最有效的网格表示,它直接将点云投影到2D伪图像中,而无需专门的3D算子,如稀疏卷积或柱体编码。2D检测方法也可以在BEV特征图上无缝应用,无需太多修改。
基于BEV的检测方法通常可以获得高效率和实时推理速度。然而,简单地汇总像素区域内的点统计信息会丢失太多的3D信息,与基于体素的检测相比,这会导致检测结果不太准确。
基于柱体的检测方法利用PointNet对柱体单元内的3D点信息进行编码,然后将特征分散回2D伪图像中进行有效检测,从而平衡3D目标检测的效果和效率。
选择合适大小的网格单元是所有基于网格的方法都必须面对的关键问题。通过将连续点坐标转换为离散网格索引,网格表示本质上是点云的离散形式。
在转换过程中不可避免地会丢失一些3D信息,其效果很大程度上取决于网格单元的大小:网格小,分辨率高,可以保持更细粒度的细节,对于准确检测3D目标至关重要。然而,减小网格单元又会导致2D网格表示(如BEV特征图或柱体)的内存消耗呈二次方增长。至于像体素这样的3D网格表示,问题可能会变得更加严重。
因此,如何平衡更小网格尺寸带来的效果和内存增加影响效率,仍然是所有基于网格的3D目标检测方法的一个挑战。
基于点-体素的方法采用了一种混合架构,利用点和体素进行3D目标检测。主要分为两类:单阶段检测框架和两阶段检测框架。下图显示了这两个类别的示例及分类:
单阶段基于点-体素的3D目标检测器通过骨干网络中的点-体素和体素-点的变换来连接点和体素的特征。点包含细粒度的几何信息,体素计算效率高,在特征提取阶段将它们结合在一起更加有利。
代表性工作包括:PVCNN、SPVNAS、SA-SSD、PVGNet等。
两阶段的基于点-体素的3D目标检测器,在第一阶段,使用基于体素的检测器来生成一组3D候选目标。在第二阶段,首先从输入点云中采样关键点,然后通过新的点算子对关键点进行进一步细化。代表工作包括:PV-RCNN、LiDAR R-CNN、Pyramid R-CNN、CT3D等等。
与纯体素检测方法相比,基于点-体素的3D目标检测方法在增加推理时间的同时,可以获得更好的检测精度。
Range图像是一种密集而紧凑的2D表示,其中每个像素包含3D深度信息,而不是RGB值。需要针对Range图设计模型和算子,并要选择合适的视图。
Range图是2D的,可以借鉴2D目标检测方法,比如LaserNet,还有一些借鉴了U-Net、RPN、R-CNN、FCN、FPN等。
Range图的像素包含的是距离信息,而非颜色值,因此传统的2D标准卷积算子无法完全适用,滑动窗口中的像素在3D空间中可能会相距很远。一些工作采用了新算子来有效地从Range像素中提取特征,包括深度扩张卷积[11]、图算子[26]和元核卷积[67]等。
Range图是从Range视图(Range View)中获取的,RangeView是点云的球面投影。对于许多基于深度的方法[178,11,67,26]来说,直接从Range视图检测3D目标是很自然的。
然而,从Range视图进行检测不可避免地会遇到球面投影所带来的遮挡和尺度变化问题。为了规避这些问题,许多方法尝试利用其他视图来预测3D目标,例如[219]中利用的圆柱形视图(CYV),其它方案尝试Range视图和鸟瞰视图(BEV)、点视图(PV)的组合。
Range视图由于可以借鉴2D卷积的优点,做特征提取比较好,但由于遮挡和尺度问题,直接在上面做检测效果不好,需要结合BEV来做检测,所以现在一般是Range图做特征提取,BEV上做检测。
3D目标检测的学习目标主要是针对小目标(相比检测范围,目标太小),另一方面是由于点云的稀疏性,如何准确估计其目标的中心和尺寸也是一个长期挑战。
anchor是预定义的长方体,具有固定的形状,可以放置在3D空间中。3D目标可以基于正anchor进行预测,这些正anchor与GT的IoU最大。anchor-based的3D目标检测方法一般是从鸟瞰图上检测3D目标,将3D anchor放置在BEV特征图的每个网格单元上进行。3D anchor通常对于每个类别都有一个固定的尺寸,因为同一类别的目标有相似的大小。
anchor-based的损失函数包括了分类损失、回归损失、偏航角损失等。分类损失常用的是二值交叉熵、Focal loss,回归则是SmoothL1,航向角需要注意使用bin-based航向估计较好。除了这些单独的损失函数外,将整个3D目标作为整体去考虑,也有使用IoU loss的,再辅以corner loss,让3D目标的检测更加稳定。
下面是anchor-based方法的示意图和主要目标损失函数:
anchor-free方法去掉了复杂的anchor设计阶段,可灵活应用于BEV、点视图和Range视图等。没有了anchor,就需要找其它正负样本分配方法。比如基于一些网格(BEV网格单元、体素、柱体)进行分配正负样本,比如PIXOR、CenterPoint等。
还有基于点的分配策略,大部分都是先将前景点分割出来,在3D目标内或附近的作为正样本,并学习这些前景点。基于Range的分配主要是将Range像素在3D目标内的作为正样本,并且回归的时候不是以整个3D坐标系统为基础,而是以目标为中心的回归坐标系。
DETR提出了一种集合到集合的分配方式,利用匈牙利算法预测结果自动分配到对应的GT。
anchor-free方法设计灵活,不引入其它先验,学习过程简化了很多,其中基于中心的方法[329]对小目标检测有较大潜力可挖。
虽然优点不少,但不可否认,anchor-free方法如何选择合适的正样本来生成预测结果是个问题,相比于anchor-based中使用高IoU正样本,anchor-free可能会选到一些不好的正样本,造成预测结果出现偏差。
下面显示了anchor-free方法和一些里程碑方法。
利用辅助任务来增强3D目标的空间特征,并能对3D目标检测提供一些隐性的指导。常用的辅助任务包括:语义分割、IoU分支预测、目标形状补全、部件识别。
语义分割。前景分割可以提供目标的位置隐含信息;利用语义上下文知识可以增强空间特征;语义分割可以作为预处理方法,过滤背景样本,提升3D检测效率。
IoU预测分支可以辅助校正目标的置信度,比如预测置信度可以用分类置信度和IoU值的
乘积来表示。经过IoU分支的校正,更容易选择高质量的3D目标作为最终预测结果。
形状补全,因为点云具有稀疏性,远处的目标只能接收几个点,因此从稀疏点云中补全目标形状可以为后面的检测提供帮助。
识别目标内部的零部件有助于3D目标检测,部件可以揭示细粒度3D信息。
除此之外,还有一些比如场景流估计可以识别静态和动态目标,可以在点云序列中跟踪同一个3D目标,可以得到该目标更准确的估计。
主要的基于相机的3D目标检测方案分为:单目3D、双目、多相机3D等,具体看下图的分类:
本身从单目图像中检测3D空间的目标是一个病态问题,因为单目无法提供足够的3D信息,很难预测3D目标准确的位置信息。
很多方法利用几何约束和形状先验从图像中推断深度信息,也是一种优化单目3D目标定位问题的思路。但是和激光雷达比,还是相差较远。
受到2D检测方法的启发,单目3D目标检测最直接的解决方案是通过卷积神经网络从图像中直接回归3D框参数。直接回归的方法借鉴了2D检测网络架构的设计,可以端到端训练。这些方法可以分为单阶段、两阶段,或anchor-based/anchor-free方法。
基于anchor的方法主要预先设置好3D-anchor、2D-anchor、深度anchor,然后图像经过卷积网络后得到2D和3D的预测偏置,最终解码及转换过程如下所示:
anchor-free的方法也是通过2D卷积对图像进行处理,利用多个头去预测3D目标。具体包括一个分类头、一个关键点头预测粗粒度中心点、一个预测基于粗粒度中心点的偏置的头、预测深度的头、预测目标尺寸的头以及预测观测角的头。
两阶段单目检测方法通常将传统的两阶段2D检测体系扩展到3D目标检测。具体来说,在第一阶段利用2D检测器从输入图像生成2D目标框。然后在第二阶段,通过从2D ROI中预测3D目标参数,将2D框提升到3D空间。
ROI-10D[168]扩展了传统的Faster RCNN[222],在第二阶段用一种新颖的头来预测3D目标参数。
基于纯图像的方法可以直接使用2D目标检测的最新进展,而且价格便宜,可以端到端训练,效率也很高。只是从单张图像预测深度比较困难。
下图及表展示了相关方法:
深度估计是单目3D目标检测的关键。为了获得更准确的单目检测结果,许多论文采用预训练辅助深度估计网络的方法。
具体来说,单目图像首先通过预训练的深度估计器,如MonoDepth[83]或DORN[76],生成深度图像。然后,主要有两类方法处理深度图像和单目图像。
基于深度图像的方法将图像和深度映射与专门的神经网络融合,生成深度感知特征,可以提高检测性能。基于伪激光雷达的方法将深度图像转换为伪激光雷达点云,然后在点云上应用基于激光雷达的3D检测器来检测3D目标。具体如下表及图所示。
许多方法利用图像中目标的形状和场景几何等先验知识,解决病态的单目3D目标检测问题。
通过引入预训练的子网络或辅助任务来学习先验知识,这些子网络或辅助任务可以提供额外的信息或约束来帮助精确定位3D目标。广泛采用的先验知识包括目标形状、几何一致性、时间约束和分割信息。
如下表所示。
通过重建目标形状,可以从图像中获得更详细的目标形状信息,有利于3D目标检测。但形状重建通常需要增加重建网络预训练模型,单目检测流程无法做到端到端训练。
而且目标的形状通常是从CAD模型而不是现实世界的实例中学习的,重建的目标形状和真实场景有较大差异。
采用几何一致性,有助于提高检测精度。然而,一些方法将几何一致性表示为一个优化问题,在后处理中优化目标参数会比较耗时,阻碍了端到端训练。
图像分割是单目3D检测中的重要信息。然而,训练分割网络需要的标注样本比较贵。用外部数据集预训练的分割模型存在泛化问题。
基于双目的3D目标检测是指从一对图像中检测出3D物体。与单目图像相比,双目提供了额外的几何约束,可用于推断更准确的深度信息。
基于双目方法通常比基于单目的方法获得更好的检测性能。当然,基于双目的方法与基于激光雷达的方法在性能上仍有很大的差距。
双目方法与单目检测方法相比,可以通过立体匹配技术获得更精确的深度和视差估计,从而带来更强的目标定位能力,显著提高了3D目标检测能力。具体方法见下图及表。
自动驾驶汽车通常会配备多个摄像头,从多个视角获取完整的周边环境信息。然而,如何利用多视图图像进行3D目标检测还没有得到广泛的研究。
多摄像头3D目标测的一个关键问题是如何识别不同图像中的同一目标,并从多视角输入中聚合目标特征。
一些论文通过利用跨视图几何约束[227]或目标重识别[52]来解决多视图目标定位问题。其他工作通过引入3D目标查询从不同视图裁剪图像特征[286]或转换不同视图的特征来处理多视图特征聚合问题。
主要介绍LiDAR-相机、雷达、地图融合等方法。主要方法及融合策略见下图及表。
相机可以提供颜色信息,从中提取丰富的语义特征,而LiDAR传感器擅长3D定位,提供丰富的3D结构信息。很多工作已经能够将相机和激光雷达信息进行融合来提升3D目标检测精度。
由于基于LiDAR的检测方法比基于相机的检测方法性能要好得多,目前SOTA方法主要是基于激光雷达的检测方法,并尝试将图像信息融入到不同阶段的激光雷达检测流程中。
鉴于基于LiDAR和基于相机的检测系统的复杂性,将两种模式结合在一起不可避免地会带来额外的计算开销和推断时间延迟。因此,如何有效地融合多模态信息仍然是具有挑战性的。
前融合指的是在点云还没有进入基于LiDAR的检测器前,将图像的知识整合到点云中。因此,前融合框架一般采用顺序构建的方式:首先利用2D检测或分割网络从图像中提取知识,然后将图像知识传递给点云,最后将增强后的点云反馈给基于LiDAR的点云3D目标检测器。
根据融合类型的不同,前融合方法可分为区域级知识融合和点级知识融合两类,具体见下图。
前融合主要是通过图像知识来增强点云,大多数方法都兼容大部分的LiDAR 3D目标检测器,并可以作为一种相当有效的预处理步骤,以提高检测性能。然而,前融合方法通常是顺序进行多模态融合和3D目标检测的,这带来了额外的推理延迟。
考虑到融合步骤通常需要复杂的2D目标检测或语义分割网络,多模态融合带来的时间成本通常很高。因此,如何在前期有效地进行多模态融合成为关键。
中融合方法试图在基于LiDAR的3D目标检测器的中间阶段,例如在骨干网络中,在proposal生成阶段,或在RoI细化阶段,融合图像和激光雷达特征。具体分类见下图。
中融合方法建议对多模态表示进行更深入的融合,并产生更高质量的3D框。然而,相机和激光雷达的特征本质上是异构的,来自不同的视角,因此在融合机制和视角对齐方面还存在一些问题。
因此,如何有效地融合异构数据,以及如何处理来自多个视角的特征聚合,仍然是研究领域面临的挑战。
后融合就是将图像得到的2D结果和LiDAR得到的3D结果进行融合的方法。该方法采用相机与激光雷达并行进行目标检测,并将输出的2D和3D框进行融合,得到更精确的3D检测结果。
CLOCs[194]引入了一个包含成对的2D-3D框的稀疏张量,并从这个稀疏张量学习最终的目标置信度。[195]改进了[194],引入了一种轻量级的3D检测器提示图像检测器。下图为后融合示意图。
后融合方法以实例级融合为核心,仅对不同模态的输出进行多模态融合,避免了中间特征或输入点云上复杂的交互。
因此,这些方法比其他方法更有效。然而,由于不依赖于相机和激光雷达传感器的深度特征,这些方法无法整合不同模式的丰富语义信息,限制了这类方法的潜力。
在自动驾驶系统中,雷达不可缺少,相比LiDAR,在实际应用中主要有四点优势:便宜、不太容易受到极端天气影响、探测距离较大、提供额外的速度测量。然而,与产生密集点云的激光雷达相比,雷达只提供稀疏和有噪声的测量。
主要的融合方式包括雷达-LiDAR融合、雷达-相机融合。
高精地图(HD maps)包含道路形状、道路标记、交通标志、障碍物等详细的道路信息。高精地图提供了丰富的周围环境语义信息,可以作为辅助3D目标检测的有力手段。
如何将地图信息整合到3D目标检测器中呢?高精地图可以很容易地转换为鸟瞰视图,并与栅格化BEV点云或特征图融合。
融合可以通过简单地将鸟瞰图上的栅格化点云和高精地图的通道连接起来进行[313],或者将LiDAR点云和高精地图分成单独的主干,融合两种模式的输出特征图[70]。还有其他地图类型,如可见性地图[100]等。
基于时序的3D目标检测主要分为三种:激光雷达序列检测,流输入检测,从视频中检测。下图为主要方法。
大多数方法专注于从单帧点云中检测,也有许多方法利用多帧点云来实现更准确的3D目标检测。它们通过各种时间建模工具融合多帧特征来解决时序检测问题,也有通过将多帧目标点合并到单一帧中来获得更完整的3D形状。
时序3D目标检测在离线3D自动打标签流程中取得了巨大的成功,但在实时应用中,这些方法仍然存在延迟问题,合并多帧不可避免地会带来额外的时间和内存成本。具体方法见下图示意。
激光雷达点云本质上是一个流式数据源,其中激光雷达数据包在扫描中顺序记录。激光雷达传感器完整扫描360度,大约需要50-100毫秒,这意味着当点云产生时,已经不能精确的反应实时的场景信息了。而自动驾驶通常需要最少的反应时间来保证驾驶安全。
利用流数据的方法通常在动态LiDAR数据中检测3D目标,而不用等完整扫描完成。与完整激光雷达扫描检测相比,基于流式的3D目标检测是一种更准确、低延迟的车辆感知解决方案。具体过程如下图所示。
自动驾驶应用中很容易获取视频数据。相比基于单图像的3D目标检测,基于视频的3D检测得益于序列图像间的时间关系。大量的研究工作集中在基于单幅图像的3D目标检测,研究视频中的3D目标检测问题的较少,主要也是通过跟踪和融合相同目标来进行3D目标的检测。
前面的一些3D目标检测方法主要默认都是全监督学习,并且是在某个特定的域内进行。实际情况则不可避免的遇到跨域和标注数据缺少的问题。针对这些问题,主要从这方面去优化:域自适应、弱监督学习、半监督学习和自监督学习。
在数据收集过程中,某些域空白现象是普遍存在的。不同传感器的设置和安装、不同的地理位置和不同的天气将导致完全不同的数据域。在大多数情况下, 在某一域内训练的3D目标检测器在其他域表现不佳。
研究人员提出了许多技术来解决3D目标检测的域适配问题,例如利用源域和目标域的一致性,目标域的自训练等。然而,大多数方法只关注于解决一个特定的领域转移问题。设计一种能够普遍应用于3D目标检测中任何领域转移任务的域自适应方法将是一个有前途的研究方向。
域自适应包括跨数据集的、跨天气的、跨传感器的、以及仿真到现实的域适应,具体参考下图及表。
现有的3D目标检测方法依赖大量人工标记的3D目标框,但这些3D框的标注相当昂贵。弱监督学习是解决这一问题的一个很有前途的方案,其中弱监督信号,如更容易标的2D标注,被用来训练3D目标检测模型。
弱监督的3D目标检测在数据标注方面需要的人力较少,但弱监督方法与全监督方法之间仍存在不可忽视的性能差距。
弱监督3D目标检测方法利用弱监督,而不是完全的标注3D框数据训练3D目标检测器。弱监督包括图像2D框[291,199]、预训练图像检测器[218]、BEV目标中心和车辆实例[175, 176]。
这些方法通常会设计新颖的学习机制来跳过3D框的监督,学习从弱信号中挖掘有用信息来实现3D目标检测。详见下图示意。
在现实应用中,数据标注比数据收集需要更多的人力。通常情况下,一辆数据采集车一天可以收集超过200k帧的点云,而熟练的人类每天只能标注100-200帧,大量未标注数据没有很好的利用。
半监督学习利用少量标注数据和大量无标注数据,共同训练出更强的模型,这是一个很有前途的方向。将3D目标检测与半监督学习相结合可以提高检测性能。
半监督3D目标检测主要有两类方法:伪标签和教师-学生方法。伪标签方法[17,265]首先用有标签的数据训练一个3D目标检测器,然后用这个3D检测器对未标注域的数据打上伪标签。
最后,用未标注域上的伪标签重新训练3D目标检测器。教师-学生方法[354]将Mean Teacher[255]范式应用于3D目标检测。
首先在标注域上训练教师检测器,然后教师检测器通过约束两种检测模型输出的一致性来指导学生检测器在未标记域上的训练。具体示意见下图。
自监督预训练(Self-supervised pre-training)被广泛应用于许多计算机视觉任务中,首先以自监督的方式在大规模的无标注数据上对模型进行预训练,然后在有标注的数据集上进行微调,以获得更好的性能。
在自动驾驶场景中,用于3D目标检测的自监督预训练还没有得到广泛的探索。已有的方法试图将对比学习等自监督方法应用于3D目标检测问题,但多模态数据中丰富的语义信息没有得到很好的利用。
如何有效地处理原始点云和图像,以预训练出高性能3D目标检测器仍是一个挑战。
自监督方法通常将对比学习技术[94,41]应用到3D目标检测。具体来说,首先通过数据增强将输入点云转化为两个视图,然后使用对比学习来约束两个点云视图中相同3D位置的特征一致性,最后将这个预训练模型在有标签数据集上进行微调,得到更好性能。下图为示意图。
3D目标检测是感知系统的关键组成部分,3D目标检测器的性能将对跟踪、预测和规划等下游任务产生深远影响。因此,从系统的角度来看,3D目标检测模型与其他感知任务以及下游任务联合训练,将是更好的自动驾驶解决方案。
一个挑战是如何将所有驾驶任务包含在一个统一框架中,并以端到端的方式联合训练这些任务。
联合感知和预测。很多方法通过感知和跟踪3D目标,然后以端到端的方式预测它们的未来轨迹。FaF[160]是一项开创性工作,它提出使用单个3D卷积联合预测3D目标检测、跟踪和轨迹预测。
这种设计范式被许多论文改进,例如[21]利用地图信息,[125]引入交互式 Transformer,[350]设计时空交互式网络,[298]提出时空金字塔网络,[138]循环执行所有任务,[204]涉及将定位任务引入系统。
联合感知、预测和规划。很多工作努力将感知、预测和规划纳入一个统一的框架。与联合感知和预测方法相比,整个系统可以通过将运动规划添加到端到端流程中,并从规划反馈信息中得到收益。
很多方法提出来改善这个框架,例如[229]引入语义占用图以产生可解释的中间表示,[290]将空间注意力纳入框架,[341]提出深度结构化网络,[22]提出无地图方法,[53] 产生一组不同的未来轨迹。
一个完整的端到端自动驾驶系统应该是这样子的:自动驾驶车辆接受传感器输入,在一个循环中依次执行感知、预测、规划和运动控制,最终给驾驶系统提供转向和速度信号。
[12]首先介绍了这个想法,并用卷积神经网络实现了基于图像的端到端驱动系统。[302]提出了一种具有多模式输入的端到端架构。[51]和[106]提出分别通过条件模仿学习和深度强化学习来学习端到端自动驾驶系统。具体的端到端的自动驾驶示意如下图所示。
3D目标检测模型通常需要大量数据进行训练。虽然可以在现实世界场景中收集数据,但现实世界的数据通常会受到长尾分布的影响。
例如,交通事故或极端天气的场景很少被采集到,但对于训练强大的3D目标检测器非常重要。模拟仿真是解决长尾数据分布问题的一种很有前途的方案,因为我们可以为那些罕见但关键的场景创建人造数据。模拟的一个公开挑战是如何创建更真实的人造数据。
视觉模拟。很多方法在驾驶场景中生成逼真的合成图像。这些方法的想法包括利用图形引擎[1, 226]、利用纹理映射面元[320]、利用真实世界数据[47]和学习可控神经模拟器[108]。
激光雷达模拟。除了生成合成图像,许多方法试图通过模拟生成LiDAR点云。一些方法[69, 188, 71]通过模拟现实世界的效果提出了新颖的点云渲染机制。一些方法[169]利用真实世界的实例来重建3D场景。其他论文侧重于安全关键场景[267]或恶劣天气条件下[89]的模拟。
驾驶模拟。许多论文试图建立一个交互式驾驶模拟平台,虚拟车辆可以在其中感知虚拟环境并与虚拟环境交互,最终规划车辆路径。CARLA[61]是一个开创性的自动驾驶开源模拟器。
其他论文利用图形引擎[232]或开发数据驱动方法[4]进行驾驶模拟。还有一些工作模拟交通流[253、252]或通过模拟测试车辆的安全性[296]。
基于学习的3D的目标检测方法容易受到攻击,比如给传感器输入中添加一些噪声或目标,就可能造成3D目标检测器失效,造成漏检,如何更好的防御攻击是个问题。
许多论文提出通过对抗性机器学习攻击传感器并欺骗目标检测器。这些方法针对不同的目标,例如LiDAR检测器[18, 294, 257, 248, 366],多模态检测器[19, 259],协作感知模型[258],车辆轨迹[130] 等。
他们提出了不同的技术来欺骗检测器,包括在道路上添加对抗性障碍物[18]、在车辆上放置真实的样本[294]、在对抗性位置放置任意目标[366]、利用对抗性纹理网格[259]、放弃临界值[294],和利用被遮挡的点云模式[248]等。
现有的3D目标检测方法主要基于本车单车,但是只用单车会造成无法解决目标遮挡和远处目标的稀疏性问题。于是很多研究提出,利用多车协同方案。
本车与其它车或基础设施进行通信,根据其它代理(车或基础设施)反馈的信息提高感知精度。协同感知的一个挑战是如何适当地平衡精度提高和通信带宽要求。协同3D目标检测方法融合来自多个代理的信息以提高3D目标检测器的性能。
融合的信息可以是来自其他代理的原始输入[33, 345],其通信带宽消耗很小,并且对于检测非常有效,也可以是压缩的特征图 [32, 276, 260, 129],其通信带宽成本不可忽略,但检测效果通常会更好。还有一些论文研究何时与其他代理通信[150]以及与哪个代理通信[151]。
3D目标检测的评价指标从原来的2D的AP已经逐渐变为AP-3D和AP-BEV,更好的衡量3D检测效果。基于LiDAR的方法在数据集的选择上也从KITTI逐渐变为更大和更多样的nuScenes和WaymoOpen数据集。部署依然很难,因为很多方法为了提高性能,并没有太在乎推理时间,造成实时性较差。
目前来看,基于LiDAR的方法中,基于体素和点体素的方法性能有较大提升。基于柱体的方法运行快,效率高,但性能比基于体素的差。基于Range和BEV的方法不错,推理时间也可以接受。基于点的检测器效果好,但是推理速度受采样和处理算子的影响较大。
基于相机的3D目标检测方法中,双目比单目好,多相机的研究也是前景广泛。多模态比单模态效果好,但引入了额外的计算开销,前融合方法更严重。现在很多方法只用了前视图和对应点云进行融合,而在nuScenes上提供了多视图图像、点云和高精地图,模型可以得到更好的结果。
从系统级别来看,以速度和精度为主导因素,则基于LiDAR和多模态的方法是最佳解决方案;如果以成本为最重要因素,那么基于相机的方法可能是最佳选择。
数据集不能只用闭集,类别只有那些常见的目标(机非人等),后续也应该关注一些现实世界中稀有类及未标注的类别,开放世界目标检测值得关注。
3D目标检测的可解释性研究。深度学习作为黑盒,可解释性较差,但为了更加稳健的使用3D目标检测器,并知道如何避免一些意外情况,需要理解和解释现有3D目标检测器的一些行为。
硬件系统的优化设计同样重要,如何让基于LiDAR和多模态的检测器高效的在移动端硬件上跑起来,需要设计新的硬件架构来方便模型部署。
端到端的3D目标检测算法未来是个趋势,毕竟单独去优化3D目标检测器,对下游任务(预测和规划)不一定是最优的。
下面的表是一个汇总。
本文全面回顾和分析了自动驾驶3D目标检测的各个方面。从3D目标检测的问题定义、数据集和评估指标开始,然后介绍了基于各种传感器的3D目标检测方法,包括基于LiDAR、基于相机和多模态3D目标检测方法。进一步研究了利用时态数据的3D目标检测,具有标签高效的学习,以及它在自动驾驶系统中的应用。最后,总结了近年来的研究趋势,展望了未来3D目标检测的研究方向。
[1] Mao, J., Shi, S., Wang, X., & Li, H. (2022). 3D Object Detection for Autonomous Driving: A Review and New Outlooks.ArXiv, abs/2206.09474.
编辑:黄继彦