自动驾驶常见传感器包括相机,LiDAR,雷达等传感器。

相机能提供丰富语义,LiDAR提供准确的空间信息,雷达能进行速度估计。

对于多传感器方案,当时的传感器投影存在信息损失的问题:

  • LiDAR->Cam:存在几何损失,像素坐标系中相邻的像素点,在3D空间中可能距离很远。设想一个人站在墙前面,在像素坐标系中,人和墙的像素是紧挨着的,用2D卷积处理投影后的特征,Conv Kernel会覆盖人和墙的特征。然而在3D空间中,人和墙离得很远,但是在2D空间中,二者得特征被融合了。不适用于几何导向的任务(3D Det)。

  • Cam->LiDAR:存在语义损失,32线LiDAR得点云仅能匹配5%得相机特征。不适用于分割导向的任务(BEV Map Seg)。

信息损失情况见下图:

BEVFUSION.webp

当时的融合方法的缺陷包括:

  • 提案级融合:先从单一模态传感器生成2D/3D的候选框,再跨模态提取该提案对应区域的特征进行融合,最终基于融合特征完成目标检测。以目标为中心,无法扩展至BEV分割等任务。

  • 点级融合:将相机的语义特征投影到LiDAR点云上,使用语义特征装饰点云,再使用LiDAR感知模型处理装饰后的点云。几何+目标双中心,语义损失多,计算成本高。

BEVFusion设计方案

BEVFUSION-NET.webp

统一表征

解决不同传感器的view差异,找到统一的表征空间。

论文认为统一表征空间需要满足2个条件:

  1. 所有传感器特征均可无损地转换为该表征

  2. 这种表征能适配不同3D任务,包括检测,分割,跟踪

最终作者选择BEV作为统一表征空间。

对LiDAR,只需要沿Z轴展平稀疏的3D点云特征,没有几何畸变,可以保留更多空间几何信息。

对Camera,将每个像素特征投射为3D空间的一条射线,通过离散深度采样生成稠密的BEV特征图。

Cam到BEV

特征转换遵循LSS的方法。

  1. 对相机特征图的每个像素,显式地预测这个像素点在3D空间中的离散深度分布

  2. 将每个像素特征沿相机视角的3D射线,散射出D个离散的深度点,最终生成尺寸为NHWD的相机3D特征点云(N为相机数量/HW为相机特征图尺寸)

  3. 将3D特征点云,沿Y轴也就是水平方向,以指定步长 rr ,通过BEV Pooling关联到BEV Grid

  4. 对每个r×rr \times r的网格,聚合其中所有的3D特征点,并沿Z轴展平,得到最终相机的BEV特征图

相机单帧超200W像素点,比点云的数量(几万)要多的多,因此其特征Pooling极慢

为啥只有Pooling慢呢?根据论文提供的网络结构图,相机在基于CNN的操作时,Conv和Pooling都是GPU原生优化操作,非常快。但是利用射线生成3D点云

因此作者使用Precomputation和Interval Reduction技术来加速Pooling操作:

  • Precomputation:针对关联步骤。由于相机内外参是固定的,因此每个特征像素对应的3D坐标以及所属BEV网格idx也是固定的。所以预计算好所有像素点的3D坐标&网格idx,并按照idx进行排序。推理阶段只需要按排序后的顺序读取特征。

  • Interval Reduction:针对聚合步骤。由于同一个BEV Grid的点,在预计算后是连续排列的,聚合操作本质就变成了连续区间求和。之前的VoxelNet提出了一个前缀和方法,还是不够快。作者写了一个GPU Kernel,每个BEV Grid专门分配一个Thread来计算区间和。

LiDAR到BEV

论文一笔带过。

把PointCloud数据直接沿着Z轴也就是高度方向展平Flatten

注意区分Flatten和Compress。

  • Flatten:只改变型状,不改变数值,信息没有损失

  • Compress:沿着Z轴拍扁,通过聚合的方式保留最重要的信息,是有损的。

全卷积融合

  • 初步融合:将所有BEV在通道维度上Concate。不过可能存在空间局部错位。

  • 深度补偿:使用一个基于卷积的BEV Encoder,由几个Residual Blocks组成。引入这些卷积层让网络学习,去修正和补偿融合后可能存在的空间错位。

最终融合后的统一特征被传到不同Task Head。

参考文章

[1] [2205.13542] BEVFusion: Multi-Task Multi-Sensor Fusion with Unified Bird's-Eye View Representation

[2] mit-han-lab/bevfusion: [ICRA'23] BEVFusion: Multi-Task Multi-Sensor Fusion with Unified Bird's-Eye View Representation

[3] Lidar_AI_Solution/CUDA-BEVFusion at master · NVIDIA-AI-IOT/Lidar_AI_Solution