BEV感知综述(转)
1 前言
本文介绍了基于视觉传感器的一些感知算法,包括2D感知,3D感知,多目感知,以及基于注意力机制的感知。其中一些文章里提到了BEV感知,也介绍了其基本原理和近期相关的进展。从目前的发展趋势来看,BEV感知已经成为了一个相对独立的研究课题,在自动驾驶系统中的应用潜力也很大。因此,本专栏专门推出一篇文章来详细介绍BEV感知算法的发展历史和现状,以期能对这个领域有一个较为系统和全面的梳理。
1.1 往期文章回顾
在正式开始之前,我们先对之前的视觉感知文章进行一个简单的回顾,并分析它们与BEV感知之间的联系。
2D感知的任务是从单张图像(或者一个时间序列)中检测或者分割目标。作为传统的视觉感知方式,2D感知近十年来在深度学习和大数据的加持下得到了极大的提升,这也是自动驾驶这些年快速发展的原推动力之一。但是,对于自动驾驶任务来说,我们最终需要的是目标在车辆坐标系下相关信息,因此2D的感知结果还需要映射到3D空间,才能支持定位,预测,规划等下游任务。所以,虽然2D视觉感知自身的发展相对比较成熟,2D到3D映射这个病态问题却成为了它在自动驾驶应用中的一个绊脚石。
2D视觉感知3D感知从图像中直接获取目标和场景的3D信息。这个过程中最关键的环节就是从2D图像的透视视图来恢复深度信息。对于单目相机来说,这是一个理论上的病态问题,实际应用中虽然可以通过一些几何假设或者机器学习的方式来估计深度,但是精度相对较低。
更好的方式当然是通过双目相机,从理论上来解决深度估计的问题。但是,双目相机的视野和距离范围都受到很大的限制,一般来说只能对车辆前方中近距的区域进行探测,所以常用于L2级别的应用,比如ACC,AEB。对于高阶自动驾驶系统来说,感知的范围要更大,要能探测车身四周360°范围内的目标和障碍物。双目系统在这种情况下能起到的作用就非常有限了。
3D视觉感知多目系统是双目系统的扩展,这种扩展主要体现在两个方面:一是通过增加不同类别的传感器,比如红外摄像头,来提高对各种环境条件的适应性;二是通过增加不同朝向,不同焦距的摄像头来扩展系统的视野范围。Tesla的纯视觉系统,就是通过安装在车身四周的多个摄像头来覆盖360°的视野范围,在此基础上来完成感知任务。
这个系统第一次提出了BEV感知的概念,也就是将来自多个摄像头的图像从透视视图转换到鸟瞰视图(Bird's Eye View, BEV)。BEV视图包含了对于自动驾驶来说最重要的距离和方位信息(高度信息则隐含在BEV特征里),因此BEV感知的结果可以直接用于下游的各种任务,而无须再进行额外的转换。当然,2D到3D的转换过程是无论如何绕不开的,这也是BEV感知的研究重点之一,后面我们会重点介绍。
多目视觉感知这篇文章中所介绍的交叉注意力和深度分布估计,是BEV感知中视图转换的两个常用方法,代表性的方法分别是BEVFormer和BEVDet。除了视图转换以外,BEV感知中还有其它的问题需要研究,比如时序融合,多任务学习,提高泛化能力,多模态监督等等。
BEV感知1.2 本篇文章内容
本专栏之前在多目感知的文章中第一次介绍了BEV感知的概念,并在交叉注意力的文章中以视图转换为线索展开介绍了BEV感知的一些典型方法。以此为基础,本文会对BEV感知的基础概念和发展现状进行更为系统的介绍,包括BEV感知的任务以及常用的数据集和评测指标,BEV感知的发展历程以及现阶段研究的重点。
更多关于BEV感知算法设计和工程落地方面的内容,推荐大家关注深蓝学院的课程,内容非常实用。
2 BEV视觉感知任务
2.1 BEV感知的概念
从输出的角度来说,BEV感知任务的特点是系统直接输出BEV坐标(简单起见,这里我们不再区分BEV和3D坐标)下的感知结果,比如物体的三维位置和形状,车道线的位置,占据栅格等等。从广义上来讲,只要系统输出是在BEV坐标而不是图像坐标下的,就可以认为是BEV感知系统。从这个角度上来讲,我们在视觉3D感知的文章中介绍的方法,比如FCOS3D,也可以认为是BEV感知算法。
但是,一般我们所说的BEV感知算法会包含一个从透视视图到BEV视图的转换过程。有的方法包含一个显式的转换过程,生成稠密的BEV视图下的特征,后续可以支持各种下游任务,比如BEVDet和BEVFormer。有的方法则是针对具体的任务,比如3D物体检测,直接生成稀疏的BEV视图下的感知结果,比如DETR3D和PETR。
从输入的角度来说,基于单目或者双目图像的3D物体检测也属于BEV感知的范畴。但是,一般我们所说的BEV感知其输入是来自不同相机的多张图像,因此是多目感知的一种方法。
综上所述,我们来总结一下通常所说的BEV感知系统的主要特点。
输入:来自不同角度相机的多张图像,覆盖360°视野范围。
输出:BEV视图下的各种感知结果,比如物体,道路,车道线,语义栅格等。
算法:图像到BEV视图转换,包括稠密和稀疏两种方式。
2.2 BEV感知的基准测试
任何感知算法的发展都离不开一个好的基准测试数据集,就像图像分类领域的ImageNet,通用物体检测领域的COCO,自动驾驶感知领域的KITTI等等。对于BEV感知来说,目前比较常用的数据集是nuScenes,几乎所有BEV感知的研究论文都会给出nuScenes上的基准测试结果。
nuScenes的数据是在新加坡和波士顿两个城市的真实交通环境下采集的,包含1000个序列,每个序列长度为20秒。采集的数据类型包括可见光图像,激光雷达点云,毫米波雷达点云和地图。其中可见光图像来自于安装在车身四周不同朝向的6个摄像头,因此每帧数据都包含6幅图像,覆盖360°的视野范围。
nuScenes数据采集车的传感器布局和多模态数据示例nuScenes数据库发布了多个测试任务,包括物体检测和跟踪,运动轨迹预测,点云全景分割以及路径规划。本文之后会介绍,BEV感知可以支持多任务处理,不过目前最常见的任务还是3D目标检测。对于该任务来说,标注的真值包括3D物体框,23个物体类别以及8个属性类别。
3D目标检测任务的性能指标主要有两个:mAP和NDS。
mAP(mean Average Precision)是目标检测中常用的性能指标,它对Precision-Recall(P-R)曲线进行采样,计算每个类别出平均的Precision。在计算P-R曲线时,需要匹配算法预测的物体框和标注的真值物体框。nuScenes中采用BEV视图下物体框的2D中心点距离来进行匹配,而不是传统的Intersection-of-Union(IoU),这样可以提高小物体的匹配率。
NDS(nuScenes Detection Score)在mAP的基础上,增加了物体框预测质量的指标。这些指标包括物体框的位置,大小,朝向,速度以及其它属性。与mAP相比,NDS可以更全面的评价3D目标检测算法的优劣。
3 BEV感知的Baseline工作
自2021年以来,针对BEV感知的相关研究越来越多,学术界和工业界都出现了不少很有特色的工作。为了更清晰的梳理这些研究工作的脉络,这一小节首先介绍BEV感知的几个baseline算法,这些算法也分别对应了不同的设计思路。下一小节中我们再来介绍这些baseline的算法中存在的问题,以及改进的方向。
下面我们以视图变换为线索来介绍BEV感知的几个典型方法。其中有些已经在专栏的其它文章里提到过了,但是为了本文的完整性,这里我们还会再列举一下其主要的设计思路。
视觉BEV感知的核心在于将透视视图下的图像信息变换到BEV视图。这是一个理论上的病态问题,因为一个图像像素会对应3D空间中的多个位置。这种一对多的歧义性是因为我们不知道像素在3D空间中对应的高度或者深度。这二者知其一(下图中的Oy或者Oz),我们就可以通过相机的内外参矩阵将图像的每一个像素都变换到3D空间。
因此,图像到BEV的视图转换也大致有两种思路:一种假设高度(Oy)已知,一种假设深度(Oz)已知。
前者的典型思路是假设目标位于路面,因此高度为0,这样就可以采用Homography变换将图像转换到BEV视图,比如BEV-IPM。在实际应用中,路面并非绝对平坦,而且除了车道线以外,其他的目标都有一定的高度。在这些情况下,高度已知的假设并不成立,变换后的图像误差也很大。因此,反变换的方法在BEV感知中采用的相对较少。
后者通常会依赖于主动传感器直接获得深度信息(比如激光雷达)或者从图像中通过显式或者隐式的方式获得深度信息。激光雷达或者毫米波雷达与视觉融合后,会提高深度估计的准确度。因此BEV融合感知也是非常具有潜力的研究方向,我们会在专栏另外的文章中介绍。本文关注的是纯视觉的BEV感知,所以我们下面会重点介绍后一种方法,也就是从图像中获得深度信息。
3.1 基于深度估计的方法
通过估计每个像素的深度信息(通常是概率分布)将其变换到BEV视图,这是一种比较直观的视图变换方式。下面要介绍的LSS和BEVDet都属于这种方式。
LSS(Lift,Splat,Shoot)
LSS算法的输入是多张图像(来自于安装在车身不同位置的相机)和相机的内外参数,输出则是BEV视图下的感知结果,比如目标分割或者运动预测等。
LSS方法示意图多张图像首先用一个共享的CNN主干网络提取特征,然后分别对每个特征图进行视图转换。这个步骤的核心是估计特征图每个像素处的深度分布。这里并没有预测具体的深度值,而是给每个可能的深度值分配一个概率。假设有D个可能的深度值,那么网络在每个像素处会预测D个概率值( �1,�2,...,�� )以及该像素处的上下文特征c(维度是C)。用 � 对c进行加权就得到了对应每个深度的上下文特征。这样做的好处是可以处理深度的模糊性,因为从二维图像预测深度是有歧义的。
假设特征图大小为HxW,每个像素有D个可能的深度值。通过相机的内外参数,每个像素都可以转换为三维空间中的D个点,因此每个相机的特征图都可以转换为HxWxD个点。如果有N个相机的话,那么最终就有NxHxWxD个点。这些三维点可以通过类似PointPillar中的方式转换成BEV视图下的特征。每个Pillar对应BEV中的一个网格,落到网格中的点进行Pooling操作后仍然还得到一个C维的特征。所以BEV特征的维度维XxYxC,其中X和Y是BEV网格横向和纵向的个数。
LSS中的深度分布估计和特征加权BEVDet
BEVDet以LSS中的视图转换为基础,但是在BEV视图下采用了额外的网络来进一步提取特征,并在此BEV特征的基础上进行3D目标检测。该方法在nuScenes基准测试上取得了非常好的效果,也进一步验证了利用深度估计进行视图转换以及在BEV视图下设计感知算法的有效性。
BEVDet主要包括四个部分。首先是提取图像特征的编码器,可以采用经典的ResNet或者基于注意力的Swin-Trainsformer结构。然后,多幅图像的特征通过LSS中提出的方法转换到BEV视图,在该视图下进行再一次的特征提取。最后,采用CenterPoint中的Head结构来完成3D目标检测任务。
BEVDet网络结构图3.2 基于3D网格的方法
除了LSS和BEVDet中采用的显式深度分布估计,还有一类方法通过定义3D网格来建立BEV视图和图像视图的联系,比如OFT和BEVFormer。这类方法通过3D到2D的映射,将3D网格上的深度信息隐含的附加到图像像素之上。
Orthographic Feature Transform(OFT)
OFT的核心是构建BEV视图下的3D网格,每个网格通过透视变换对应图像上的一块区域,这个区域内图像特征的均值既是该网格的特征。为了减小计算量,3D网格特征在高度这一维上进行压缩(加权平均),得到BEV网格特征。3D网格到2D图像的投影并不是一一对应的,多个网格会对应邻近的图像区域,导致网格特征出现歧义性。所以OFT也假设待检测的物体都在路面上,高度的范围很窄(文中实验采用了的3D网格高度只有4米)。
OFT没有显式的估计每个图像位置的深度,而是建立了3D网格到2D图像的对应。多个3D网格会对应邻近的图像区域,因此这里隐含的假设就是像素的深度分布是均匀的,图像特征被均匀的分布到以相机中心为起点的射线上(参见下图)。
Orthographic Feature TransformBEVFormer
BEVFormer采用可变形交叉注意力来进行图像到BEV的视图转换,其中query来自于BEV视图,而key和value则来自于图像视图。query被定义为可学习的BEV网格特征,大小为HxWxC,其中H和W是BEV网格的个数,C是特征维度。为了提取3D特征,BEV query上的每一个网格 �� 都被扩展为高度不同的 ���� 个三维点,也就是下图(b)中红色的点。
BEVFormer网络结构图与OFT中不同高度的多个网格一样,这些点也是为了提供高度信息,从而进行3D到2D的映射。有了对应关系以后,BEVFormer采用交叉注意力而不是OFT中采用的均值操作来计算每个3D点的特征。注意力计算是一种数据驱动的动态的方式,因此比均值操作具有更大的灵活性,可以进行端对端学习。具体的计算过程可以参考之前文章中的介绍(环境感知中的注意力机制(三):BEV感知和交叉注意力)。BEVFormer中还包括的时序融合的部分,这个我们在下一节里再详细来讲。
对比一下,LSS和BEVDet采用显式的深度估计,给每个像素附加多个深度值,从而把一个像素的图像特征“推”到BEV视图下的多个网格中。而OFT和BEVFormer建立了3D网格到2D图像的映射,每个三维网格将对应的图像局部区域内的特征“拉”到3D视图,并通过压缩高度维度得到BEV特征。
3.3 基于2D视图的方法
无论是“推”还是“拉”的方式,上述方法都显式的建立BEV特征图,并以此为基础完成后续的BEV感知任务。除此之外,还有一类方法直接在2D图像视图下进行操作,跳过生成BEV特征的步骤,直接输出BEV下的感知结果。下面我们来介绍这类方法中两个典型的例子,FCOS3D和PETR。
FCOS3D
FCOS3D的特征提取完全在2D图像上进行,只是在最后设计损失函数的时候才引入了3D信息。在训练过程中,3D物体框的中心投影到2D图像,得到2.5D中心(X,Y,Depth),以此作为回归的目标之一。此外,回归的目标还有3D大小和朝向。除了损失函数,FCOS3D没有显式的引入任何3D信息,完全靠神经网络从数据中进行学习。不过,从实验的效果来看,神经网络很难通过端对端的方式来学习复杂的几何对应关系。
FCOS3D网络结构PETR
PETR的特征提取也是在2D图像上进行,但是在图像特征上附加3D空间信息的编码。目标检测还是是在2D图像空间上完成,只不过这里的特征已经包含了3D信息,可以看作是一个加强版的图像特征。所谓3D特征编码,其实就是给图像特征的每一个像素附加多个可能的深度。这些3D坐标经过全连接层的处理之后,作为附加特征与图像特征进行拼接。这个过程与前面介绍的LSS中对深度信息的处理有些类似,只不过PETR中没有根据深度信息生成3D点云,而是直接把3D坐标作为特征来使用。
PETR网络结构PETR的这种附加3D特征的方式避免了显式的生成BEV特征,从而降低了计算量。但是因为没有BEV特征图,PETR无法支持稠密的BEV感知输出,比如语义栅格。
3.4 方法对比
以上介绍的这些baseline方法,基本涵盖了BEV感知的不同设计思路,后续大多数的工作也都是这些基础之上进行改进或者扩展。下面我们采用nuScenes基准测试中的3D物体检测任务来定量的对比一下这些baseline方法。为了对比公平,下表里的BEVFormer是没有时序融合和深度预训练的版本(BEVFormer-S)。在本文中,除非特别之处,性能对比中给出的都是nuScenes test set上的结果。
方法 | 发表年份 | 主要特点 | mAP | NDS | FPS |
---|---|---|---|---|---|
OFT | 2019 | 3D网格 | 12.6% | 21.2% | - |
FCOS3D | 2020 | 2D视图 | 35.8% | 42.8% | - |
BEVDet | 2022 | 深度估计 | 42.4% | 48.8% | 4.2 (on 3090) |
BEVFormer-S | 2022 | 3D网格 | 40.9% | 46.2% | 1.7 (on V100) |
PETR | 2022 | 2D视图 | 44.1% | 50.4% | 1.7 (on V100) |
从上面的对比中可以,早期的OFT和FCOS3D方法准确率比较低。后续的BEVDet,BEVFormer和PETR虽然在思路上也是类似的,但是在特征提取方面采用了更大规模的主干网络或者Transformer结构,因此准确率得到了很大的提升。后面我们会以这三个方法为基础,介绍各种改进和扩展的思路。
4 BEV感知的改进和扩展
上一节中我们介绍了BEV感知的一些基本思路和典型方法。后续的工作从各种不同的角度对这些思路进行和改进和扩展,比如提高视图变换的准确率,充分利用时序信息,支持不同的下游任务等等。下面我们就以这些方向为线索,介绍BEV感知最新的进展。
4.1 视图变换
BEV感知的核心是2D到3D的视图变换。这是一个病态问题,而解决这个问题的主要方法之一就是从图像中估计深度信息。我们前面介绍的几个典型的BEV感知算法,都是根据下游任务(比如3D目标检测)进行端对端训练,因此并不能够充分的学习如何估计深度信息。
单目深度估计一直依赖都是计算机视觉中研究的热门课题。BEV感知算法也可以采用在深度估计任务上进行预训练的主干网络来增强深度信息提取的能力。比如,BEVFormer中采用了在深度估计任务的预训练的VoVNet-99主干网络,NDS可以提高3个百分点左右。
除了采用预训练的主干网络,更直接的方法则是在训练中加入额外的深度信息监督,也就是增加一个额外的深度估计任务,但是只用于辅助训练主干网络,并不参与推理的过程。
BEVDepth
虽然深度估计对于BEV感知非常重要,但在LSS和BEVDet这类算法中,深度估计的准确率却远不能让人满意。为了证明这一点,作者在LSS中采用随机的深度值,结果3D物体检测的mAP只降低了3.7%(从28.2%降低到24.5%)。换句话说,用不用深度估计对算法性能的影响非常有限。
导致深度估计质量较差的原因是,神经网络模型在训练的过程中只关注目标出现的位置,因此深度信息只能从有限的图像区域获取。在下图的例子中,LSS的深度估计只在虚线框位置处相对准确,其余位置效果都很差。
LSS和BEVDepth深度估计效果对比为了解决这个问题,BEVDepth在训练过程中加入额外的深度信息监督。具体来说,激光雷达的点云被投影到图像上,为DepthNet的学习提供监督信息。以外,BEVDepth还增加了一个Depth Refinement的模块。这个模块在Depth和BEV特征的Width维度进行多次3x3卷积,从而可以降低由于深度估计错误带来的不良影响。
BEVDepth网络结构图通过以上改进,BEVDepth的NDS指标可以提升4%。如果加上时序融合模块,BEVDepth在nuScenes测试集上的NDS可以达到60.9%,这与激光雷达的Baseline算法CenterPoint已经比较接近(64.8%)。
BEVDistill
该算法同样采用激光雷达点云来提供准确的深度信息,但并没有显式的训练一个深度估计模块,而是把深度信息的监督形式化为一个知识蒸馏模型。在这个模型中,激光雷达分支作为“教师”,而图像分支则作为“学生”。因为推理过程中不需要教师分支,因此并没有增加额外的计算量。
BEVDistill网络结构图具体来说,知识蒸馏在稠密的BEV特征和稀疏的Instance(也就是DETR中的query)两个层面进行。由于激光雷达和图像这两种模态的数据之间存在很大差异,蒸馏的方式也需要进行一些特别的设计。具体的细节请参考论文,这里就不作介绍了。
当采用BEVFormer作为学生模型时,跨模态蒸馏可以将NDS指标提升3.4%。前面介绍的BEVDepth也可以用来作为学生模型,也就是说深度估计通过增加显式的监督和跨模态蒸馏得到了双重加强,因此NDS还可以再得到0.5%的提升。
BEVFormerV2
该方法没有用额外的激光雷达点云来提供深度信息监督,而是给主干网络增加一个额外的3D物体检测任务(下图中绿框的部分)。这是一个辅助任务,可以帮助主干网络更好的提取3D信息。在训练阶段,这个额外任务与下游任务的损失合在一起,同时进行优化。与没有额外任务的基础结构相比,NDS可以提升2.5%。
BEVFormerV2网络结构HeightFormer
第3节开始的部分描述了2D到3D映射这个病态问题,并指出深度和高度二者知其一就可以解决这个问题。因此,除了在深度方面做文章,我们也可以利用高度信息。比如,OFT和BEVFormer构建了3D网格并因此假设高度已知,BEVHeight估计每个像素的高度值。
HeightFormer这篇文章进一步证明了利用深度和高度信息的等价性。但是,采用高度信息更具有优势,因为高度信息处理不需要利用相机参数和额外的深度监督信号,具有更大的鲁棒性和灵活性。
基于以上分析,HeightFormer采用与BEVFormer类似的结构。但是,BEVFormer中采用的3D网格是预先定义的,神经网络会给每个网格预测一个权重。高度信息则隐含在这个权重中,权重的分布对应了该网格处高度的分布。HeightFormer则提出显式的预测每个BEV网格处的高度信息,也就是下图中物体中心高度 ��� 以及物体自身高度 ℎ�� 。根据这两个预测值,就可以采样3D网格点,后续的处理步骤与BEVFormer保持一致。
根据高度预测动态采样的3D网格点HeightFormer的NDS指标只比BEVFormer高了0.4%,所以这两种高度信息处理的策略,在算法性能上可以说并没有太大区别。
性能对比
方法 | 发表年份 | 主要特点 | mAP | NDS | FPS |
---|---|---|---|---|---|
BEVDet | 2022 | 深度预测 | 42.4% | 48.8% | 4.2 (on 3090) |
BEVFormer | 2022 | 3D网格 | 48.1% | 56.9% | 1.7 (on V100) |
BEVFormerV2 | 2022 | OD任务监督 | 54.0% | 62.0% | - |
BEVDepth | 2022 | LiDAR深度监督 | 50.3% | 60.0% | - |
BEVDistill | 2022 | 知识蒸馏监督 | 49.8% | 59.4% | - |
HeightFormer | 2023 | 高度预测 | 48.1% | 57.3% | - |
*上表中除了BEVDet以外,其他方法都采用了不同方式的时序融合。
4.2 稀疏Query
之前介绍的BEVDet和BEVFormer这类方法,都显式的生成了BEV下的特征图。其中BEVDet估计了每个像素的深度分布,而BEVFormer采用3D网格来做query。这两种方法都可以看作是“稠密”的视图变换,因为无论是像素还是3D网格,在空间上都是稠密的。这种做法的优点是所生成的BEV特征图可以支持多种下游任务,比如稀疏的目标检测和稠密的语义分割。但是,如果下游任务只做目标检测,那么理论上讲只需要生成目标的BEV特征即可。这样做一方面可以减少计算量,另一方面可以忽略稠密视图变换的部分误差,将注意力集中在需要预测的稀疏目标上。
DETR3D
该方法采用采用稀疏的目标级别的query,每个query对应一个目标的3D中心点。这些3D中心点映射回图像视图后,就可以从多幅图像来获取目标的视觉特征,通过这个特征来进一步预测目标的3D信息。这些信息可以用来更新目标query,从而再从图像上提取特征,因此这是一个迭代的过程。
DETR3D网络结构DETR3D只考虑目标的中心点,这就限制了目标特征的感受野范围,并且会对目标位置的误差比较敏感。DETR4D针对这个问题进行改进,将一个中心点扩展为多个采样点。这些采样点的位置也不是固定的,而是由query特征预测得到的。这与可变形注意力中的offset预测有类似之处。多个采样点映射回相应的图像空间后,可以提供更为丰富的目标特征描述。
不同的query生成方法对比对于query初始化,DETR4D没有采用一般的随机方法,而是设计了一个“简化版”的BEV目标检测器,用来提供query的初始位置。具体来说,DETR4D中定义了一个3D网格,并将图像特征按照相机参数映射到这些网格中。这与BEVFormer中的BEV特征生成方式类似,只不过网格特征直接来源于对应位置的图像特征,并没有相对复杂的交叉注意力计算。然后,3D网格被压缩成BEV特征,通过一个轻量的卷积网络生成heatmap。而heatmap上响应比较大的点就作为初始的query。这个过程其实非常类似CenterNet的目标检测,因此也可以理解为先用一个简化的目标检测器来为每一帧提供目标query,再采用复杂的注意力机制和时序融合对目标位置进行细化。
PETR
之前我们介绍的PETR方法,也是采用了稀疏的目标级query。PETR的query虽然也是在3D空间中定义的,但是与DETR3D不同,这些query并没有通过3D到2D的映射与图像特征建立联系。这个联系是通过在图像特征上附加的3D空间信息编码来建立的。这种方式的优点是可以避免3D到2D的映射和相应的图像特征采样,而缺点是必须要计算query和图像特征之间的全局注意力,因为query无法直接的与图像局部区域建立联系。全局注意力的计算量非常大,因此PETR虽然采用稀疏的query,但是速度上并没有优势。
不同的稀疏query设计方式关于query的初始化,PETR也可以做与DETR4D中类似的扩展,也就是利用额外的目标检测器来确定query的初始值。由于PETR的特征提取是在图像视图下进行的,因此只能采用2D物体检测器,比如Focal-PETR中的做法。
SparseBEV
SparseBEV采用与DETR3D相似的流程,避免了全局注意力,因此速度上相对较快,可以达到23.5FPS。此外,与DETR4D的想法类似,SparseBEV也对物体的中心点进行了扩展。通过对每个中心点预测一组offset,一个中心点可以被扩展成多个采样点。除了空间上的采样,SparseBEV也在时序上进行了采样,以达到时序融合的效果。
SparseBEV中还有一些特殊的操作,可以带来性能的提升。比如在计算query之间的自注意力时,除了query的特征相似度,query之间的距离也被考虑进来,而距离的权重则是自适应学习得到的。这个操作被用来替代稠密query中BEV特征编码器的作用。此外,在解码阶段,MLP-Mixer被用来对采样点和特征通道进行处理(对比DETR3D中采用注意力的方式)。
SparseBEV网络结构实验结果表明,上述改进都可以带来性能的提高。其中,时序融合起到的作用最大,NDS的提升可以超过10个百分点。其次,自适应的Mixing也可以将NDS提高6个百分点左右。最后,query的自适应自注意力也可以将NDS提高2个百分点。
Far3D
与Focal-PETR类似,Far3D也采用了2D目标检测来提供初始的query。这样做一方面避免随机初始化带来的不确定性,另一方面也可以提高远距离目标的召回率(recall)。目前主流的视觉3D目标检测,其有效检测距离都比较有限(50米左右),在远距离区域目标的召回率比较低(主要由于深度信息估计的不准确)。与此相比,2D目标检测在远距离区域具有更好的召回率,因此采用2D目标检测(和深度估计)来提供初始的query,可以有效的减少远距离目标的丢失。这些基于2D目标检测的query会和随机的(或者全局固定的)query进行组合,从而最大程度上保证目标检测的召回率。
Far3D网络结构在包含远距离目标(150米)的Argoverse2数据集上,Far3D比其他所有对比方法的mAP都高出至少4个百分点。同时,在nuScenes数据集上,Far3D达到了SOTA的性能。
性能对比
方法 | 发表年份 | Query | mAP | NDS | FPS |
---|---|---|---|---|---|
BEVFormer | 2022 | 稠密 | 48.1% | 56.9% | 1.7 (V100) |
BEVFormerV2* | 2022 | 稠密 | 54.0% | 62.0% | - |
DETR3D | 2021 | 稀疏 | 41.2% | 47.9% | - |
DETR4D* | 2022 | 稀疏 | 45.2% | 53.0% | ~1.7 (V100) |
PETR | 2022 | 稀疏 | 44.1% | 50.4% | 1.7 (V100) |
PETRv2* | 2022 | 稀疏 | 50.8% | 59.1% | - |
SparseBEV* | 2023 | 稀疏 | 55.6% | 63.6% | 23.5** (3090) |
Far3D* | 2023 | 稀疏 | 63.5% | 68.7% | - |
*表示采用了时序融合。
**SparseBEV在FPS=23.5时采用了较小的主干网络(ResNet-50)和图像大小(704x256)。作为参考,PETRv2在同样配置下的FPS是15左右。
4.3 时序融合
自动驾驶系统输入的是时间上连续的数据,比如视频流。因此,如何充分利用时序上的信息,一直以来都是感知方向的研究热点。对于2D图像序列(也就是视频流)来说,相机的运动会导致每帧图像都位于不同的透视坐标系之下。时序融合的核心是要找到不同帧数据之间的空间对应关系,这种对应关系在透视坐标系下难以进行有效的建模,对应的视觉特征也很难进行融合。因此,在2D视觉感知中,时序融合通常会在决策层进行,比如在单帧目标检测的基础上进行目标跟踪,或者采用OpticalFlow来建模多帧之间的关系。
与透视视图不同,在BEV视图下进行时序融合有着天然的优势。这是因为相机和目标的运动在BEV坐标下都是Homogenous的。举例来说,假设一个目标在两帧之间移动了1米的距离,那么无论这个目标在BEV坐标下的什么位置,这个距离都是1米。而在图像坐标下,这个距离(也就是像素距离)则依赖于目标在图像的具体位置:近处距离大,远处距离小。
在BEV坐标下,我们可以通过简单的平移和旋转(根据自车运动信息)来对齐不同帧的BEV坐标系,这就给特征层的时序融合打开了方便之门。此外,在BEV坐标下,目标的运动建模也非常直观,因此目标级别的融合相对比较容易,比如基于卡尔曼滤波或者基于稀疏query的目标跟踪。从前面几节的性能对比中,我们也能看到,时序融合对算法的提升是非常显著的。下面我们就来具体介绍一下相关的方法。
BEVDet4D
该方法是BEVDet在时序融合上的扩展,其中单帧数据的处理采用与BEVDet中同样的方法,将图像转换到BEV视图下,并提取特征。BEVDet4D中对多帧特征的处理方法非常简单,就是将T-1和T时刻的BEV特征进行空间对齐。
具体来说,由于自车的运动,T-1和T时刻BEV特征所处的坐标系是不同的。通过平移和旋转,可以将T-1时刻的坐标对齐到T时刻的坐标。也就是说,T-1时刻的BEV特征通过平移和旋转后,其坐标与T时刻的BEV特征相同,因此就可以通过简单的叠加操作来完成融合。
BEVDet4D网络结构图根据自车运动信息来对齐多帧的坐标系,这是时序融合的必备步骤。以此为基础,后面我们会再介绍更为复杂的融合方式。
BEVFormer
时序融合部分采用的是自注意力机制,因为query和key/value都来自BEV特征。在这个过程中,query( � )的初始值是可学习的BEV网格特征。如果空间和时序模块被重复多次(文章中设置为6次),那么query也可以是空间注意力模块的输出。key和value则来自于上一帧输出的BEV特征( ��−1 )。
首先, ��−1 需要对齐到 � 时刻的坐标系,记为 ��−1′ 。前面介绍的BEVDet4D中直接将对齐后的BEV特征与当前帧进行叠加。这是最简单的做法,理论上说可以对齐静态的场景。为什么说是理论上呢,那是因为自车的运动信息也会有误差,影响对齐的精度。即使静态场景可以精确对齐,场景中的动态目标也无法通过叠加的方式对齐。运动目标无法进行全局的对齐,只能用局部的方式来处理。因此,BEVFormer中采用了局部的可变形注意力来进行时序融合。
在时序融合的公式中,query � 分别和 � 自身以及对齐后的��−1′计算可变形注意力,然后再通过累加的方式合并到一起。这个输出会作为空间注意力模块的BEV query。
从上面的介绍中我们可以看到BEV时序融合的基本思路:首先用自车运动补偿来对齐不同时刻的坐标(静态目标基本对齐),然后用注意力机制来处理运动目标并对静止目标进行修正,最后用递归(recursive)的机制来更新当前时刻的融合特征并作为下一时刻的输入(避免每次都处理多帧信息)。
SOLOFusion
该方法详细分析了融合的帧数和图像分辨率对BEV感知的影响。文章通过理论分析证明,长时融合和高分辨率都可以提高BEV感知的能力。具体的分析比较长,可以参考原文,这里我们只从直觉上来简单解释一下。
对于BEV感知任务来说,最重要的就是获得具有区分能力的BEV特征(区分当前位置有没有感兴趣的目标),不管它是稀疏的还是稠密的。BEV特征来源于多个视角的2D图像,那么也就是说我们需要从图像上获取有区分能力的特征。如果BEV视图下两个邻近的位置映射到图像上的同一个像素,那么我们就无法区分这两个BEV位置。换句话说,我们需要这两个位置在图像上的特征区分度足够大。提高图像的分辨率可以使这两个位置对应的图像像素离的更远,从而使特征的区分度变大。另一方面,对于图像序列来说,序列越长,不同帧之间的差异越大,我们也可以获得区分度较大的图像特征。
根据理论分析的结果,作者提出对融合长度和图像分辨率进行折中,设计了两个分支。一个分支采用长时融合(16帧)和低分辨率特征(1/16),另一个分支采用短时融合(2帧)和高分辨率特征(1/4)。
SOLOFusion网络结构与其它时序融合方法相比,SOLOFusion在时序融合中采用的帧数较多,需要进行多次wrap操作。但是它通过采用低分辨率特征特征降低了计算量。BEVFormer其实是利用了递归的方式,在推理过程中理论上是可以利用所有历史帧。递归的方式虽然不用每次都融合多帧,但是如何有效的保留历史信息则非常具有挑战性,其性能也会受到一定的影响。
PETRv2
PETR的特征提取是在2D视图上进行的,2D和3D视图的关系是通过3D空间位置编码建立的。2D图像特征很难进行坐标对齐,因此PETR的时序融合是在3D空间位置编码上来进行的。简单来说,就是把T-1时刻的位置编码根据自车运动信息变换到T时刻的坐标下,再与T时刻的位置编码进行拼接。此外,T-1和T时刻的2D图像特征也直接进行拼接。最后,时序融合后的3D位置编码和2D图像特征被送入到encoder模块进行后续的处理。
PETRv2中的时序融合模块DETR4D
DETR系列的方法采用的是稀疏query,因此时序融合也在目标级的稀疏query上进行。除了query,图像特征也进行了时序融合。因此,DETR4D在query和图像特征两部分都利用前一帧的历史信息。具体来说,第T帧和第T-1帧的query进行自注意力计算,从而得到融合后的query。这个query同时映射回T帧和T-1帧的图像位置,从两帧特征上同时提取目标信息。这里无论是query还是特征的时序融合,都考虑了车辆自身的运动,用来消除两帧之间坐标的差异。需要注意的是,图像特征只是在query上进行了融合处理,本身并没有在2D透视视图下进行融合。
DETR4D网络结构图SparseBEV
前一小节中介绍了,该方法与DETR4D类似,都是采用稀疏的query,每个query有多个采样点。但是这两个方法采用了不同的时序融合方式。SparseBEV通过自车运动以及query的运动(预测值)将每个query的采样点映射回之前的多帧特征之上,这样每个query就可以包含多帧的历史信息。
这与DETR4D中的时序融合方式主要有两点不同。首先,DETR4D是采用递归的方式,每帧都更新query,作为下一帧的输入,而SparseBEV采用的是多帧的方式,每次计算多帧的采样点。其次,DETR4D采用注意力机制来融合前后帧query,然后再分别映射回这两帧,而SparseBEV则直接将当前帧query映射回历史帧来融合时序信息。
StreamPETR
DETR4D和SparseBEV中分别采用了递归和多帧的方式来进行时序融合。StreamPETR也是基于稀疏的目标query,在时序融合上则是结合了递归和多帧两帧方式。具体来说,StreamPETR采用了一个存储队列(比如长度为4帧),当前帧的query经过处理以后被推送到该队列,然后队列中对应最早一帧的query则被移除出去。所以这是一种先进先出的策略。多帧的query通过自车运动补偿进行对齐,并且通过Motion-aware Layer Normalization层对目标的运动进行建模。
StreamPETR网络结构当采用ViT-L作为主干网络时,StreamPETR的NDS可以达到67.6%,是第一个超过激光雷达基准(CenterPoint, 67.3%)的纯视觉方法。同时,由于采用稀疏的query结构,StreamPETR也可以保证非常快的运算速度。当采用轻量的ResNet-50作为主干网络时,StreamPETR的FPS可以达到31.7。
性能对比
方法 | 发表年份 | BEV特征 | 融合方式 | NDS* | FPS** |
---|---|---|---|---|---|
BEVDet4D | 2022 | 稠密 | 多帧 | 47.6% | 15.5 |
BEVFormerV2 | 2022 | 稠密 | 递归 | 52.9% | - |
SOLOFusion | 2022 | 稠密 | 多帧 | 53.4% | 11.4 |
PETRv2 | 2022 | 稀疏 | 多帧 | 45.6% | 18.9 |
DETR4D*** | 2022 | 稀疏 | 递归 | 50.9% | 1.7 |
SparseBEV | 2023 | 稀疏 | 多帧 | 55.8% | 23.5 |
StreamPETR | 2023 | 稀疏 | 递归+多帧 | 55.0% | 31.7 |
*nuScenes val set上的结果,参数设置与FPS对应
**采用轻量级主干网络时(比如SwinT-tiny或者ResNet-50)和较小的图像大小(704x256)的FPS(在RTX3090上测试得出)
***DETR4D采用了ResNet-101作为主干网络,图像大小为1600x900
4.4 多任务网络
以上我们主要是从3D物体检测的角度来介绍不同的BEV感知方法。除了物体检测,BEV感知还可以支持很多不同的下游任务,比如物体分割,道路分割,车道线检测,运动预测,路径规划等等。对多任务的支持其实也是BEV感知的优点之一。
前文介绍了,有些BEV感知方法显式的生成了BEV特征图,比如LSS,BEVDet,BEVFormer和BEVerse。这些方法都可以在BEV特征上连接针对不同任务的Head,多个任务可以进行并行的处理。这些任务共享了图像主干网络和BEV特征,因此会节省很多的计算量。
还有些方法并不生成稠密BEV特征图,而是采用稀疏的query来检测3D目标,比如DETR3D,PETR和SparseBEV。这些方法通过采用任务相关的query,同样也可以支持多任务的学习和推理。
BEVerse
该方法生成了BEV特征图,并连接了3个任务:目标检测,语义分割和运动预测。由于不同任务需要的空间分辨率不同,BEVerse中采用了GridSampler来生成不同分辨率的BEV特征,然后再一个轻量的卷积网络作为任务特征编码器。
BEVerse中的多任务网络结构PETRv2
该方法可以同时支持3个任务:目标检测,语义分割和车道线检测。每个任务都有特定的query,其中目标的query是3D点,语义分割的query是BEV视图下的图像块(比如25x25大小),车道线的query则是一组有序的3D点。所有的query都可以通过3D空间坐标编码与图像特征建立联系,从而完成各自的感知任务。
PETRv2中的多任务网络结构和query设计4.4 模型轻量化
Fast-BEV
为了提高计算效率,该方法提出了两点改进:1)采用均匀的深度分布,而不是LSS中的估计深度分布或者BEVFormer中的Transformer。这样做的好处是可以提前计算好2D到3D的映射,以LookupTable的形式存储,方便在线查询。2)所有图像的特征直接投影到一个BEV特征图上,而不是每个图像单独投影再进行整合。
Fast-BEV的网络结构以及性能评测此外,Fast-BEV采用了两个常用的策略来提高模型准确率:1)同时在图像和BEV上做数据增广。2)基于多帧特征叠加的时序融合。
从准确率上看,数据增广和时序融合可以带来非常明显的提升。Fast-BEV可以做到与BEVDet4D和BEVFormer这两个SOTA的算法持平,甚至更好一些。从运行时间上看,2D到3D变换的优化可以把帧率提升一个数量级。Fast-BEV的轻量模型(R18@256×704)在Tesla T4上可以达到50FPS。
CPU和GPU上的Latency对比(S1-S6代表不同的图像大小)4 总结
本文介绍了视觉BEV感知中常用的设计思路,典型方法,以及目前改进和扩展的主要方向。
BEV感知是自动驾驶目前的热门研究方向,相关的工作可谓层出不穷。有很多方面本文并并没有涉及,比如如何降低计算量,如何降低对相机参数的依赖,如何进行真值标注,如何进行多传感器融合等等。
除了3D目标检测,BEV感知可以支持的任务有很多,比如车道线检测,目标运动预测,以及3D占据栅格网络。本文只是简单的介绍了多任务学习的框架,并没有具体到每个任务的实现方法。