图像分割在准确识别和描绘图像中的感兴趣对象方面起着至关重要的作用。在自动驾驶中,计算机视觉算法用于解决路面分割任务。这项任务具有挑战性,因为您不能只依赖一种类型的图像——摄像头和激光雷达都有其优点和缺点。例如,激光雷达提供准确的深度信息,但它们通常会生成稀疏的点云,因此它们无法精确分割场景中的物体。当它们面对透明或反射表面时,它们可能会产生扭曲的点云。摄像头无法捕捉深度,但它们提供有关物体形状、纹理和颜色的完整信息。这让我们想到了一个简单的想法,即在训练二维道路分割时有效融合点云和图像可能会利用每个数据域的优势。问题是这种融合需要对两个数据集进行劳动密集型注释。那么,我们能否使数据注释更有效率,以享受多传感器设置对道路分割的好处?
我目前在
在这篇文章中,我将逐步描述我们的方法并展示一些测试结果。如果你想深入了解我们的工作、其他方法研究和我们的测试结果,请参阅我们的文章
我们的方法的总体流程由四个主要部分组成:点云道路注释、数据准备、掩蔽损失和分割模型本身。
首先,我们在点云域中获取带有道路注释的数据。之后,我们使用同质变换和相机参数投影点。然后,使用投影点,我们得到道路地面真实掩码,用于计算损失,并添加随机噪声。来自相机的图像由分割模型处理。Masked 损失利用了上一步的预测和掩码,这允许使用稀疏地面真实数据训练模型。最后,经过模型训练,我们得到了一张带有分割道路的图像。训练过程以及 Masked 损失允许将投影地面真实与传统的 2D 掩码混合,这使得该方法在数据方面具有灵活性。
现在让我们仔细看看每一个部分。
1 点云数据标注
要在训练期间使用激光雷达数据,我们需要对点云进行语义分割注释。这可以使用开源点云注释工具手动完成,例如
2 数据准备
使用齐次变换将获得的点云投影到图像平面上,以获得具有我们所需类标签的图像分割掩模,在我们的例子中,它是一条道路。对于这种投影,我们使用同步的相机和激光雷达帧,并附带相机参数,以及从激光雷达到相机帧的变换矩阵。为了将激光雷达帧坐标中的齐次点x = (x, y, z, 1)ᵀ
投影到图像平面上的点y = (u, v, 1)ᵀ
,我们使用以下方程:
经过转换后,我们会得到图像上的点作为像素掩码,既包括道路类别,也包括来自激光雷达扫描的所有其他点。我们需要其他激光雷达扫描点,因为激光雷达点大多位于图像的底部,而图像的顶部根本没有点,这可能会导致该区域的预测不准确。为了消除这种影响,我们在掩码的上半部分(负类)添加随机点,以平衡我们将在其中计算损失的点的分布。
3 掩蔽损失
我们方法的一个关键组成部分是在模型训练期间应用掩蔽损失函数。这种方法消除了激光雷达得出的地面实况掩蔽中固有的稀疏性。与考虑整个图像掩蔽来计算误差的传统损失函数不同,掩蔽损失仅关注激光雷达点所在的区域。这种有针对性的损失计算可确保模型的学习集中在相关区域,利用激光雷达提供的信息来提高道路分割的准确性。换句话说,我们通过测量点网格上的预测误差来强制模型学习道路分割。这可以比作使用快门眼镜(快门遮光罩)看图像。
每幅图像的掩蔽损失可以这样表示:
掩蔽损失是通过对训练图像应用二元掩码来实现的。该掩码勾勒出激光雷达点所在的区域,并将其投影到图像平面上。在训练阶段,仅针对掩码下的像素计算损失,从而有效地忽略了图像中未标注的大部分。这种方法不仅提高了训练过程的效率,而且还缓解了激光雷达数据稀疏性所带来的问题。
4 模型训练
最后一步是在创建的数据集上训练分割模型。训练过程适用于任何分割模型,在我们的研究中我们使用了 PSPNet。在这个阶段,一切都取决于数据的质量、数量和可用的计算能力。
我们在各种数据集上测试了我们的方法,包括开源数据集,例如 Perception Waymo Open Dataset 和 KITTI-360 数据集。每次我们都进行一组三项实验:仅使用 2D 道路地面实况、仅使用投影点作为地面实况以及混合使用这些类型的地面实况。道路分割(IoU 的百分比)结果看起来很有希望:
实验 | 在 KITTI-360 数据集上进行训练 | 使用 Waymo 数据集进行训练 |
---|---|---|
仅限 2D(基线) | 92.3 | 96.1 |
仅限投影 3D | 89.6 | 94.7 |
混合 2D + 投影 3D | 92.7 | 96.3 |
这些数字意味着,如果您只有激光雷达分割,并且不想在 2D 图像注释上花费额外的资源,那么没关系。与仅在 2D 图像蒙版上进行训练相比,质量下降可能微不足道。如果您有资源来注释来自两个传感器的数据,那么只需在训练过程中结合这两种类型的注释,即可获得指标的提升。
总而言之,我们在研究期间观察到的方法的好处包括: