BEVFormer笔记

BEVFormer

分为两个模块,一个是基于空间时序的transformer怎么做,一个是如何生成BEV的表征。

什么是BEV表征?

1、是一个重构空间。什么是重构空间?重构空间意味着这个空间它并不是真实存在的,我们是不能通过传感器去获取到的,只能通过一些额外的手段去构造这些。

2、是一个多传感器融合的空间。常见的传感器包括Lidar、Radar、多视角相机等等。

3、是固定视角(俯视视角)的空间。重构也好,融合也好,需要对方向做一个界定。

什么是Transformer?

其实就是视觉注意力,突出强调视觉重要部分。

BEVSAN里面使用的注意力机制是SE模块,SE的注意力机制的作用在通道上的,图中看到的不同颜色的权重其实是表示不同注意力的权重,通过对通道数值的重新加权,网络会自适应的关注或忽略某些部分的特征,假定颜色比较深的区域是权重比较大的地方,通过加权后,权重比较大的地方的特征会自适应的得到加强。

BEVFormer主体结构

输入:多视角的图像

输出:给到分割或检测的头,用来做输出

图像输入到backbone后得到多视角的特征,这个特征和历史BEV数据和query一起输入到灰色框框里面,得到当前BEV特征,然后利用这个俯视图特征可以做很多事,无论是检测还是分割、轨迹预测等等。

Backbone网络:原始图像→卷积图像特征

BEVFormer的核心内容:如何把得到的多视角特征图生成当前需要的BEV特征

输入包含三个模块:多视角特征图(空间层面的特征)、历史BEV特征(时序特征)、BEV query。

空间特征和时序特征怎么做融合?

BEV query起到了两者间桥接的作用,整个former(注意力机制)的基本思想是得到需要强调的部分,这个部分包括通道的、时序的、空间的。

Temporal Attention时序注意力:

1、如何引入前一时刻特征?也就是前一帧和当前帧的关联,用历史BEV对当前的query做一个加强。

2、考虑不同帧中车的偏移量不同,如何选择需要的呢?如果选择一个固定的attention机制去建模一个不确定性的东西是不合理的,作者引入了可形变注意力。

通常的注意力是选择目标点相邻位置的点的特征再加上一个权重去计算相关性

 

可形变注意力机制会计算一个offset,这个offset表示的是要计算的点的特征和当前点之间的偏移量,也就是一个距离。那么现在计算X处的特征,那么采用的特征就是通过预测得出的偏移量,可能离目标点很远(圆圈处),利用可适应的、可学习的offset偏移对特征做更好的提取预测,网络可以自行预测偏移量,预测出哪个点对当前(x, y)点是有增益的,对当前点做一个加权。如上上图中左边褐色的点和深蓝色的点。

把历史的特征加权完后,BEVFormer会同时在query的特征图上做第二次的self-attention(如上上图右边的浅蓝色点和绿色点),这是考虑到query上对当前点有增益的位置。

综上,作者认为来自于历史BEV的和BEV query自身的特征加权可以很好的查询先验,BEV query本身是个查询向量,有了历史信息的引导后,BEV query查询先验会更好,也就是对当前应该生成一个怎样的BEV应该是有一个初步预期的,后续再利用当前提取到的空间特征,和已经有很强的先验信息的BEV query,就能生成更好的BEV feature。

Spatial Attention空间注意力:

1、如何选择需要的特征呢?

利用上面得到的BEV query对multi-camera的feature进行特征查询,将(x, y)先映射到这个视角上相对应的位置上,通过去找这个位置上相邻点(4个)的特征进行融合,生成当前视角下需要被融合的特征,后面把多视角全都查询完后,就会生成当前(x’, y’)位置上通过multi-camera feature融合好的特征。

2、如何建模高度信息?

不同目标对象高度会有显著差异,BEV损失了高度维度的特征,BEVFormer设置了一系列anchor用来匹配不同高度的目标。

这两个问题这个老师没怎么讲清楚,我又找了b站唐宇迪讲的,下面基本上或多或少都有助于理解并循序渐进的解决这两个问题。

特征融合过程中可能遇到的问题:

1、自身运动补偿:车在运动,不同时刻之间的特征要对齐(车在图像像素上的位置发生变化,不同时刻车的每个点要一一对应,也就是要做X和Y方向上的偏移)。

2、时间差异:不同传感器可能具有时间差,要对齐这部分信息

3、空间差异:最后肯定都要映射到同一坐标系,空间位置特征也要对齐

对齐肯定不是手动完成的,这些都交给模型去学习。

重构的特征空间相当于一个网格,网格的间隔自己定义,对应精度也会有差异,里面每个点都是一个特征向量。

BEVFormer提供了一个基本框架:

1、一个核心:纯视觉解决方案(多个视角摄像头进行特征融合)

2、两个策略:将Attention应用于时间于空间维度(其实就是对齐特征)

3、三个节约:Attention计算简化,特征映射简化,粗粒度特征空间

基本奠定了框架结构:时间+空间+DeformableAttention(可变形注意力机制)

输入数据格式:

输入张量 bs(batchsize)、queue(序列为3,t-2/t-1/t)、cam(6个相机)、C(RGB 3个通道)、H(高)、W(宽)

queue表示连续帧的个数,主要解决遮挡问题;cam表示每帧中包含的图像数量,nuScenes数据集中有6个;C、H、W分别表示图片的通道数,图片的高度,图片的宽度。

时间注意力模块:

1、类似RNN的方式来利用前面一些时刻的特征

2、在时间上,不同帧中的车和周围物体都会有偏移,如何从历史中选需要的呢?依旧是DeformableAttention可变形注意力机制。

 

上面左边这个图就表示计算与绿色点相关的4个点的相关性,绿色点分别经过两个全连接层,得到4个偏移点的坐标x、y,得到4个点的权重,传统的注意力机制会计算整个图像其他点与绿色点的相关性,对于为什么是4个点,论文中有做相关实验,计算4个点的效果反而比全部计算效果好,可能是真正与这个点相关的并不是特别多,如果全部计算的话可能会学到一些不相关的特征,

上面右边这个图的左边就是前一时刻的特征空间,当前时刻的一个点(x, y)在Bt-1中找到前一时刻可能偏移的点。

空间注意力模块

要融合多个视角的特征相当于query会遍历所有视角找有用的信息,3D空间的点要投影到2D空间,但是由于遮挡或者相机内外参不准,那么投影点就是一个参考而已,在这个基础上附近再进行特征采样,其实依旧是DeformableAttention的思想(Local>point>global)。

对于高度,这里一个点对应4个query(图中红色点),这4个点分别去遍历所有视角的特征,最后再做一个整合(可能这一步是没必要的,只需要1个query就好),类似于多头注意力机制,非要说在不同高度做的聚合也可以。

总的来说,可变形注意力机制一是要学偏移,一是要学权重

空间注意力模块中query需要跟每个视角都计算吗?

如果特征空间是200*200,那么就有4W的query,4W个query和6个视角特征算Attention,这个有点慢了,通过映射已经得到投影关系,针对每一个视角只选择其中一部分query,这样就相当于能把4W个的计算量大约降低成类似6000个(作者原话)。

BEVFormer损失函数

损失函数是根据子任务去定义的

BEVFormer性能对比

Backbone:在nuScenes上的3D检测任务

Temporal attention:上图中BEVFormer-S就是去掉temporal attention后的网络,没有历史BEV先验信息的性能下降了很多。

Attention的影响:对比了3种,这里的global是对所有点进行加权,points是固定的指定的几个点,比如目标点相邻的4个点,local指的是可形变注意力机制

BEVFormerv2

增加了右半边上半部分的模块,如果没有这部分,图像backbone网络参数的监督信息来自于最后的结果BEV Predictions,最后检测结果的损失进行梯度回传来更新图像backbone的参数,v2的作者认为这种监督是不明显的监督,梯度要一步一步回传才能到达图像backbone的参数上,考虑把这种远端的监督变成近端的监督。直接利用backbone输出的multi-camera feature得到一个初步的预测结果,初步预测结果如果有监督信息的话可以直接用来更新backbone网络参数。

这一部分中的Perspective 3D Head是利用一些单目的3D检测框架的head可以在图像上预测3D box,虽然是粗糙的,但是它主要作用就是用来更新图像backbone网络参数。BEVFormerv2实际上是个两阶段图像检测器,把第一阶段的检测结果送入第二阶段中,与主网络中的query做一个混合,详细见图。

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值