GndNet: Fast Ground Plane Estimation and Point Cloud Segmentation for Autonomous Vehicles

GndNet: Fast Ground Plane Estimation and Point Cloud Segmentation for Autonomous Vehicles

作者Anshul Paigwar github https://github.com/anshulpaigwar 里面有一些点云处理的工作

主要工作 :地平面估计和地面的分割 在扩充的SemanticKITTI dataset上,是一种端到端的方法,同时在作者的介绍下是可以达到实时的的效果 runtime of 55HZ

网络结构 :输入为原始点云 输出为栅格化的高程估计及分割(利用高程数据)

利用这张图可以较好的解释

pic

图2.GndNet 架构:我们使用带有完全卷积编码器-解码器网络的支柱特征网络来回归局部地面高程值。 原始点云在 2D 网格中离散化,形成一组柱子。 PointNet 使用柱子中的点来学习可以散布回二维伪图像的柱状特征。 卷积编码器-解码器网络使用伪图像来学习空间特征并回归网格中每个单元的地面高程值。 然后使用具有阈值的高程值在地面和非地面类别中分割点云。

摘要

摘要- 地平面估计和地面点分割是机器人和智能车辆中许多应用的重要先导,例如导航空间检测和占用网格生成、3D 对象检测、用于定位的点云匹配和用于映射的注册。 在本文中,我们介绍了 GndNet,这是一种新颖的端到端方法,它以基于网格的表示形式估计地平面高程信息,并实时同时分割地面点。 GndNet 使用 PointNet 和 Pillar 特征编码网络来提取特征并回归网格中每个单元的地面高度。 我们扩充 SemanticKITTI 数据集来训练我们的网络。 我们展示了对地面高程估计和点云语义分割结果的定性和定量评估。 GndNet 建立了一个新的最先进技术,实现了 55Hz 的运行时间,用于地平面估计和地点分割。

引言

完全自动驾驶是一个重要但具有挑战性的目标,对此,对当地环境的可靠感知至关重要 [1]。 3D-LiDAR 是机器人和智能车辆中流行且广泛使用的传感器。 LiDAR 生成环境的高分辨率 3D 点云,同时不受光照变化的影响。 点云用于多种应用,包括对象识别、导航和路径规划。 智能车辆的导航需要对可通航空间的准确检测和障碍物的分类。 对于路径规划和估计路径上的风险,通常使用占用网格 [2]。 占用网格是车辆周围环境的 2D 空间地图,可以通过处理 LiDAR 点云数据来构建。 占用网格生成之前的典型步骤是地平面的估计和地面点的分割[3]。
地平面估计的目标是找出每个网格单元的地面高度。 由于点云的稀疏性质,这是一项具有挑战性的任务。
此外,车辆或行人等临时障碍物对某些单元格的占用,由于遮挡导致某些单元格中缺少点以及地面表面的不平整是估计地面高度的一些其他挑战。 网格单元。 正确估计地平面的好处超出了占用网格图的计算。 例如,了解每个 LiDAR 点相对于地面的高度可以使大量基于 LiDAR 的 3D 对象检测方法 [4]、[5] 受益。

属于地面的点的分割也是一项重要的任务。 如果这些点可以被分割,那么其他任务(例如对象检测和分类或定位和映射)在准确性和速度上都会得到提高。
因此,我们将我们的问题表述为找到一种方法,该方法可以实时估计地平面并同时实时分割地面点,以用于自动驾驶车辆设置,其中该方法的计算效率是一个关键方面。
在这项工作中,我们提出了 GndNet,这是一种基于深度学习的地平面估计和点云分割方法。 GndNet 使用 PointNet 来提取逐点特征 [6] 和网格上的 2D 卷积来提取空间特征。 通过利用这些特征,所提出的网络可以实时学习外观、分析场景并估计地面高程(图 1)。
基于学习的方法的一个问题是需要大量带注释的数据进行训练。 目前,没有带注释的地面高程图的公共数据集可用。 为了克服这个困难,我们提出了两种方法:形态学操作和基于 CRF [3] 的方法,以从 SemanticKITTI 数据集 [7]、[8] 中获取地面真实高程图。

本研究的主要贡献可总结如下:

• 我们提出了一种称为 GndNet 的新型深度神经网络架构,用于实时地面高程估计和点云分割。 该网络直接在稀疏的 3D 点上运行,并且是端到端可训练的。
• 我们展示了网络分析场景、学习外观以及区分属于地面和非地面的点的能力。
• 我们演示了如何从 SemanticKITTI 数据集生成地面高程地面实况数据集。
我们进行真实的实验和定量比较,以证明我们基于学习的方法的完整性。

相关工作

在本节中,我们首先讨论与地平面估计和分割相关的方法。 接下来,我们讨论仅关注地面点分割的方法。 最后,我们介绍了从点云中提取特征的深度学习方法。
地面估计出现的初始方法之一是基于高程图 [9]。 该方法用于 DARPA 城市挑战赛,基于将 3D 点投影为 2.5D 网格,然后使用 MinMax 高程图。 然而,这种方法在桥梁或树梢的情况下会出现很大的错误。 另一组研究依赖于基于二维线提取的快速算法[10]。 然而,这些基于算法的方法在大量情况下的可扩展性方面存在问题,例如弯曲的地形。 其他几种方法使用地形的梯度信息来使用马尔可夫随机场 (MRF) 或条件随机场 (CRF) [11]、[12]、[13]、[3] 对地平面进行建模。 然而,由于学习能力有限,在遮挡和稀疏点情况下的结果并不令人满意,因此地面点的分割需要额外的处理时间。

Narksri 等人提出了一种两阶段的方法来估计地面点,然后使用 RANSAC 拟合一个平面,这使得该方法很慢 [14]。 Liu 等人将高斯过程回归 (GPR) 和鲁棒局部加权回归 (RLWR) 整合为地平面的混合回归模型,由于 GP 的计算复杂性 [15],该模型也不是实时的。 在另一项研究中,Velas 等人使用一种判别方法,通过使用实时执行的神经网络来分割地面点 [16]。 然而,该网络只能进行地面点分割。 对于与自动驾驶汽车相关的任务来说,遮挡区域没有获得地平面。
大多数讨论的方法的共同点之一是使用手工制作的特征。 它们通常无法扩展,实现起来很复杂,并且计算成本很高。 不考虑地形的稀疏性、遮挡和粗糙度。
最近,深度学习方法已成为手动特征工程学习点云表示的重要替代方法。 然而,与图像相比,点云缺乏详细的纹理信息。 从 3D LiDAR 获得的点云是无序的、稀疏的并且具有可变的点密度。
最近的工作提出了新型的网络架构,以应对与点云处理相关的挑战。 其中,PointNet 在单对象分类和语义分割方面显示出令人鼓舞的结果 [6]。 PointNet 可以从一组点中学习点特征,但尚未研究其对整个大规模点云的适用性。 像 VoxelNet 这样的 3D 对象检测方法将点云离散化为体素网格 [4]。 PointPillars 采用类似的路线,但使用柱子而不是体素 [5]。 然后将 PointNet 应用于每个体素/支柱内的点,以学习体素/支柱明智的特征。 然后将此体素/支柱特征编码网络与卷积滤波器一起用于区域提议和对象检测。
受 VoxelNet 和 Pointpillars 的启发,我们选择将 PointNet 与支柱特征编码网络一起用作我们模型的主干。

三、 GNDNET架构

GndNet 接受原始点云作为输入,并生成基于网格的地面高程估计和将点云分割为两类(地面和非地面)。
它由三个主要阶段组成,如图 2 所示: (1) 将点云离散化为 2D 网格; (2) 将点云转换为稀疏伪图像的支柱特征编码网络; (3) 2D 卷积编码器解码器网络,用于处理伪图像并产生高级表示和每个单元的地面高程回归。

pic

A. 点云离散化

为了从点云中提取特征,我们首先将其离散化为 x-y 平面上的均匀间隔网格。 与将点云离散化为 3D 体素图的 VoxelNet [4] 不同,PointPillars 作者认为不需要对 z 维进行分箱,因为它不会影响检测的准确性并且计算效率显着提高 [5 ]。 这相当于创建了一组柱子 P。
我们用 l 表示点云中的一个点,坐标为 x、y、z,反射率为 r。 与 Pointpillars 类似,每个柱子中的点然后用 (xc; yc; zc; xp; yp) 增加,其中 c 下标表示到柱子中所有点的算术平均值的距离,p 下标表示与柱子的偏移量 (x; y) 中心。 4 维激光雷达点 l 现在增加为 D = 9 维。 由于点云的稀疏性,一大组柱子大部分是空的,而非空柱子通常只有几个点。 我们固定每个柱子的点数 N 以创建大小为 (D; P; N) 的密集张量,其中 P 是非空柱子的数量。 如果一个柱子包含 N 个以上的点,那么我们会随机采样这些点以拟合张量。 相反,如果柱子的数据点太少,则应用零填充来填充张量。

B. 支柱特征编码和伪图像

接下来,我们使用简化版本的 PointNet 提取每个非空支柱的特征。 我们简化的 PointNet 由一个线性层组成,该层应用于每个点,然后是 Batchnorm 和 ReLU 以生成 (C, P, N) 大小的张量。
然后,对通道进行最大池化操作会创建一个大小为 (C, P) 的输出张量。 然后将这些编码的支柱特征放置到它们在网格中的原始位置,以创建大小为 (C, H, W) 的伪图像,其中 H 和 W 表示网格的高度和宽度。

C. 编码器-解码器网络

为了提取空间特征,我们以与 SegNet [17] 类似的方式使用卷积编码器解码器网络。 网络的编码器部分由 4 个卷积层组成。 在每两个卷积层之后执行具有 2×2 窗口和步长 2(非重叠窗口)的最大池化。 编码器的输出结果以 4 倍进行二次采样。我们选择了层数,使得单元格的地面高程仅取决于其相邻的单元格。 每个编码器层都有一个相应的解码器层,因此解码器网络有 4 个卷积层,并且每两个卷积层后进行最大反池化。 最终的解码器输出与输入伪图像(网格)具有相同的形状,并被馈送到 3x3 卷积滤波器,该滤波器对伪图像(网格中的单元格)中每个像素的地面高程值进行回归。

D. 点云分割

我们将点云分割成地面或障碍点两类。 在每个单元格中,高于预测地面高程阈值 T 的点被分割为障碍物,低于阈值 T 的点被分割为地面点。 然后可以移除这些地面点以生成占用网格或促进对象检测。 地面标高本身可用于寻找可导航和不可导航的空间进行路径规划。

四. 训练和实验

使用深度神经网络的监督学习通常需要大量带注释的数据来训练。 没有带注释的地面高程和点云数据是尚未为此任务探索基于学习的方法的原因。 同样由于缺乏注释数据,现有的地面检测方法都没有进行详尽的定量评估和交叉比较。
生成带注释的地面高程数据是我们在这项工作中试图解决的一个至关重要的挑战。

A. 数据集生成

为了生成带注释的地面高程数据集,我们使用 SemanticKITTI [7] 数据集,该数据集基于 KITTI Vision 基准并使用来自里程计任务 [8] 的序列。 SemanticKITTI 为序列 00-10 的每次扫描提供密集注释。 该数据集包含 28 个类,包括区分非移动和移动对象的类(包括交通参与者),以及地面的功能类,例如停车场和人行道。

地面的定义:

我们将地面标高定义为 LiDAR 传感器参考框架中的物体边界开始或可以放置物体的高度。 例如,地面可以是车辆可以穿越的任何地形(并不意味着穿越是合法的)。 对于墙壁和树木等非移动对象,地面标高位于实际对象边界开始的底部,如图 3 所示。

为了从 SemanticKITTI 数据集生成地面高程数据集,我们首先删除所有不属于地面的点,只保留那些属于道路、人行道、停车场、其他地面和地形类别的点,如图 4 所示。我们 将整个环境划分为形状为 (100; 100) 的 2D 网格,单元格分辨率为 1m x 1m。 然后,我们计算每个单元格的真实地面高程。 此任务的一种方法是对齐点云并估计整个驾驶序列的全局高程场。 我们观察到仍然有很多细胞没有地面点,主要是由于遮挡。 我们探索了两种不同的方法来解决这个问题: 形态学方法:我们平均相应单元格中所有地面点的 z 值,并创建一个高程图,如图 5 (d) 所示。 许多属于地面的像元中没有任何点,导致像元的高程为零。 通过这项工作,我们的目标是即使在点稀疏的区域和被遮挡的区域中也能实现平滑、均匀的地平面高程。 为了填补高程图中的空洞,我们使用了一种图像处理技术的内画。 过程如下: 1)第一步是为需要修复的单元格创建一个蒙版。 我们使用图 5 (a) 中的地面点创建占用图。 我们使用膨胀来填充占用图中的漏洞,图 5 (b)。 我们从扩张的占用图中减去占用图,得到所需的掩码,图 5 ©。
2) 修复是使用来自相邻像素的信息重建图像丢失或损坏部分的过程。 我们使用在 scikit-image [19] 中实现的基于双调和函数的修复和表面补全方法 [18] 来填充高程图中的漏洞。
与仅对相邻单元进行平均相比,修复导致地面高程的插值要好得多——参见图 5 (e)。 最后,为了进一步平滑小的波峰和波谷,我们在整个修复的高程图上应用平均滤波器,图 5 (f)

基于 CRF 的方法:另一种在数学上更一致的表面重建方法是使用 CRF。 我们使用 [3] 中提出的类似 CRF 模型来模拟地平面。 基于 CRF 的方法使用时间依赖性,与基于形态学的方法相比,重建结果在结构上更明确且更一致。 图 6 显示了两种方法的输出之间的比较。
最后,我们选择使用基于 CRF 的方法来生成地面高程数据集,用于我们的网络训练。 对于每次扫描,我们保存完整的点云(包括地面和非地面点)和仅使用地面点生成的地面高程图。
为了帮助我们的网络更好地泛化具有比 SemanticKITTI 数据集中更陡坡度的具有挑战性的地形,我们通过相对于 x 和 y 轴在 (-10; 10) 度范围内随机应用 3D 旋转来增强点云。 SemanticKITTI 数据集有 11 个带注释的序列; 我们使用 7 个序列作为训练集,4 个序列作为验证集。 最终数据集包含 6584 帧用于训练和 3040 帧用于验证。

B. 损失函数 我们使用回归损失 Lreg 和空间平滑损失 Lsmooth 的组合对包括支柱特征编码层和编码器-解码器模块的完整模型进行端到端训练:

pic

其中 I 表示形状为 (H; W ) 的网格的地面实况高程图,I^ 表示预测的高程图。 超参数 α 和 β 用于平衡这两个损失。 对于高程值的回归,我们使用 Huber 损失。 对于空间平滑度,我们最小化预测高程图的二阶梯度的 L1 范数(类似于 [20])。 我们惩罚相邻单元格的二阶梯度范数,以鼓励不是恒定的而是平滑地改变高程值:

pic

其中 rx 和 ry 分别是高程图 x 和 y 方向的梯度。

思路的一些细节

首先将区域划分为网格(论文里为100*100),对每个栅格里的点,考虑其相对于栅格中心点的距离xc,yc,zc及栅格的序号xp; yp,得到新的5个维度的特征(xc; yc; zc; xp; yp),结合原有的四个特征,我们可以把点云数据变为一个9维的特征4-dimension到9-dimension。

由于点云的稀疏性,一大组支柱大部分是空的,而非空支柱通常只有几个点。我们固定了每根柱子的点数N,以创建一个大小为(D;P;N)的稠密张量,其中P是非空柱子的数目。如果一根柱子上有N个以上的点,那么我们随机抽取这些点来拟合张量。相反,如果支柱的数据点太少,则应用零填充填充张量

支柱特征编码与伪图像

接下来,我们使用简化版的PointNet提取每个非空支柱的特征。我们的简化点网由一个线性层组成,该层应用于每个点,然后是Batchnorm和ReLU,以生成(C,P,N)大小的张量。
然后,通道上的最大池操作创建大小为(C,P)的输出张量。然后将这些编码的柱特征放置到栅格中的原始位置,以创建大小为(C、H、W)的伪图像,其中H和W表示栅格的高度和宽度。注:这一段有点没看懂,得看看代码

这一段来说看这张图,意思是如何利用所给的kitt数据集来构造出我们需要的数据集,即给数据集取出其中的道路点投影到100*100的网格里,然后为了使得图像更为光滑,作者给出了两种方法,一种是图像进行膨胀腐蚀等操作等图像方法实现平滑,另一种是利用CRF方法,最终得到了我们的训练集

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值