📄 论文信息

  • 标题Sparse4D: Multi-view 3D Object Detection with Sparse Spatial-Temporal Fusion(v1)/ Recurrent Temporal Fusion with Sparse Model(v2)/ Advancing End-to-End 3D Detection and Tracking(v3)
  • 团队:地平线机器人(Horizon Robotics,林学武、林天威、裴子祥、黄黎超、苏志中)
  • arXiv:2211.10581(v1)/ 2305.14018(v2)/ 2311.11722(v3)
  • 关键词:全稀疏、4D 关键点采样、循环时序融合、实例去噪、检测+跟踪
  • 一句话总结:用一组稀疏实例 query 直接从多相机图像里"抠"出 3D 目标,绕开稠密 BEV,通过稀疏 4D 采样 ➜ 循环时序融合 ➜ 实例去噪三连击,把多摄像头 3D 检测与跟踪做到 nuScenes 顶尖,是全稀疏感知范式的奠基之作

Sparse4D V1 整体架构

图1:Sparse4D V1 整体架构。输入多视图图像经 backbone 提取特征后,稀疏 anchor 通过 4D 关键点采样从多视图/多尺度/多时间戳特征中聚合信息,经层级融合与迭代精炼输出 3D 检测框。


🤔 要解决什么问题?BEV 的"算力原罪"

多摄像头 3D 感知这几年几乎被 BEV 范式统治(BEVFormer、LSS、DETR3D)。主流做法是先把环视图像压成一张稠密俯视图,再在上面做检测。这套范式有效,却带着"原罪":

痛点原因后果
算力随分辨率平方爆炸BEV 是 $H\times W$ 网格,注意力/卷积都稠密算显存吃紧
算力浪费在空白区目标只占 BEV 几个像素,其余是空地天空信息密度极低
时序融合更重多帧 BEV 要对齐堆叠延迟飙升
车端部署难Orin 等芯片跑不动重 BEV backbone落地受阻

Sparse4D 的核心拷问:路上有意义的东西本来就稀疏(几十辆车、人、车道),为什么中间表示非要稠密?能不能从图像到 3D 框,全程只用一组稀疏 query? 这就是 全稀疏(Fully Sparse) 范式的起点——与 BEV 形成路线之争。


🌱 V1:稀疏 4D 采样,证明全稀疏可行

核心机制:4D 关键点采样

V1 的灵魂是对每个 3D anchor(锚框),分配多个 4D 关键点,再把它们投影到多视图 / 多尺度 / 多时间戳的图像特征上采样。这一步直接绕开了 BEV 的视角变换。

数学形式化

设第 $i$ 个 3D anchor 的状态为:

$$\mathbf{b}_i = (x, y, z, w, l, h, \theta) \in \mathbb{R}^7$$

其中 $(x,y,z)$ 是中心点坐标,$(w,l,h)$ 是尺寸,$\theta$ 是朝向角。为每个 anchor 定义 $K$ 个 4D 关键点:

$$\mathcal{P}_i = \{\mathbf{p}_{i,k} \in \mathbb{R}^3 \mid k=1,\dots,K\}$$

这些关键点分布在 anchor 的表面和内部(3D 空间 + 时间维)。第 $k$ 个关键点在 $t$ 时刻投影到第 $v$ 个相机的图像坐标为:

$$ \mathbf{u}_{i,k}^{(v,t)} = \mathbf{K}_v \cdot \mathbf{T}_{v}^{-1} \cdot \mathbf{T}_t \cdot \mathbf{p}_{i,k} $$

其中 $\mathbf{K}_v$ 是第 $v$ 个相机的内参矩阵,$\mathbf{T}_v$ 是其外参(车身→相机),$\mathbf{T}_t$ 是 $t$ 时刻的车身位姿。投影后从多尺度特征 ${\mathbf{F}v^{(l)}}{l=1}^L$ 中通过双线性插值采样特征:

$$ \mathbf{f}_{i,k}^{(v,t,l)} = \text{Bilinear}(\mathbf{F}_v^{(l)}, \mathbf{u}_{i,k}^{(v,t)}) $$

层级特征融合

采回来的特征按层级逐级融合:

  1. 视图/尺度层:同一关键点在不同相机、不同分辨率上的特征融合
$$\mathbf{f}_{i,k}^{(t)} = \sum_{v=1}^{V} \sum_{l=1}^{L} \alpha_{v,l} \cdot \mathbf{f}_{i,k}^{(v,t,l)}$$

其中 $\alpha_{v,l}$ 是可学习的加权系数(通过注意力或累加实现)。

  1. 时间戳层:同一关键点在不同历史帧上的特征融合
$$\mathbf{f}_{i,k} = \sum_{t=1}^{T} \beta_t \cdot \mathbf{f}_{i,k}^{(t)}$$
  1. 关键点层:同一 anchor 的 $K$ 个关键点特征融合成实例特征
$$\mathbf{f}_i = \sum_{k=1}^{K} \gamma_k \cdot \mathbf{f}_{i,k}$$

这种由细到粗的层级聚合,比全局注意力高效得多,又保留了空间结构。

Sparse4D V1 框架设计

图2:Sparse4D 的模块设计详解。从左至右分别为 4D 关键点采样、层级特征融合、实例级深度加权和迭代精炼模块。

层级特征融合

采回来的特征不是一股脑拼接,而是按层级逐级融合:

  • 视图/尺度层:同一关键点在不同相机、不同分辨率上的特征融合;
  • 时间戳层:同一关键点在不同历史帧上的特征融合;
  • 关键点层:同一 anchor 的多个关键点特征融合成实例特征。

这种由细到粗的层级聚合,比全局注意力高效得多,又保留了空间结构。

实例级深度加权

3D 到 2D 投影是个病态问题(深度丢失)。V1 引入实例级深度加权模块:让每个实例自己学一个深度重权,缓解投影歧义——这比全局深度显式监督更轻巧。结果上,V1 超越所有稀疏方法、并打败多数 BEV 方法,首次证明全稀疏路线在精度上不输 BEV

为什么"4D 关键点"比 BEV 视角变换更划算

理解这一步的关键是意识到:BEV 的视角变换(LSS 或 attention)本质是把所有像素都搬一遍到 3D,而不管这像素到底属不属于某个目标。Sparse4D 反过来——先有目标假设(anchor),再去像素里挑相关的特征。前者是"先到站再找人",后者是"先知道找谁再去站里挑"。当目标本来就稀疏(路上几十辆车),后者天然高效得多。而且 4D 关键点天然带时间维,运动线索直接从"同一关键点在历史帧的位置"采回来,不需要额外建时序模块——空间融合与时序融合被同一个采样动作完成,这是 V1 设计最优雅的地方。


⚡ V2:循环时序融合,把复杂度从 O(T) 压到 O(1)

解耦图像特征与锚框特征

Sparse4D V2 循环时序融合

图3:Sparse4D V2 架构。核心改进在于解耦图像特征与锚框特征,通过 GRU 门控单元实现循环式状态传播,复杂度从 O(T) 降到 O(1)。

V1 的时序融合要保留多帧历史特征,复杂度随帧数 $T$ 线性增长。V2 的关键洞察:图像特征和结构化的锚框特征可以解耦——不必缓存多帧图像特征,只需逐帧传递稀疏的锚框特征

循环式多帧采样

把时序融合改成递归形式

数学形式化

V1 的时序融合需要缓存多帧图像特征,第 $t$ 帧的实例特征为:

$$\mathbf{f}_i^{(t)} = \text{Aggregate}(\{\mathbf{f}_{i,k}^{(t,\tau)}\}_{\tau=t-T+1}^{t})$$

复杂度 $O(T)$ 且需存储 $T$ 帧的完整图像特征。V2 的关键洞察:解耦图像特征与锚框特征

V2 引入循环状态传播,设 $\mathbf{q}_i^{(t)}$ 为第 $t$ 帧第 $i$ 个 anchor 的状态特征,则更新规则为:

$$\mathbf{q}_i^{(t)} = \text{GRU}\left( \mathbf{f}_i^{(t,\text{curr})}, \mathbf{q}_i^{(t-1)} \right)$$

其中 $\mathbf{f}_i^{(t,\text{curr})}$ 是当前帧的采样特征,$\mathbf{q}_i^{(t-1)}$ 是上一帧传播来的状态。展开后:

$$\mathbf{q}_i^{(t)} = \text{GRU}\left( \text{Sample}(\mathbf{F}^{(t)}, \mathbf{b}_i^{(t)}), \mathbf{q}_i^{(t-1)} \right)$$

实际实现中,GRU 可以替换为更轻量的门控线性单元

$$\mathbf{q}_i^{(t)} = \sigma(\mathbf{W}_z \mathbf{f}_i^{(t)} + \mathbf{U}_z \mathbf{q}_i^{(t-1)}) \odot \tanh(\mathbf{W}_h \mathbf{f}_i^{(t)} + \mathbf{U}_h \mathbf{q}_i^{(t-1)}) + (1-\sigma(\cdot)) \odot \mathbf{q}_i^{(t-1)}$$
收益说明
复杂度 $O(T)\to O(1)$不随历史帧数增长,推理快、显存省
长时序融合能融合远超 V1 的长期信息,时序增益更显著

V2 在 nuScenes 3D 检测上达到 SOTA,进一步坐实"全稀疏 + 循环时序"的优越性。这套"不存多帧、只传稀疏状态“的设计,后来也成了 SparseDrive 等端到端框架的时序地基。


🎯 V3:实例去噪 + 质量估计,从检测跨入跟踪

Sparse4D V3 检测+跟踪一体架构

图4:Sparse4D V3 架构。在 V2 循环时序基础上增加实例去噪头和质量估计头,推理时无需修改架构即可扩展为多目标跟踪器。

V3 把 Sparse4D 从纯检测器升级成检测+跟踪的端到端系统,三处关键升级:

1. 时序实例去噪(Temporal Instance Denoising)

借鉴 DETR 去噪思路,但在时序维度上做——把历史帧的噪声实例送回网络辅助训练,显著稳定 query 的时序传播,检测性能同步上升。

数学定义:给定第 $t$ 帧的 ground truth 框 $\mathbf{b}^*$,构造带噪声的 query:

$$\tilde{\mathbf{q}}^{(t)} = \mathbf{q}^{(t)} + \epsilon, \quad \epsilon \sim \mathcal{N}(0, \sigma^2\mathbf{I})$$

去噪训练目标是最小化预测与 GT 之间的差距:

$$\mathcal{L}_{\text{denoise}} = \sum_{i} \left[ \mathcal{L}_{\text{cls}}(\hat{\mathbf{c}}_i, \mathbf{c}_i^*) + \mathcal{L}_{\text{reg}}(\hat{\mathbf{b}}_i, \mathbf{b}_i^*) \right]$$

但与 DETR 不同,V3 的关键创新是在时序维度上施加噪声——对历史帧的 query 加入时域扰动,强迫网络学会"即使上一帧的 query 有噪声,我也能恢复出正确位置”。这使得循环状态传播在推理时对噪声更鲁棒。

2. 质量估计(Quality Estimation)

让网络额外预测检测质量分数,给置信度更准的标定,提升下游匹配与筛选的可靠性。

质量分数定义为预测框与 GT 的 3D IoU

$$q_i = \text{IoU}(\hat{\mathbf{b}}_i, \mathbf{b}_i^*)$$

训练时用一个辅助回归头预测 $\hat{q}_i$,损失为 MSE:

$$\mathcal{L}_{\text{QE}} = \sum_i \| \hat{q}_i - q_i \|^2$$

推理时将 $\hat{q}_i$ 乘以分类得分作为最终置信度。这解决了传统分类分数无法反映定位质量的痛点。

3. 解耦注意力(Decoupled Attention)

对注意力结构做改进,让特征交互更干净、训练更稳。标准的 self-attention 是所有 token 两两交互:

$$\text{Attn}(\mathbf{Q}, \mathbf{K}, \mathbf{V}) = \text{Softmax}\left(\frac{\mathbf{Q}\mathbf{K}^T}{\sqrt{d}}\right)\mathbf{V}$$

V3 将其解耦为 content-to-content 和 content-to-position 两条路径:

$$\text{DecoupledAttn} = \text{Softmax}\left(\frac{\mathbf{Q}_c\mathbf{K}_c^T + \mathbf{Q}_p\mathbf{K}_p^T}{\sqrt{d}}\right)\mathbf{V}$$

其中 $\mathbf{Q}_c, \mathbf{K}_c$ 来自内容特征,$\mathbf{Q}_p, \mathbf{K}_p$ 来自位置编码。这种解耦让模型能同时关注"谁在说话"和"从哪说话",特征交互更加精细。

一键变跟踪器

最优雅的一笔:V3 不改动检测架构,只在推理时给每个实例分配一个 instance ID,就把检测器扩展成跟踪器。这是 query-based 算法天然的优势——实例即对象,跟踪即 query 的时序延续

具体而言,时序实例去噪在训练阶段强迫网络学会"同一个实例跨帧应该收敛到同一个 query",于是推理时只需比对相邻帧 query 特征的相似度,就能把同一目标的轨迹串起来,无需传统的卡尔曼滤波 + 匈牙利匹配那一套。这让多目标跟踪(MOT)从"检测器 + 独立跟踪模块"的拼装,变成"一个端到端网络顺手做完"。AMOTA 提升 7.6% 这个最大涨幅,正是来自这种检测-跟踪的统一红利。

nuScenes 顶配成绩

配置mAPNDSAMOTA
Sparse4D V1 (ResNet50)39.5%49.5%
Sparse4D V1 (ResNet101)43.5%53.5%
Sparse4D V2 (ResNet50)43.9%54.6%43.4%
Sparse4D V2 (VoVNet)49.6%59.8%
Sparse4D V3 (ResNet50)46.9%56.1%49.0%
Sparse4D V3 (EVA02, test)64.0%71.9%67.7%

相比基线,V3 在 mAP/NDS/AMOTA 上分别提升 3.0%/2.2%/7.6%,跟踪指标 AMOTA 提升尤为显著。

与主流 BEV 方法对比

方法Backbone范式输入尺寸mAPNDS
DETR3DResNet101稀疏 query900×160034.6%43.4%
PETRResNet101位置编码512×140841.3%50.5%
BEVFormerResNet101稠密 BEV900×160044.0%55.0%
BEVFormer-SResNet101稠密 BEV900×160045.8%56.4%
Sparse4D V1ResNet101全稀疏900×160043.5%53.5%
Sparse4D V2VoVNet全稀疏900×160049.6%59.8%
Sparse4D V3EVA02全稀疏900×160064.0%71.9%

V1 已经全面超越稀疏方法 DETR3D(+8.9 mAP),与 BEVFormer 持平(在 ResNet101 下);V2 搭配更强的 VoVNet backbone 后反超 BEVFormer;V3 配合 EVA02 达到最高性能。

时序融合消融

方法时序策略历史帧mAPNDS
Sparse4D V1多帧缓存4 帧43.5%53.5%
Sparse4D V2循环传播理论无限49.6%59.8%
V2 w/o 循环单帧无时序0 帧44.2%54.0%
V2 w/ 20 帧循环循环传播20 帧有效感受野50.1%60.3%

循环时序相比无时序提升 5.4 mAP / 5.8 NDS,且有效感受野从 4 帧扩展到 20 帧后仍能持续提升——这说明 Sparse4D 的循环状态并未饱和,能吸收更长期的时序信息。


🆚 全稀疏 vs BEV:路线之争

维度BEV 范式Sparse4D(全稀疏)
中间表示稠密俯视图稀疏实例 query
算力随分辨率平方随目标数线性
时序融合多帧 BEV 对齐(重)循环传锚框特征(O(1))
视角变换LSS / 注意力(病态)4D 关键点投影(显式)
车端部署友好
跟踪扩展需额外模块推理时分配 ID 即可

全稀疏并非全能——它在密集占据预测、栅格化可行驶区域等需要稠密表示的任务上不如 BEV 自然。但只要任务是"检测/跟踪/预测/规划"这类本质上稀疏的工作,Sparse4D 路线在效率和精度上都更优。


🔗 作为 SparseDrive 与端到端的地基

Sparse4D 的价值不止于感知。它的稀疏实例 query成了后来全稀疏端到端框架的标准接口:

Sparse4D 检测/跟踪 query运动预测 query规划 query

一条稀疏 query 流贯穿全栈,彻底跳过稠密 BEV。本系列第 7 篇的 SparseDrive V2 就是把 Sparse4D 的检测头作为端到端骨架,用"稀疏查询 + 质量感知记忆库"统一感知、预测、规划。可以说,没有 Sparse4D 打下的全稀疏地基,就没有 SparseDrive 的实时端到端

下游受益如何继承 Sparse4D
SparseDrive V2检测头直接复用稀疏 query 设计
运动预测实例 query 天然延续成预测 query
规划自车 query 与他车 query 同构交互
车端部署稀疏算力友好,Orin 可跑

⚠️ 局限与未来方向

  • 稠密任务不擅长:占据网络、可行驶区域栅格化仍需稠密表示,全稀疏不占优;
  • 小目标 / 远距离:依赖投影准确性,远距离小目标的关键点可能落进低分辨率特征,精度受限;
  • 多模态融合:与激光雷达、4D 毫米波雷达的稀疏融合(如 Sparse4D-Radar)仍在探索。

后续方向我看好:稀疏 query 与 BEV 的混合表示(稀疏管目标、稠密管占据)、时序实例去噪的进一步自监督化、以及把跟踪 ID 分配做成可学习的端到端关联


📝 个人思考

读完 Sparse4D 三连击,我最大的感触是它把"稀疏"从一种技巧上升成了一种哲学。BEV 范式之所以稠密,是历史惯性——早期 LSS 想把 2D 特征搬到 3D,最直觉的就是铺一张俯视图。但 Sparse4D 让我们看清一件事:驾驶里真正需要被表示的东西(车、人、车道、轨迹)天然就是稀疏的,稠密只是中间手段,不是目的。一旦接受了这个前提,所有"为了稠密而稠密"的算力开销就显得荒唐。从 V1 证明可行,到 V2 把时序压成 $O(1)$,再到 V3 一键变跟踪,每一版都在把"稀疏"这条路线打磨得更锋利——这是典型的"把一件事做到极致"的工程美感。

第二点启发在**“解耦"的力量**。V2 把图像特征和锚框特征解耦,是整套设计里最聪明的一笔。它意味着不必为时序付图像级的代价,只需让稀疏状态在帧间流动。这个思想其实和循环神经网络、卡尔曼滤波的精神一脉相承——真正需要传递的是"状态”,不是"观测"。我认为这种"稠密观测、稀疏状态"的分层哲学,会从感知外溢到预测和规划:未来端到端栈很可能是"稠密图像编码器 + 稀疏状态传播"的混合体,Sparse4D 已经给出了感知层的样板。

最后,V3"推理时分配 ID 就变跟踪器"这件事,道出了 query-based 范式的深层优势——统一表示天然支持任务延伸。当检测、跟踪、预测、规划共用同一套稀疏 query,任务之间的"接缝"消失了,信息不必在模块边界处反复翻译损失。这正是 SparseDrive 能把全栈串成一条流的技术前提。我倾向于认为,未来真正能上车跑通的端到端系统,一定是"全稀疏 query 流"形态,而 Sparse4D 就是这条河的源头。当算力不再是奢侈品,“稀疏"赢的不再是省算力,而是信息流的纯净度——这才是它最持久的竞争力。


🔗 延伸阅读

工作关系
DETR3D / BEVFormer多相机 3D 感知的对照面(稀疏 vs 稠密)
DETR / Deformable DETRquery-based 检测与去噪思想来源
SparseDrive V2本系列第 7 篇,把 Sparse4D 接成全稀疏端到端
StreamPETR另一类稀疏时序检测,与 Sparse4D V2 思路相通
Sparse4D-Radar路线延伸到 4D 毫米波雷达-相机融合

📖 这是论文精读系列的第 17 篇。当全稀疏从感知贯通到规划,BEV 还会剩下多少领地?欢迎留言讨论。