本文介绍一篇视觉BEV3D检测模型: Fast-BEV,论文收录于 NeurIPS2022。
目前大多数现有的BEV感知方案要么需要相当多的资源来执行车端推理,要么性能不高。本文提出了一种简单而有效的框架,称为Fast-BEV,它能够在车载芯片上执行更快的BEV感知。为了实现这一目标,本文通过试验发现,BEV表征可以在不需要昂贵的基于transformer变换或基于深度表示的情况下获得强大的表征能力。 本文设计的FAST-BEV由五个部分组成:
- (1)一种轻量级的、部署友好的视图变换,它将2D图像特征快速地转换到3D体素空间;
- (2)一种利用多尺度信息以获得更好性能的多尺度图像编码器;
- (3)一种专为加速车载推理而设计的高效的BEV编码器;
- (4)一种针对图像和BEV空间的强数据增强策略以避免过度拟合;
- (5)一种多帧特征融合机制以利用时间信息。
其中,(1)和(3)使Fast-BEV能够在车载芯片上快速推理和方便部署,(2),(4)和(5)确保Fast-BEV具有竞争力的性能。这些都使得Fast-BEV成为自动驾驶车载芯片上高性能、快速推理和易于部署的解决方案。通过实验,在2080Ti平台上,本文的ResNet-50模型在nuScenes验证集上可以运行达到52.6FPS和47.3%的NDS,超过了BEVDepth-R50模型的41.3 FPS和47.5%的NDS和BEVDet4D-R50模型的30.2 FPS和45.7%的NDS。本文最大的模型(ResNet-101@900x1600)在nuScenes验证集上获得了具有竞争力的53.5%的NDS。
论文链接: https://arxiv.org/pdf/2301.12511.pdf,作者在arxiv上传了两个版本,这一版为期刊版本。
项目链接: https://github.com/Sense-GVT/Fast-BEV
文章目录
- Introduction
- Methods
- Rethink BEV Perception 2D-to-3D Projection
- Overview of Fast-BEV
- Fast-Ray Transformation
- Multi-Scale Image Encoder
- Efficient BEV Encoder
- Data Augmentation
- Temporal Fusion
- Experiments
- Speed Comparison with Popular Methods
- Performance Compare with Other Methods
- Detailed Ablation Analysis
- Benchmark
Introduction
目前,为了从2D图像特征进行3D感知,在nuScenes数据集上最先进的BEV方法要么是使用transformer的变换,要么是使用基于隐式或显式深度的变换。然而,它们很难部署在车载芯片上,并且推理速度慢。
- (1)基于transformer转换的方法如图1(a)所示。由于解码器需要注意力机制,这些方法通常需要专用芯片来支持。
- (2)基于深度变换的方法如图1(b)所示。这些方法通常需要加速的、不方便部署的体素池化操作,甚至多线程CUDA内核也可能不是最佳解决方案。此外,这对于在资源受限或不受CUDA加速推理库支持的芯片上运行也不方便。
它们的推理非常耗时,这阻碍了它们的实际部署。本文提出了为车载芯片设计一种部署友好、推理速度快、性能具有竞争力的BEV感知框架。
基于以上观察,本文以 模型为基础,即在图像到BEV视图转换过程中,假设图像深度沿相机光线均匀分布,本文提出了快速光线变换 (Fast-Ray),如图1 (c) 所示,它通过查找表和多视图到单体素操作将BEV变换加速到一个新的水平。 基于Fast-Ray变换,本文提出了Fast-BEV,一种更快更强的全卷积BEV感知框架,不需要昂贵的transformer转换或深度表示。
具体来说:
- (1) 本文提出了一种轻量级、易于部署的快速推理视图变换:Fast-Ray Transform,它通过将多视角2D图像特征沿摄像机射线投影到3D体素来获得BEV表征。此外,本文还提出了两种操作,即查表操作和多视图投影到到一个体素操作,以优化车载平台的处理过程。
- (2) 已有方法的视图转换非常耗时,多尺度投影操作的时间开销大,难以在实际中使用。基于Fast-Ray变换,2D到3D投影具有极快的速度,使得具有多尺度投影操作的多尺度图像编码器成为可能。 具体地说,与现有的大多数使用单尺度特征作为图像编码输出的方法不同,本文在图像编码输出部分采用了**三层多尺度特征金字塔网络(FPN)**结构。然后进行相应的三级多尺度投影运算。
- (3) 对于BEV编码器,本文使用了极少的原始残差网络作为基本的BEV编码器。在此基础上,采用了三种降维操作来加速编码器,它们分别是(space-to-channel)算子、多尺度级联融合(multi-scale concatenation fusion)算子和多帧级联融合(multi-frame concatenation fusion)算子。
- (4) 本文使用了图像和BEV空间的强数据增强策略,如flipping, rotation, resize等。数据增强分别在图像空间和BEV空间进行,不仅避免了过拟合,而且获得了更好的性能。
- (5) 本文还使用了时域融合,通过引入时间特征融合模块,使当前关键帧能够充分利用历史帧中的信息。综合(1)和(3),Fast-BEV可以在车载芯片上实现更快的推理速度。进一步结合(2)、(4)和(5),Fast-BEV可以取得具有竞争力的性能。
Methods
Rethink BEV Perception 2D-to-3D Projection
下面介绍Fast-BEV细节,首先回顾已有方法如何实现2D-3D转换。在BEV感知中,最重要的是如何将2D特征转换到3D空间? 如图1所示,基于query的方法通过transformer中的注意机制获得3D BEV特征。这个过程可以表示为公式:
其中,。是预定义3D空间中的anchor 点,F_{2D}(u,v) 是2D图像特征,在部署过程中,注意力机制对一些计算平台不友好,这阻碍了这些方法的实际应用。
基于深度表示的方法通过计算二维特征和预测深度的外积来获得三维BEV特征。具体过程用公式表示为:
其中, 为从图像特征中预测得到的图像深度, 为外积操作。在CUDA多线程的支持下,这些方法在GPU平台上大大提高了推理速度,但在较大的分辨率和特征维度下会遇到计算速度瓶颈,在没有推理库支持的情况下移植到非GPU平台不是很方便。
Overview of Fast-BEV
- Fast-Ray Transformation。实验发现,从图像空间到voxel空间的投影非常耗时。本文提出了Fast-Ray变换,将多视角2D图像特征沿相机射线投影到3Dvoxel,并针对车载平台提出了两种操作。(1)预先计算了固定的投影索引,并将其存储为静态查找表,这在推理过程中具有极高的效率。(2)让所有相机投影到同一个voxel,避免昂贵的voxel聚合,在GPU上的耗时可以忽略不计,CPU上的速度远远领先于其他解决方案,非常便于部署。
- Multi-Scale Image Encoder。收到2D检测任务的启发,多尺度可以带来性能的提高。利用Fast-Ray变换带来的速度优势来设计多尺度BEV感知范式,期望从多尺度信息中获得性能优势。在Fast-BEV中,图像编码器通过三层FPN输出结构从统一的单尺度图像输入中获得多尺度图像特征输出。
- Efficient BEV Encoder。实验发现,在快速增加耗时的情况下,3D编码器中更多的blocks和更大的分辨率并不能显著提高模型的性能。 BEV编码器只使用了一层多尺度级联融合(MSCF)和多帧级联融合(MFCF)模块,残差结构较少,大大减少了时间消耗,且不影响精度。
- Data Augmentation。实验发现,在模型训练的后期,出现了严重的过拟合问题。这是因为模型架中没有使用数据增强。受最近的工作启发,在图像和BEV空间上都使用了强数据增强,如随机翻转、旋转。
- Temporal Fusion。在真实的自动驾驶场景中,输入在时间上是连续的,并且在时间上具有巨大的互补信息。 例如,在当前帧被部分遮挡的行人可能在过去的几帧中完全可见。因此,本文通过引入时间特征融合模块,将模型从纯空间扩展到空间时域空间。
Fast-Ray Transformation
Basic View Transformation。视图变换是将二维图像空间的特征转换到三维BEV空间的关键部分,整个过程通常需要很长的时间。 本文假设沿着射线方向深度是均匀分布的,一旦获得相机内外参,可以很方便地知道2D-3D投影。由于这里没有使用可学习的参数,所以可以很容易地计算出图像特征图和BEV特征图中的点之间的对应矩阵。基于这一假设,从预计算**投影索引(查找表)和密集体素特征生成(多视图到单体素)**两个角度进一步加速了这一过程。
Look-Up-Table。一旦感知系统建立好后,相机内外参是固定的。因此不需要为每次迭代计算相同的索引,只需预先计算固定的投影索引并存储起来。在推理阶段,我们可以通过查找表来获得投影索引,这是一种在边缘设备上非常廉价的操作。如果从单帧扩展到多帧,也可以很容易地预计算出内外参数,并将它们对齐到当前帧。算法如下图所示,通过摄像机参数矩阵投影来构造与输出3Dvoxel空间相同维度的查找表LUT。迭代每个体素单元,并通过投影计算与3D坐标对应的2D像素坐标。如果获得的二维像素坐标是有效的,将它们填充到LUT中以建立数据相关的索引映射。
Multi-View to One-Voxel。基本视图变换使用体素聚合操作,该操作存储每个摄影机视图的离散体素特征,然后聚合它们以生成最终体素特征。如图3(a)所示,由于每个摄像头只有有限的视角,每个体素特征都非常稀疏,只有大约17%的位置是非零点。实验发现,由于这些体素特征的大尺寸,聚集这些体素特征是非常昂贵的。建议生成密集的体素特征,以避免昂贵的体素聚集。具体地说,让来自所有相机视图的图像特征投影到相同的体素特征,从而在结束时产生一个密集的体素,如图3(b)所示。对于多个视图重叠区域的情况,直接采用第一个遇到的视图来提高建表速度。结合查表和多视图到一体素加速设计,视图变换操作具有极快的投影速度。
Multi-Scale Image Encoder
多尺度图像编码器,使用ResNet-50网络获得4阶段特征,然后在输出部分使用3层多尺度FPN结构。FPN每一层进行特征融合,最终得到3层特征 。通过Fast-Ray变换获得多尺度BEV特征 。
Efficient BEV Encoder
BEV特征是4D张量。时间融合会将这些特征叠加在一起,这会使BEV编码器有很大的计算量。为了提高编码速度,采用了三种降维操作,分别是“空间到通道”(S2C)操作、多尺度级联融合(MSCF)算子和多帧级联融合(MFCF)算子。
- S2C算子将4D体素张量 转换为3DBEV张量 ,从而避免了使用昂贵的3D卷积。
- 在MFCF操作之前,值得注意的是通过多尺度投影获得的BEV特征是不同尺度的。首先将和维度上的多尺度BEV特征上采样到相同大小。MSCF和MFCF操作将通道维度中的多尺度多帧特征连接在一起,并从较高的参数量到较低的参数量进行融合,从而加快了BEV编码器的计算时间。此外,通过实验发现,BEV编码器的块数目和3D体素分辨率的大小对性能的影响相对较小,但占用的速度消耗较大,因此块数越少,体素分辨率越小也就越关键。
Data Augmentation
数据增强方法参参考了BEVDet方案。
- 图像增强。由于3D场景中的图像与3D摄像机的坐标有直接关系,3D目标检测中的数据增强比2D检测更具挑战性。因此,如果在图像上应用数据增强,还需要改变相机的内参矩阵。对于增强操作,使用常见的操作,如翻转、裁剪和旋转。
- 与图像增强类似,可以对BEV空间应用类似的操作,如翻转、缩放和旋转。请注意,增强变换应同时应用于BEV特征图和3D真值框以保持一致性。可以通过相应地修改相机外参矩阵来控制BEV增强变换。
Temporal Fusion
受BEVDet4D和BEVFormer的启发,进行时间特征融合。通过空间对齐操作和连接操作,将历史帧的特征与当前帧的对应特征进行融合。时间融合可以被认为是帧级别的特征增强,在一定范围内,较长的时间序列可以带来更多的性能提升。具体地说,本文使用三个历史关键帧对当前帧进行采样;每个关键帧具有0.5s的间隔。我们采用了BEVDet4D中的多帧特征对齐方法。FAST-BEV使用三个历史帧,显著提高了性能。
3D检测头,本文参考了PointPillars方法,用到了Focal损失,Smooth-1损失和二分类损失。
Experiments
Speed Comparison with Popular Methods
下面是论文实验部分,首先是与其它方法的视图转换速度比较。
视图转换影响BEV感知解决方案的设计,影响模型在不同平台上的可部署性和速度。在CPU和GPU平台上,本文将提出的Fast-Ray变换与其他流行的基于LSS的视图变换方法,如LSS-DEVDet、LSS-BEVDepth和MatrixVT进行了比较。为了进行公平的比较,本文按照MatrixVT实验设置进行速度比较,其中考虑了影响视图转换延迟的三个主要因素:通道数、图像分辨率和体素大小。注意的是,LSS-BEVDet是BEVDet中使用的加速视图变换;LSS-BEVDepth是BEVDepth中的CUDA多线程视图变换,在CPU平台上不可使用;LSS-MatrixVT是MatrixVT中提出的视图变换。为了全面比较几种不同的解决方案,本文在CPU和GPU两个平台上比较了从S1到S6的6种不同设置,其中表示将不同的图像特征大小投影到不同的BEV特征大小。所有的延迟测量都在2080Ti设备上进行。
如下图图7所示,本文给出了Fast-Ray和其他方法的视图变换延迟结果。左图显示了CPU延迟,可以知道,无论是较小维度的S1设置还是较大维度的S6设置,Fast-Ray变换都比LSS-BEVDet和MatrixVT有很大的速度优势。具体地说,S1设置Fast-Ray比LSS-BEVDet快22倍,比MatrixVT快4倍;S6设置Fast-Ray比LSS-BEVDet快23倍,比MatrixVT快3倍;其余设置具有类似的比例速度优势。 右图显示了CUDA延迟,可以看到从S1到S6设置,与LSS-BEVDet、LSS-BEVDepth和MatrixVT相比,Fast-Ray的延迟可以忽略不计。FAST-Ray将视图转换的延迟压缩到了极致,特别是当特征大小相对较大时,速度优势比其他方法更显著。
下面是端到端部署速度比较。在实现视图转换的基础上,本文比较了Fast-Bev、BEVDet4D和BEVDepth方案在2080Ti平台上部署后的延迟。如表1所示,表的上半部分是三种方案的详细设置,包括每个组件的具体配置,包括图像分辨率、图像编码器、2D到3D转换方法、BEV分辨率、BEV编码器和检测头。表的下半部分是在性能相当的情况下各部分的延迟和三种方案的总体延迟的比较。 具体地说,2D到3D部分包括CPU和CUDA两个平台。从表格中可以看出,虽然三种解决方案中使用的这些组件的类型可能不同,但它们的性能基本相当,值得注意的是,Fast-Bev使用4帧融合,另外两种使用2帧融合。
在这种性能相当的设置下,本文对比了它们部署后的时延,从表1下半部分的最后一栏可以看出,Fast-BEV在CUDA上的延迟更小,在CPU上从2D到3D的延迟优势更加明显。具体来说,Fast-Bev在CUDA上可以达到52.6FPS,优于BEVDet4D的30.2FPS和BEVDepth的41.3FPS。当在CPU上进行2D到3D转换时,Fast-BEV可以达到21.3FPS,比其他两种方法快3倍。此外,从2D到3D视图转换和3D编码器两栏可以看出,Fast-BEV的延迟优势主要来自这两个部分,这也符合本文设计Fast-Ray变换和高效BEV编码器的动机。
Performance Compare with Other Methods
表2所示,与现有的方法性能相比,Fast-BEV在mAP和NDS方面表现出了更好的性能。FAST-BEV主要强调效率和部署友好性。虽然它不使用任何深度信息,也不使用任何显式和隐式的深度信息监督,但与现有方法相比,它具有很好的性能。
Detailed Ablation Analysis
下面是消融实验,在这里FAST-BEV使用ResNet-50作为主干网,默认图像分辨率为250×704,体素分辨率为200×200×6。
作者比较了不同数据增强方法、不同历史帧数融合、多尺度特征、图像分辨率、voxel分辨率、训练轮数、以及2D/3D编码器对性能的影响。
Benchmark
下面是一些基准测试实验,为了满足不同边缘计算能力平台的部署需求,本文设计了从M0到M5的一系列高效模型,如表10所示。本文设置了不同的图像编码器(从ResNet-18到ResNet-50)、图像分辨率(从256×704到900×1600)、体素分辨率(从200×200×4到250×250×6)和BEV编码器(从2b-192c到6b-256c)来设计模型尺寸。从表10可以看出,从M0到M5,随着图像编码器、图像分辨率、体素分辨率、BEV编码器逐渐变大,模型性能也在逐渐提升。
本文在CUDA-TensorRT-INT8的加速下,在不同的车载平台(Xavier、Orin、T4)上部署了M系列模型。具体来说,在CUDA11.4-TRT8.4.0-INT8加速情况下,AGX Xavier的计算能力为22TOPS;在CUDA11.4-TRT8.4.0-INT8加速的情况下,AGX Orin 64G的计算能力为170TOPS;在CUDA11.1-TRT7.2.1-INT8加速情况下,T4的计算能力为130TOPS。
如表11所示,本文评估了M系列模型在这些车载设备上的延迟,并将延迟细分为2D/2D-to-3D/3D三个部分。从表11可以看到:
- 随着M系列模型逐渐变大,性能逐渐提高,同一计算平台上的延迟也基本逐渐增大。2D和3D编码器的延迟也分别增加。
- 从左到右,随着这三种设备的实际计算能力的逐渐增加(实际上T4算力由于Orin),M系列各模型的延迟逐渐减小。
- 结合表11中M系列的性能可以发现,在仅考虑延迟的情况下,M0模型在Xavier这样的低计算平台上可以达到19.7FPS,能够达到实时推理速度。考虑到性能,M2模型在性能和延迟具有最合理的权衡,在Orin平台上可以达到43.3 FPS,能够达到实际的实时推理要求。