Advertisement

【论文解读】CoBEVT: Cooperative Bird‘s Eye View Semantic Segmentation with Sparse Transformers

阅读量:

CoBEVT

  • 摘要

  • 引言

  • 方法

    • Fused Axial Attention (FAX)
    • SinBEVT for Single-agent BEV Feature Computation
    • FuseBEVT for Multi-agent BEV Feature Fusion
  • 实验

  • 结论

摘要

鸟瞰图语义分割在自动驾驶的空间感知中发挥着关键作用。尽管最近的研究已在BEV地图理解方面取得了显著进展[1-3],但这些成果主要依赖于单智能体相机系统。现有方案有时难以应对复杂交通场景中的遮挡问题以及远处物体的检测挑战[4]。车对车(V2V)通信技术使自动驾驶汽车能够共享传感信息,在单智能体系统的基础上显著提升了感知性能与续航里程[5]。本文提出CoBEVT——首个通用多智能体多摄像机感知框架——通过协同生成BEV地图预测实现了感知能力的有效提升[6]。为实现基础Transformer架构中高效融合多视角与多智能体数据的相机特征[7] ,我们设计了融合轴向注意力模块(FAX)——该模块可捕捉视图间及智能体间的局部与全局空间交互关系[8] 。基于V2V感知数据集OPV2V的大规模实验表明[9] ,CoBEVT在协作BEV语义分割任务上表现最佳;此外该框架还可推广至单智能体多摄像机的BEV分割任务以及多智能体激光雷达系统的3D对象检测任务[10-11] ,均实现了实时推理下的最佳性能水平。

引言

相关研究[10, 11, 12, 13]已经验证了基于激光雷达传感器实现协作感知的有效性。然而,在基于相机感知系统的框架下探讨V2V协作的应用前景及其具体实现路径仍是一个待解的问题。

在这里插入图片描述

此外,在两个额外的任务中展示了框架在扩展潜力方面的应用前景。首先,在单智能体多视图BEV分割领域独立地评估了SinBEVT模型,并取得了令人满意的实验结果。其次,在不同传感器模式下验证了基于注意力机制的多智能体激光雷达融合方案的有效性。我们通过nuScenes数据集[14]和OPV2V[10]的数据集进行了实验验证,并展示了CoBEVT模型在这些场景中的优异性能,并成功将其推广至多个实际应用领域中的多个新任务范畴。我们的主要贡献包括:

我们开发了一个基于合作相机的BEV语义分割通用Transformer框架(CoBEVT)。该框架不仅展示了卓越的性能和灵活性,在多智能体摄像头下的单车多视图BEV语义分割以及基于多智能体内激光雷达的3D检测任务中均取得了最前沿的结果。
我们开发了一种新型稀疏注意力机制模块称为融合轴(FAX)注意力模型。该模型能够有效地捕获代理或相机间的局部与全局关联关系,并分别构建了自我关注(FAX-SA)和交叉关注(FAX-CA)两种版本以适应不同应用场景。
我们创建了一个涵盖合作BEV地图分割任务的大规模基准研究项目,并收集了八个强基线模型作为参考指标。经过大量实验测试以及消融分析表明该模型具有出色的表现与效率优势,并已公开分享了所有相关代码、基线模型以及预先训练权重。

方法

Fused Axial Attention (FAX)

BEV特征的集成需要在所有智能体的空间位置上完成局部与全局的交互过程。

  • 首先,在同一个物体上时有重叠覆盖的情况存在;这使得在分析相邻自动驾驶汽车时必须考虑其遮挡层次的问题。
    通过更加细致地观察局部细节来建立同一物体各像素之间的对应关系。
    如图2(a)所示,在这个具体的场景下,
    自我车辆应当通过整合周边不同自动驾驶汽车在同一位置处的BEV特征信息来提升估计精度。
在这里插入图片描述

为了有效提取这种局部与全局特性,在本研究中我们提出了融合轴向注意力(FAX)这一稀疏3D注意力模型。该模型借鉴了上述文献中的相关研究,并同时实现了基于局部窗口的关注机制以及稀疏全局交互。Theoretically, let X ∈ ℝ^{N×H×W×C} denote the stacked BEV features generated by N agents with spatial dimensions H × W.

  • 在局部分支中, 通过将特征图分割为3D非重叠窗口的方式, 每个窗口大小设定为N×P×P. 接着, 将分割后的形状张量(H/P×W/P, N×P²,C)输入至自注意机制中, 这种操作主要针对局部3D窗口内的信息融合[28]。
    • 类似地, 在全局分支中, 我们采用了均匀分布的3D网格N×G×G来划分特征X. 这种划分方式下, 张量的空间维度被设定为(N,G²,H/G,W/G,C). 在注意力机制的作用下, 我们特别关注第一轴上的稀疏采样令牌表示[44,45]. 如图2所示, 使用红色与蓝色方框分别标识了本地与全局分支中的关注区域

结合了该领域基于Transformer架构的经典设计[26,27,28]。如图3b所示,在此基础之上我们构建了本研究中提出的FAX自注意机制。该机制通过融合层归一化(LN)[46]、多层感知机(mlp)[26]以及跳跃连接等组件特性,在保持计算效率的同时实现了对长距离空间关系的捕捉。相较于完全自注意力模型O((N HW)²C),该方法的计算复杂度显著降低:我们的3D FAX自注意(FAX-sa)块可表示为

在这里插入图片描述

其中,z' 和 z'' 代表 block 中的 3D-Latent-GLOBAL-Attention 模块与 MLP 模块的输出特征向量. 3D-Latent-Attention 和 3D-GLOBAL-Attention 分别代表上述所述的三维局部与全局注意力.

在这里插入图片描述

SinBEVT for Single-agent BEV Feature Computation

我们针对第i个智能体(Ik, Ki k, Ri k, ti k)及其配备的m个单眼摄像机视图展开研究,在其中m=1时(即单眼视图情况),输入图像Ik属于Rh×w×3的空间。对于每个摄像机而言,其固有参数矩阵Kk为3×3维度;旋转参数矩阵Rk同样为3×3维度;平移向量tk则位于三维空间中。每个智能体在执行跨智能体协作任务之前必须计算一个具有高度H、宽度W和通道数C的BEV特征表示Fi。这种特征表示不仅可以作为解码器中的输入用于单代理预测任务,还可以将其共享到自身车辆上的多代理特征融合系统中以实现协同工作。然而,在实际应用中我们发现:尽管CVT算法能够高效运行但其采用的低分辨率BEV查询策略在处理小尺寸目标时表现出明显的性能瓶颈。为此我们提出了一种改进型算法CoBEVT:通过学习一个高分辨率的BEV嵌入模型并采用层次化特征提取机制实现了对低分辨率查询结果的有效补充与提升。为了进一步提高系统性能我们对FAX- sa模块进行了优化并扩展构建了支持多视图信息融合的新模块FAX交叉关注(FAX- ca)

x获取bev嵌入
cross-view是关键

复制代码
    x = self.bev_embedding.get_prior()              # d H W
    x = repeat(x, '... -> b ...', b=b * l)  # b*l d H W
    
       for i, (cross_view, feature, layer) in \
               enumerate(zip(self.cross_views, features, self.layers)):
           feature = rearrange(feature, 'b l n ... -> (b l) n ...', b=b, n=n)
    
           x = cross_view(i, x, self.bev_embedding, feature, I_inv, E_inv)
           x = layer(x)
           if i < len(features)-1:
               down_sample_block = self.downsample_layers[i]
               x = down_sample_block(x)
    
       x = self.self_attn(x)
       x = rearrange(x, '(b l) ... -> b l ...', b=b, l=l)

交叉视图(cross_view)即为CrossViewSwapAttention架构,在该注意力机制模块中首先采用了局部到局部级别的交叉注意力机制(local-to-local cross-attention),随后又结合了局部到全局级别的交叉注意力机制(local-to-global cross-attention)。具体实现时均采用的是CrossWinAttention的方式进行运算。

复制代码
    # Dot product attention along cameras
    dot = self.scale * torch.einsum('b l Q d, b l K d -> b l Q K', q, k)  # b (X Y) (n W1 W2) (n w1 w2)
复制代码
    # local-to-local cross-attention
    query = rearrange(query, 'b n d (x w1) (y w2) -> b n x y w1 w2 d',
                  w1=self.q_win_size[0], w2=self.q_win_size[1])  # window partition
    key = rearrange(key, 'b n d (x w1) (y w2) -> b n x y w1 w2 d',
                  w1=self.feat_win_size[0], w2=self.feat_win_size[1])  # window partition
    val = rearrange(val, 'b n d (x w1) (y w2) -> b n x y w1 w2 d',
                  w1=self.feat_win_size[0], w2=self.feat_win_size[1])  # window partition
    query = rearrange(self.cross_win_attend_1(query, key, val,
                                        skip=rearrange(x,
                                                    'b d (x w1) (y w2) -> b x y w1 w2 d',
                                                     w1=self.q_win_size[0], w2=self.q_win_size[1]) if self.skip else None),
               'b x y w1 w2 d  -> b (x w1) (y w2) d')    # reverse window to feature
    
    query = query + self.mlp_1(self.prenorm_1(query))
    
    x_skip = query
    query = repeat(query, 'b x y d -> b n x y d', n=n)              # b n x y d
    
    # local-to-global cross-attention
    query = rearrange(query, 'b n (x w1) (y w2) d -> b n x y w1 w2 d',
                  w1=self.q_win_size[0], w2=self.q_win_size[1])  # window partition
    key = rearrange(key, 'b n x y w1 w2 d -> b n (x w1) (y w2) d')  # reverse window to feature
    key = rearrange(key, 'b n (w1 x) (w2 y) d -> b n x y w1 w2 d',
                w1=self.feat_win_size[0], w2=self.feat_win_size[1])  # grid partition
    val = rearrange(val, 'b n x y w1 w2 d -> b n (x w1) (y w2) d')  # reverse window to feature
    val = rearrange(val, 'b n (w1 x) (w2 y) d -> b n x y w1 w2 d',
                w1=self.feat_win_size[0], w2=self.feat_win_size[1])  # grid partition
    query = rearrange(self.cross_win_attend_2(query,
                                          key,
                                          val,
                                          skip=rearrange(x_skip,
                                                    'b (x w1) (y w2) d -> b x y w1 w2 d',
                                                    w1=self.q_win_size[0],
                                                    w2=self.q_win_size[1])
                                          if self.skip else None),
               'b x y w1 w2 d  -> b (x w1) (y w2) d')  # reverse grid to feature

在交叉注意力机制之前

FuseBEVT for Multi-agent BEV Feature Fusion

特性压缩与共享机制对于提升V2V应用性能至关重要。传输数据量对V2V应用至关重要,因为高带宽需求可能导致通信延迟问题。因此,在广播前有必要对BEV特征进行压缩处理。参考[11,12]的研究方法,在本研究中我们采用了基于47号文献的一个简单而高效的1×1卷积自编码器来进行特征压缩与解压操作。一旦接收方获取带有中间BEV表示的消息并完成解码后,并发车辆会利用一个可微空间变换算子Γξ(可表示为:Hi=Γξ(Fi)∈RH×W×C),将接收到的特征信息转换至 ego 车辆自身的坐标系中

特征融合模块的设计采用了3D视觉Transformer模型FuseBEVT(见图3a)。该模块能够有效地融合多个agent接收到的BEV特征信息,并通过多层FAX-SA块实现高效编码过程。值得注意的是,在FAX注意机制下实现了线性复杂度(参见第3.1节)。每个FAX-SA块都通过以下公式(式-)进行全局与局部三维BEV特征转换:... 如图2(a)所示,在这种情况下系统能够聚焦于各代理所估计区域(以红色框圈定)并获得最终聚合表示结果。此外,在这些估计区域之外还保留了稀疏采样的令牌(以蓝色框圈定),这些令牌可以通过全局交互机制获取地图语义信息如道路、交通等上下文信息

译码器模块位于整个网络体系的最后一层,在经过上述融合与压缩操作后,系统会对聚合后的BEV表示进行解码处理,并通过一系列轻量级卷积层与双线性上采样操作实现最终分割输出结果

实验

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

结论

在本文中

全部评论 (0)

还没有任何评论哟~