原文首发微信公众号【自动驾驶之心】:一个专注自动驾驶与AI的社区(https://mp.weixin.qq.com/s/NK-0tfm_5KxmOfFHpK5mBA)
3D目标检测的学习目标
3D目标检测的学习目标主要是针对小目标(相比检测范围,目标太小),另一方面是由于点云的稀疏性,如何准确估计其目标的中心和尺寸也是一个长期挑战。
1、Anchor-based方法
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方法的示意图和主要目标损失函数:
2、Anchor-free方法
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方法和一些里程碑方法。
3、利用辅助任务的3D目标检测
利用辅助任务来增强3D目标的空间特征,并能对3D目标检测提供一些隐性的指导。常用的辅助任务包括:语义分割、IoU分支预测、目标形状补全、部件识别。
语义分割。前景分割可以提供目标的位置隐含信息;利用语义上下文知识可以增强空间特征;语义分割可以作为预处理方法,过滤背景样本,提升3D检测效率。
IoU预测分支可以辅助校正目标的置信度,比如预测置信度可以用分类置信度和IoU值的乘积来表示。经过IoU分支的校正,更容易选择高质量的3D目标作为最终预测结果。
形状补全,因为点云具有稀疏性,远处的目标只能接收几个点,因此从稀疏点云中补全目标形状可以为后面的检测提供帮助。
识别目标内部的零部件有助于3D目标检测,部件可以揭示细粒度3D信息。
除此之外,还有一些比如场景流估计可以识别静态和动态目标,可以在点云序列中跟踪同一个3D目标,可以得到该目标更准确的估计。
5基于相机的3D目标检测
主要的基于相机的3D目标检测方案分为:单目3D、双目、多相机3D等,具体看下图的分类:
单目3D目标检测
本身从单目图像中检测3D空间的目标是一个病态问题,因为单目无法提供足够的3D信息,很难预测3D目标准确的位置信息。很多方法利用几何约束和形状先验从图像中推断深度信息,也是一种优化单目3D目标定位问题的思路。但是和激光雷达比,还是相差较远。
1、纯图像单目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目标检测的最新进展,而且价格便宜,可以端到端训练,效率也很高。只是从单张图像预测深度比较困难。
下图及表展示了相关方法:
2、深度辅助的单目3D检测
深度估计是单目3D目标检测的关键。为了获得更准确的单目检测结果,许多论文采用预训练辅助深度估计网络的方法。具体来说,单目图像首先通过预训练的深度估计器,如MonoDepth[83]或DORN[76],生成深度图像。然后,主要有两类方法处理深度图像和单目图像。基于深度图像的方法将图像和深度映射与专门的神经网络融合,生成深度感知特征,可以提高检测性能。基于伪激光雷达的方法将深度图像转换为伪激光雷达点云,然后在点云上应用基于激光雷达的3D检测器来检测3D目标。具体如下表及图所示。
3、先验引导的单目3D检测
许多方法利用图像中目标的形状和场景几何等先验知识,解决病态的单目3D目标检测问题。通过引入预训练的子网络或辅助任务来学习先验知识,这些子网络或辅助任务可以提供额外的信息或约束来帮助精确定位3D目标。广泛采用的先验知识包括目标形状、几何一致性、时间约束和分割信息。如下表所示。
通过重建目标形状,可以从图像中获得更详细的目标形状信息,有利于3D目标检测。但形状重建通常需要增加重建网络预训练模型,单目检测流程无法做到端到端训练。而且目标的形状通常是从CAD模型而不是现实世界的实例中学习的,重建的目标形状和真实场景有较大差异。
采用几何一致性,有助于提高检测精度。然而,一些方法将几何一致性表示为一个优化问题,在后处理中优化目标参数会比较耗时,阻碍了端到端训练。
图像分割是单目3D检测中的重要信息。然而,训练分割网络需要的标注样本比较贵。用外部数据集预训练的分割模型存在泛化问题。
4、基于双目的3D目标检测
基于双目的3D目标检测是指从一对图像中检测出3D物体。与单目图像相比,双目提供了额外的几何约束,可用于推断更准确的深度信息。基于双目方法通常比基于单目的方法获得更好的检测性能。当然,基于双目的方法与基于激光雷达的方法在性能上仍有很大的差距。
双目方法与单目检测方法相比,可以通过立体匹配技术获得更精确的深度和视差估计,从而带来更强的目标定位能力,显著提高了3D目标检测能力。具体方法见下图及表。
5、基于多相机的3D目标检测
自动驾驶汽车通常会配备多个摄像头,从多个视角获取完整的周边环境信息。然而,如何利用多视图图像进行3D目标检测还没有得到广泛的研究。多摄像头3D目标测的一个关键问题是如何识别不同图像中的同一目标,并从多视角输入中聚合目标特征。
一些论文通过利用跨视图几何约束[227]或目标重识别[52]来解决多视图目标定位问题。其他工作通过引入3D目标查询从不同视图裁剪图像特征[286]或转换不同视图的特征来处理多视图特征聚合问题。
6基于多模态的3D目标检测
主要介绍LiDAR-相机、雷达、地图融合等方法。主要方法及融合策略见下图及表。
基于LiDAR-相机融合的多模态检测
相机可以提供颜色信息,从中提取丰富的语义特征,而LiDAR传感器擅长3D定位,提供丰富的3D结构信息。很多工作已经能够将相机和激光雷达信息进行融合来提升3D目标检测精度。由于基于LiDAR的检测方法比基于相机的检测方法性能要好得多,目前SOTA方法主要是基于激光雷达的检测方法,并尝试将图像信息融入到不同阶段的激光雷达检测流程中。鉴于基于LiDAR和基于相机的检测系统的复杂性,将两种模式结合在一起不可避免地会带来额外的计算开销和推断时间延迟。因此,如何有效地融合多模态信息仍然是具有挑战性的。
1、前融合方法
前融合指的是在点云还没有进入基于LiDAR的检测器前,将图像的知识整合到点云中。因此,前融合框架一般采用顺序构建的方式:首先利用2D检测或分割网络从图像中提取知识,然后将图像知识传递给点云,最后将增强后的点云反馈给基于LiDAR的点云3D目标检测器。根据融合类型的不同,前融合方法可分为区域级知识融合和点级知识融合两类,具体见下图。
前融合主要是通过图像知识来增强点云,大多数方法都兼容大部分的LiDAR 3D目标检测器,并可以作为一种相当有效的预处理步骤,以提高检测性能。然而,前融合方法通常是顺序进行多模态融合和3D目标检测的,这带来了额外的推理延迟。考虑到融合步骤通常需要复杂的2D目标检测或语义分割网络,多模态融合带来的时间成本通常很高。因此,如何在前期有效地进行多模态融合成为关键。
2、中融合方法
中融合方法试图在基于LiDAR的3D目标检测器的中间阶段,例如在骨干网络中,在proposal生成阶段,或在RoI细化阶段,融合图像和激光雷达特征。具体分类见下图。
中融合方法建议对多模态表示进行更深入的融合,并产生更高质量的3D框。然而,相机和激光雷达的特征本质上是异构的,来自不同的视角,因此在融合机制和视角对齐方面还存在一些问题。因此,如何有效地融合异构数据,以及如何处理来自多个视角的特征聚合,仍然是研究领域面临的挑战。
3、后融合方法
后融合就是将图像得到的2D结果和LiDAR得到的3D结果进行融合的方法。该方法采用相机与激光雷达并行进行目标检测,并将输出的2D和3D框进行融合,得到更精确的3D检测结果。CLOCs[194]引入了一个包含成对的2D-3D框的稀疏张量,并从这个稀疏张量学习最终的目标置信度。[195]改进了[194],引入了一种轻量级的3D检测器提示图像检测器。下图为后融合示意图。
后融合方法以实例级融合为核心,仅对不同模态的输出进行多模态融合,避免了中间特征或输入点云上复杂的交互。因此,这些方法比其他方法更有效。然而,由于不依赖于相机和激光雷达传感器的深度特征,这些方法无法整合不同模式的丰富语义信息,限制了这类方法的潜力。
基于雷达信号的多模态检测
在自动驾驶系统中,雷达不可缺少,相比LiDAR,在实际应用中主要有四点优势:便宜、不太容易受到极端天气影响、探测距离较大、提供额外的速度测量。然而,与产生密集点云的激光雷达相比,雷达只提供稀疏和有噪声的测量。主要的融合方式包括雷达-LiDAR融合、雷达-相机融合。
结合高精地图的多模态检测
高精地图(HD maps)包含道路形状、道路标记、交通标志、障碍物等详细的道路信息。高精地图提供了丰富的周围环境语义信息,可以作为辅助3D目标检测的有力手段。如何将地图信息整合到3D目标检测器中呢?高精地图可以很容易地转换为鸟瞰视图,并与栅格化BEV点云或特征图融合。融合可以通过简单地将鸟瞰图上的栅格化点云和高精地图的通道连接起来进行[313],或者将LiDAR点云和高精地图分成单独的主干,融合两种模式的输出特征图[70]。还有其他地图类型,如可见性地图[100]等。
7时序3D目标检测
基于时序的3D目标检测主要分为三种:激光雷达序列检测,流输入检测,从视频中检测。下图为主要方法。
激光雷达序列
大多数方法专注于从单帧点云中检测,也有许多方法利用多帧点云来实现更准确的3D目标检测。它们通过各种时间建模工具融合多帧特征来解决时序检测问题,也有通过将多帧目标点合并到单一帧中来获得更完整的3D形状。时序3D目标检测在离线3D自动打标签流程中取得了巨大的成功,但在实时应用中,这些方法仍然存在延迟问题,合并多帧不可避免地会带来额外的时间和内存成本。具体方法见下图示意。
利用流数据进行3D目标检测
激光雷达点云本质上是一个流式数据源,其中激光雷达数据包在扫描中顺序记录。激光雷达传感器完整扫描360度,大约需要50-100毫秒,这意味着当点云产生时,已经不能精确的反应实时的场景信息了。而自动驾驶通常需要最少的反应时间来保证驾驶安全。利用流数据的方法通常在动态LiDAR数据中检测3D目标,而不用等完整扫描完成。与完整激光雷达扫描检测相比,基于流式的3D目标检测是一种更准确、低延迟的车辆感知解决方案。具体过程如下图所示。
利用视频进行3D目标检测
自动驾驶应用中很容易获取视频数据。相比基于单图像的3D目标检测,基于视频的3D检测得益于序列图像间的时间关系。大量的研究工作集中在基于单幅图像的3D目标检测,研究视频中的3D目标检测问题的较少,主要也是通过跟踪和融合相同目标来进行3D目标的检测。
8标签高效的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目标检测。详见下图示意。
半监督3D目标检测
在现实应用中,数据标注比数据收集需要更多的人力。通常情况下,一辆数据采集车一天可以收集超过200k帧的点云,而熟练的人类每天只能标注100-200帧,大量未标注数据没有很好的利用。半监督学习利用少量标注数据和大量无标注数据,共同训练出更强的模型,这是一个很有前途的方向。将3D目标检测与半监督学习相结合可以提高检测性能。
半监督3D目标检测主要有两类方法:伪标签和教师-学生方法。伪标签方法[17,265]首先用有标签的数据训练一个3D目标检测器,然后用这个3D检测器对未标注域的数据打上伪标签。最后,用未标注域上的伪标签重新训练3D目标检测器。教师-学生方法[354]将Mean Teacher[255]范式应用于3D目标检测。首先在标注域上训练教师检测器,然后教师检测器通过约束两种检测模型输出的一致性来指导学生检测器在未标记域上的训练。具体示意见下图。
自监督3D目标检测
自监督预训练(Self-supervised pre-training)被广泛应用于许多计算机视觉任务中,首先以自监督的方式在大规模的无标注数据上对模型进行预训练,然后在有标注的数据集上进行微调,以获得更好的性能。在自动驾驶场景中,用于3D目标检测的自监督预训练还没有得到广泛的探索。已有的方法试图将对比学习等自监督方法应用于3D目标检测问题,但多模态数据中丰富的语义信息没有得到很好的利用。如何有效地处理原始点云和图像,以预训练出高性能3D目标检测器仍是一个挑战。自监督方法通常将对比学习技术[94,41]应用到3D目标检测。具体来说,首先通过数据增强将输入点云转化为两个视图,然后使用对比学习来约束两个点云视图中相同3D位置的特征一致性,最后将这个预训练模型在有标签数据集上进行微调,得到更好性能。下图为示意图。
9自动驾驶系统中的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目标检测模型通常需要大量数据进行训练。虽然可以在现实世界场景中收集数据,但现实世界的数据通常会受到长尾分布的影响。例如,交通事故或极端天气的场景很少被采集到,但对于训练强大的3D目标检测器非常重要。模拟仿真是解决长尾数据分布问题的一种很有前途的方案,因为我们可以为那些罕见但关键的场景创建人造数据。模拟的一个公开挑战是如何创建更真实的人造数据。
视觉模拟。很多方法在驾驶场景中生成逼真的合成图像。这些方法的想法包括利用图形引擎[1, 226]、利用纹理映射面元[320]、利用真实世界数据[47]和学习可控神经模拟器[108]。
激光雷达模拟。除了生成合成图像,许多方法试图通过模拟生成LiDAR点云。一些方法[69, 188, 71]通过模拟现实世界的效果提出了新颖的点云渲染机制。一些方法[169]利用真实世界的实例来重建3D场景。其他论文侧重于安全关键场景[267]或恶劣天气条件下[89]的模拟。
驾驶模拟。许多论文试图建立一个交互式驾驶模拟平台,虚拟车辆可以在其中感知虚拟环境并与虚拟环境交互,最终规划车辆路径。CARLA[61]是一个开创性的自动驾驶开源模拟器。其他论文利用图形引擎[232]或开发数据驱动方法[4]进行驾驶模拟。还有一些工作模拟交通流[253、252]或通过模拟测试车辆的安全性[296]。
3D目标检测的鲁棒性
基于学习的3D的目标检测方法容易受到攻击,比如给传感器输入中添加一些噪声或目标,就可能造成3D目标检测器失效,造成漏检,如何更好的防御攻击是个问题。
许多论文提出通过对抗性机器学习攻击传感器并欺骗目标检测器。这些方法针对不同的目标,例如LiDAR检测器[18, 294, 257, 248, 366],多模态检测器[19, 259],协作感知模型[258],车辆轨迹[130] 等。他们提出了不同的技术来欺骗检测器,包括在道路上添加对抗性障碍物[18]、在车辆上放置真实的样本[294]、在对抗性位置放置任意目标[366]、利用对抗性纹理网格[259]、放弃临界值[294],和利用被遮挡的点云模式[248]等。
协同3D目标检测
现有的3D目标检测方法主要基于本车单车,但是只用单车会造成无法解决目标遮挡和远处目标的稀疏性问题。于是很多研究提出,利用多车协同方案。本车与其它车或基础设施进行通信,根据其它代理(车或基础设施)反馈的信息提高感知精度。协同感知的一个挑战是如何适当地平衡精度提高和通信带宽要求。协同3D目标检测方法融合来自多个代理的信息以提高3D目标检测器的性能。融合的信息可以是来自其他代理的原始输入[33, 345],其通信带宽消耗很小,并且对于检测非常有效,也可以是压缩的特征图 [32, 276, 260, 129],其通信带宽成本不可忽略,但检测效果通常会更好。还有一些论文研究何时与其他代理通信[150]以及与哪个代理通信[151]。
10分析和展望
研究趋势
3D目标检测的评价指标从原来的2D的AP已经逐渐变为AP-3D和AP-BEV,更好的衡量3D检测效果。基于LiDAR的方法在数据集的选择上也从KITTI逐渐变为更大和更多样的nuScenes和WaymoOpen数据集。部署依然很难,因为很多方法为了提高性能,并没有太在乎推理时间,造成实时性较差。
目前来看,基于LiDAR的方法中,基于体素和点体素的方法性能有较大提升。基于柱体的方法运行快,效率高,但性能比基于体素的差。基于Range和BEV的方法不错,推理时间也可以接受。基于点的检测器效果好,但是推理速度受采样和处理算子的影响较大。
基于相机的3D目标检测方法中,双目比单目好,多相机的研究也是前景广泛。多模态比单模态效果好,但引入了额外的计算开销,前融合方法更严重。现在很多方法只用了前视图和对应点云进行融合,而在nuScenes上提供了多视图图像、点云和高精地图,模型可以得到更好的结果。
从系统级别来看,以速度和精度为主导因素,则基于LiDAR和多模态的方法是最佳解决方案;如果以成本为最重要因素,那么基于相机的方法可能是最佳选择。
未来展望
数据集不能只用闭集,类别只有那些常见的目标(机非人等),后续也应该关注一些现实世界中稀有类及未标注的类别,开放世界目标检测值得关注。
3D目标检测的可解释性研究。深度学习作为黑盒,可解释性较差,但为了更加稳健的使用3D目标检测器,并知道如何避免一些意外情况,需要理解和解释现有3D目标检测器的一些行为。
硬件系统的优化设计同样重要,如何让基于LiDAR和多模态的检测器高效的在移动端硬件上跑起来,需要设计新的硬件架构来方便模型部署。
端到端的3D目标检测算法未来是个趋势,毕竟单独去优化3D目标检测器,对下游任务(预测和规划)不一定是最优的。
下面的表是一个汇总。
11总结
本文全面回顾和分析了自动驾驶3D目标检测的各个方面。从3D目标检测的问题定义、数据集和评估指标开始,然后介绍了基于各种传感器的3D目标检测方法,包括基于LiDAR、基于相机和多模态3D目标检测方法。进一步研究了利用时态数据的3D目标检测,具有标签高效的学习,以及它在自动驾驶系统中的应用。最后,总结了近年来的研究趋势,展望了未来3D目标检测的研究方向。
12参考文献
[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.