Zhangzhe's Blog

The projection of my life.

0%

BEVFormer: Learning Bird’s-Eye-View Representation from Multi-Camera Images via Spatiotemporal Transformers

URL

TL;DR

  • 传统 BEV 算法中 View Transform 都是通过 LSS 实现 Image ViewBEV View 的转变,这种视角转换方法依赖于图像视角的深度估计(显式(例如 BEVDepth)或隐式(例如 LSS / BEVDet 等))。
  • 本文提出一种新的通过时空注意力机制实现的 View Transform 方法,在 Neuscenes 数据集上取得了不错的 3D 目标检测成绩(略差于 BEVDet4D)。

Algorithm

bevformer.png

整体架构

1. 输入

  • 输入包含两部分,分别是:
    • 环视图(6 张)
    • BEV Queriesshape = [num_voxel, dim]
    • History BEV Feature(上一帧的 BEV Feature 输出,shape = [num_voxel, dim]

2. 输出

  • 输出为当前帧的 BEV Featureshape = [num_voxel, dim]),记作 BtB_t
  • 暂时不考虑任务头

3. 网络模块

  1. 图像特征提取
    • 6 张图片单独做 CNN base 特征提取,输出记作 FtF_t
  2. 时序信息融合:
    • 将构造的 BEV Queries(记作 Q),和上一帧的 BEV Feature(记作 Bt1B_{t-1})做 Self-Attention
    • 其中 Q 作为 QueryBt1B_{t-1} 作为 Key / value,做 Attention 运算
    • 虽然这里的 Query / Key / Value 并不同源,但依然被称为是 Self-Attention 而不是 Cross-Attention,是因为 QBt1B_{t-1} 都属于 BEV 语义
    • 输出记作 Q'
  3. 空间交叉注意力(视角转换
    • 此步骤是本文的重点,BEVFormer 通过这一步将透视图特征转换为俯视图特征
    • 输入为:
      • Q'
      • FtF_t
    • Cross-Attention 运算,其中:
      • Q' 作为 Queries
      • FtF_t 作为 Key / Value
    • 用预设的无意义且可学习的 BEV Queries 去查询图片总体特征,得到 BEV Feature 输出,记作 BtB_t
  4. 任务相关头
    • 输入为:BEV Feature
    • 输出为:BEV 视角下的检测 / 分割等任务预测结果
    • 模型结构:可以是 CNN base 也可以是 Transformer base
  • 以上提到的所有 Attention 过程都需要额外添加 Position embedding

Thought

  • 过程并不复杂,只要看过经典的 DETR,都熟悉这种套路:预设一个无意义的(随机初始化但可学习) pattern 序列作为 Query 去查询 image features,得到有意义的结果(或者说是可监督的结果)
  • 后续的部分工作对其改进是:将随机初始化预设的 Query 有意义化(例如通过一个轻量化 2D 检测头预检测,得到 proposal 并编码为 Query