BEVFormer | ECCV2022

BEVFormer | ECCV2022_第1张图片

转载自: 万字长文理解纯视觉感知算法 —— BEVFormer - 知乎

BEVFormer 的 Pipeline

  • Backbone + Neck (ResNet-101-DCN + FPN)提取环视图像的多尺度特征
  • 论文提出的 Encoder 模块(包括 Temporal Self-Attention 模块和 Spatial Cross-Attention 模块)完成环视图像特征向 BEV 特征的建模
  • 类似 Deformable DETR 的 Decoder 模块完成 3D 目标检测的分类和定位任务;
  • 正负样本的定义(采用 Transformer 中常用的匈牙利匹配算法,Focal Loss + L1 Loss 的总损失和最小);
  • 损失的计算(Focal Loss 分类损失 + L1 Loss 回归损失);
  • 反向传播,更新网络模型参数;

接下来文章作者将从输入数据格式,网络特征提取,BEV特征产生,BEV 特征解码完成 3D 框预测、正负样本定义、损失计算这六个方面完成 BEVFormer 的解析;

输入数据格式

对于 BEVFormer 网络模型而言,输入的数据是一个 6 维的张量:(bs,queue,cam,C,H,W);

  • bs:batch size 大小;
  • queue:连续帧的个数;由于 BEVFormer 采用了时序信息的思想(我认为加入时序信息后,可以一定程度上缓解遮挡问题),所以输入到网络模型中的数据要包含除当前帧之外,之前几帧的数据;
  • cam:每帧中包含的图像数量,对于nuScenes数据集而言,由于一辆车带有六个环视相机传感器,可以实现 360° 全场景的覆盖,所以一帧会包含六个环视相机拍摄到的六张环视图片;
  • C,H,W:图片的通道数,图片的高度,图片的宽度;

网络特征提取

网络特征提取的目的是将每一帧对应的六张环视图像的特征提取出来,便于后续转换到 BEV 特征空间,生成 BEV 特征,在特征提取过程中,张量流的变换情况如下:

BEV 特征产生

BEV 特征的产生用到的就是论文中最核心的部分 —— Encoder 模块,对应的网络结构为图中(a)部分:

Encoder 模块包含两个子模块 Temporal Self-Attention模块 以及 Spatial Cross-Attention模块

首先介绍下在Temporal Self-Attention 模块和 Spatial Cross-Attention 模块共用的一个组件 —— 多尺度的可变形注意力模块;这个模块是将 Transformer 的全局注意力变为局部注意力的一个非常关键的组件,用于减少训练时间,提高 Transformer 的收敛速度;(该思想最早出现在 Deformable DETR 中)

在代码中,多尺度可变形注意力模块是以 CUDA 扩展的形式进行封装的,实现逻辑也是在 CUDA 代码中;

基于文章作者所调试的代码以及自己的思考,简单概括下多尺度的可变形注意力模块对数据处理的Pipeline,概括如下:

BEVFormer | ECCV2022_第2张图片

        通过流程图可知,输入到 Deformable Attention Module CUDA 扩展的变量主要有五个,分别是采样位置(Sample Location)、注意力权重(Attention Weights)、映射后的 Value 特征、多尺度特征每层特征起始索引位置、多尺度特征图的空间大小(便于将采样位置由归一化的值变成绝对位置);

        多尺度可变形注意力模块与 Transformer 中常见的先生成 Attention Map,再计算加权和的方式不同;常规而言 Attention Map = Query 和 Key 做内积运算,将 Attention Map 再和 Value 做加权;但是由于这种方式计算量开销会比较大,所以在 Deformable DETR 中用局部注意力机制代替了全局注意力机制,只对几个采样点进行采样,而采样点的位置相对于参考点的偏移量和每个采样点在加权时的比重均是靠 Query 经过 Linear 层学习得到的

Temporal Self-Attention 模块

  • 功能

通过引入时序信息(插图中的 History BEV)与当前时刻的 BEV Query 进行融合,提高 BEV Query 的建模能力;

Spatial Cross-Attention 模块

  • 功能

利用 Temporal Self-Attention 模块输出的 bev_query, 对主干网络和 Neck 网络提取到的多尺度环视图像特征进行查询,生成 BEV 空间下的BEV Embedding特征;

Decoder模块

上述产生 BEV 特征的过程是用了当前输入到网络模型中除当前帧外,之前所有帧的特征去迭代修正去获得prev_bev的特征;所以在利用 Decoder 模块进行解码之前,需要对当前时刻环视的 6 张图片同样利用 Backbone + Neck 提取多尺度的特征,然后利用上述的 Temporal Self-Attention 模块和 Spatial Cross-Attention 模块的逻辑生成当前时刻的bev_embedding,然后将这部分特征送入到 Decoder 中进行 3D 目标检测。

正负样本的定义

正负样本的定义用到的就是匈牙利匹配算法,分类损失和类似回归损失的总损失和最小;

损失的计算

损失的计算就是分类损失以及 L1 Loss,这里的 L1 Loss 就是对真值框和预测框的10个维度计算 L1 Loss了,计算出来损失,反向传播更新模型的参数。

你可能感兴趣的:(目标跟踪,3d,计算机视觉,深度学习)