自动驾驶常见传感器包括 Camera,LiDAR,Radar 等传感器。

相机能提供丰富语义,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

统一表征

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

论文认为统一表征空间需要满足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 轴也就是水平方向,以指定步长 r ,通过 BEV Pooling 关联到 BEV Grid

  4. 对每个 r × 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