论文地址:BEVFormer: Learning Bird’s-Eye-View Representation from Multi-Camera Images via Spatiotemporal Transformers
代码地址:https://github.com/zhiqi-li/BEVFormer
论文背景
三维视觉感知任务,包括基于多摄像机图像的三维检测和地图分割,是自动驾驶系统中必不可少的任务。
1.利用相机
尽管基于激光雷达的方法取得了显著的进展,但相机也有其不可忽略的优势。
相机优势:除了部署成本低之外,与基于激光雷达的同类设备相比,摄像机在探测远距离物体和识别基于视觉的道路元素(如红绿灯、停车线)方面具有理想的优势。
自动驾驶中对周围场景的视觉感知可以从多个摄像头给出的二维线索中预测出三维 bounding box 或 semantic maps。
基于单目框架和跨相机后处理。 这种框架的缺点是,它单独处理不同的视图,不能跨摄像机捕捉信息,导致性能和效率低下。
作为单目框架的替代,一个更统一的框架是从多摄像机图像中提取BEV。
但是 3D 目标检测任务需要很强的BEV特征来支持精确的三维 bounding box 预测,而从二维平面生成BEV是不适定的。
此外,基于深度信息的BEV框架生成BEV特征对深度值或深度分布的准确性非常敏感。因此,基于BEV的方法的检测性能受到复合误差的影响,不准确的BEV特征会严重损害最终性能。
论文动机是设计一种不依赖深度信息,能够自适应学习BEV特征而不是严格依赖三维先验的BEV生成方法。 Transformer 通过注意力机制动态聚合有价值的特征,从概念上满足了需求。
2.利用时间信息
现有的最先进的多摄像机三维检测方法很少利用时间信息。自动驾驶面临的重大挑战是短时间内,场景中的物体变化迅速,因此简单地叠加交叉时间戳的BEV特征会带来额外的计算成本和干扰信息,这可能并不理想。
受递归神经网络的启发,论文利用BEV特征递归地传递过去到现在的时间信息,这与RNN模型的隐状态类似。
论文内容
论文提出了 BEVformer,能够有效地融合多视点摄像机的时空特征和历史Bev特征。
三个关键点:
1.通过注意力机制灵活融合时空特征的网格BEV查询;
2.空间交叉注意模块用于多摄像机图像空间特征的聚合;
3.时间自注意模块从历史特征中提取时间信息,有利于运动目标的速度估计和严重遮挡目标的检测,且计算开销可忽略不计。
利用 Bevformer 生成的统一特征,该模型可以与不同的任务特定头(如可变形 DETR 和 mask decoder)协作,进行端到端的 3D 目标检测和地图分割。
基于 transformer 的 2D 感知
DETR 使用一组对象查询直接由 cross-attention decoder 产生检测结果。 然而,DETR 的主要缺点是训练时间长。可变形DETR 通过提出的 deformable attention 来解决这个问题。与常规的全局注意不同的是,变形注意与局部感兴趣区域相互作用,仅对每个参考点附近的K个点进行采样,计算出注意结果,提高了训练效率,显著缩短了训练时间。deformable attention 机制: D e f o r m A t t n ( q , p , x ) = ∑ i = 1 N h e a d W i ∑ j = 1 N k e y A i j ⋅ W i ′ x ( p + Δ p i j ) (1) \tag 1DeformAttn(q,p,x)=\sum_{i=1}^{N_{head}}\mathcal W_i \sum_{j=1}^{N_{key}} \mathcal A_{ij} \cdot W_{i}^{'}x(p+\Delta p_{ij}) DeformAttn(q,p,x)=i=1∑NheadWij=1∑NkeyAij⋅Wi′x(p+Δpij)(1) 其中 q 、 p 、 x q、p、x q、p、x 分别表示查询、参考点和输入特征。 i i i 索引了注意头, N h e a d N_{head} Nhead 表示注意头的总数。 j j j 对采样的 key 进行索引, N k e y N_{key} Nkey 是每个头的总采样 key 数。 W i ∈ R C × ( C / H h e a d ) W_i \in \R^{C \times (C/H_{head})} Wi∈RC×(C/Hhead) 和 W i ′ × R ( C / H h e a d ) × C W_{i}^{'} \times \R^{(C/H_{head}) \times C} Wi′×R(C/Hhead)×C 是可学习权重,其中 C C C 是特征维度。 A i , j ∈ [ 0 , 1 ] A_{i,j}\in [0,1] Ai,j∈[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 \R^2 Δpij∈R2是对参考点 p 的预测偏移量。 x ( p + Δ p i j ) x(p+\Delta p_{ij}) x(p+Δpij) 表示位置 p + Δ p i j p + \Delta p_{ij} p+Δpij 上的特征。
论文中将 deformable attention 拓展到三维感知任务,以有效地聚合空间和时间信息。
基于相机的 3D 感知
对于 3D 目标检测任务,早期的方法类似于二维检测方法,通常是在二维包围盒的基础上预测三维 bounding box。
将多摄像机图像特征转换为鸟瞰(BEV)特征,可以为各种自动驾驶感知任务提供统一的周围环境表示。
一种简单的方法是通过逆透视映射(IPM)将透视图转换为BEV。
此外,Lift-Splat 基于深度分布生成BEV特征。 也有多种方法利用多层感知器学习从透视图到BEV的平移。
Pyva 提出了一种将前视单目图像转换为BEV的交叉视图 transformer,但由于全局注意力机制的计算代价,这种范式不适用于融合多摄像机特征。
除空间信息外,前人的工作有些还考虑了从多个时间戳中叠加BEV特征的时间信息。
叠加BEV特征约束了固定时间范围内的可用时间信息,带来了额外的计算开销。
论文文提出的时空 transformer 通过同时考虑空间和时间线索生成当前时间的BEV特征,而时间信息是通过 RNN 方法从之前的BEV特征中获取的,其计算开销很小。
BEVFormer
总体结构
Bevformer 有 6 个编码器层,每个编码器层都遵循传统的 transformers 结构,除了三个定制的设计,即 BEV 查询、空间交叉注意和时间自注意层。
具体地说,BEV查询是网格状的可学习参数,它旨在通过注意力机制从多摄像机视图查询BEV空间中的特征。 空间交叉注意和时间自注意是一种处理BEV查询的注意层,用于根据BEV查询从多摄像机图像中查找和聚集空间特征以及从历史BEV中查找和聚集时间特征。
在推断过程中,在时间戳 t t t 处,将多个摄像机图像馈送到 backbone,并获得不同摄像机视图的特征 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,其中fi t是第i个视图的特征, N v i e w N_{view} Nview是摄像机视图的总数。 同时,在之前的时间戳 t − 1 t-1 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 t t 处的统一BEV特征 B t B_t Bt。 以BEV特征 B t B_t Bt 为输入,通过三维检测头和地图分割头预测三维 bounding box 和语义地图等感知结果。
BEV 查询
预先定义了一组网格状的可学习参数 Q ∈ R H × W × C Q∈\R^{H×W×C} Q∈RH×W×C 作为 Bevformer 的查询, 式中 H , W H,W H,W 为 BEV 平面的空间形状。其中,位于 Q Q Q 的 p = ( x , y ) p = (x, y) p=(x,y) 处的查询 Q p ∈ R 1 × C Q_p∈\R^{1×C} Qp∈R1×C 负责 BEV 平面中相应的网格单元区域。BEV 平面上的每个网格单元对应于真实世界中 s s s 米的大小。BEV特征中心默认对应 ego 车的位置。在BEV查询 Q 输入到 BEVFormer 之前添加了可学习的 positional embedding。
空间 Corss-Attention
首先将 BEV 平面上的每个查询提升为 pillar-like query,从柱子上取样 N r e f N_{ref} Nref 3D参考点,然后将这些点投影到 2D 视图上。对于一个BEV查询,投影的2D点只能落在某些视图上,其他视图不会被 hit。 在这里,将 hit 视图称为 V h i t \mathcal V_{hit} Vhit。之后,将这些2D点作为查询 Q p Q_p Qp 的参考点,并围绕这些参考点对命中视图 V h i t \mathcal V_{hit} Vhit 的特征进行采样。 最后,对采样的特征进行加权和,作为空间 Corss-Attention 的输出。 空间 Corss-Attention (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 ) , (2) \tag 2 SCA(Q_p,F_t)=\frac{1}{|\mathcal V_{hit}|}\sum_{i \in \mathcal V_{hit}} \sum_{j=1}^{N_{ref}}DeformAttn(Q_p,\mathcal P(p,i,j),F_t^i), SCA(Qp,Ft)=∣Vhit∣1i∈Vhit∑j=1∑NrefDeformAttn(Qp,P(p,i,j),Fti),(2)其中, i i i 索引相机视图, j j j 索引参考点, N r e f N_{ref} Nref 是每个 BEV 查询的总参考点。 F t i F_t^i Fti 是第 i i i 个相机视图的特性。对于每个BEV查询 Q p Q_p Qp,我们使用投影函数 P ( p , i , j ) \mathcal P(p, i, j) P(p,i,j) 来获得第 i i i 个视图图像上的第 j j j 个参考点。
从投影函数 P \mathcal P P 中获取视图图像上的参考点,首先计算真实世界的位置 ( x ′ , y ′ ) (x^{'},y^{'}) (x′,y′),对应于位于 Q Q Q 的 p = ( x , y ) p =(x, y) p=(x,y) 处的查询 Q p Q_p Qp: x ′ = ( x − W 2 ) × s ; y ′ = ( y − H 2 ) × s , (3) \tag 3 x^{'} = (x- \frac{W}{2}) \times s; \space y^{'}=(y-\frac{H}{2}) \times s, x′=(x−2W)×s; y′=(y−2H)×s,(3) H H H 和 W W W 是 BEV 查询的空间形状, s s s 是BEV网格的分辨率大小, ( x ′ , y ′ ) (x^{'},y^{'}) (x′,y′) 是以 ego 车的位置为原点的坐标。
在三维空间中,位于 ( x ′ , y ′ ) (x^{'},y^{'}) (x′,y′) 处的目标将出现在z轴的高度 z ′ z^{'} z′ 上。 因此,预先定义了一组锚点高度 { z j ′ } N j = 1 N r e f \{ z_j^{'}\} N_{j=1}^{N_{ref}} {zj′}Nj=1Nref,以确保我们能够捕捉到出现在不同高度的 clues. 这样,对于每个查询 Q p Q_p Qp,我们得到一个3D参考点柱 ( x ′ , y ′ , z j ′ ) N j = 1 N r e f (x^{'},y^{'}, z_j^{'}) N_{j=1}^{N_{ref}} (x′,y′,zj′)Nj=1Nref。最后,通过摄像机的投影矩阵,将三维参考点投影到不同的图像视图上 : P ( p , i , j ) = ( x i j , y i j ) w h e r e z i j ⋅ [ x i j y i j 1 ] T = T i ⋅ [ x ′ y ′ z ′ 1 ] T (4) \tag4\mathcal P(p,i,j) = (x_{ij},y_{ij}) \\ where \space z_{ij}\cdot [x_{ij} \space y_{ij} \space 1]^T=T_i \cdot[x^{'}\space y^{'} \space z^{'} \space 1]^T P(p,i,j)=(xij,yij)where zij⋅[xij yij 1]T=Ti⋅[x′ y′ z′ 1]T(4) P ( p , i , j ) \mathcal P(p,i,j) P(p,i,j)是从第 j j j 个3D点 ( x ′ , y ′ , z j ′ ) (x^{'},y^{'}, z_j^{'}) (x′,y′,zj′) 投影的第 i i i 个视图上的 2D 点。 T I ∈ R 3 × 4 T_I \in \R^{3 \times 4} TI∈R3×4 是第 i i i 个摄像机的已知投影矩阵.
时间 Self-Attention
除了空间信息外,时间信息也是视觉系统理解周围环境的关键。
例如,在没有时间 clues 的情况下,从静态图像中推断运动物体的速度或检测高度遮挡的物体是很难的。 为了解决这个问题,论文设计了时间 Self-Attention,它可以通过结合历史BEV特征来表示当前环境。
给定当前时间戳 t t t 处的 BEV 查询 Q Q Q 和时间戳 t − 1 t-1 t−1 处保留的历史 BEV 特征 B t − 1 B_{t-1} Bt−1,首先根据 ego-motion 将 B t − 1 B_{t-1} Bt−1 与 Q Q Q 对齐,以使同一网格处的特征对应于同一真实世界的位置。 在这里,将对齐的历史BEV特征 B t − 1 B_{t-1} Bt−1表示为 B t − 1 ′ B_{t-1}^{'} Bt−1′。然而,从时间 t − 1 t-1 t−1 到 t t t,可移动目标在现实世界中以各种偏移量移动。
难点就是在在不同时间的BEV特征之间构造相同对象的精确关联,因此,论文通过时间 Self-Attention (TSA) 层对特征之间的这种时间联系进行建模,可以表示为: T S A ( Q p , { Q , B t − 1 ′ } ) = ∑ V ∈ { Q , B t − 1 ′ } D e f o r m A t t n ( Q p , p , V ) (5) \tag 5 TSA(Q_p,\{Q,B_{t-1}^{'}\})=\sum_{V \in \{ Q,B_{t-1}^{'} \}}DeformAttn(Q_p,p,V) TSA(Qp,{Q,Bt−1′})=V∈{Q,Bt−1′}∑DeformAttn(Qp,p,V)(5)其中, Q p Q_p Qp 表示位于 p = ( x , y ) p=(x,y) p=(x,y) 的 BEV 查询。 另外,不同于 vanilla deformable attention, 通过 Q Q Q 和 B t − 1 ′ B_{t-1}^{'} Bt−1′的串联来预测时间 Self-Attention 的偏移量 Δ p Δp Δp。 需要注意的是,对于每个序列的第一个样本,时间Self-Attention 将退化为没有时间信息的 Self-Attention ,其中用重复的BEV查询 { Q , Q } \{Q,Q\} {Q,Q} 代替BEV特征 { Q , B t − 1 ′ } \{Q,B_{t-1}^{'}\} {Q,Bt−1′}。
与简单地将BEV叠加相比,时间 Self-Attention 可以更有效地模拟长时间依赖。 Bevformer 从先前的BEV特征中提取时间信息,而不是多个叠加的 BEV 特征,因此所需的计算量和所受的干扰信息较少。
BEV特征的应用
由于BEV特征 B t ∈ R H × W × C Bt \in R^{H×W×C} Bt∈RH×W×C 是一个通用的二维特征图,可以用于各种自动驾驶感知任务,因此可以在二维感知方法的基础上进行小的修改,开发出 3D 目标检测和地图分割任务头。
总结
论文提出了Bevformer来从多点输入生成鸟瞰特征。 Bevformer可以有效地聚合空间和时间信息,生成强大的BEV特征,同时支持三维检测和地图分割任务。利用多点输入的时空信息可以显著提高视觉感知模型的性能。
但是,基于摄像机的方法在效果和效率上与基于激光雷达的方法还有很大的差距, 从二维信息准确地推断三维位置仍然是基于摄像机的方法的一个长期挑战。