开源代码: https://github.com/ADLab-AutoDrive/BEVFusiongithub.com/ADLab-AutoDrive/BEVFusion
论文地址:https://arxiv.org/pdf/2205.13790.pdf
融合激光雷达和相机的信息已经变成了3D目标检测的一个标准,当前的方法依赖于激光雷达传感器的点云作为查询,以利用图像空间的特征。然而,人们发现,这种基本假设使得当前的融合框架无法在发生 LiDAR 故障时做出任何预测,无论是轻微还是严重。这从根本上限制了实际场景下的部署能力。 相比之下,作者提出了一个令人惊讶的简单而新颖的融合框架,称为 BEVFusion,其相机流不依赖于 LiDAR 数据的输入,从而解决了以前方法的缺点。作者的框架在正常训练设置下超越了最先进的方法。在模拟各种 LiDAR 故障的鲁棒性训练设置下,作者的框架显着超过了最先进的方法15.7%到28.9%的mAP。这是第一个处理LiDAR故障的方法,并且可以在没有任何后处理程序的情况下部署到实际场景中。
基于视觉的感知任务,例如3D目标检测,一直是自动驾驶任务的一个关键点。在传统车载视觉感知系统的所有传感器中,激光雷达和摄像头通常是提供准确点云和周围世界图像特征的两个最关键的传感器。在感知系统的早期阶段,人们为每个传感器设计单独的深度模型,并通过后处理方法融合信息。一般来说,汽车无法飞行,所以人们发现生成鸟瞰图 (BEV) 已成为自动驾驶场景的标准。 然而,由于缺乏深度信息,通常很难在纯图像输入上回归3D 边界框,同样,当LiDAR没有接收到足够的点时,也很难对点云上的对象进行分类。即:图像缺少激光雷达,则没有深度信息,而激光雷达缺少图像,难以进行目标识别。
最近,人们设计了激光雷达和相机融合的深度网络,以更好地利用两种模式的信息。 具体来说,大部分工作可以总结如下:i)给定一个或几个LiDAR点云中的点、LiDAR到世界坐标系的变换矩阵以及相机到世界坐标系的变换矩阵; ii) 人们将 LiDAR 点或proposal转换为相机世界并将其用作查询(queries),以选择对应的图像特征。 这条工作线构成了最先进的 3D BEV 感知方法。然而,人们忽略的一个基本假设是,由于需要从LiDAR点生成图像查询,当前的 LiDAR-相机融合方法本质上依赖于LiDAR传感器的原始点云,如图1所示。实际上,人们发现如果LiDAR传感器输入缺失,例如由于物体纹理,LiDAR 点反射率低、内部数据传输的系统故障,甚至由于硬件限制LiDAR传感器的视野无法达到360度,目前的融合方法无法进行正常的预测。这从根本上阻碍了这条工作线在实际自动驾驶系统中的适用性。
图 1 框架对比。以前的融合方法可以大致分为 (a) 点级point-level融合机制,将图像特征投影到原始点云上,即找到点云和图像特征对应的部分,融合信息,以及 (b) 特征级融合机制,分别在每个视图图像上投影LiDAR特征或proposal以提取RGB信息。(c) 相比之下,作者提出一个新框架,相机和lidar的输入分开。
作者认为,LiDAR和相机融合的理想框架应该是,无论彼此是否存在,单个模态的每个模型都不应该失败,但同时拥有两种模态将进一步提高感知准确性。为此,作者提出了一个令人惊讶的简单而有效的框架,它解决了当前方法的LiDAR相机融合的依赖性,称为BEVFusion。具体来说,如图1 (c)所示,作者的框架有两个独立的流,它们将来自相机和LiDAR传感器的原始输入编码为同一BEV空间内的特征。然后作者设计了一个简单的模块,在这两个流之后融合这些BEV的特征,以便最终的特征可以传递到下游任务架构中。由于作者的框架是一种通用方法,作者可以将当前用于相机和LiDAR的单模态BEV模型合并到作者的框架中。作者采用Lift-Splat-Shoot作为相机流,它将多视图图像特征投影到3D车身坐标特征以生成相机BEV特征。同样,对于LiDAR流,作者选择了三个流行的模型,两个基于超体素(voxel)的模型和一个基于柱子(pillar)的模型将LiDAR特征编码到BEV空间中。
在nuScenes数据集上,作者简单的框架显示出很强的泛化能力。BEVFusion将PointPillars和CenterPoint的平均精度(mAP)分别提高了18.4%和7.1%,与TransFusion的68.9% mAP 相比,实现了69.2% mAP 的卓越性能。在通过以0.5的概率随机丢弃对象边界框内的LiDAR点的稳健设置下,作者提出了一种新的增强技术,并表明作者的框架以15.7% ~28.9% mAP的幅度显著超过baseline。作者的贡献可以总结如下:i)确定了当前LiDAR-相机融合方法的一个被忽视的限制,即LiDAR输入的依赖性;ii)提出了一个简单而新颖的框架,将LiDAR和相机融合模式分解为两个独立的流,可以推广到多个已有架构;iii)实验分析其方法的有效性。
在这里,作者根据输入模式对3D检测方法进行广泛分类,具体而言分为如下几类:
a) 仅仅基于相机模态的3D检测方法
在自动驾驶领域,由于KITTI基准,近年来很多方法对仅使用相机输入的3D目标检测进行了深入研究。由于KITTI中只有一个前置摄像头,因此大多数方法都用于解决单目3D检测问题。随着具有更多传感器的自动驾驶数据集的发展,如nuScenes和Waymo,出现开发以多视图图像作为输入的方法的趋势,并且发现显着优于单目方法。然而,超体素(voexl)处理往往伴随着高计算量。与常见的自动驾驶数据集一样,物体通常在平坦的地面上移动,PointPillars提出将3D特征映射到鸟瞰图2D空间以减少计算开销。它很快成为该领域的标准。Lift-Splat Shoot (LSS)使用深度估计网络提取多视角图像的隐含深度信息,并将相机特征图转换为3D车身坐标。方法[37, 15, 52,具体见参考文件]也受到LSS的启发,并使用LiDAR进行深度预测的监督。 类似的想法也可以在BEVDet中找到,这是多视图3D对象检测中最先进的方法。MonoDistill和LiGA Stereo通过将LiDAR信息统一到相机分支来提高性能。
b) 仅仅基于激光雷达的3D检测方法
LiDAR方法最初根据其特征模式分为两类:i)直接在原始 LiDAR 点云上运行的基于点的方法,ii) 将原始点云转换为欧几里得特征空间,例如3D体素(voexl)、特征柱和距离图像。最近,人们开始在单个模型中利用这两种特征模式来增加表示能力。也有其他的研究是利用类似于相机感知的鸟瞰平面的优势。
c) 激光雷达和相机融合的3D目标检测方法
由于激光雷达和相机产生的特征通常包含互补信息,人们开始开发可以在两种模式上联合优化的方法,并很快成为3D检测的事实标准。如图1所示,这些方法可以根据它们的融合机制分为两类,(a)点级融合,其中一个通过原始 LiDAR 点查询图像特征,然后将图像特征concat作为点云中附加的点特征;(b)特征级融合,首先将LiDAR点投影到特征空间或生成proposal,查询相关的相机特征,然后concat到特征空间。后者构成了3D 检测中最先进的方法,具体来说,TransFusion使用LiDAR特征的边界框预测作为查询图像特征的proposal,然后采用类似Transformer的架构来融合信息回到LiDAR特征上。同样,DeepFusion将每个视图图像上的LiDAR特征投影为查询,然后利用交叉注意力来处理点云和相机两种模态。当前融合机制的一个被忽视的假设是它们严重依赖LiDAR点云,事实上,如果缺少LiDAR 输入,这些方法将不可避免地失败。这将阻碍此类算法在实际环境中的部署。相比之下,作者的BEVFusion是一个非常简单但有效的融合框架,它通过将相机分支从LiDAR点云中分离出来,从根本上克服了这个问题,如图1(c)所示。
d) 其他的模态
还有其他工作可以利用其他模态,例如通过特征图连接来融合相机和雷达。虽然很有趣,但这些方法超出了作者的工作范围。其他的就不详聊。
如图2所示,作者详细介绍了他们提出的用于3D目标检测的框架BEVFusion。由于作者的基本贡献是将摄像头与LiDAR分离,作者首先介绍了摄像流和LiDAR流的详细架构,然后提出了一个动态融合模块来整合来自这些模态的特征。
图 2 BEVFusion框架。两个流分别提取特征并将它们转换到相同的BEV空间:i)将相机视图特征投影到3D车身坐标以生成相机BEV特征;ii) 3D backbone从点云中提取LiDAR BEV特征。然后融合两种模态的BEV特征。最后,基于融合的BEV特征构建特定任务的头部,并预测3D目标。其中蓝框是预测,红圈是错误预测。
由于作者的框架能够合并任何相机流,作者从一种流行的方法开始,Lift-Splat-Shoot (LSS)。 由于LSS最初是针对BEV语义分割而不是3D检测提出的,作者发现直接使用LSS架构的性能较差,因此作者适度调整LSS以提高性能(消融研究见第4.5节)。在图2(顶部)中,作者详细介绍了相机流的设计,其中包括将原始图像编码为深度特征的图像视图编码器、将这些特征转换为3D车身坐标的视图投影模块,以及最终将特征编码到鸟瞰图(BEV)空间的编码器。
相机图像编码 旨在将输入图像编码为语义信息丰富的深度特征。 它由一个用于基本特征提取的2D主干和一个用于尺度变量的颈部模块组成。与使用卷积神经网络ResNet作为主干网络的LSS不同,作者使用更具代表性的Dual-Swin-Tiny作为主干网络。作者在主干之上使用标准特征金字塔网络(FPN)来利用多尺度分辨率的特征。为了更好地对齐这些特征尺度,作者首先提出了一个简单的特征自适应模块(ADP)来细化上采样的特征。具体来说,作者在连接之前对每个上采样特征采用自适应平均池和1×1卷积。
相机视角投视模块 由于图像特征仍处于2D图像坐标中,作者设计了一个view投影模块将它们转换为3D车身坐标系下的特征。作者应用LSS中提出的2D→3D视图投影来构建相机BEV特征。所采用的视图投影以图像特征为输入,通过分类的方式对深度进行密集预测,然后,根据摄像机外参和预测的图像深度,可以得出图像视图功能以在预定义的点云中渲染并获得Voxel如公式所示。(这里的理解:有了图像特征,又有了深度信息,再加上相机外参,就能把图像特征和点云中的每个点对应起来,每个点在坐标信息之外,又能得到一个特征向量,其中这个特征向量就是一个C维的vector)
BEV编码模块 为了进一步从超体素特征 中获取BEV空间特征 Fcamera∈RX×Y×Ccamera ,作者设计了一个简单的编码器模块。该模块没有应用池化操作或使用步长2堆叠3D卷积来压缩z维度,而是采用空间到通道(S2C)操作将V从4D张量转换为3D张量 V∈RX×Y×(ZC) ,这样能保证更多的语义信息,降低计算成本。然后作者使用四个3×3卷积层逐渐将通道维度减小到 Ccamera ,并提取高级语义信息。与基于下采样低分辨率特征提取high-level特征的LSS不同,作者的编码器直接处理全分辨率相机BEV特征以保留空间信息。
类似地,作者的框架可以将“任何将LiDAR点转换为BEV特征( Flidar∈RX×Y×Clidar ),的网络”作为作者的LiDAR流。一种常见的方法是学习原始点的参数化超体素以减少Z维,然后利用由稀疏3D卷积组成的网络在BEV空间中有效地产生特征。在实践中,作者采用三种流行的方法,PointPillars、CenterPoint和TransFusion作为LiDAR流,以展示所提出框架的泛化能力。
为了有效地融合来自相机的BEV特征( Fcamera∈RX×Y×Ccamera )和激光雷达特征( Flidar∈RX×Y×Clidar ),作者提出了一个动态融合模块,如图3所示,给出相同维度下的两个流,一个直观的想法是将它们进行加权concat。受Squeeze-and-Excitation(SE)机制的启发,作者应用一个简单的通道注意模块来选择重要的融合特征。作者使用通道注意力模块来为特征通道进行加权,建模为 Ffused=fadaptive(fstatic([FCamera,FLidar])) ,其中 [⋅,⋅] 表示特征在通道维度上进行concat, fstatic 是一个3×3的卷积,用来缩减通道,将其维度缩减到 CLidar ,这样 fadaptive 操作所接受的输入就是这样的维度是 F=RX×Y×CLidar ,具体地, fstatic 建模为 fadaptive(F)=σ(Wfavg(F))⋅F ,其中W表示1×1的卷积, favg 表示全局平均池化, σ 表示sigmoid操作。
由于作者框架的最后一个功能是在BEV空间中,可以利用早期论文中流行的检测头模块。进一步证明了作者所提出框架的泛化能力。本质上,作者将所提出的框架与三个流行的检测头类别(基于anchor、无anchor和基于transform)进行比较。
在本节中,作者展示了实验设置和BEVFusion的性能,以展示所提出框架的有效性、强大的泛化能力和鲁棒性。
表 1 BEVFusion的泛化能力。与三种流行方法的单一模态流相比,作者在nuScenes验证集上验证了作者的融合框架的有效性。请注意,此处的每种方法都定义了LiDAR流和相关检测头的结构,而相机流与Sec. 3.1所述相同
数据 作者对用于3D检测的大规模自动驾驶数据集nuScenes进行了综合实验。每帧包含六个带有周围视图的摄像头和一个来自LiDAR的点云。检测目标有10个类,有多达140万个带注释的3D bbox。作者使用nuScenes检测分数(NDS)和平均精度(mAP)作为评估指标。
实现细节 作者使用开源的MMDetection3D在PyTorch中实现所提出方法。作者使用Dual-Swin Tiny 作为图像视图编码器的2D bakbone进行BEVFusion。PointPillars、CenterPoint和TransFusion-L 被选为LiDAR流和3D检测头。作者将图像尺寸设置为448 × 800,voexl尺寸遵循LiDAR流(PointPillars、CenterPoint和TransFusion-L)的官方设置。训练包括两个阶段:i)首先分别训练具有多视图图像输入和LiDAR点云输入的LiDAR流和相机流。具体来说,按照MMDetection3D中的LiDAR官方设置训练两个流;ii) 然后训练BEVFusion的另外9个epoch,这些epoch继承了两个训练流的权重。请注意,当涉及多视图图像输入时,不应用数据增强(即翻转、旋转或CBGS)。在测试期间,遵循MMDetection3D中仅LiDAR检测器的设置,无需任何额外的后处理。
为了证明框架的泛化能力,作者采用三个流行的仅LiDAR检测器(PointPillars、CenterPoint 和TransFusion L)作为LiDAR流和检测头。如未指定,所有实验设置均遵循其原始论文。在表1中,作者展示了训练两个单一模态流的结果,然后进行联合优化。实证结果表明,BEVFusion框架可以显着提高这些仅LiDAR方法的性能。尽管加入相机流在性能上会有下降,但是的融合方案将PointPillars提高了18.4% mAP和10.6% NDS,CenterPoint和TransFusion-L提高了3.0%~7.1% mAP。这证明作者的框架可以推广到多个LiDAR骨干网络。由于作者的方法依赖于两阶段训练方案,作者仍然在表1的报告了单个流的性能。可以观察到LiDAR流以明显的优势超过相机流。作者将此归因于LiDAR点云提供了关于对象边界和表面法线方向的强大局部特征,这对于准确的边界框预测至关重要。
在这里,作者使用TransFusion-L作为LiDAR 流,并将结果展示在表2中的nuScenes测试集上。在没有任何测试时增强或模型集成的情况下,作者的BEVFusion超越了所有以前的 LiDAR-相机融合方法,并达到了SOTA水平。与TransFusion的68.9% mAP相比,作者方法取得了69.2% mAP。请注意,当涉及多视图图像输入时,作者不会进行数据增强,而数据增强在其他前沿方法中起着至关重要的作用(说明作者的方法泛化能力强,不增强数据就已经超越了大多数方法)。值得注意的是,原来的TransFusion是一个两级检测器,其模型由两个独立的检测头组成。相比之下,作者的以TransFusion-L作为LiDAR主干的BEVFusion仅包含一个检测头,但仍比两阶段基线高0.3% mAP。由于作者的框架和TransFusion之间的唯一区别是融合机制,作者将这种性能提升归功于对BEVFusion多模态建模能力的全面探索。
表 2 上面是验证集结果,下面是测试集结果
在这里,作者展示了作者的方法在两种设置(LiDAR和相机故障)上相对于所有先前基线方法的鲁棒性。
图 4 (a) 作者在两种设置(有限视场(FOV)和LiDAR无法接收物体反射点)的BEV视角下可视化点云,橙色框表示物体点被丢弃。蓝色是边界框,红色是fp预测。(b)展示了TransFusion和作者在三种设置下的预测。显然,当LiDAR输入丢失时,当前的融合方法会失败,作者的方法工作正常.
为了验证作者框架的稳健性,作者在两种LiDAR 故障下评估检测器:i)当LiDAR传感器损坏或LiDAR扫描范围受到限制时,即半固体激光雷达;ii)当物体不能反射LiDAR点时。作者在图4 (a)中提供了这两种故障场景的可视化,并在nuScenes验证集上评估检测器。
数据增强的鲁棒性 作者针对上述两种情况提出了两种数据增强策略:i) 通过在模拟激光雷达视角上失效,ii)目标反射激光雷达失效(目标以0.5概率丢失)
激光雷达视角失效 nuScenes数据集为LiDAR点云提供了(( -π, π)的视野(FOV)范围。为了模拟LiDAR传感器故障情况,作者采用了鲁棒增强策略。显然,效果性能随着LiDAR FOV的减小而下降。然而,当融合相机流时,由于存在损坏,BEVFusion模型通常比仅使用LiDAR的模型更加稳健,如图4(b)所示。值得注意的是,对于PointPillars,当LiDAR FOV在((-π/2, π/2), ((-π/3, π/3) 时,mAP分别增加了24.4%和25.1%。对于TransFusion-L,BEVFusion将其LiDAR流提升超过18.6% mAP和5.3% NDS。TransFusion中提出的vanilla LiDAR-camera fusion方法(在表3和表4中表示为LC)严重依赖于LiDAR数据,并且增益被限制在小于3.3% mAP而NDS降低。结果表明,在训练和推理比较期间融合相机流是很有意义的。
表 3 有限LiDAR视场鲁棒性设置的结果。作者的方法在所有设置中显着提高了仅 LiDAR 方法的性能。请注意,与带有相机融合的Trans Fusion相比,作者的方法仍然实现了超过15.3%的mAP和6.6%的NDS 改进,展示了作者方法的鲁棒性。
激光雷达接收目标反射点失败 当LiDAR无法从物体接收到点时(例如,在雨天,一些常见物体的反射率低于激光雷达的阈值,从而导致物体失效的问题),为了模拟这种情况,作者在验证集上采用了上述第二种鲁棒增强策略。如表4所示,当直接评估未经鲁棒性增强训练的检测器时,BEVFusion显示出比TransFusion中的仅LiDAR流和普通LiDAR-相机融合方法更高的准确度。在稳健的增强训练集上微调检测器时,BEVFusion将PointPillars、CenterPoint和TransFusion-L的mAP分别提高了28.9%、22.7%和15.7%。具体来说,TransFusion中的vanilla LiDAR-camera fusion方法只有2.6%的mAP增益,比finetuning之前的性能要小,原因是在增强数据集的训练过程中缺少前景LiDAR点带来了错误的监督。结果表明,在训练和推理过程中融合相机流在很大程度上弥补了LiDAR目标点的不足。图4 (b)中提供了可视化。
表 4 目标失败案例的鲁棒性设置结果。 在这里,作者给出了基线的结果和作者在 nuScenes 数据集上训练的方法的结果,有和没有提出的鲁棒性增强。 所有设置与表 3 中相同。
作者进一步验证了所提出的框架在摄像头故障时的鲁棒性:i)前置摄像头丢失而其他摄像头被保留;ii) 除前置摄像头外,所有摄像头均丢失;iii) 50%的相机帧被卡住(stuck)。如表5所示,在上述场景下,BEVFusion仍然优于仅相机和其他LiDAR-相机融合方法。结果证明了 BEVFusion对相机故障的鲁棒性。
表 5 相机故障案例的鲁棒性设置结果。F表示前置摄像头
在这里,作者消融了相机流和动态融合模块的设计选择。
相机流 作者使用表6中的不同组件进行消融实验,以验证相机流的每个组件的贡献。Baseline使用ResNet50和特征金字塔网络作为多视图图像编码器的,按照LSS,BEV编码器使用ResNet18,然后使用PointPillars的检测头,仅获得13.9%的mAP和24.5%的NDS。如表 6 所示,有几个观察结果:(i)当我们用我们简单的BEV编码器模块替换ResNet18 BEV编码器时,mAP和NDS分别提高了4.0%和2.5%。(2)在FPN中加入自适应特征对齐模块有助于将检测结果提高0.1%。 (3) 对于更大的2D主干,即Dual-Swin Tiny,增益为4.9% mAP和4.0% NDS。搭载PointPillars的相机码流最终达到了22.9%的mAP和31.1%的NDS,显示了作者对相机码流设计的有效性。
表 6 相机流消融分析
动态融合模块 为了说明作者的融合策略在两种模式下的性能,对三种不同的3D检测器 PointPillars、CenterPoint和TransFusion进行了消融实验。如表7所示,通过简单的通道和空间融合(图3左侧),BEVFusion将其LiDAR流大大提高了16.5%(35.1% → 51.6%) for PointPillars的mAP,5.9%(57.1% → 63.0%)的mAP for CenterPoint和TransFusion的2.4% (64.9% → 67.3%) mAP。 当采用自适应特征选择(图3中的右侧部分)时,PointPillars、CenterPoint 和TransFusion的mAP分别可以进一步提高1.9%、1.2%和0.6%。结果证明了融合相机和LiDAR BEV特征的必要性以及作者的动态融合模块在选择重要融合特征方面的有效性。
表 7 融合模块消融分析
在本文中,作者介绍了BEVFusion,这是一个非常简单但独特的 LiDAR 相机融合框架,它解开了之前方法对LiDAR相机融合的依赖性。作者的框架包括两个独立的流,它们将原始相机和LiDAR传感器输入编码到同一BEV空间中的特征中,然后是一个简单的模块来融合这些特征,以便它们可以传递到现代任务预测头架构中。广泛的实验证明了作者的框架对各种相机和激光雷达故障的强大鲁棒性和泛化能力。作者希望能够激发对自动驾驶任务的鲁棒多模态融合的进一步研究。
影响说明与局限性。本文研究了用于3D对象检测的稳健LiDAR-相机融合。由于本文探索的检测是针对通用对象的,不涉及特定的人类识别,因此作者没有关注潜在的隐私问题。但是,偏向训练数据的模型在实践中可能会带来安全威胁。该研究可能会激发后续研究或扩展,并在自动驾驶任务中具有潜在应用。虽然作者的研究采用简单的相机流作为基线,但作者也鼓励社区扩展架构,例如,使用时间多视图相机输入。作者将方法的扩展留给为未来的工作构建此类系统。
环境: ubuntu 18.04