BEVFusion
BEVFusion: Multi-Task Multi-Sensor Fusion with Unified Bird’s-Eye View Representation
Author: MIT HanSong
Code: https://github.com/ADLab-AutoDrive/BEVFusion
Comment: BEV , attention
Completed: December 11, 2022
Key Words: Fusion, Object Detection
Score: ⭐️⭐️⭐️⭐️⭐️
Source: CVPR2022
Abstract
将多传感器融合对于准确可靠的自动驾驶系统至关重要。最近提出的方法基于点级(point-level)融合:使用摄像头特征增强激光雷达点云。然而,摄像头到激光雷达的投影丢弃了摄像头特征的语义密度(semantic density),阻碍了此类方法的有效性,尤其是对于面向语义的任务(如3D场景分割)。
本文提出的BEVFusion是一种多任务多传感器融合框架,其统一BEV表征空间中的多模态特征,很好地保留了几何和语义信息。为实现这一点,优化BEV池化,诊断并解除视图转换中的关键效率瓶颈,将延迟减少了40倍。BEVFusion从根本上来说是任务无关的,无缝支持不同的3D感知任务,几乎没有架构的更改。
在nuScenes数据集的3D目标检测上实现1.3%的mAP和NDS提升,在BEV分割上实现了13.6%的mIoU提升,计算成本降低了1.9倍。
Introduction
用语义标注、CNN特征或2D图像中的虚拟点(virtual points)来增强激光雷达点云,然后应用现有基于激光雷达的检测器预测3D边框。尽管这些点级融合方法在大规模检测基准上表现出了卓越的性能,但几乎不适用于面向语义的任务,如BEV地图分割。这是因为摄像头到激光雷达的投影在语义上是有损的,而BEB Fusion就是想避免这个几何和语义的损失,建立BEV特征的融合表征,实现3D语义任务。
如图所示:对于典型的32线激光雷达扫描,只有5%的摄像头特征与激光雷达点匹配,而其他所有特征都将被删除。对于更稀疏的激光雷达(或成像雷达),这种密度差异将变得更加剧烈。

在本文中,我们提出了BEVFusion 使用同一个BEV视图来表示空间中的多模态特征,同时保持了照相机的语义密度和激光雷达的空间特征,支持大多数的3D感知任务,同时发现转化效率的瓶颈主要是BEV池化操作,因此设计了具有预运算和缩短间隔的专用内核来消除瓶颈。最后使用全卷积BEV编码器来融合统一的BEV特征,并添加任务特定的检测头来支持不同的任务。
Methodology

BEVFusion从多模态输入中提取特征,并通过视图转换转换成BEV空间,将统一的BEV特征和全卷积BEV编码器融合在一起,并支持具有特定任务头的不同任务。
BEVFusion Pipline:
- 对于不同的模态的数据采用不同的特征提取器提取特征
- 将多模态的特征转化成同一个共享BEV空间中,同时保留了空间几何信息和丰富的语义信息
- 使用预计算和缩短间隔来消除视图转换过程中的效率瓶颈,加速BEV池化
- 对BEV特征使用基于卷积的编码器
- 针对不同的任务使用不同的检测头
Unified Represetation
采用BEV作为融合的统一表征,该视图对几乎所有感知任务都很友好,因为输出空间也在BEV。更重要的是,到BEV的转换同时保持了几何结构(来自激光雷达特征)和语义密度(来自摄像头特征)。一方面,LiDAR到BEV投影将稀疏LiDAR特征沿高度维度(height dimension)展平,因此不会产生几何失真。另一方面,摄像头到BEV投影将每个摄像头特征像素投射回3D空间的一条光线中(ray casting),这可以生成密集的BEV特征图,并保留了摄像头的全部语义信息。
Camera-to-BEV Transformation
摄像头到BEV的变换非常重要,因为与每个摄像头图像特征像素关联的深度(depth)本质上是不明确的。根据LSS,明确预测每个像素的离散深度分布。然后,沿着摄像头光线将每个特征像素分散成D个离散点,并根据相应的深度概率重缩放(rescale)相关特征。这将生成大小为NHW*D的摄像头特征点云,其中N是摄像头数,(H,W)是摄像头特征图大小。此类3D特征点云沿x、y轴量化,步长为r(例如,0.4m)。用BEV池化操作来聚合每个r×r BEV网格内的所有特征,并沿z轴展平特征
虽然简单,但BEV池化的效率和速度惊人地低,在RTX 3090 GPU上需要500毫秒以上(而模型的其余部分计算只需要100毫秒左右)。这是因为摄像头特征点云非常大,即典型的工作负载,每帧可能生成约200万个点,比激光雷达特征点云密度高两个数量级。为了消除这一效率瓶颈,建议通过预计算和间歇降低来优化BEV池化进程。

如图所示:摄像机到BEV变换(a)是在统一的BEV空间进行传感器融合的关键步骤。然而,现有的实现速度非常慢,单个场景可能需要2秒的时间。文章提出了有效的BEV池化方法(b),通过预计算使间歇降低和加快网格关联,视图转换模块(c,d)的执行速度提高了40倍
预计算
BEV池化的第一步是将摄像头特征点云的每个点与BEV网格相关联。与激光雷达点云不同,摄像头特征点云的坐标是固定的(只要摄像头内参外参保持不变,通常在适当标定后)。基于此,预计算每个点的3D坐标和BEV网格索引。还有,根据网格索引对所有点进行排序,并记录每个点排名。在推理过程中,只需要根据预计算的排序对所有特征点重排序。这种缓存机制可以将网格关联的延迟从17ms减少到4ms。
间歇降低
网格关联后,同一BEV网格的所有点将在张量表征中连续。BEV池化的下一步是通过一些对称函数(例如,平均值、最大值和求和)聚合每个BEV网格内的特征。现有的实现方法首先计算所有点的前缀和(prefix sum),然后减去索引发生变化的边界值。然而,前缀和操作,需要在GPU进行树缩减(tree reduction),并生成许多未使用的部分和(因为只需要边界值),这两种操作都是低效的。为了加速特征聚合,文章里实现一个专门的GPU内核,直接在BEV网格并行化:为每个网格分配一个GPU线程,该线程计算其间歇和(interval sum)并将结果写回。该内核消除输出之间的依赖关系(因此不需要多级树缩减),并避免将部分和写入DRAM,从而将特征聚合的延迟从500ms减少到2ms。
Fully-Convolutional Fusion
将所有的感官特征转换为共享的BEV表示,我们可以很容易地将它们与元素操作符(例如拼接)融合在一起。尽管在同一空间中,由于视图转换器的深度不准确,LiDAR BEV特征和相机BEV特征仍然会在一定程度上出现空间错位。为此,我们应用了一个基于卷积的BEV编码器(带有一些剩余块)来补偿这种局部失调。我们的方法可能从更精确的深度估计中受益






