极市导读
与现有的基于Lift-Splat的方法以及基于2D注意力机制的方法相比,该方法即能受益于Transformer的多层优化能力来解决Lift-Splat中的one-pass问题又可以保持对深度感知来解决2D注意力机制中深度模糊(Depth Ambiguity)问题。 >>关注公众号,后台回复「极市干货」即可获取最新整理CV知识内容合集
本文介绍一下我们 @张浩@李峰@隆啊隆@十指透兮的阳光 最近的一篇工作:DFA3D: 3D Deformable Attention For 2D-to-3D Feature Lifting
我们提出3D Deformable Attention (DFA3D),一种全新的将2D特征拉升到3D空间的基础算子。和现有的基于Lift-Splat的方法以及基于2D注意力机制的方法相比,我们的方法即能受益于Transformer的多层优化能力来解决Lift-Splat中的one-pass问题又可以保持对深度感知来解决2D注意力机制中深度模糊(Depth Ambiguity)问题。我们在数学的角度对DFA3D进行了工程上的优化,并提供了CUDA实现。我们在多个使用基于2D注意力机制进行特征拉升的多视角3D目标检测方法上验证了其有效性。
论文:hhttps://ttps://arxiv.org/abs/2307.129722
代码:https://github.com/IDEA-Research/3D-deformable-attentionh/3D-deformable-attention
1 简介
在现有的多视角3D目标检测方法中,通常包含三个主要的模块:
-
1. 2D主干网络,用来对输入的多视角图片进行编码,得到2D图像特征;
-
2. 2D到3D的特征拉升,用来将上一步中获取到的2D图像特征拉升到3D空间中预定义的一些锚点上,得到拉升后的3D特征;
-
3. 基于拉升后的3D特征做3D目标检测。
在这其中第二步是现有的端到端的多视角3D目标检测方法的核心,起到了承上启下的关键作用。现有的方法主要基于两种特征拉升方法:
1. 由Lift-Splat-Shoot提出的基于Lift-Splat的特征拉升方法(如下图a),虽然具有对深度的感知能力,但是由于该方法中3D锚点和2D图像特征之间的关系是由确定的几何关系固定了的,无法进行调整,因此,该拉升方法在整个3D目标检测流程中只能进行一次,一旦有任何误差便无法纠正回来。除此之外该方法还有一个小缺点,由于在拉升过程中需要显式地根据2D特征构建3D特征,2D特征的分辨率就不能太大,否则显存占用会急速膨胀。
2. 基于2D注意力机制的特征拉升方法,例如由PETR提出的基于dense attention的、由BEVFormer提出的基于deformable attention的、由DETR3D提出的基于point attention(deformable attention的一种退化形式,只有一个采样点)的等等。在这类方法中,3D锚点与2D图像特征之间的关系是由学习到的采样点确定的,是可调整的,因此该拉升方法在整个检测流程中可以多次进行,从而进行优化。但,由于这类拉升方法直接将深度方向给忽略掉了,因此存在深度模糊问题。更具体的,如下图(b,c)所示,多个3D锚点投影到某个视图的时候,会落到十分相近的位置,导致他们采样到的特征耦合的十分严重,最终引起误检。
由此可见,目前主流的这些特征拉升方法都不尽如人意。为此,我们提出了一个基础算子:3D Deformable Attention,并基于此基础算子将2D图像特征更加合理地拉升到3D空间中(如下图d所示):即有对深度的感知能力,又有进行多层优化的能力。 我们借助一些简单的数学推导极大地减少了执行该基础算子所需的资源,并通过CUDA实现来对其进行了进一步的优化。 为了验证其有效性,我们将DFA3D适配到了多个方法上,带来了平均1.41% mAP的提升。
2 方法
2.1 3D Deformable Attention及基于其的特征拉升
当使用我们的DFA3D来进行特征拉升并最终实现多视角3D目标检测时,其具体流程图如下所示。和我们在上文中讲的一致,1)在多视角2D图片经过2D主干网络提取各个视角的2D特征(通常为多尺度特征,multi-scale)后,2)这些2D特征图便会被送入到特征拉升模块中进行处理,并得到用于3)进行3D检测的拉升后的3D特征。接下来,我们会对第二步进行详细的讲解从而说明DFA3D的具体细节以及其如何实现特征拉升的。为了方便讲解,在下述步骤1和2中,我们将假设2D特征只有一个尺度:
-
首先, 和BEVDet这类方法类似, 我们将该 图像特征图 送入到一个深度估计子网络中来为每个2D特征估计深度, 并将该深度通过深度分布的形式 将深度表示出来, 其中, 表示视角数(比如在nuScenes数据集上为 和W表示特征图的大小, C 表示 特征的维度, 表示深度方向被量化后的类别数量。而后, 将每个2D图像特征与其对应的深度分布做外积来将2D图像特征图沿着深度轴延展成一个3D特征图(expanded 3D feature map) 。和Lift-Splat这类方法不同的是,我们并没有将延展后的3D特征图 通过相机内外参转换到自车坐标系从而生成伪雷达特征,而是将他们留在图像坐标系不动。除此之外,在内存空间维持这个3D特征图会消耗大量的显存资源,这就使得Lift-Splat这类方法无法使用大尺度的2D特征图,限制了其对小和远距离物体的感知能力。在下一部分中我们将会解释我们如何通过数学上的优化来使得我们无需真正地执行这个外积,也无需维持这么巨大的特征在内存空间。
-
将自车坐标系下的3D锚点看作是3D查询(query),而步骤1中得到的3D特征图 看作是3D键值对(key,value)。每一个3D查询根据自身的3D坐标以及当前视角相机的内外参数投影到当前视角的图像坐标系下。该3D查询进一步根据自身的语义特征(content feature,该特征是随机初始化的)来估计该查询具体应该在哪些位置(sampling locations)对3D键值对进行采样(trilinear sampling),以及采样到的特征应该被赋予多少的注意力(attention)。对于每一个3D查询,将它采样到的特征以及他们所对应的注意力值做加权求和便得到了该视角在该3D查询所在的3D坐标的拉升结果。这一步骤实际上也就是3D Deformable Attention这一算子内部机制的具体内容。
-
对于每一个3D查询,将在多个视角多个尺度下的到的拉升结果聚合在一起,这样之后,一次特征拉升过程便结束了。但,聚合得到的特征可以用于更新该3D查询的语义特征,并可以再次进入到步骤2进行再一次的特征拉升。由于此时3D查询的语义特征更加有意义,再一次的特征拉升所得到的结果也将更好。
2.2 3D Deformable Attention的优化
在讲述如何优化之前, 我们先来看看在Sec 2.2的步骤1中我的得到的3D特征图 具体是什么样子的。如下图可以看到, 由于 是由 和 做外积得到的, 因此, 中的每个元素(一 个特征向量) 实际上都是由一个2D图像特征 ( 的一个元素, 向量) 和从一个深度分布上采样到的一个数值( 中的一个元素, scalar)相乘得到的。并且, 当uv坐标相同时, 他们将共享相同的2D图像特征, 以及相同的深度分布。
充分利用这样的规律,如下图所示,3D Deformable Attention中的核心运算:trilinear采样 便可以被简化为一个加权了的bilinear采样。3D Deformable Attention也就随之被简化为了一个加权了的2D Deformable Attention(depth score-weighted DFA2D)。(限于篇幅,更详细的推导请参考原文)
这样一来, 我们便无需真的去计算 之间的外积, 也无需去维持巨大的 特征图 在内存空间,3D Deformable Attention将会被实时地以加权了的2D Deformable Attention来实现,节省了大量的资源。
3 实验
在介绍实验之前,值得注意的是,由于在Sec 2.2中我们对DFA3D的优化,DFA3D与2D Deformable Attention(DFA2D)在接口上差异很小,因此,如下图所示,我们可以很方便地将一个基于DFA2D做特征拉升的方法改造为基于DFA3D做特征拉升。
我们在多个基于DFA2D做特征拉升的方法上进行了实验,其结果如下表所示。可以看到,DFA3D在多个方法、多个模型大小上均体现出了优势。(我们在github上提供了更加高的结果,具体请参考我们的repo)
尤其的,如下表所示,我们发现,随着depth质量的提升,我们的结果提升十分明显。当我们使用ground truth的depth时(将LiDAR投影到图像上得到的稀疏的深度图),提升能达到15.1% mAP。(我们在github上提供了+16% mAP的结果,具体请参考我们的repo)
4 总结与展望
在本文中,我们提出了一个基础算子,并将其运用在特征拉升中,并在多视角3D目标检测任务上对其有效性进行了验证。值得注意的是,在所有的实验中,我们用的都是简单的单目深度估计,但最近的很多工作(例如,StreamPETR、SOLOFusion、Sparse4Dv2以及BEVStereo等)都验证了依赖时序以及多视角可以信息帮助深度估计得到更好的结果。如果能将这样高质量的深度估计利用起来,那么如我们在实验部分的观察所示,DFA3D所能提供的性能提升还会进一步增加。

公众号后台回复“数据集”获取100+深度学习各方向资源整理
极市干货

点击阅读原文进入CV社区
收获更多技术干货

