原文链接:https://arxiv.org/abs/2304.14365
1. 引言
目前最流行的视觉感知任务之一是3D目标检测,但3D边界框的估计会忽略物体的几何细节,且模型往往会忽略数据集未标注的物体类别。
3D占用预测可以解决上述问题。3D占用预测可以表达为联合预测3D体素的占用情况(被占用、空、未被观测到)和其对应的语义标签(仅为被占用体素分配)。对未在数据集中定义的类别,可归为“通常物体”(GOs)一类。
但目前,关于3D占用预测的数据集还很少。数据集构建困难的主要原因是稀疏、遮挡和3D-2D的不对齐。本文提出半自动标注流程,由三个步骤组成:体素密集化、遮挡推理和图像指导的体素细化。每个步骤都会通过3D-2D一致性指标进行验证,证明该方法能产生密集而可见性感知的标注。
本文基于Waymo Open数据集和nuScenes数据集建立Occ3D-Waymo和Occ3D-nuScenes数据集。
本文还提出CTF-Occ,一个基于Transformer的、从粗糙到精细的3D占用预测网络。该方法以由粗到细的方式,通过交叉注意力将2D图像特征聚合到3D空间,达到更好的性能。
3. Occ3D数据集
3.1 任务定义
给定传感器的输入序列,3D占用预测的目标是估计3D场景中每一个体素的状态。具体来说,输入为 T T T帧、含 N N N个环视图像的序列 { I i , t ∈ R H i × W i × 3 } , i = 1 , ⋯ , N , t = 1 , ⋯ , T \{\mathcal{I}_{i,t}\in\mathbb{R}^{H_i\times W_i\times 3}\},\ \ i=1,\cdots,N,\ \ t=1,\cdots,T {Ii,t∈RHi×Wi×3}, i=1,⋯,N, t=1,⋯,T和各帧对应的内外参矩阵 { K i } , { [ R i ∣ t i ] } \{K_i\},\{[R_i|t_i]\} {Ki},{[Ri∣ti]}。真实标签为体素状态,包括占用状态(被占用、空、未被观测到)和语义标签(类别,或“未知”)。
3.3 数据集建立流程
由于图像无精确的深度信息,用于标注3D占用是不可能的。本文利用激光雷达点云和标注来建立高质量占用标签。但激光雷达点云的稀疏性导致无法获取密集体素。遮挡是指部分体素在图像视图中不可见(需要区分被遮挡的和未被遮挡的体素)。3D-2D的不对齐与3D体素到2D图像的投影有关,这通常由传感器噪声或姿态误差引起。
上图为本文的标签生成流程。体素密集化步骤中,对静态和动态物体分别进行多帧积累以增加点云密度。然后,使用K近邻算法进行标签分配,并使用网孔重建填补空洞。遮挡推理在激光雷达和相机视图中进行,使用射线投射来标注体素的占用状态。最后,通过图像指导的体素细化来处理不对齐的体素。
3.3.1 体素密集化
动态和静态物体的分割:将静态物体和动态物体分开进行积累,因为为动态物体使用平凡的时间聚合会导致运动模糊。
多帧聚合:对于动态物体,提取各帧边界框内的点并转换到边界框坐标系下,组合得到动态物体的密集点云。对于静态场景,在全局坐标系下进行时间聚合。最后将静态场景与动态物体组合得到密集化的点云。
KNN用于标签分配:为利用未标注的非关键帧,本文使用KNN算法为未标注的点分配标签(标注为最近的 K K K个关键帧的点中,占比最大的语义标签)。
网孔重建:即使进行了多帧聚合,点云的密度也不足以生成高质量密集体素。本文基于VDBFusion(一种基于截断有符号距离函数的体积表面重建方法)进行非地面物体的网孔重建。对于地面,建立均匀的虚拟网格点,并使用小区域内的点拟合局部表面网孔。重建网孔后,进行密集点采样,并使用KNN为样本点分配标签。
3.3.2 用于可见性掩膜的遮挡推理
聚合的激光雷达可见性掩膜:本文使用射线投射操作决定每个体素的可见性。如下图所示,从激光雷达原点投射射线到激光雷达点,若一个体素被射线穿过或包含激光雷达点,则视为“可见的”,否则被分类为“未被观测到”。
相机可见性掩膜:连接相机原点与被占用体素的中心形成射线,沿射线的第一个被占用体素被视为“被观测到”,其余设置为“未被观测到”。未被相机射线扫描到的体素也被视为“未被观测到”。
3.3.3 图像指导的体素细化
由于激光雷达噪声和姿态偏移,本文使用图像的语义分割掩膜建立3D体素与2D像素的关系。类似上一步中的射线投射方法连接图像原点与占用体素,找到与图像像素语义标签相同的第一个体素,并设置射线穿过的之前所有体素为“空”。
4. 质量检查
4.1 3D-2D一致性
计算步骤如下:过滤当前帧内与3D-2D一致性相关的2D像素区域,确定其对应的3D体素,并计算语义一致性。
2D ROI:由于2D图像包含激光雷达扫描范围外的区域,本文计算单帧激光雷达的最大覆盖范围作为2D RoI。具体来说,本文将激光雷达点云投影到图像上,然后对于图像的每一列,选择最大的垂直坐标作为该列的高度,该高度下的所有像素组成计算一致性的2D有效区域。
3D标签查询:确定图像的RoI后,对每个像素进行射线投射,选择最近的3D体素。
4.2 定量结果
相比单帧点云,多帧积累能极大增加召回率,但精度有所降低;体素化能提高精度与召回率,且越大的体素能得到越大的召回率,但精度也会降低。这是因为大体素会导致几何的过度平滑,而小体素会导致出现孔洞。引入网孔重建后,能减小小体素带来的影响。最后,图像指导的细化能促进3D-2D一致性。
5. 从粗到细的占用网络
如上图所示,本文的CTF-Occ网络首先使用图像主干提取图像特征,然后3D体素查询会通过交叉注意力聚合2D特征。本文的方法使用金字塔体素编码器,通过由粗到细的增量token选择和空间交叉注意力逐步提高体素特征表达,以加强空间分辨率并细化物体的几何细节。
增量token选择:如果将所有体素与多视图图像进行交互,会引入很大的计算量和存储消耗。由于3D场景中的大多数点均为空的,本文提出增量token选择策略,选择性地取出前景和不确定的体素进行交叉注意力的计算。该策略能在不牺牲精度的情况下实现自适应高效计算。具体来说,对每个金字塔层,每个体素会被输入二元分类器,预测改体素是否为空。该分类器使用真实占用图作为监督。然后选择前 K K K个不确定的体素进行后续的特征细化。
空间交叉注意力:使用3D空间交叉注意力,将选择的体素与图像特征交互,细化体素特征。
卷积特征提取器:更新前景体素特征后,使用卷积增强3D体素特征图的特征交互,并在最后使用三线性插值进行上采样。
占用解码器:CFT体素编码器生成体素化输出 V o u t ∈ R W × H × L × C V_{out}\in\mathbb{R}^{W\times H\times L\times C} Vout∈RW×H×L×C,输入到MLP中获取最终的占用预测 O ∈ R W × H × L × C ′ O\in\mathbb{R}^{W\times H\times L\times C'} O∈RW×H×L×C′,其中 C ′ C' C′为语义类别数。此外,还引入隐式占用解码器,使用隐式神经表达提供任意分辨率下的输出。该隐式解码器为MLP,输入为单个体素的特征向量和3D坐标,输出该体素的语义标签。
6. 实验
6.2 与过去的方法比较
Occ3D-Waymo:本文的CTF-Occ能大幅超过过去的方法,特别是对于小物体。这是因为本文的方法在不压缩高度的情况下捕捉了3D体素特征,保留了几何细节。
附录
F. 基准方案的细节
CTF-Occ使用可学习的体素嵌入。体素嵌入首先会在不进行token选择的情况下输入编码层。增量token选择时的 K K K为体素数的固定比例。
使用OHEM损失 L o c c = ∑ k W k L ( g k , p k ) \mathcal{L}_{occ}=\sum_kW_k\mathcal{L}(g_k,p_k) Locc=∑kWkL(gk,pk)其中 W k , g k , p k W_k,g_k,p_k Wk,gk,pk为第 k k k类的损失权重、标签和预测。金字塔层的二元预测损失为 L b i n = ∑ i L ( f ( g , s i ) , p i ) \mathcal{L}_{bin}=\sum_i\mathcal{L}(f(g,s_i),p_i) Lbin=∑iL(f(g,si),pi),其中 f ( g , s i ) f(g,s_i) f(g,si)为用语义占用标签生成的第 i i i层的二元体素掩膜(分辨率为 s i s_i si), p i p_i pi为二元分类头的预测结果。