SparseBEV是我们团队在3D目标检测领域的最新研究成果。现实世界本质上是稀疏的,因此稀疏3D目标检测一直被视为重要的技术方向。然而,此前像DETR3D、PETR等稀疏模型,在与BEVFormer、BEVDet这类稠密模型对比时,性能始终存在差距。问题根源何在?通过深入分析,我们认为关键在于提升检测器在BEV空间与2D空间的适应性——即针对不同查询(query),检测器应能灵活进行特征编码与解码,而非采用统一方式。基于这一洞察,我们提出了高性能、全稀疏的SparseBEV模型。在nuScenes验证集上,SparseBEV在达到55.8 NDS的同时,保持了23.5 FPS的实时推理速度。在测试集上,仅使用轻量级V2-99骨干网络,即取得了67.5 NDS的出色性能。若换用ViT-large等大模型,性能突破70+ NDS几乎没有悬念。
该研究成果已被ICCV 2023收录,相关论文、代码以及预训练权重(包含榜单中67.5 NDS的模型)均已完全开源。

SparseBEV: High-Performance Sparse 3D Object Detection from Multi-Camera Videos
论文:https://arxiv.org/abs/2308.09244
代码:https://github.com/MCG-NJU/SparseBEV
1. 引言
当前3D目标检测方法主要分为两大流派:基于稠密BEV特征的方法与基于稀疏查询(query)的方法。前者通过构建稠密的BEV空间特征,虽然精度出色,但计算开销巨大;后者省去了这一步骤,结构更简洁且推理速度更快,然而性能始终难以超越稠密方法。这自然引发了一个关键问题:稀疏查询的方法能否达到甚至超越稠密BEV方法的性能水平?
通过实验分析,我们认为答案在于提升检测器在BEV空间与2D空间中的适应性。这里“适应性”特指针对不同查询,检测器应采用差异化的编码与解码方式。这正是此前全稀疏方法DETR3D所缺乏的关键能力。为此,我们提出SparseBEV,并引入三项核心改进:其一,尺度自适应自注意力模块(SASA),使BEV空间中的感受野能够根据目标尺度自适应调整;其二,自适应时空采样模块,使稀疏采样能够灵活适应不同尺寸与运动状态的物体,同时充分利用长时序信息;其三,动态融合机制(Dynamic Mixing),实现采样特征的自适应解码。
早在2023年2月9日,ICCV投稿前夕,我们的SparseBEV(采用V2-99骨干网络)就在nuScenes测试集上取得了65.6 NDS的成绩,超越了BEVFormer V2等同期方法。当时该方案命名为SparseBEV-Beta,具体结果可参考eval.ai榜单。

随后,我们进一步引入了StreamPETR中的一些先进设置,例如将边界框损失(bbox loss)中X和Y方向的权重调整为2.0,并加入查询去噪(query denoising)以稳定训练过程。目前,仅使用轻量级V2-99骨干网络,SparseBEV在测试集上即可达到67.5 NDS,在纯视觉3D检测排行榜中位列第四——而前三名均采用了重量级ViT-large骨干网络。

在验证集的小规模配置下(ResNet50骨干网络,输入分辨率704x256),SparseBEV取得了55.8 NDS的精度,同时维持23.5 FPS的实时推理速度,充分体现了稀疏架构的高效优势。

2. 方法
模型架构

SparseBEV的整体架构如上图所示,其核心模块包含尺度自适应自注意力(SASA)、自适应时空采样以及自适应融合机制。


有趣的是,不同类别物体对应的查询所生成的τ值呈现出显著差异。大型物体(如公交车)对应的查询感受野明显大于小型物体(如行人)的感受野(如下图所示。注意:τ值越大,感受野越小)。

与标准的多头自注意力(MHSA)相比,SASA几乎没有增加额外计算量,简洁且高效。消融实验表明,将MHSA替换为SASA后,mAP直接提升4.0,NDS提升2.2:

自适应时空采样

这样生成的采样点能够适应给定的查询,从而更好地处理不同尺寸和远近的物体。此外,这些采样点并不局限于查询边界框(bbox)内部,模型会自主决定是否将采样点散布到框外。
为了进一步捕捉长时序信息,我们将采样点映射(warp)到不同时刻的坐标系中,实现帧间对齐。自动驾驶场景包含两种运动:自车运动(ego motion)和物体运动(object motion)。对于自车运动,利用数据集提供的自车位姿(ego pose)进行对齐;对于物体运动,则利用查询中的瞬时速度向量,结合简单的匀速运动模型实现自适应对齐。两种对齐操作均能带来性能提升:

随后,将3D采样点投影到2D图像,并通过双线性插值获取对应位置的2D特征。这里有一个工程实现细节:由于输入为六张环视图像,DETR3D的做法是将每个采样点分别投影到六个视图,然后对正确投影点提取的特征取平均。我们发现大多数情况下只有一个投影点正确,偶尔有两个(出现在相邻视图的重叠区域)。因此,我们仅取其中一个投影点(即使有时存在两个),并将视图ID视为一个新坐标轴,直接使用PyTorch内置的grid sample算子的3D版本一步完成。这一优化显著提升了速度,且精度几乎不受影响(印象中仅下降0.1~0.2 NDS)。具体实现可参考代码:
github.com/MCG-NJU/SparseBEV/blob/main/models/sparsebev_sampling.py
在稀疏采样方面,我们后来基于Deformable DETR实现了CUDA优化。尽管纯PyTorch实现已经相当高效,CUDA优化仍进一步将速度提升了约15%。
下图展示了采样点的可视化结果(第一行为当前帧,第二、三行分别为历史前两帧)。可以看出,SparseBEV的采样点精确捕捉到了不同尺度的物体(空间适应性),并能对不同运动速度的物体实现良好对齐(时间适应性)。

双分支SparseBEV
实验发现,将输入的多帧图像划分为Fast和Slow两个分支进行处理,能够进一步提升性能。具体而言,Slow分支采用高分辨率但低帧率,专注于提取高分辨率的静态细节;Fast分支则采用低分辨率但高帧率,用于捕获运动信息。加入双分支后的SparseBEV结构如下图所示:

该设计不仅降低了训练开销,还显著提升了性能(详见补充材料)。性能提升表明,自动驾驶长时序场景中的静态细节与运动信息应当解耦处理。然而,由于双分支结构使模型过于复杂,默认情况下并未启用(本文中仅测试集NDS=63.6的那行结果使用了该设计)。
3. 实验结果

上表展示了SparseBEV与现有方法在nuScenes验证集上的性能对比,其中†表示方法使用了透视预训练。当使用ResNet-50骨干网络、900个查询、输入分辨率704x256时,SparseBEV超越当时最优的SOLOFusion,分别提升0.5 mAP和1.1 NDS。采用nuImages预训练、查询数降至400后,SparseBEV在达到55.8 NDS的同时,仍能维持23.5 FPS的推理速度。将骨干网络升级为ResNet-101、输入尺寸提升至1408x512后,SparseBEV超越SOLOFusion达1.8 mAP和1.0 NDS。
nuScenes测试集

上表对比了SparseBEV与现有方法在测试集上的结果,其中†表示方法利用了未来帧。在不使用未来帧的情况下,SparseBEV取得了62.7 NDS和54.3 mAP;其双分支版本进一步将性能提升至63.6 NDS和55.6 mAP。加入未来帧后,SparseBEV超越BEVFormer V2高达2.8 mAP和2.2 NDS,而我们所使用的V2-99骨干网络仅约70M参数,远低于BEVFormer V2所采用的InternImage-XL(超过300M参数)。
4. 局限性
SparseBEV也存在一些局限性:
- SparseBEV高度依赖自车位姿(ego pose)实现帧间对齐。如论文Table 5所示,若不使用ego-based warping,NDS会下降约10个点,效果几乎与未使用时序信息相当。
- 时序建模采用堆叠时序方式,耗时与输入帧数成正比。当输入帧数过多(例如16帧)时,会显著拖慢推理速度。
- 当前训练方式仍为传统方案。每次训练迭代,DataLoader需加载所有帧,对CPU性能要求较高——我们借助TurboJPEG和Pillow-SIMD加速加载。随后所有帧均需经过骨干网络,对GPU显存也有较高要求。ResNet50搭配8帧704x256分辨率,在2080Ti-11G上尚可运行;但若将分辨率、未来帧等全部拉满,则仅有A100-80G能够胜任。开源代码中的训练配置均为最低可运行配置。目前有两种解决方案:
- A. 截断部分视频帧的梯度。开源配置中提供stop_prev_grad选项,会将之前所有帧以no_grad模式推理,仅当前帧回传梯度。
- B. 另一种方案是采用SOLOFusion、StreamPETR等方法的序列训练策略,更节省显存与时间,未来可能会尝试。
5. 结论
本文提出了一种全稀疏的单阶段3D目标检测器SparseBEV。通过尺度自适应自注意力、自适应时空采样以及自适应融合三大核心模块,显著提升了基于稀疏查询模型的自适应能力,取得了与基于稠密BEV的方法相当甚至更优的性能。此外,我们还提出了一种双分支结构,用于更高效地处理长时序信息。SparseBEV在nuScenes数据集上同时实现了高精度与高速度。希望该工作能够为稀疏3D检测范式提供有益启发。
