关于BEVFormer的论文解读其实蛮多的,大家讲的都不错,但是觉得看看原文印象更加深刻,所以想着自己有时间读一读,加深理解!!!
论文原文:Paper in arXivhttp://arxiv.org/abs/2203.17270
1. Abstract
BEVFormer 利用空间和时间信息,通过预定的网格状 BEV 查询向量与空间和时间域交互。为了聚合空间信息,我们设计了一个空间交叉注意力,每个 BEV 查询向量从跨相机视图的感兴趣区域提取空间特征。对于时间信息,我们提出了一种时间自注意力来递归融合历史 BEV 信息。我们的方法在 nuScenes 测试集上的 NDS 指标达到了最新的 56.9%,比之前的最佳技术高出 9.0 分,与基于 lidar 的基线性能相当。我们进一步表明,BEVFormer 显著提高了低能见度条件下目标速度估计和召回率的准确性。
一句话概括就是将Transformer应用在了BEV,所以说到底BEVFormer的成功,仍旧是Transformer的成功。
2. Introduction
虽然基于lidar的方法取得显著进展,但是造价高,而且与相机相比,相机对于检测远距离目标和识别以及交通灯、车道线有着显著优势,所以说这项研究是极其有必要的(要不然为什么人家搞纯视觉的智驾)
提出问题:但基于 BEV 的方法在 3D 目标检测 中并没有显示出明显优于其他范式的优势 。其根本原因是,3D 目标检测任务需要强大的 BEV 特征来支持精确的 3D 检测框预测,而从 2D 平面生成 BEV 是不适定的。生成 BEV 特征的流行 BEV 框架基于深度信息(LSS),但这种范式对 深度值或深度分布的准确性非常敏感。因此,基于 BEV 的方法的检测性能受到复合误差的影响 ,不准确的 BEV 特征会严重影响最终性能。
解决问题:设计一种 不依赖深度信息、自适应学习 BEV 特征而不是严格依赖 3D 先验的 BEV 生成方法。 Transformer 使用注意力机制动态地聚合有价值的特性,在概念上满足了需求。另外Tansformer还可以融合时间信息
BEVFormer三个关键设计:
(1) 网格型 BEV 查询向量集,通过注意力灵活融合时空特征;
(2)空间交叉注意力模块,从多摄像头图像中聚合空间特征;
(3)时间自注意力模块,从历史 BEV 特征中提取时间信息, 有利于运动目标速度估计和重遮挡目标检测。同时带来可以忽略不计的计算开销。利用 BEVFormer 生成的统一特征,该模型可以与不同任务的特定头如可变形 DETR和 mask decoder协作,进行端到端三维物体检测和地图分割。(这应该是这个模型最牛的地方了)
3. Camera-based 3D Perception
以往的三维感知方法通常独立完成三维物体检测或地图分割任务。对于三维物体 检测任务,早期的方法类似于二维检测方法 [1, 28, 49, 39, 53],通常是在二维检测框 的基础上预测出三维检测框。Wang 等人 [45] 采用先进的二维检测器 FCOS [41] 直接预测每个对象的三维检测框。DETR3D [47] 在二维图像中投影可学习的三维查询向量,然后对对应特征进行采样,实现端到端三维检测框预测,无需 NMS 后处理。另一种解决方案是将图像特征转换为 BEV 特征,并从自上而下的视角预测三维检测框。
实际上,在地图分割任务中,多目相机特征生成 BEV 特征的研究更为广泛 [32, 30]。
一种简单的方法是通过反向透视映射 (IPM) 将透视视图转换为 BEV [35, 5]。此外, Lift-
Splat [32] 根据深度分布生成 BEV 特征。方法 [30, 16, 9] 利用多层感知器学习从透视图到 BEV 的转换。PYVA [51] 提出了一种将前视单目图像转换为 BEV 的交叉视角转换器,但由于全局注意力 [42] 的计算量较大,不适合融合多摄像头特征。除了空间信息,以往的研究 [18, 38, 6] 也通过叠加几个时间戳的 BEV 特性考虑了时间信息。BEV特性限制了固定时间内的可用时间信息,增加了计算量。本文提出的时空 Transformer同时考虑了时空线索,生成了当前时间的 BEV 特征,而时间信息则是通过 RNN 方式从之前的 BEV 特征中获取的,其计算成本较小。
4. BEVFormer
4.1 Overall Architecture
BEVFormer共有6个encoder layers,每个layers遵循transformer结构,与传统transformer不同的使新增的三个结构:BEV queries, spatial cross-attention, and temporal self-attention.
BEV queries:是一个网格的可学习参数,它用来查询来自多相机图片经attention机制的特征Spatial cross-attention and temporal self-attention:是一个以BEV queries 为输入的注意力层,用于集成来自前一时刻的多相机图片和时空特征
推理阶段,在t时刻,收集多相机图片进入backone(resnet-101),提取来自不同相机的特征
同时保留来自t-1时刻的来自BEV特征(也就是t-1时刻经过spatial cross-attention, and temporal self-attention.的输出的结果),
在encoder layer 中,首先使用BEV queries Q 在temporal self-attention来查询前t-1时刻的BEV特征,然后在经过spatial cross-attention,来查询空间信息,再经过前馈神经网络,最后输入到下一个encoder layer.经过6个encoder 层后,输入到3D detection head 和map segmentation head来完成检测和地图分割任务。
下文为各个部件的具体解释
4.2 BEV Queries
定义了一个网格形可学习参数Q,平面形状为H、W,在网格中的某一点p=(x,y)代表着BEV视角下的对应区域,每个网格对应着真实坐标系下的S 米大小。网格中心默认对应自己的车的位置,然后像传统的transformer结构一样,添加了一些可学习的位置编码在BEV Queries中。
4.3 Spatial Cross-Attention
由于多个相机拍摄图片尺寸巨大,因此计算量是十分巨大的,因此设计了基于可变形注意力 , 开发了空间交叉注意力,因此对于每个BEV query Q 只与他对应的感兴趣的相机视角图片进行交互,但可变性卷积是为2D检测设计的,所以需要对3D场景做一些调整。
首先将Q变成柱状query ,在柱状向量中查询的3D点,然后将这些点投影到二维视图中。对于一个Q,投影的2D 点只落在部分视图中,其他视图没有投影,将投影的视图记作
,之后,将这些二维点作为查询 Q的参考点,并围绕这些参考点从命中视图
中抽取特征。最后,对采样特征进行加权和,作为空间交叉注意力的输出。空间交叉注力意 (SCA) 过程可以表述为:
其中 i 索引摄像机视图,j 索引参考点, 是每次 BEV 查询的总参考点数量。
是第 i个摄像头视图的特征。对于每一个 BEV 查向量询 Q p , 我们使用一个投影函数 P(p, i, j),来得到第 i 个视图图像上的第 j 个参考点。
对于函数P是如何获取该点对应的相机视角图片的,文章是这样解释的(其实就是穷举z,找到最相关的view)
(1)首先计算了Qp点在真实世界坐标系中的坐标,
(2) 为了求取其在真实世界的高度,建立了一个z轴,获得真实直接坐标系下的三维坐标为
(3)利用相机投影矩阵将这个坐标投影在不同视角的图片中。
4.4 时空自注意力
主要就是合并历史BEV特征来获取更加精准的BEV特征
主要步骤为:
(1)在空间上对其此时的BEV特征Q和之前的BEV特征Qt-1,
(2)由于不同时间之间的特征有较大的变化,所以直接将他们联系起来很困难,因此建立了时空自注意力层
(3)利用可变性注意力,用Q和Bt-1来推理offset。
4.5 应用
For 3D object detection 在DETR基础上进行了改进,包括使用单尺度BEV特征作为输入,生成3D bounding box 和v。无须NMS直接得到结果
For map segmentation 在Panoptic SegFormer基础上进行改进
4.6 模型训练
train:对于时间戳 t 的每个样本,我们从过去 2 秒的连续序列中再随机抽取 3 个 样本,这种随机抽样策略可以增加自我运动 [57] 的多样性。我们将这四个样本的时间 戳表示为 t−3, t−2, t−1 和 t。对于前三个时间戳的样本,它们负责反复生成 BEV 特 征 {Bt−3, Bt−2, Bt−1} ,这个阶段不需要梯度。对于时间戳 t−3 的第一个样本,之前没 有 BEV 特征,时间上的自注意力退化为自注意力。在时刻 t,模型根据多摄像头输入 和先验 BEV 特征 Bt−1 生成 BEV 特征 Bt 使 Bt 包含了跨越四个样本的时空线索。最后,我们将 BEV 特征 Bt 输入到检测和分割头部并计算相应的损失函数。
inference:在推断阶段,我们评估每一帧的视频序列的时间顺序。前一个时间戳的 BEV 特性被保存并用于下一个时间戳,这种在线推断策略具有时间效率,并且与实际应用一 致。虽然我们利用了时间信息,但我们的推理速度仍然可以与其他方法相媲美 [45, 47]。