Part 1: 2D 图像编码器
给定 NNN 张大小为 H×W×3的图像,我们对所有图像使用共享的 CNN 主干网络进行前向传播,例如使用 ResNet,并通过特征金字塔网络(FPN)创建四级特征 F1,F2,F3,F4。
然后,将这些特征全部上采样,并将它们连接起来,随后添加一个 1×1 的卷积层来融合它们,形成一个特征张量 F。
这个最终的特征张量 F 就是多视角特征的集合(例如 nuScenes 数据集中的 6 个视角)。接下来,这些多视角特征将从 2D 图像坐标系投影到 3D 自车坐标系中。
Part 2: 2D→3D 投影
2D→3D 投影是我们工作中实现多任务训练的关键模块。该模块的作用是将多视角特征 结合起来并投影到 3D 空间,从而获得体素
3D空间中体素的坐标可以使用投影公式映射到2D图像坐标:
如上图所示。
本文采用的方法为假设沿着相机射线的深度分布是均匀的,这意味着在2D图像空间中,与单个像素 P 相对应的所有沿着相机射线的体素(voxels)都填充相同的特征。
简单来说,利用相机成像原理,在相机射线上每隔一定距离生成多个点,代表不同物体的深度。求物体的位置的深度变成了每个点的概率。
与 LSS 的对比
M2BEV 和 LSS(Lift-Splat-Shoot)是两个都处理多视角图像到鸟瞰图(BEV)表示的方法,但它们有一些关键的不同。
深度估计方式:
内存使用:
- LSS:由于其深度估计方法,LSS的GPU内存使用非常高。据评估,LSS的GPU内存使用量是M2BEV的3倍。因此,LSS在处理复杂场景或使用更复杂的模型时有较大的限制。
- M2BEV:通过更加高效的特征投影和编码策略,M2BEV在内存使用上更加节省,可以处理更大的网络和更高分辨率的输入图像。
输入图像和模型主干:
- LSS:使用EfficientNet-B0作为主干网络,输入图像的分辨率仅为128 × 384,这在流行的自动驾驶数据集(如nuScenes,图像大小为1600 × 900)上显得相对较低。
- M2BEV:能够使用更大、更强的主干网络(如ResNet-101)和高分辨率输入(1600 × 900),这有助于在复杂场景下实现更高的检测和分Efficient BEV Encoder
Efficient BEV Encoder(高效的鸟瞰图编码器) 是 M2BEV 框架中的关键组件之一,它负责将 4D 体素张量转换为 3D 特征张量,并最终生成鸟瞰视图(BEV)特征。以下是该编码器的工作原理和优势:
1. “Spatial to Channel (S2C)” 操作
给定一个 4D 体素张量,我们首先使用“空间到通道(S2C)”操作来转换该张量。具体步骤如下:
- S2C 操作:通过使用
torch.reshape
函数,将 4D 张量 V 从 转换为 3D 张量。- 这种操作将 ZZZ 维度的空间信息转换为通道信息,从而使得后续的计算可以在 2D 平面上进行,而不必在 3D 空间中操作。
2. 使用 2D 卷积进行特征提取
- 在完成 S2C 转换之后,使用多个 2D 卷积层对生成的 3D 张量进行处理,以减少通道维度,提取有用的 BEV 特征。
与 3D 卷积的对比
- 计算与内存效率:与在 Z 维度上具有步幅 2 的 3D 卷积相比,S2C 操作加上 2D 卷积具有显著的效率优势。3D 卷积不仅计算量大且占用更多的内存资源,这使得构建一个重量级的 BEV 编码器变得几乎不可能。
- 灵活性:使用 S2C 操作后,我们可以轻松地使用并堆叠更多的 2D 卷积层,这使得网络更灵活,更容易在不显著增加计算负担的情况下提升模型的特征提取能力。
Dynamic Box Assignment(平衡正负样本)
Dynamic Box Assignment 是 M2BEV 框架中的一个重要设计,用于优化 3D 目标检测任务中的锚框分配。以下是该方法的详细解释:
1. 传统的 3D 锚框分配方法
- LiDAR-based 方法:许多基于 LiDAR 的方法(如 PointPillars)通常使用固定的交并比(IoU)阈值来为真实框(ground-truth boxes)分配 3D 锚框。这种方法通过比较锚框和真实框的重叠区域来进行分配,通常能够有效地捕捉到物体的几何信息。
- 问题:然而,这种基于固定 IoU 阈值的手工分配策略对于我们的任务来说并不是最优的。由于 BEV 特征表示不包含 LiDAR 深度信息,这种表示方式可能会编码不够准确的几何信息。
2. 学习分配策略的必要性
- 挑战:在没有深度信息的情况下,直接使用固定的 IoU 阈值分配锚框可能会导致 suboptimal(次优)结果,因为 BEV 表示可能会失去部分精细的空间几何信息。
- 解决方案:受 FreeAnchor 中使用的学习匹配(learning-to-match)分配策略的启发,我们将这种分配策略扩展到 3D 目标检测任务中。
3. 学习匹配(Learning-to-Match)策略
- FreeAnchor 的思路:在 FreeAnchor 中,2D 检测任务的锚框和真实框在图像坐标系下进行分配,通过学习来自动调整分配策略,使其更适应数据特性和任务需求。
- 我们的扩展:我们将 FreeAnchor 的思想扩展到了 BEV 坐标系中的 3D 锚框分配。在这种扩展中,锚框和真实框不再是简单的 2D 投影,而是根据 3D 坐标进行匹配和分配。
4. 优势
- 适应性强:Dynamic Box Assignment 能够更好地适应 BEV 表示中的几何信息不准确问题,通过学习自动调整分配规则,使得分配过程更加灵活和数据驱动。
- 优化检测性能:由于学习分配策略能够根据数据的特性动态调整,最终可以显著提升 3D 检测任务的性能,尤其是在使用摄像头而非 LiDAR 的情况下。
在训练过程中,Dynamic Box Assignment 的具体操作步骤如下:
BEV Centerness
为了提高模型对远处的目标的关注度,作者将中心度”概念从 2D 图像坐标扩展到BEV
BEV 中心度(Centerness)被定义如下:
该公式的计算结果范围从 1 到 2,并在损失函数中用作损失权重。因此,对于远离中心的样本,其预测错误会受到更大的惩罚。
2D Auxiliary Supervision
网络在训练过程中,在特征图的不同尺度添加2D检测头,利用从 ego-car 坐标系中的 3D 边界框生成 2D GT 边界框。使用相机的内参将 3D 边界框反投影到 2D 图像空间中,从而获得 2D GT 边界框。通过计算 2D 检测头的损失来提供额外的监督信号,这有助于增强图像特征对物体的感知能力,从而提升 3D 检测的准确性。
损失函数
M2BEV 框架的最终损失函数 Ltotal\mathcal{L}_{total}Ltotal 结合了三部分关键损失:3D 检测损失、BEV 分割损失和 2D 辅助检测损失。以下是详细说明:
总损失
3D 检测损失
该损失函数来源于 PointPillars [1],定义为:
BEV 分割损失
使用以下组合损失:
2D 辅助检测损失 (Ldet2d\mathcal{L}_{det_{2d}}Ldet2d)
损失函数与 FCOS [17] 相同: