CNN for Very Fast Ground Segmentation in Velodyne LiDAR Data

前言


本文提出了一种新型的去地面点云方法。一种对3D点云数据编码来给CNN进行训练,最后来分割地面点云的方法。

地面点分割方法


训练数据说明


首先说明,根据Velodyne HDL-64E 生成的KITTI原始点云数据分析得知,每一帧点云尺寸大概为 64x4500,本文每一帧数据为 64x360 ,所以要对原始数据进行降采样。在每一帧点云中,每一线激光绕中心旋转一圈得到的点云按照 的归类分为 360 份,每一份点云的信息提取某一个点或者平均信息作为点代表,代表点的特征和 label 填入格子中生成CNN所需训练数据。每个点 label 进行二分类,分为地面点和分地面点。点特征包括 P = [Px, Py, Pz, Pi, Pr] ([ 坐标x, 坐标y, 坐标z, 反射强度intensity, 距离range ])。

A. 数据准备(Encoding Sparse 3D Data Into a Dense 2D Matrix)


为了将稀疏的3D点云数据应用的2D的CNN中,本文将其编码为2D的多信号通道数据储存在矩阵 M 中,如下图所示。

image.png

矩阵M尺寸为 64x360 ,降采样过程中,对一个格子内多个点进行平均取值作为代表。同时为了简化数据,[x,z] 计算得到的值代表距离,因为本文默认 Y 轴为高度方向,所以 x, z 值为对偶,可以采取此种方式进行简化数据。对于空格子,则从临近格子进行线性插值来生成该格子内值。

image.png

B. 训练数据集(Training Dataset)


训练数据集的重要性不容多说,本文自行开发了基于人工种子点选取的点云分割工具(semiautomatic tool for ground annotation,原理参考图像中的区域增长算法,只不过此处将点之间距离作为判断条件代替灰度值,同时发现当上下限为[0.03, 0.07]米时分割效果最好。选取了KITTI不同场景下共252帧点云作为人工分割数据,将分割好的数据按照7:3比例分为[训练集,评价集]
由于上面得到的数据量太少,所以本文又通过其他一些方法对剩下的19k帧数据,生成了训练所需数据集,基与点云特征有:最低高度,高度变化值,两线激光点云之间的距离和高度差。本文也尝试过自动生成数据(artificial 3D LiDAR data),但是效果较差。

C. 网络结构以及训练方法(Topology and Training of the Proposed Networks)


因为生成的训练数据较少,所以只采用浅层的CNN网络结构(shallow CNN architectures),类型为全卷积(fully convolutional)。卷积层和反卷积层都包含非线性的ReLU神经元(ReLU non-linearities),采用梯度下降方法进行训练。网络结构如下图所示:

image.png

上文 A. 中得到的矩阵 M 作为网络输入,因为是逐点(pixel)进行分类,所以网络的输出尺寸与输入尺寸相同,根据分类: ground = 1,其余点根据softmax函数概率映射进行输出。反卷积层(Deconvolutional
layers,广泛应用于语义分割(semantic segmentation)领域)在本文提出的4个网络结构中的中3个都有应用,其中包括效果最好的 L05+deconv (上图中第一个)。

CNN的输入数据先要进行归一化(normalize)和剪裁(rescale),高度方面KITTI数据集将 3m 以上的数据进行了滤波处理,深度 d 通道方面则使用 log 进行归一化处理。

image.png

image.png

实验结果


image.png

以上。


参考文献:CNN for Very Fast Ground Segmentation in Velodyne LiDAR Data.PDF

欢迎访问我的个人博客: zengzeyu.com