前言
BEVFusion其实有两篇,
【1】BEVFusion: A Simple and Robust LiDAR-Camera Fusion Framework. NeurIPS 2022 | 北大&阿里提出
【2】BEVFusion: Multi-Task Multi-Sensor Fusion with Unified Bird’s-Eye View Representation ICRA 2023 | MIT提出
本文分享MIT这篇,下面简单总结一下两篇论文。
BEVFusion: A Simple and Robust LiDAR-Camera Fusion Framework:(NeurIPS 2022)
- 重点: 介绍了一个融合摄像头和激光雷达数据的框架,用于3D对象检测。其创新之处在于使摄像头流程不依赖激光雷达输入,解决了现有方法过度依赖激光雷达数据的局限性。
- 方法: BEVFusion框架使用两个独立流程来处理激光雷达和摄像头数据,然后在鸟瞰视图(BEV)层面进行融合。这种方法即使在激光雷达功能失常,或摄像头失常的情况下也保证了稳健性。
- 性能: 在nuScenes数据集上,BEVFusion在平均精度(mAP)方面相比现有方法如PointPillars和CenterPoint显示出显著的改进,证明了其在正常和鲁棒设置下的优越性。
BEVFusion: Multi-Task Multi-Sensor Fusion with Unified Bird’s-Eye View Representation:(ICRA 2023)
- 重点: 将传感器融合的概念扩展到多任务、多传感器框架,将激光雷达和摄像头数据统一到共享的鸟瞰视图(BEV)空间中。它不仅针对3D对象检测,还还支持BEV地图分割等任务。
- 统一表示和效率: 该论文介绍了一个保持几何结构和语义密度的统一BEV表示,并优化了BEV池化操作以提高视图转换过程的效率。
- 性能和应用: BEVFusion在nuScenes基准测试中展示了在3D对象检测和BEV地图分割方面的最佳性能。与其他方法相比,它在平均精度(mAP)和平均交并比(mIoU)上都有更高的表现,而且计算成本更低。该论文还强调了该框架在不同光照和天气条件下的稳健性。
所以先看阿里那篇,再看MIT那篇,会比较好理解。
阿里那篇参考我这篇博客:【多传感器融合】BEVFusion: 激光雷达和视觉融合框架 NeurIPS 2022
一、BEVFusion 简介
名称:BEVFusion: Multi-Task Multi-Sensor Fusion with Unified Bird’s-Eye View Representation ICRA 2023 | MIT提出
简介:BEVFusion为多任务、多传感器融合提供了一个高效、通用且任务可拓展的框架。
通过在共享的BEV空间中统一多模态特征,并保持几何结构和语义密度,它支持广泛的3D感知任务(检测、分割、预测等)
论文地址:BEVFusion: Multi-Task Multi-Sensor Fusion with Unified Bird's-Eye View Representation
代码地址:https://github.com/mit-han-lab/bevfusion
二、论文核心贡献
这篇论文的核心贡献,概括为以下4点:
-
提出了一种在共享BEV表示空间内进行传感器融合的方法。这种方法同时保留了摄像头特征的语义密度和激光雷达特征的几何结构,有效地融合了不同传感器的优势。
-
发现在进行视角转换时,BEV池化(BEV pooling)是一个效率的瓶颈。为了解决这个问题,通过预计算和区间简化技术对BEV池化过程进行了优化,实现了40倍以上的加速。
-
提出了一种基于卷积的BEV编码器,用于融合统一的BEV特征。这种编码器能够减轻来自不同传感器特征之间的局部错位问题,从而提高整体融合效果。
-
支持多种3D感知任务,例如:3D目标检测和BEV地图分割,而这些任务几乎不需要对模型架构进行改变。这表明了BEVFusion框架的灵活性和适应性,能够适用于多种不同的应用场景。
三、框架思路
BEVFusion框架如下图所示,图像这边可以看作一个支路,输入多视角图像,通过常规的2D图像Backbone进行特征提取,生成多视角特征图;然后基于LSS思路,先预测每个特征点的离散深度,得到3D坐标,再转为图像BEV特征图。
点云这边也可以看作一个支路,通过常规的点云Backbone进行特征提取,生成点云特征图;然后再Z轴方向进行压缩,得到带高度BEV特征图。
BEVFusion框架思路,概括为以下几个关键步骤:
-
单模态编码器Backbone:分别对摄像头拍摄的图像和激光雷达捕捉的点云数据进行处理。对这两种不同的数据源,分别使用卷积神经网络(CNN)来提取其语义特征。
-
视角转换:
- 图像特征(LSS思路)
- 输入:多通道特征图。
- 每个特征点按照预测的深度分布,被映射到多个不同深度的点上。
- 每个特征点的特征值乘以相应的概率,形成一个带有特征的稀疏3D点云。
- 这些3D点云根据其在BEV空间的位置映射到网格中,并聚合每个格子内的特征。
- 激光雷达点云特征(压缩Z轴思路)
- 将3D点云特征用体素网格进行离散化。
- 将3D体素格栅投影到2D平面,形成BEV表示。
- 在投影时,将Z方向上不同体素的特征聚合成2D的BEV特征图。
- 进行多尺度处理以生成不同分辨率的BEV特征图。
- 图像特征(LSS思路)
-
BEV特征融合:在BEV空间中,将来自摄像头图像和激光雷达点云的特征进行拼接。
-
BEV编码器:使用卷积网络进一步处理融合后的BEV特征,生成统一的BEV特征表示。
-
多任务头:根据不同的感知任务(如3D检测、BEV分割、轨迹预测等等),在统一的BEV特征上应用专门的网络头部进行处理。
整个流程的核心在于有效地将不同模态的数据统一到BEV表示中,并通过精确的视角转换和特征融合技术处理这些数据,以适应多种3D感知任务。
四、核心内容——图像特征转BEV特征
论文中将多视角特征图,转为转BEV特征图,是基于LSS思路实现的。
LSS全称是Lift-Splat-Shoot,它先从车辆周围的多个摄像头拍摄到的图像进行特征提取,在特征图中估计出每个点的深度,然后把这些点“提升”到3D空间中。
接着,这些3D信息被放置到一个网格上,最后将这些信息“拍扁”到一个平面视图上,形成BEV特征图。
- Lift,是提升的意思,2D → 3D特征转换模块,将二维图像特征生成3D特征,涉及到深度估计。
- Splat,是展开的意思,3D → BEV特征编码模块,把3D特征“拍扁”得到BEV特征图。
- Shooting,是指在BEV特征图上进行相关任务操作,比如检测、分割、轨迹预测等。
详细分析和代码,参考我这篇文章【BEV感知 LSS方案】Lift-Splat-Shoot
4.1 Lift(2D→ 3D)
"Lift-Splat-Shoot"(LSS)中的 "Lift" 部分是这个系统中的一个关键步骤,它用于将2D图像数据转换为3D空间中的特征。
目的:"Lift" 的目的是要确定2D图像中的每个像素在3D空间中的位置,特别是它们的深度信息。这对于理解和解释3D世界非常关键。
深度信息的重要性:在3D世界中,要确定一个对象的确切位置,仅有2D像素坐标是不够的。我们还需要知道这个像素点距离相机的深度(即它有多远)。
获取深度信息:在没有深度相机这类设备的情况下,LSS系统通过为每个像素点生成一系列可能的深度值来估计深度信息,简称为“深度离散预估”。这是一个创新的方法。
下面详细介绍一下,首先看看下面的图,不同的物体距离相机的距离是不一样的。比如,小狗距离相机是4m,汽车距离相机是43m。
我们将4米到44米的范围内生成一系列离散的深度值,每隔1米一个,就形成下面图的结果了。
考虑 2D 图片上的一个点对应 3D 世界的一条射线,现在不知道的是该像素具体在射线上位置,即不知道该像素的深度值,
故可以在这条直线上采样 N 个点(比如 41 个),每个点对应深度离散值,每隔1米一个。
在下图中,相机视锥中一根射线上设置了10个可选深度值,即D=10,第三个深度下特征最为显著,因此该位置的深度值为第三个。
注意,深度值LSS论文例图用了10个,实际代码用了41个。
在官方的LSS实现中,对于图像中的每个像素点,系统会在5米到45米的范围内生成一系列离散的深度值,每隔1米一个。这样,每个像素点就有41个可能的深度值可供选择。
对一张图片每个 2D 特征点做相同的操作,就可以生成一个形状类似平头金字塔 (frustum) 的点云。
在训练过程中,深度学习网络会自动选择每个像素点的最合适深度值。
整理一下思路:
-
深度特征的表示:每个像素点有一个d维的深度分布。这个深度分布用于表示该像素在3D空间中的位置,特别是它距离相机的深度。
-
联合特征表示:一个像素点的整体特征由它的c维图像特征和d维深度特征共同表示,形成一个d,c,h,w的四维向量。
-
深度值的概率表示:对于每个像素点,其在3D空间中的确切深度是不确定的。因此,系统通过划分1米间隔的深度格子,并使用D维向量(通过softmax函数处理)来表示该像素点处于每个深度格子的概率。在这里,D=41,代表4米到45米范围内的每1米间隔。
4.2 Splat (3D → BEV)
"Lift-Splat-Shoot"(LSS)系统中的 "Lift" 步骤之后,来到“Splat”,接下来的目标是确定2D像素点在3D空间中的确切坐标。这个过程可以分解为以下几个步骤:
-
确定3D坐标:一旦我们通过 "Lift" 步骤获得了2D像素点的深度信息,结合这个点的2D像素坐标、相机的内部参数(内参),以及相机相对于车辆的位置和方向(外参),我们就可以计算出该像素点在车辆坐标系中的3D坐标。
-
投影到BEV图:接着,系统将这些3D坐标投影到一个统一的BEV图中。这个BEV图是以车辆为中心的,通常覆盖一个200x 200的区域。
-
过滤感兴趣域外的点:在创建俯视图时,系统会过滤掉那些不在感兴趣区域(比如车辆周围200 x 200范围)内的点。
-
处理重叠的特征(BEV pooling):在俯视图中,同一个3D坐标可能对应多个不同的特征,这可能是因为:
- 单张2D图像中不同像素点被投影到了俯视图的同一位置。
- 来自不同相机的图像中,不同像素点被投影到了俯视图的同一位置。
- 如何处理重叠的特征是重点,在4.3和4.4详细介绍。
- 视锥点云转换到BEV后:每个点都会被分配到BEV的柱子里面,这个柱子就是BEV空间每个grid都对应一个[dx, dy, 高]的立方体,这样每一个grid的特征就是在里面所有点对应的图像特征求和。
-
生成最终特征图:通过上述过程,系统最终生成了一个200x200像素大小的特征图,其中每个像素包含C个特征(在源码中,C通常设为64)。
-
计算损失:最后接个一个BevEncode的模块,将200x200xC的特征生成200x200x1的特征用于loss的计算。
4.3 BEV pooling改进点1(Precomputation预计算三维坐标和相应的BEV网格位置)
处理BEV网络中重叠的特征(BEV pooling),预计算的目的是优化点云数据处理效率。
对点云中的每个点进行预计算,给它们在BEV网格中分配排序编号。这个过程涉及将点云数据与BEV网格的特定位置关联起来。
具体包括以下几个方面:
-
BEV池化的初始化:将摄像机捕捉的特征点云中的每个点与一个BEV网格相关联。这种关联确保了同一BEV网格内的所有点在张量表示中是连续的。
-
相机特征点云的坐标固定性:与激光雷达点云不同,相机特征点云的坐标是固定的,这是在相机的内参和外参保持不变的情况下实现的,通常通过适当的校准来保证。
-
预先计算三维坐标和BEV网格索引:在坐标固定的基础上,预先计算每个点的三维坐标和相应的BEV网格索引。
-
排序和排名记录:根据网格索引对所有点进行排序,并记录每个点的排名(rank)。
-
推理时的重排序:在推理过程中,只需要根据预先计算的排名(rank)对所有特征点进行重新排序。
通过这种预计算和排序机制,BEVFusion网络显著提高了点云数据处理的效率,将网格关联的处理时间从17毫秒降低到4毫秒。
这种优化使网络在处理大量的点云数据时能够实现更快的响应和更高的计算效率。
问题:为什么要排序和排名记录?
在BEVFusion网络中进行排序和排名记录的原因是为了优化数据处理的效率和效果,具体原因如下:
提高数据处理效率:通过预先计算每个点的排序和排名,可以将点云数据更有效地组织在BEV网格中。这种组织方式使得在后续的处理步骤中,相关的数据点可以被更快地访问和处理。特别是在BEV网格的关联和特征聚合过程中,预先排序的点云数据可以显著减少计算量和时间。
确保数据连续性:在张量表示中,保持同一BEV网格内的点连续是重要的。这有助于后续的神经网络操作,如卷积和池化,因为这些操作通常依赖于数据的空间连续性。预先排序和记录排名有助于在转换到BEV表示时保持点云数据的空间邻近性,从而提高后续处理的准确性和效果。
减少重复计算:排序和排名的记录实际上是一种缓存机制。在模型的推理阶段,这些预先计算和排序的数据可以直接使用,无需每次都进行复杂的计算。这种方式在处理大量数据时尤其重要,可以显著减少重复计算,提高整体系统的效率。
支持实时处理需求:在自动驾驶等应用场景中,实时处理和响应是关键要求。通过预先排序和排名,BEVFusion网络能够快速地处理传入的点云数据,满足实时性的需求。
4.4 BEV pooling改进点2(Interval Reduction间隔减少)
在BEVFusion网络中,BEV池化(BEV pooling)的一个重要步骤是使用一种均匀函数(如均值、最大值或总和)来聚合每个BEV网格中的特征。
这个过程原先采用的方法和新的解决方案如下:
-
原来的方法(LSS):以前的实现方式是首先计算所有点的前缀和,然后在索引发生变化的边界处减去相应的值。这个过程需要在GPU上进行树形缩减(tree reduction),并会生成许多未使用的部分和(因为实际上只需要边界上的值)。这种方法在计算上是低效的,因为它既需要复杂的树形缩减操作,又产生了大量无用的中间结果。
-
论文方法:为了提高特征聚合的效率,BEVFusion网络实现了一个专门的GPU内核。这个内核直接在BEV网格上进行并行处理:为每个网格分配一个GPU线程,这个线程计算其区间和并将结果回写。这样的设计消除了输出之间的依赖关系,因此不需要进行复杂的多级树形缩减。同时,它还避免了将部分和写入动态随机访问存储器(DRAM),减少了数据的读写开销。
通过这种专门设计的GPU内核处理,特征聚合的延迟时间从原来的500毫秒大幅降低到只有2毫秒。这个优化大大提高了BEVFusion网络在处理点云数据时的效率,对于需要快速响应的应用场景(例如自动驾驶)来说尤为重要。
4.5 BEV pooling优化效果
通过BEVFusion网络中BEV池化(BEV pooling)的优化,实现了相机到BEV(鸟瞰视图)转换速度的显著提升,提高了整个模型的效率和性能。这一优化的具体成果如下:
-
显著提高的转换速度:优化后的BEV池化使得相机到BEV的转换速度提高了40倍。具体来说,转换的延迟时间从之前的500毫秒以上大幅减少到仅12毫秒。这意味着转换过程仅占模型端到端运行时间的10%。
-
特征分辨率的扩展性:优化过程还支持在不同的特征分辨率上进行扩展,增强了模型处理不同类型数据的能力。
-
统一多模态感官特征的关键:这种优化是在共享的BEV表示中统一多模态感官特征的关键使能器。它使得从不同传感器(如摄像头和激光雷达)收集的数据可以更高效地融合和处理。
-
效率瓶颈的解决:在之前的研究中,仅摄像机的三维检测被认为是效率的瓶颈。这些方法或是通过假定均匀的深度分布来近似视图转换器,或是截断每个BEV网格内的点。相比之下,BEVFusion的技术既精确又快速,不需要任何近似。
总的来说,这些优化显著提高了BEVFusion网络在处理和转换大量感官数据时的效率,特别是在需要快速处理来自不同传感器的数据以实现准确感知的应用场景,如自动驾驶系统。
五、论文实验和效果
BEVFusion 在 nuScenes的val和test,上进行3D检测对比。
它打破了将相机功能投影到LiDAR点云上的惯例,并提供至少高 1.3% 的 mAP 和 NDS,同时计算成本降低 1.5-2 倍。
图中的符合含义(∗ : our re-implementation; † : w/ test-time augmentation (TTA); ‡ : w/ model ensemble and TTA)
BEVFusion 在 nuScenes (val) 上的 BEV 地图分割,
比最先进的多传感器融合方法高出 13.6%,并且在不同类别上都有一致的改进。
在不同的 LiDAR 稀疏度、物体大小和距自我汽车的物体距离下,BEVFusion 优于先进的单模态和多模态检测器,特别是在更具挑战性的设置下(即稀疏点云、小/远物体)
模型效果
分析完成~