一.两篇bevfusion总结
上一篇的bevfusion虽然与这篇的名字很相像但是解决的办法不同,上一篇主要是讲让激光相机融合前独立运行,剥离依存关系。本篇主要讲解决融合时BEV特征统一性问题,并对该方式的运行效率做了优化。下面来看具体情况。
二.mit-bevfusion提出的前提的简要介绍
(1).
来自不同传感器的数据以根本不同的方式表达:例如,相机以透视视图捕获数据,而激光雷达以3D视图捕获数据。为了解决这种视图差异,我们必须找到一种适用于多任务多模态特征融合的统一表示。由于二维感知的巨大成功,自然的想法是将激光雷达点云投影到相机上,并用二维cnn处理RGB-D数据。然而,这种激光雷达到相机的投影引入了严重的几何失真(见图a),这使得它在面向几何的任务(如3D物体识别)中效果较差。
(2).
一种现有的基于激光雷达的探测器,用于预测3D边界框。尽管这些点级融合方法在大规模检测基准上表现出色,但它们在面向语义的任务上几乎不起作用,比如BEV地图分割。这是因为相机到激光雷达的投影在语义上是有损耗的(见图b):对于典型的32東激光雷达扫描仪。缺点: 只有5%的相机特征将与激光雷达点匹配,而所有其他特征将被丢弃。对于更稀疏的激光雷达(或成像雷达),这种密度差异将变得更加剧烈。
(3).
在本文中,我们提出了BEVFusion来统一多模态特征在共享鸟瞰图(BEV)表示空间中用于任务不可知论学习。我们保持了几何结构和语义密度(见图c),并且自然地支持大多数3D感知任务(因为它们的输出空间可以自然地在BEV中捕获)。在将所有特征转换为BEV时,我们确定了视图转换中主要的令人望而却步的效率瓶颈:即,仅BEV池化操作就占用了超过80%的模型运行时间。然后,我们提出了一个带有预计算和间隔缩减的专用内核来消除这一瓶颈,实现了超过40倍的加速。最后,我们应用全卷积BEV编码器融合统一的BEV特征,并附加一些特定任务的头来支持不同的目标任务。
三.mit-bevfusion的框架介绍
(1).图像
第一步Camera Encoder:
方法和上节课的Camera Stream讲的一样。最后得出了一个Camera Features。
第二步获得Camera-to-BEV View Transform(相机视角下的图像转换为鸟瞰图)
Camera-to-BEV转换是非常重要的,因为与每个相机特征像素相关联的深度本质上是模糊的。从上图我们明确地预测了每个像素的离散深度分布。然后,我们沿着相机光线将每个特征像素分散成D个离散点,并根据其相应的深度概率重新缩放相关特征。这样就生成了一个大小为NHWD的相机特征点云,其中N为相机数量,(H,W)为相机特征图大小。这样的3D特征点云沿着x、y轴进行量化,步长为r(例如0.4m)。我们使用BEV池操作来聚合每个rXrBEV网格内的所有特征,并沿z轴平坦化特征。
步骤:
1.首先输入多通道特征图,每个像素点都会根据视角转换模块预测的深度分布,被映射到多个不同深度的点上。
2.每个像素点都会根据视角转换模块预测的深度分布,被映射到多个不同深度的点上。比如对于一个像素A,它的深度分布有四个离散值d1,d2,d3,d4 ,对应概率p1,p2,p3,p4。然后这个像素点A会被映射到4个点,位置分别是cam_pos(相机位置) + d1cam_dir(相机方向) , cam_pos+d2cam_dir等。这4个点带有的特征值分别是 原始像素A的值乘以对应的概率p1 - p4。
3.对所有的像素都进行这样的映射,生成一个带有特征的稀疏3D点云。
4.把这些3D点根据位置映射到BEV网格中,用一个对称函数(如求平均)聚合每个格子内特征。
PS 补充: 视角转换模块(View Transformer)来预测每个像素在各个深度的概率
1.视角转换模块会针对每个像素,预测一个深度分布,是个一维向量,长度为离散深度个数D(沿着相机光线将每个特征像素分散成D个离散点)。
2.这个向量经过softmax归一化,就可以表示该像素在各个深度的概率。
3.视角转换模块中的卷积网络通过学习,会逐步优化这些深度概率的预测,使其逼近真实值。
4.模型训练时,有来自激光雷达的BEV特征作为一个监督信号,可以纠正视角转换模块预测的分布图。
5.推理时直接使用预测的深度概率,进行像素到BEV空间的转换。
第三步获得 Camera Feat(in BEV1)
由于上一步将相机图像转化为视锥之后,即通过提案到3D截锥体中通过ROI来获取在BEV图像的信息。
(2).LIDAR[雷达]
第一步LIDAR Encoder:
LIDAR Encoder方法和上节课的LIDAR Stream讲的一样。最后得出了一个LIDAR Features。
第二步Flatten(along z-axis):
"Flatten (along z-axis)" 意味着沿着 z 轴(垂直方向)将一个三维数组或张量展平为一个二维数组或矩阵。这意味着将 z 轴上的维度合并为一维。即生成2D的BEV特征图,通常会进行多尺度处理,生成不同分辨率的BEV特征图,输入LiDAR Features得到不同分辨率的LIDAR Feat(in BEV)。
(3).BEV融合
第一步将Camera Feat 和 LIDAR Feat 融合:
采用BEV为融合的统一表示的好处:
我们采用鸟瞰(BEV)作为融合的统一表示。这种视图对几乎所有的感知任务都是友好的,因为输出空间也是在BEV中。更重要的是,向BEV的转换同时保持了几何结构(来自激光雷达特征)和语义密度(来自相机特征)。一方面,LiDAR-to-bev投影将稀疏的激光雷达特征沿高度维度平坦化,因此不会产生几何畸变。另一方面,相机到BEV投影将每个相机特征像素投射回3D空间中的光线中,这可以产生图中密集的BEV特征图,保留了来自相机的完整语义信息。
如何融合:
Fully-Convolutional(完全卷积)融合
将所有感官特征转换为共享的BEV表示后,我们可以使用元素运算符(例如串联)轻松地将它们融合在一起。
第二步BEV Encoder
虽然在同一空间,LiDAR BEV特征和相机BEV特征仍然可能在一定程度上由于视图转换器的深度不准确而在空间上不对齐。于是便有了BEV Encoder的步骤。通常编码器可以是ResNet(BEVdet),然后得到Fused BEV Features。