激光点云预处理研究概述

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了激光点云预处理研究概述相关的知识,希望对你有一定的参考价值。

参考技术A        3D点云数据的预处理是利用有效点云信息进行三维重建及障碍物感知的基础,是3D点云配准、3D点云拼接环节的前提。一般的 3D 点云预处理工作包括地面点云去除、点云滤波和点云分割。在三维点云数据处理过程中,点云数据离群点、噪声点的剔除以及点云数据的配准不仅是点云数据处理中的重要环节,也是后期对点云数据进行特征提取完成检测环节的基础。

        在进行目标物体分割时,将离散的三维数据点聚类的判断依据为点与点之间距离是否接近,而在激光雷达点云数据中,有很大一部分数据属于地面点数据,并且地面点云呈现为纹理状,这对后续障碍物点云的分类,识别带来干扰,如果不将这些地面点数据去除,在进行目标物体分割时会导致分割算法失效,因此需要先进行过滤。所以,地面点云数据去除是减少数据量以及提高分割算法准确度的有效手段。

       因此为了提高去除地面点云算法的准确性和鲁棒性,许多学者提出了大量研究方法,这些方法主要有以下两类:基于栅格图方法的地面去除研究、基于三维激光雷达原始扫描线数据的地面去除研究。

       通过激光雷达扫描得到的点云包含大部分地面点,常用的栅格图方法地面滤除点云方法有栅格高度差法、法向量方法和高度法。栅格高度法首先根据栅格大小生成网格,计算每个网格最低点与最高点的高度差,比较h与预设高度差阈值大小,对网格进行分类,最后根据网格对网格内的点进行分类。法向量法是基于计算出地面法向量为竖直向下或向上的假设,即地面点法向量值为(0,0,1)或(0,0,-1)。方法过程是计算点法向量并设定点分类的法向量阈值。高度法去除地面点云,是最常用且耗时最小的方法。根据激光雷达安装位置与姿态,可以根据设定阈值直接将点云分为地面点和障碍物点。

       基于栅格图的点云处理方式是通过将三维点云数据投影到地面,建立多个栅格单元,采用连通区域标记算法或者邻域膨胀策略对目标进行聚类,这类方法被广泛应用在激光雷达三维建模中。一是因为三维点云向二维平面投影过程极大地压缩了数据量,能够提高算法处理的实时性;二是因为点云向栅格图的映射,将复杂的三维点云处理问题转化为图像处理问题,可以使用成熟的图像处理相关算法,提高了算法处理的时间效率。栅格法简单可靠、计算效率高,但是栅格单元参数固定且往往凭经验确定,远距离目标点云较为稀疏往往会出现过分割,而近距离目标点云较为稠密又会出现欠分割,算法严重依赖于阈值参数的选择,且往往需要逐帧进行分析,必然损失部分实时性。

       由于三维激光雷达的原始三维数据包含了详细的空间信息,所以也可以用来进行相关点云数据处理。激光扫描线在地面和障碍物形成的角度值存在显著的不同,可作为分离地面点的重要依据。激光雷达中的多个激光器水平扫描周围环境中的物体,在两个相邻物体之间形成的角度很小,而同一物体的角度值很大。这启示了我们可以充分利用这一特性,大于角度阈值可认为这两点是同一物体,较好地处理了相邻目标欠分割的问题。通过将非地面点云分割为不同物体,然后进行目标物体的识别,可以为无人车提供更加详细的车辆、行人等障碍物信息,在运动中避免与不同类型的障碍物发生碰撞并进行及时避让。地面点云欠分割会导致目标漏检,过分割又会对后续的识别等操作带来影响。利用激光雷达产生点云的几何特性,研究人员提出了多种特征构建的方法,基于三维激光雷达原始扫描线数据的地面去除研究属于其中较为常用的方法。

       激光雷达在采集三维点云数据的过程中,会受到各类因素的影响,所以在获取数据时,就会出现一些噪声。其实在实际工作中除了自身测量的误差外,还会受到外界环境的影响如被测目标被遮挡,障碍物与被测目标表面材质等影响因素;另外,一些局部大尺度噪声由于距离目标点云较远,无法使用同一种方法对其进行滤波。

       噪声就是与目标信息描述没有任何关联的点,对于后续整个三维场景的重建起不到任何用处的点。但是在实际的点云数据处理算法中,把噪声点和带有特征信息的目标点区别开来是很不容易的,去噪过程中由于许多外在因素总是不可避免的伴随着一些特征信息的丢失。一个好的点云滤波算法不仅实时性要求高,而且在去噪的同时也要很好的保留模型的特征信息[88]。就需要把点云数据的噪声点特征研究透彻,才能够提出效果更好的去噪算法。

       点云数据是一种非结构化的数据格式,激光雷达扫描得到的点云数据受物体与雷达距离的影响,分布具有不均匀性,距离雷达近的物体点云数据分布密集,距离雷达远的物体点云数据分布稀疏。此外,点云数据具有无序和非对称的特征,这就导致点云数据在数据表征时缺乏明确统一的数据结构,加剧了后续点云的分割识别等处理的难度。神经网络作为一种端到端的网络结构,往往处理的数据是常规的输入数据,如序列、图像、视频和3D数据等,无法对点集这样的无序性数据直接进行处理,在用卷积操作处理点云数据时,卷积直接将点云的形状信息舍弃掉,只对点云的序列信息进行保留。

       点云滤波是当前三维重建技术领域的研究热点,同时也是许多无人驾驶应用数据处理过程中至关重要的一步。3D点云滤波方法主要可以分为以下三类,主要包括基于统计滤波、基于邻域滤波以及基于投影滤波。

       由于统计学概念特别符合点云的特性,因此,许多国内外学者都将统计学方法引用到点云滤波技术中,Kalogerakis 等人将一种稳健统计模型框架运用到点云滤波中,取得了非常好的滤波效果。在这个统计模型框架中,通过使用最小二乘迭代方法来估计曲率张量,并在每次迭代的时候根据每个点周围的领域来为样本分配权重,从而细化每个点周围的每一个邻域。然后利用计算获得的曲率以及统计权重来重新校正正态分布。通过全局能量的最小化并通过计算出的曲率和法线来把离群点去掉,并且能较好的保持点云的纹理特征。

       基于邻域的点云滤波技术,就是通过使用一种相似性度量的方法来度量点和其他周围邻域对滤波效率与结果影响比较大点的相似性,从而来确定滤波点的位置。一般来说,可以通过点云的位置、法线和区域位置来度量其相似性。1998年,Tomasi等人将双边滤波器扩展到 3D 模型去噪,由于双边滤波器具有维持边缘平滑的特点,所以在除去点云数据噪声的同时也能较好的保持细节。但是,由于该方法是通过一个网格生成的过程来去噪的,而在生成网格的过程就会引入额外的噪声。相比较于规则格网、不规则三角网等数据结构,体元是真3D的结构并且隐含有邻域关系,能够有效的防止生成网格的过程中引入噪声,但该方法的需要设置的参数比较多,不能满足实际工业运用。

       基于投影滤波技术通过不同的投影测量来调整点云中每个点的位置,从而实现噪声点云的去除。但是,如果输入的点云特别不均匀,经过局部最优投影处理后的点云将变得更散乱。孙渡等人提出了一种基于多回波及 Fisher 判别的滤波算法。首先结合格网划分思想划分点云网格,在每个网格内,通过点云数据的回波次数和强度进行划分,分出待定的样本;其次,利用Fisher判别的分析法将点云投影到一维空间内,通过判定临界值将植被点云与地面点云分离,实现陡坡点云的滤波,但是,该方法只针对点云中含有回波强度的属性才有效,对于不包含回波强度信息的点云,该方法失去作用。

       为弥补点云本身的无序性、不对称性、非结构化和信息量不充分等缺陷,在对点云进行特征识别及语义分割等操作之前,需先对点云进行数据形式的变换操作。常用的点云形式变换方法有网格化点云、体素化点云、将点云进行球面映射等。

       体素化是为了保持点云表面的特征点的同时滤除不具备特征的冗余的点云数据。由于常用的法向量计算取决于相邻点的数量,并且两个云点的分辨率也不同。所以具有相同体素大小的体素化就是为了在两个不同分辨率的点云中生成等效的局部区域。在实际进行点云配准算法的过程中,由于用于配准的源点云数据与目标点云数据的数量比较庞大、点云密集,并且这些原始点云数据中含有许多点云对于描述物体形状特征没有任何作用的点,如果使用算法直接对源点云与目标点云进行配置的话,整个过程将耗费大量时间,所以必须对点云进行下采样的同时仍保留住可以体现形状轮廓特征的那部分点云。

       由于点云本身的稀疏性、无序性和非均匀分布的特点,在利用深度全卷积神经网络结构对激光雷达点云数据进行语义分割时,端到端的卷积神经网络无法直接对无序排布点云进行操作。为使端到端的神经网络在无序性分布的点云数据上具有通用性,需先对点云数据进行映射,常见的投影方式有基于平面的投影、基于圆柱面的投影以及基于球面的点云投影方式。

参考:

周天添等(基于深度神经网络的激光雷达点云语义分割算法研究)

李宏宇(激光雷达的点云数据处理研究)

范小辉(基于激光雷达的行人目标检测与识别)

自动驾驶激光点云 3D 目标检测 PointPillar 论文简述

之前有针对 VoxelNet 这篇论文做过简述,今天的主题是 PointPillar。

PointPillar 是 2019 年提出来的模型,相比于之前的点云处理模型,它有 3 个要点:

  1. 提出 Pillar 这个概念,将类 PointNets 模型能够以 Pillar 为基础单位学习点云特征
  2. 运用标准化的 2D 卷积进行后续处理
  3. 快,满足实时要求,最快的版本到达 105 Hz

PointPillar 和前辈

处理点云最先需要大量的手工作业,后来 VoxelNet 第一次引入了真正的端到端的特征学习。

但 VoxelNet 又是基于 PointNet 的基础上做了进行的模型设计。

VoxelNet 很优秀,但有 2 个不足的地方:

  1. 运用了 3D 卷积,这个对 GPU 不友好
  2. 慢,只有 4.4 Hz

因为,VoxelNet 慢,所以,后面又有了新的网络 SECOND.

SECOND 将速度提升到了 20Hz,但是仍然保留了 3D 卷积。

好了,轮到 PointPillar 出场了。

在它的前辈

PointNet
VoxelNet
SECOND

基础上,它有一些显著的特性:

  1. 端到端的网络模型
  2. Pillar 和 2D 卷积贡献的极速推理速度
  3. 在当时 KITTI 数据集上 SOTA 表现

PointPillar 细节

PointPillar 处理点云到结果分 3 个步骤。

  1. 点云到伪图像的转换
  2. 2D backbone 网络学习高层次表征
  3. 检测头进行 3D Box 的检测和回归

点云到伪图像


在 VoxelNet 当中会将所有的点云切割成一个一个 Grid 称为 Voxel。

PointPillar 也这样做,但是在 z 轴上它不进行切割,相当于精简版本的 Voxel,也可以看成 z 轴上的 Voxel 合成一个 Pillar。

在一个 Pillar 中单个点云可以被如下表示:

x , y , z , r , x c , y c , z c , x p , y p x,y,z,r,x_c,y_c,z_c,x_p,y_p x,y,z,r,xc,yc,zc,xp,yp

这是个 9 维的增广向量,维度用 D 表示,这里 D = 9。
其中

x,y,z 是物理位置
r 是点云反射率
下标 c 是指代一个 Pillar的质心,在这里需要求出一个点云 xyz 相对质心的偏移量
下标 p 指代 Pillar 的物理中心,同样要求 x,y 的相对偏移量

为了把稀疏的点云形成稠密的数据,PointPillar 运用了 2 个手段:截取和补齐

  • 截取体现在:
    非空的 Pillar 数量超过 P 个则截取,单个 Pillar 点云数量超过 N 个就随机采样 N 个
  • 相反的,补齐体现在:
    如果 Pillar 数量过少,或者单个 Pillar 点云过少则用 0 补齐

最终所有的点云会聚集到一个稠密的尺寸为 (DxNxP) 的 Tensor 上。

然后对于每一个点云运用一个简化版本的 PointNet,之后再跟着一个简单的线性层

BN
ReLu

这个线性层等效于 1x1 的卷积。

最终能够学习到点云特征,产生了尺寸为 (CxPxN) 的 Tensor。

现在,还需要做一步工作,将点云根据索引移动回来原来的位置,产生伪图像(pseudo-image),尺寸是 (CxHxW),HW是画布的高和宽.

backbone

和 2D 目标检测一样,3D 目标检测网络中也有 backbone 模块。

PointPillar 中的 backbone 长这样。


backbone 的处理流程有 3 步:

  1. 渐进式下采样,形成金字塔特征
  2. 对应特征上采样到统一的尺寸
  3. 拼接

下采样由一系列 Block(S,L,F) 组成。

S 是相对于伪图像的 stride。
L 是 3x3 尺寸的 2D 卷积层数
F 是输出通道数

上采样的操作用 U P ( S i n , S o u t , F ) UP(S_in,S_out,F) UP(Sin,Sout,F) 表示。

in 和 out 代表 stride 是从 in 的数量到 out 的数量.

最终要得到 F 个 featrue,最终一起拼接起来。

个人的理解:为了得到不同尺寸的信息,所以需要下采样,但为了将所有信息重新统一定位到原 pseudo-image 上,所以要通过上采样重新调整尺寸.

Detection Head

PointPillar 中是用 SSD 来做 3D 检测的。
与先验的 box 对比采样的也是 2D 的 IoU。
向上的 height 和 elevation 没有参与 IoU,但添加到了额外的回归任务当中。

Loss

PointPillar 的 Loss 函数和 SECOND 保持一致。

Loss 由 3 个子 Loss 组成:

  1. Loc 定位
  2. Dir 方向
  3. Cls 类别

先看定位:

然后, d a d^a da代表 anchor 的对角线.

最终的定位 Loss 如下:

再看 Dir 的 Loss,它直接采用 Softmax 分类形式。

目标分类的 Loss 采用 Focal Loss:

在这里 α = 0.25 , γ = 2 \\alpha=0.25,\\gamma=2 α=0.25,γ=2

最终的 Loss 由 3 个 Loss 调和形成。


N p o s N_pos Npos是 anchor box 正样本数量。
β l o c = 2 , β c l s = 1 , β d i r = 0.2 \\beta_loc=2,\\beta_cls=1,\\beta_dir=0.2 βloc=2,βcls=1,βdir=0.2

数据增强

PointPillar 也是以 KITTI 为测试基准的,好其他网络一样,由于样本数量过少,数据增加也就是必不可少的操作。

PointPillar 论文中有提到,它是跟随 SECOND 的思路做的一张 lookup table,然后对于每个类别随机取样。

之后就是常规的旋转、翻转、缩放、平移之类。

表现

PointPillar 将自己的表现划分 2 个指标:mAP 和 AOS.

这个无非是想说,我很牛,我基于纯 Lidar 数据能够和 lidar+Image 融合数据后的模型媲美。

其实,我更感兴趣的是 AOS 这个指标。

AOS 是 average orientation similarity (AOS) 的意思,自然是衡量 3D box 的方向相似度。

总结

PointPillar 充分吸收前人的思想,一字排开:

  • PointNet
  • VoxelNet
  • SECOND
    最终,形成了一个能基于纯 lidar 数据媲美融合数据模型的检测效果,并且速度极快。

所以,它很棒,点个赞,在自动驾驶世界中,快是王道,不讲速度的模型是耍流氓。

以上是关于激光点云预处理研究概述的主要内容,如果未能解决你的问题,请参考以下文章

自动驾驶感知算法实战16——激光雷达点云处理原理与实战

自动驾驶感知算法实战16——激光雷达点云处理原理与实战

自动驾驶感知算法实战16——激光雷达点云处理原理与实战

自动驾驶激光点云 3D 目标检测 PointPillar 论文简述

自动驾驶激光点云 3D 目标检测 PointPillar 论文简述

Python+vtk 实现激光点云数据可视化学习(2021.7.12)