Sparse4D: Multi-view 3D Object Detection with Sparse Spatial-Temporal Fusion论文解析
一、背景
对于基于多视角图像的3D目标检测,现有的工作有两个方向,分别是稀疏检测与基于BEV的检测方法。其中BEV方法是将多视图的图像特征转到BEV空间上执行下游任务,但是它的缺点是BEV特征图的构建需要从各个视角特征图进行稠密的采样工作,BEV构建复杂且资源需求高;并且感知范围受BEV特征图尺度的限制,因此需要在感知范围、效率与准确度间权;此外就是BEV特征图将高度维度压缩,导致其对于一些在高度层面上存在的信息感知不佳。而稀疏检测是直接采样稀疏特征来优化3D锚框,其中典型的DETR3D就是使用3D参考点去采样特征。
该工作做出了以下的贡献:
- 提出了Sparse4D的框架,它构建了多个4D关键点采样特征,能够有效提取每个框的上下文信息。
- 提出了可变形4D融合模块,融合多尺度、多视角、多时间戳的多个4D采样点来得到实例特征。
- 由于多个不同的3D采样点可能采样同一个点,设计了depth-reweight模块解决这个问题。
二、方法

总体流程
首先是编码器部分,使用Resnet Backbone与FPN neck处理多时间的图片,得到的输出是一个多时间、多视角、多尺度的特征图序列。而解码器部分则是包含多个迭代优化模块用于不断精进anchors,还有一个classification heaad预测类别。每个refinement模块接收特征序列、anchors以及instance feature,从而得到优化的instance feature。而reweight模块则是对于更新的instance feature进行重新加权。
Deformable 4D Aggregation

该模块包含三个部分,首先是4D keypoints generation,这里使用了fixed keypoint与 learnable keypoints,对于第二个是使用以下式子生成
Dm=Ryaw⋅[sigmoid (Φ(Fm))−0.5]∈RKL×3Pm,t0L=Dm×[wm,hm,lm]+[xm,ym,zm]D_m = \mathbb{R}{yaw} \cdot [\text{sigmoid} , (\Phi(F_m)) - 0.5] \in \mathbb{R}^{K_L \times 3} \ P^L{m,t_0} = D_m \times [w_m, h_m, l_m] + [x_m, y_m, z_m]
为了根据当前时间戳的采样点采样过去时间戳的特征,,构建了匀速模型来生成过去时刻的采样点,并使用自车运动的矩阵仿射变换,如下所示。
Pm,t′=Pm,t0−dt⋅(t0−t)⋅[vxm,vym,vzm]Pm,t=Rt0→tPm,t′+Tt0→tP_{m,t}^{\prime} = P_{m,t_0} - d_t \cdot (t_0 - t) \cdot [v x_m, v y_m, v z_m] \ P_{m,t} = \mathbf{R}{t_0 \rightarrow t} P'{m,t} + \mathbf{T}_{t_0 \rightarrow t}
第二个模块就是采样模块,这个就与DETR3D一样,最终得到一个形状为K×T ×N×S×C的特征图,分别代表keypoint num,时间、camera num、尺度、通道。
第三个模块就是融合模块,大致的流程是先将尺度与多视角的信息融合起来,再将多帧信息融合起来,最后再将多点信息融合起来,从而生成新的实例特征。具体的是先通过我们输入进来的实力特征计算组权重,这个操作类似于组卷积,最终将尺度信息与视角信息融合起来。
fm,k,t,i′=∑n=1N∑s=1SWm,k,n,s,ifm,k,t,n,s,ifm,k,t′=[fm,k,t,1′,fm,k,t,2′,…,fm,k,t,G′]f_{m,k,t,i}' = \sum_{n=1}^{N} \sum_{s=1}^{S} W_{m,k,n,s,i} f_{m,k,t,n,s,i} \ f_{m,k,t}' = \left[ f_{m,k,t,1}', f_{m,k,t,2}', \ldots, f_{m,k,t,G}' \right]
而时序信息就是迭代的拼接融合操作,对于最终的多点融合则是直接累加。
fm,k,ts′′=fm,k,ts′fm,k,t′′=Ψtemp([fm,k,t′,fm,k,t−1′′])fm,k′′=fm,k,t0′′=Ψtemp([fm,k,t0′,fm,k,t0−1′′])f''{m,k,t_s} = f'{m,k,t_s} \ f''{m,k,t} = \Psi{\text{temp}} \left( \left[ f'{m,k,t}, f''{m,k,t-1} \right] \right) \ f''{m,k} = f''{m,k,t_0} = \Psi_{\text{temp}} \left( \left[ f'{m,k,t_0}, f''{m,k,t_0-1} \right] \right)
Depth Reweight Module
使用多个带有残差连接的MLP结合实例特征得到离散的深度估计,并将水平距离近似为深度,从而得到它的置信度,将置信度与实例特征相乘得到重新加权后的特征。使用这个模块是由于3D坐标点的深度信息可能与实际上的深度估计相去甚远,虽然他们在2D投影上相近,我们的模块能够使这样的实例特征趋于0即惩罚。
训练
训练部分使用匈牙利算法一对一匹配,损失函数包含分类损失,回归损失以及深度估计损失,分类损失用focal loss,边界框损失用L1损失,深度估计用交叉熵损失,这里的深度损失是针对实例处理的,因此不依赖雷达。
实验
对于锚框的初始化,坐标信息使用训练集K-means初始化,其他信息则是固定的初始化,而instance feature则随机初始化,锚框数设为900,refinement层堆叠6层,尺度信息为4,固定节点为7,可学习节点为6,使用Resnet101作为backbone,AdamW作为优化器,参数衰减策略为余弦退火,网络预训练参数使用FCOS3D。

总结
对于历史采样点可以进一步优化。对于instance reweight 可以设计的更好
mamba提升全局注意力,可以考虑加入。时序性上的工作可以进一步优化。
