[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HCYpPMaz-1691371078673)(https://files.mdnice.com/user/27157/b37b5bca-bc15-4391-a42f-2545d5cb213d.png)]
论文地址:https://arxiv.org/pdf/2203.17270.pdf
中文版论文:https://drive.google.com/file/d/1dKnD6gUHhBXZ8gT733cIU_A7dHEEzNTP/view
代码地址: https://github.com/zhiqi-li/BEVFormer
三维视觉感知任务,包括基于多摄像头图像的三维检测和地图分割,是自动驾驶系统的关键。
BEVFormer 框架学习了具有时空 Transformer 的统一 BEV 表征,以支持多个自动驾驶感知任务。
BEVFormer 利用空间和时间信息,通过预定的网格状 BEV 查询向量与空间和时间域交互。
关键点:为了聚合空间信息,设计了一个空间交叉注意力,每个 BEV 查询向量从跨相机视图的感兴趣区域提取空间特征。对于时间信息,我们提出了一种时间自注意力来递归融合历史 BEV 信息。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZAiwkeBQ-1691371078673)(https://files.mdnice.com/user/27157/36cc85e0-7a77-4b74-af4b-ebeff3a2c00a.png)]
BEVFormer利用查询来查找空间/时间空间,并相应地聚合时空信息,因此有利于感知任务的更强表示
像机具有检测远距离物体和识别基于视觉的道路元素(例如,交通信号灯、停车线)的理想优势。
使用 BEV 特征执行感知任务的另一个动机是, BEV 是连接时间和空间域的理想桥梁。对于人类视觉感知系统而言,时间信息在推断物体运动状态和识别遮挡物体方面起着至关重要的作用。
重要的挑战是,自动驾驶是时间关键的,场景中的物体变化很快,因此简单地叠加跨时间戳的 BEV 特征会带来额外的计算成本和干扰信息,这可能不是理想的。受循环神经网络 (RNN) , 我们利用 BEV 特征将时间信息从过去递归到现在,这与 RNN 模型的隐藏状态具有相同的精神。
BEVFormer 包含3个关键的设计:
借助BEVFormer生成的统一特征,该模型可以与不同的任务头(如Deformable DETR和mask decoder)协作,进行端到端的3D物体检测和地图分割。
BEVFormer 主要贡献:
DETR使用一组对象查询直接由交叉注意解码器生成检测结果。
主要缺点是训练时间太长。
可变形的DETR通过提出可变形的注意力解决了这个问题。与DETR中的vanilla全局注意不同,变形注意与局部感兴趣区域相互作用,只对每个参考点附近的K个点进行采样并计算注意结果,从而提高了效率,显著缩短了训练时间
变形注意力的计算公式为:
D e f o r m A t t n ( q , p , x ) = ∑ i = 1 N h e a d ω i ∑ j = 1 N k e y A i j ⋅ ω i ′ x ( p + Δ p i j ) DeformAttn(q,p,x)=\sum_{i=1}^{N_{head}}\omega_i\sum_{j=1}^{N_{key}}A_{ij} \cdot \omega_i^{'} x(p + \Delta p_{ij}) DeformAttn(q,p,x)=i=1∑Nheadωij=1∑NkeyAij⋅ωi′x(p+Δpij)
其中 q, p, x 分别表示查询向量特征、参考点特征和输入特征。 i 表示注意头的索引, N h e a d N_{head} Nhead 表示注意头的总数。 j 对采样的键进行索引, N k e y N_{key} Nkey 为每个头部采样的键总数。
W i ∈ R C × ( C / H h e a d ) W_i \in \mathbb{R}^{C \times (C / H_{head})} Wi∈RC×(C/Hhead) 和 W i ′ i n R C × ( C / H h e a d ) W_i^{'} \ in \mathbb{R}^{C \times (C / H_{head})} Wi′ inRC×(C/Hhead) 为可学习权重,其中C为特征维数。 A i j ∈ [ 0 , 1 ] A_{ij} \in [0,1] Aij∈[0,1] 为预测注意权重,用 ∑ j = 1 N k e y A i j = 1 \sum_{j=1}^{N_{key}}A_{ij} = 1 ∑j=1NkeyAij=1 归一化。
Δ p i j ∈ R 2 \Delta p_{ij} \in \mathbb{R}^2 Δpij∈R2 是参考点p的预测偏移量。
$ x(p + \Delta p_{ij})$ 表示 $ p + \Delta p_{ij}$ 的特征,采用双线性差值提取,如Dai等。
ETR3D将可学习的3D查询投影到2D图像中,然后对相应的特征进行采样,进行端到端的3D边界盒预测,无需NMS后处理
另一种方法是将图片特征转换为BEV特征,从俯视的角度预测3D包围盒。这些方法利用深度估计或分类深度分布的深度信息,将图片特征转换为BEV特征
叠加BEV特征限制了在固定时间内可用的时间信息,带来了额外的计算成本。本文提出的时空转换器在考虑时空线索的基础上生成当前时间的BEV特征,并通过RNN的方式从之前的BEV特征中获取时间信息,计算成本很小
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-suAuJ4kb-1691371078674)(https://files.mdnice.com/user/27157/07eaf9f4-9fe7-4be2-bc15-194fb194029e.png)]
BEVFormer有6层编码器,除BEV查询、空间交叉注意和时间自注意三种定制设计外,每一层都遵循transformers的常规结构。
具体来说,BEV查询是网格状的可学习参数,旨在通过注意机制从多摄像头视图中查询BEV空间中的特征。
空间交叉注意和时间自注意是与BEV查询一起工作的注意层,用于根据BEV查询查找和聚合来自多相机图像的空间特征以及来自历史BEV的时间特征。
在推理过程中,在时间戳 t 处,我们将多摄像头图像馈送到主干网络(例如,ResNet-101),包括不同摄像机视角的特征 F t = { F t i } i = 1 N v i e w F_t = \{ F_t^i \}_{i=1}^{N_{view}} Ft={Fti}i=1Nview,其中 F t i F_t^i Fti 是第i个视图的特征, N v i e w N_{view} Nview 为摄像头视图的总数。
同时,我们保留了之前时间戳 t−1 的 BEV 特征 B t − 1 B_{t-1} Bt−1。在每个编码层,我们首先使用了BEV 查询Q 通过时间自注意查询BEV特征 B t − 1 B_{t-1} Bt−1 的时间信息。然后我们使用BEV查询Q通过空间交叉注意从多个摄像头特征 F t F_t Ft 中查询空间信息。
前馈网络后,编码器层输出细化后的BEV特征,作为下一编码器层的输入。经过6层编码器叠加,得到当前时间点t统一的BEV特征 B t B_t Bt。以BEV特征 B t B_t Bt 为输入,三维检测头和地图分割头对三维边界框、语义地图等感知结果进行预测
我们预定义了一组网格形状的可学习参数 Q ∈ R H × W × C Q∈ \mathbb{R}^{H×W×C} Q∈RH×W×C 作为 BEVFormer 的查询向量,其中 H, W 为 BEV 平面的空间形状。
其中,位于 Q 的 p = (x, y) 查询 Q p ∈ R 1 × C Qp ∈ \mathbb{R}^{1×C} Qp∈R1×C 负责 BEV 平面中对应的网格单元区域。 BEV 平面中的每个网格单元对应于真实世界的 s 米大小。
BEV 特征的中心默认对应自我车的位置。遵循常用实践 , 在将BEV 查询向量 Q 输入到 BEVFormer 之前添加可学习的位置嵌入到 BEV 查询向量 Q中。
由于多摄像机的3D感知的庞大输入比例,vanilla多头注意的计算代价还是很大的,所以,开发了基于可变形的空间交叉注意力方法,每一个BEV 查询 Q p Q_p Qp 在交叉的相机视野中仅仅和ROI区域进行交互,是一种高效资源层。可变形的注意力原始是为2D感知设计的,所以需要为3D场景进行一些适配。
如图,首先将 BEV 平面上的每个查询向量提升到一个柱状查询向量 ,从柱状查询向量中采样 N r e f N_{ref} Nref 3D 参考点,然后将这些点投影到二维视图中。对于一个BEV 查询,投影的二维点只能落在一些视图上,而其他视图不会被命中。
在这里,将命中视图称为 V h i t V_{hit} Vhit 之后,我们将这些二维点作为查询 Q p Q_p Qp 的参考点,并围绕这些参考点从命中视图 V h i t V_{hit} Vhit 中抽取特征。
最后,对采样特征进行加权和,作为空间交叉注意力的输出。空间交叉注力意 (SCA) 过程可以表述为
S C A ( Q p , F t ) = 1 ∣ v h i t ∣ ∑ i ∈ v h i t ∑ j = 1 N r e f D e f o r m A t t n ( Q p , P ( p , i , j ) , F t i ) SCA(Q_p, F_t) = \frac{1}{\mid {v_{hit} \mid}}\sum_{i \in v_{hit}} \sum_{j=1}^{N_{ref}}DeformAttn(Q_p,P(p,i,j),F_t^i) SCA(Qp,Ft)=∣vhit∣1i∈vhit∑j=1∑NrefDeformAttn(Qp,P(p,i,j),Fti)
其中 i 索引摄像机视图, j 索引参考点, N r e f N_{ref} Nref 是每次 BEV 查询的总参考点。 F t i F_t^i Fti 是第 i个摄像头视图的特征。对于每一个 BEV 查向量询 Q p Q_p Qp , 我们使用一个投影函数 P(p, i, j)来得到第 i 个视图图像上的第 j 个参考点。
在没有时间线索的情况下,从静态图像中推断移动物体的速度或检测高度遮挡的物体是具有挑战性的。为了解决这个问题,设计了时间自注意力,它可以通过结合历史BEV 特征来表示当前环境。
BEVFormer从之前的BEV特征中提取时间信息,而不是从多个叠加的BEV特征中提取时间信息,因此需要较少的计算成本和较少的干扰信息
给定当前时间戳 t 的 BEV 查询向量 Q 和保存在时间戳 t−1 的历史 BEV 特征Bt−1 我们首先根据自我运动将 B t − 1 B_{t−1} Bt−1 与 Q 对齐,使同一网格上的特征对应于相同的现实
位置。
在这里,我们表示对齐的历史 BEV 特征 B t − 1 B_{t−1} Bt−1 为 B t − 1 ′ B_{t−1}^{'} Bt−1′。然而,从时间 t − 1 到 t,可移动的物体在现实世界中以各种偏移量移动如何在不同时间的 BEV 特征之间建立相同对象的精确关联是一个难题。
因此,我们通过时间自注意力 (temporal self-attention,TSA) 层对特征之间的这种时间联系进行建模。
deformable attention 模块已经在MMCV上进行了实现,可参考github上代码:
主要变量有5个:
本文的两点在于使用局部注意力机制代替了全局注意力机制,只对几个采样点进行采样,提高计算效率
多尺度可变形注意力模块与 Transformer 中常见的先生成 Attention Map,再计算加权和的方式不同;
常规而言 Attention Map = Query 和 Key 做内积运算,将 Attention Map 再和 Value 做加权;
但是由于这种方式计算量开销会比较大,所以在 Deformable DETR 中用局部注意力机制代替了全局注意力机制,只对几个采样点进行采样,而采样点的位置相对于参考点的偏移量和每个采样点在加权时的比重均是靠 Query 经过 Linear 层学习得到的。
对于3D物体检测,我们基于2D检测器Deformable DETR设计了端到端的3D检测头。改进包括使用单尺度BEV特征Bt作为解码器的输入,预测3D边界盒和速度而不是2D边界盒,并且仅使用L1损失来监督3D边界盒回归。使用检测头,我们的模型可以端到端预测3D边界盒和速度,而无需NMS后处理
对于地图分割,我们基于二维分割方法Panoptic SegFormer设计了地图分割头。由于基于BEV的地图分割与常见的语义分割基本相同,我们使用[22]的掩码解码器和类固定查询来针对每个语义类别,包括汽车、车辆、道路(可行驶区域)和车道
训练阶段
对于时间戳t的每个样本,我们从过去2秒的连续序列中随机抽取另外3个样本,这种随机抽样策略可以增强自我运动的多样性。我们将这四个样本的时间戳分别表示为t-3、t-2、t-1 和t。对于前三个时间戳的样本,它们负责循环生成BEV特征 { B t − 3 , B t − 2 , B t − 1 } \{ B_{t-3},B_{t-2},B_{t-1} \} {Bt−3,Bt−2,Bt−1},这个阶段不需要梯度。对于时间戳t-3的第一个样本,不存在之前的BEV特征,时间自注意退化为自注意。
在时刻t,模型同时基于多摄像头输入和之前的BEV特征 B t − 1 B_{t-1} Bt−1 生成BEV特征 B t B_t Bt,使得Bt包含了跨越四个样本的时空线索。
最后,我们将BEV特征 B t B_t Bt 输入到检测和分割头中,并计算相应的损失函数
推理阶段
在推理阶段,我们按时间顺序评估视频序列的每一帧。将前一个时间戳的BEV特征保存下来并用于下一个时间戳,这种在线推理策略时间效率高,符合实际应用。虽然我们利用了时间信息,但我们的推理速度仍然与其他方法相当
万字长文理解纯视觉感知算法 —— BEVFormer
自动驾驶BEV感知有哪些让人眼前一亮的新方法?