BEVFusion: Multi-Task Multi-Sensor Fusion with Unified Bird’s-Eye View Representation

Paper name

BEVFusion: Multi-Task Multi-Sensor Fusion with Unified Bird’s-Eye View Representation

Paper Reading Note

URL: https://bevfusion.mit.edu/assets/paper.pdf

TL;DR

  • BEV 下雷达与图像多模态的结合方案,并对 bevpooling 进行加速,发表时取得了 nuscenes SOTA 效果

Introduction

背景

  • 自动驾驶系统中多传感器融合有助于提升准确性与可靠性

  • 不同传感器的优缺点

    • 相机:丰富的语义信息
    • LiDAR:准确的空间信息
    • Radar:瞬时速度估计
  • 传统融合方案:

    • LiDAR-to-camera 投影:缺点是引入 geometric distortion,对于面向几何的任务不友好,比如 3d 物体识别
      在这里插入图片描述
    • camera-to-LiDAR:优点是精度相对较高,不过有 semantic-lossy 问题,导致在 semantic-oriented 任务上效果不佳,比如 bev 分割任务;对于 32 线LiDAR,只有 5% 的相机特征能被加在 LiDAR 点上
      在这里插入图片描述
  • 当前的融合方法主要是在 point-level 进行融合:利用图片特征增强 LiDAR point

    • 缺点:camera-to-LiDAR 的变换降低了图像特征的 semantic density,导致性能降低,尤其在 semantic-oriented 任务更明显(比如 3d 场景分割)

本文方案

  • 选择 bev 作为特征融合的视角

    • 所有传感器的特征可以无损失地转换到 bev 上
    • 适用于不同的任务
  • 提出了一种 BEV 下的多传感器、多任务融合方法,同时保留几何与语义信息
    在这里插入图片描述

    • 优化的 bevpooling,降低 latency 40x

Dataset/Algorithm/Model/Experiment Detail

在这里插入图片描述

实现方式

  • 整体流程
    • camera encoder 提取多视角的图像特征,然后经过 camera-to-bev 的视角变换转换到 bev 下
      • 转换方式和 LSS 一致,首先显式预测每个像素的深度分布,然后将图像特征分散到 camera ray 上的 D 个离散点,并且通过对应的深度概率对特征进行 rescale (生成特征维度 NHWD),最后基于 BEV pooling 转换到 bev 下
      • 优化了 bev pooling 的速度
    • LiDAR encoder 提取雷达特征,然后经过在 z 轴上的 flatten 转换到 bev 下
    • concat bev 下的图图像特征与雷达特征
    • 使用 bev encoder 融合图像特征和雷达特征,缓解两个特征的局部不对齐问题
bev pooling 优化

在这里插入图片描述

  • precomputation: 提前计算出图像特征中的每个点对应的 3d 坐标与在 bev grid 上的 index,并提前根据网络索引对所有点进行排序记录每个点的排名,在测试阶段就仅需要更根据预先计算的排名来取特征。这个 caching 机制能将 grid association 的 latency 由 17 ms 降低到 4 ms
  • interval reduction:经过 grid association 后,bev grid 中的所有点需要经过一些对称函数(比如 mean、max、sum)进行聚合,之前的方法是计算前缀和然后减去 indices 变化的边界值,其中前缀和需要 gpu 上的 tree reduction,并且会产生 unused partial sums(因为只需要边界上的值)需要额外的 DRAM 操作;这里采用并行方式进行加速,为每个 grid 分配一个 gpu 显存,计算区间和,将特征聚合的时间由 500ms 降低到 2ms
全卷积融合
  • 图像特征与 LiDAR 特征 concat 后经过 bev encoder 进行融合,来补偿两个特征之间的不对齐问题(因为深度预测不准导致)
多任务训练
  • 3d 检测:center heatmap head
  • bev map 分割:使用 CVT 的head,因为不同类别的 map 可能有重合部分(比如人行横道也是可行驶区域中的一部分),因此这里将 map 分割分解为多个 binary 语义分割问题,每个类都分别预测一个二值掩码

实验结果

  • LiDAR 点云的 voxelize 最小单位分别是 0.075m(检测) 和 0.1m(分割)
  • 因为检测和分割任务需要的 bev 特征图的 spatial range 和 size 不一样,在每个任务特定头之前应用网格采样和双线性插值,以在不同的BEV特征映射之间显式变换
nuscenes 数据集 3d 检测

在这里插入图片描述

nuscenes 数据集 map 分割
  • 之前的方法都认为 LiDAR 模态对于 map 分割更有效,但是在这里的结论是 camera 更有效
    在这里插入图片描述
不同目标距离、尺寸、不同 LiDAR beam 下的对比实验

在这里插入图片描述

消融实验

在这里插入图片描述

  • sensor fusion 相比于单模态稳定涨点
  • BEVFusion的检测变种模型对于体素和图像分辨率都具有良好的适应性
  • FPN 使用 1/8 下采样特征就足够了,再增加计算量也不涨点
  • SwinT 精度高于res50,且不 freeze 精度更高
多任务
  • 训练方式:loss rescale 到相同 magnitude 上,每个任务用单独的 bev encoder,为了学习更 task-specific 的特征
    在这里插入图片描述
    结果上来看多任务会掉点,bev encoder 分开后掉点幅度能降低

Thoughts

  • 多任务部分作者提到后续会更新一种不掉点的更复杂的训练策略,比较好奇具体操作是什么;并且多任务的实验不是完全训练的实验,实际掉点幅度可能和文章中不一致
  • 文章创新点感觉挺一般,主要就是 bev pooling 算子的优化,不过文章写得很不错,代码开源做得也好
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值