分享

纯视觉至上!BEVFormer v2解读来了(清华&商汤)

 InfoRich 2022-12-20 发布于江苏

2022年11月BEVFormer v2来了,带着nuScenes Camera-only Detection Task SOTA来和大家见面了!

Image
表1. 截止到2022年12月17号,BEVFormer v2及其Opt版本,在nuScenes Camera-only Detection Task位列前二,NDS指标大幅领先第三。

传送门0: BEVFormer v2原论文《BEVFormer v2: Adapting Modern Image Backbones to Bird's-Eye-View Recognition via Perspective Supervision》

传送门1:对BEVFormer 第一版感兴趣的小伙伴,想要快速了解,可以翻阅本篇解读作者的另外一篇BEVFormer笔记:《一文读懂BEVFormer论文》

传送门2:另外,由于BEV方法的核心框架原理或要解决的核心问题大都来自自底向上类的BEV方法,如果想要系统性了解BEV方法,强烈推荐先从自底向上方法了解,可参考本篇解读作者的另外一篇笔记:《一文读懂BEV自底向上方法:LSS 和 BEVDepth》

本文先把BEVFormer最核心的一部分翻译或讲解出来,后续待BEVFormer代码工程发布后,再结合具体实现,在实施层面做更深入解读。

如有问题,欢迎大家评论留言。

1. Introduction

典型BEV模型的框架结构是:先构建一个image backbone生成透视特征图,后面连接一个把透视特征图lift成BEV features的视角转换模块,最后用BEV feature encoder和一些具体任务的head处理BEV features。已经有很多工作关注如何设计视角转换模块,以及结合仍在持续增长的更多下游任务应用此框架,但是关于BEV模型中image backbone的研究并不多。先进的image backbone作为一个最前沿且具有强需求的研究领域,把它们引入自动驾驶领是情理之中的事情。令人惊讶的是,目前BEV模型研究社区一直在使用VoVNet,并且沉浸在它的大规模深度预训练中无法自拔。本文作者关注解除在BEV识别中应用先进image backbone的束缚,为未来探索把更好的backbone应用于BEV识别打开大门。

如果不进行合适的预训练,而直接使用先进的image backbone,往往会让期望生成满意的结果面临失败。

例如,ImageNet预训练的ConvNext-XL主干性能,与DDAD-15M预训练的用于3D目标检测的Vovnet-99不相上下,尽管后者的参数量是前者的3.5倍。

目前,在BEV识别中使用先进imge backbone时,往往是苦苦挣扎却不得解(达不到利用深度预训练的效果),本文作者把问题归结成以下两方面:

  1. 图像与自动驾驶场景之间的domain gap。在一般2D 识别任务上预训练的backbone察觉3D场景的能力存在不足,尤其是在深度估计方面。
  2. BEV 检测器结构太复杂。以BEVFormer为例,3D B-boxes和类别的监督信号与image backbone之间隔着BEV视角特征encoder和object decoder,它们都是由多层transformer组成。一般2D image backbone适应自动驾驶任务的梯度流,会被这些transformer layers扭曲掉。

为了克服现代backbone(modern backbone,包含已研究发布和未来研究产出的先进image backbones)用于BEV识别遇到的困难,本文把透视监督引入到了BEVFormer,即从透视视角产生的监督信号直接作用于backbone。它指导backbone学习2D识别任务中丢失的3D知识,同时克服BEV检测器的复杂结构,极大地促进了模型优化。

具体来说就是,在Backbone之上建立了一个透视3D检测头,以image features作为输入,直接预测3D B-boxes和类别。透视头上计算的损失(后续称为透视损失)作为辅助损失,与原本来自BEV 检测头的loss相加。这两个检测头用它们的损失项联合训练。

另外,作者还提出把这两个检测头合并成一个two-stage BEV检测器。因为透视检测头自身用于目标检测本就是合格的,它可以在透视视角中生成高质量的候选目标,作为第一阶段的候选。然后把它们编码到object queries中,与原本BEVFormer中的可学习object queries一起形成混合object queries,然后送入第二阶段检测器(BEV 检测头),并生成最终预测结果。

作者做了大量的试验来证明本文所提出透视监督的有效性和必要性。透视损失促进了image backbone对BEV 识别的适应性,提高了检测性能和模型收敛速度。如果不用透视监督,即使训练更长时间,模型也达不到这么好的结果。因此,作者把先进的image backbone应用到了BEV model中,在nuScenes 测试集中取得了63.4%的NDS成绩。

本文的贡献总结如下:

  1. 作者指出了透视监督是让常见image backbone适应BEV 模型的关键点,并通过透视视角检测损失的方式明确地把透视监督加入到了BEV模型。
  2. 作者提出了一个two-stage BEV检测器,即BEVFormer v2,它包括透视3D检测head和BEV检测head,并且把前者的候选结果合并到了后者的object queries中。
  3. 作者把本文提出的方法与近期先进的image backbone结合,特别强调了这些方法的有效性,并且在nuScenes数据集中取得了大幅提高的SOTA结果。

2. Overall Architecture

Image
图1. BEV Former v2整体结构

image backbone生成Multi-view features。perspective 3D head做透视预测,然后把结果后处理&编码成object queries。BEV head是encoder-decoder结构:spatial encoder融合multi-view features生成BEV features;然后temporal encoder收集前序时刻BEV features的信息,融合成此时刻的BEV features;decoder用hybrid queries作为输入,并基于BEV features做最终的BEV预测。整个模型用两个检测头的两项loss进行训练:和。

如图1所示,BEVFormer v2主要包括5个模块:

  1. image backbone
  2. perspective 3D detection head
  3. spatial encoder
  4. 优化的temporal encoder
  5. BEV detection head

其中,相比于原始BEVFormer,除了spatial encoder之外,其它4个模块都被改变了。

需要特别说明:BEVFormer v2中的image backbone没有使用任何自动驾驶数据集或其它深度估计数据集进行预训练。

引入perspective 3D detection head是为了促进2D image backbone针对3D检测任务的适应性,同时为BEV detection head 生成候选目标。

为了融合更长时间的时序信息,采用新优化的temporal BEV encoder。

BEV detection head接收混合object queries集合作为输入。这里,混合object queries是合并了第一阶段(perspective 3D detection head)的proposals和原来的可学习object queries。

3. Perspective Supervision(透视监督)

首先分析常见BEV模型的问题来解释引入额外监督(透视监督)的必要性。

典型的BEV模型维护附着于BEV平面上的栅格形(grid-shaped)features,即BEV features,其中每个grid从相应的多视角图像2D像素的features上提取3D信息。基于BEV features预测目标物体的3D bounding box,这里把构建在BEV features之上的监督称为BEV监督。

Image
Figure2. 透视监督(perspective supervision)和BEV监督对比,透视检测器的监督信号相对于image feature比较稠密且直接,然而BEV监测器的监督信号过于稀疏和间接。

以BEVFormer为例,它使用encoder-decoder结构来生成并使用BEV features。Encoder为BEV平面上的每个栅格(grid cell)分配一个3D reference points集合(这些points位于BEV平面上的相同grid位置,垂直于BEV平面的高度不同),然后把它们投影到多视角图像上形成2D reference points。之后,在这些2D reference points周围采样图像特征,并利用空间交叉注意力机制(spatial cross-attention)把这些特征聚合到BEV features中。Decoder就是一个Deformable DETR head,用少量固定数目的object queries预测BEV 坐标系下的3D bounding boxes。Fig2展示了BEV监督的两个潜在问题,它们来自3D-to-2D视角转换和DETR head:

  • 不直接:对于image features,BEV监督是隐式的。loss直接作用于BEV feature,然而经过3D-to-2D投影和精细化采样(attentive sampling)后,loss就变成间接的了。
  • 太稀疏:BEV监督相对于image features而言是稀疏的。只有参与到object queries的少量BEV grids对loss有贡献。更进一步来说,只有这些少量grids所对应2D reference points周围的稀疏像素点才能获得监督信号。

BEV detection head要进行3D目标预测,非常依赖包含在图像feature中的3D信息,但是在如何编码这些信息方面并没有给backbone提供充分指导,导致提取到的3D信息不充足,这样训练时就出现了矛盾。

为什么以前的BEV方法并没有严重地受限于上述矛盾,它们甚至都没意识到这是个问题?

因为以前方法的Backbone尺度可能相对更小(不需要太直接、太稠密的监督信号就能达到很好的效果),或者它们的Backbone曾与单目Detection head一起被3D detection任务预训练过。

相比于BEV head,透视3D检测任务(如Fcos3D、DD3D等)在image features上进行逐像素的目标预测,为适应2D图像backbone提供了更丰富的监督信号。这里把构建在image features之上的监督称为透视监督。如图2所示,不同于BEV监督,透视检测的loss会直接且稠密地作用于image features上。作者猜测透视监督可以显性地指导backbone观察3D场景,并提取有效信息,例如物体的深度和朝向,这就克服了BEV监督的缺点,因此在BEV模型用现代图像backbone训练时,透视监督是有必要的。

4. Perspective Loss

前面描述了额外引入透视监督的必要性,那么怎么引入透视监督呢?

BEVFormer v2给出的方法就是用Perspective loss来实现:在backbone上建立透视3D head,然后用透视视角检测目标,具体来说就是采用类似FCOS3D的检测头,它能预测3D B-boxes的中心位置(center location)、尺寸(size)、朝向(orientation)和投影的中心度(projected center-ness)。把这个检测头的loss叫做透视loss,记为,作为BEV loss 的补充,促进backbone的优化。

BEVFormer v2的整体Loss就是:

Image

5. Two-stage BEV Decoder

第3节说明了额外引入透视监督的必要性,那么如何有效地组织透视检测器和BEV检测器呢?

最简单的组织方法是联合训练这两个检测器,即在原来只有一个BEV检测器的基础上,添加一个透视检测器分支,它们的检测结果不直接交互,仅在反向传播过程中分别为Backbone提供监督信号。这虽然能克服3节提到的单独使用BEV检测器所提供监督信号不直接、太稀疏的问题,但这仅仅从不同视角获得了两套独立的检测结果。

如何把这两套检测结果更有机地结合起来呢?最朴素的想法就是:

  1. 在BEV检测器的结果中丢弃透视 head的预测结果
  2. 把两个目标检测器预测的结果进行nms处理

相比于这两个过于朴素的方法,作者设计了一个全新的结构,能把两个检测器“有机地”集成到一个two-stage predicting pipeline中,叫做two-stage BEV detector。

在介绍two-stage BEV detector之前,我们先看看BEV head detector有哪些问题,然后再看结合透视检测器结果如何解决。

BEV head中的object decoder,即DETR decoder,用一些可学习的embedding作为object queries,通过训练在数据集中来学习目标物体可能出现在哪里。但是这会造成两个问题:1. 随机地初始化embedding,要花很长时间来学习合适的位置;2. 在inference时,从整个数据集上学习到的object queries对所有图像都是固定的,但是由于数据集中不同图像的目标在空间分布上变化较大,就会导致这些固定的object queries对具体某张图像来说不够精确。

为了解决这些问题,先用后处理方法过滤透视检测器的预测结果,然后把它们融合到decoder的object queries中,形成two-stage处理流程。这些混合的object queries提供较高概率的目标候选位置,让第二阶段的BEV head更容易捕捉目标物体。注意,第一阶段的候选不一定来自透视检测头,例如也可以来自另一个BEV检测头,但是试验表明,只有来自透视视角的预测对第二阶段的BEV head才有帮助。即4. Experiemtns中Table2不同视角或视角组合的对比试验。Perspective & BEV 的NDS是0.451, 比BEV & BEV的NDS(0.428)高出0.023。

Image

6. Decoder with Hybrid Object Queries

本节重点介绍“有机地”集成两个检测器的关键实施步骤,即如何为BEV检测器生成混合目标queries。

ps:重点是理解用哪两种Object Queries混合,以及为何要混合两种不同Hybrid Queries?

为了把第一阶段(透视检测)的proposals融合到第二阶段(BEV 检测)的object queries中,BEVFormer v2中的BEV Head Decoder基于BEVFormer中用到的Deformable DETR进行修改,这个Decoder中包含交替堆叠的多个Self-attention层和Cross-attention层。其中的Cross-attention层是一个Deformable DETR所介绍的deformable attention模块,用下面三部分作为输入:

  1. Content queries,即生成sampling offsets和attention weight的query features,类似BEV Former,是一个可学习的embedding集合;
  2. Reference points,对应于Value feature上的2D points,作为每个query的采样参考(sampling reference);
  3. Value features,即BEV Head Encoder生成的BEV features。
Image
图3. BEVFormer v2中的BEV head decoder结构

first-stage 输出proposals的投影中心,在second-stage的BEV head中被用作per-image reference points(紫色),并且与可学习positional embeddings线性变化后的per-dataset reference points(蓝色)组合到一起,再加上per-dataset 可学习content queries,组成混合的object queries。

下面通过与BEVFormer对比,来说明BEVFormer v2中把这3项输入到Cross-attention层的意义。

在原始BEVFormer中:

  1. Content queries是一个可学习的embedding集合;
  2. Reference points是由一个线性层从可学习positional embedding集合预测得来。

相比于BEVFormer,BEVFormer v2主要修改的是第2项输入,即如何生成混合Reference points:首先从透视头(perspective head)获取proposals,通过后处理选取其中一部分,把选出proposals在BEV 平面的投影box中心作为per-image reference points,然后与类似BEVFormer那样通过positional embedding来生成的per-dataset reference points合并在一起,作为整体的混合reference points。

问:这里全部使用per-image reference points不行么?为何还要在其中混合per-dataset reference points呢?

答:per-image reference points直接表示输入的这帧图像中目标物体在BEV平面上可能出现的位置,它能让decoder检测目标变得容易。然而,由于一小部分目标物体被遮挡或出现在两个交叉视角的边缘处,它们很可能会被perspective head 漏检。为了避免漏掉这些目标,论文中就保留了BEVFormer中原始的per-dataset reference points,通过学习完整数据集中的空间先验(spatial prior)来捕捉它们,而不只是依赖per-image的reference points。

Image
图4. BEVFormer v2中BEV head decoder的cross-attention layer,用Deformable Attention来实现的结构原理。

图4表明,BEVFormer v2中BEV head decoder的cross-attention layer包含3部分输入:Content query,Reference point和BEV feature。

这里仅画出了一个object query,因此第二项reference point也是单数一个,但是在Deformable DETR的思想,围绕此参考点会选取k个采样点,并通过基于Content query的Linear layer预测的采样点偏移值(sampling offsets)来修正这k个采样点的精确位置,图中示意地画出了3个采样点。

Content query经过Linear和Softmax还生成了attention weight,用来表示k个采样点Value的attention权重。(备注,图片引自Deformable DETR,结合本文做了红色部分的加注修改)

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多