点云数据处理
0x01 概述
(1)简介
- 点云是通过激光扫描、摄影测量等技术获取的,由大量三维空间点坐标(通常包含X、Y、Z值)组成的集合,这些点能够精确地表示物体或场景的表面形状和结构
- 点云数据特征:
- 无序性:不存在排列顺序
- 近密远疏性:扫描与视角不同导致
- 非结构化数据:不便用于 CNN(卷积神经网络)
(2)主要任务
- 点云分割:将点云数据中的每个点分配到不同的类别或区域,以实现对点云中不同物体、表面或结构的识别和区分
- 如:地面、植被、建筑物、墙体、桥梁、停车位、轨道、车辆、人行道、单车、水域、交通路线、街道设施等
- 点云补全:通过算法对不完整或缺失部分的点云数据进行补充和修复,以恢复出完整的三维物体或场景的点云模型
- 点云生成:通过算法或技术从有限的输入数据(如稀疏点云、图像或其他信息)合成或重建出完整的、高密度的三维点云模型,以满足建模、可视化或分析的需求
- 点云检测:在点云数据中识别目标物体或特征
- 点云配准:将多个点云数据集对齐到同一坐标系中
0x02 点云分割
(1)概述
-
点云数据特征提取:从点云中获取能够表征其几何、拓扑、语义等特性的信息的过程
-
常见方法:
- 基于几何特征(如法线、曲率)
- 基于拓扑特征(如欧拉数、贝蒂数)
- 基于统计特征(如质心、方差)
- 基于深度学习(如PointNet、图神经网络)
以下主要采用 PointNet 及其升级版 PointNet++
(2)PointNet
a. 简介
- PointNet 是一种深度学习模型,专门用于处理三维点云数据,通过共享的多层感知机(MLP)和最大池化操作提取点云的全局特征
- PointNet 主要功能:
- 分类
- 分割(部件、场景)
b. 原理
-
由于点云数据具有无序性,模型需要具有置换不变性:
\[f(x_1, x_2, \ldots,x_n)\equiv f(x_{\pi_1},x_{\pi_2},\ldots,x_{\pi_n}),\ x_i\in\mathbb{R}^D \]- 如:\(f(x_1, x_2, \ldots,x_n)=max\{x_1, x_2, \ldots,x_n\}\)、\(f(x_1, x_2, \ldots,x_n)= x_1+x_2+\ldots+x_n\) 等
-
PointNet 的基本出发点:先升维再做 \(max\) 操作,即 \(f(x_1, x_2, \ldots,x_n)=\gamma\circ g(h(x_1),h(x_2),\ldots,h(x_n)), g = max\)
-
PointNet 基本模型架构:输入变换网络对点云进行空间对齐,特征提取网络通过多层感知机(MLP)对每个点独立提取特征,然后通过最大池化操作聚合全局特征,最后通过全连接层输出分类结果
-
PointNet 整体网络架构:
在分类网络中,忽略输入变换(input transform)与特征变换(feature transform)
- 分类网络中(根据特征分类):
- \(n\) 的值是采样点的个数,\(\times 3\) 表示获取点的 3 个特征
- \(mlp(64,64)\) 将点的特征升维至 64 个特征,\(mlp(64,128,1024)\) 则继续升维至 1024
- \(max\ pool\) 最大池化聚合至 1024 个全局特征,通过 \(mlp(512, 256, k)\) 降维至目标特征数量 \(k\),即将目标点云分为 \(k\) 种类型
- 分割网络中(根据点分类):
- \(n \times 1088\) 是将升维至 64 个特征的点与 1024 个全局特征进行拼接
- 通过 \(mlp(512, 256, 128)\) 与 \(mlp(128, m)\) 逐步降维至目标分割数量 \(m\),即将目标点云分为 \(m\) 种部件或场景
- 分类网络中(根据特征分类):
(3)PointNet++
a. 概述
- PointNet++ 解决了 PointNet 的以下问题:
- 局部结构信息缺失:PointNet 对每个点独立提取特征,缺乏对局部结构的捕捉能力
- PointNet++ 引入了采样和分组机制,对局部邻域进行特征提取
- 全局特征信息损失:PointNet 通过最大池化直接获得全局特征,容易导致信息丢失
- PointNet++ 采用了层级特征学习框架,通过多级降采样提取不同层次的局部到全局特征
- 分割任务特征融合不足:PointNet 在分割任务中直接将全局特征复制并与局部特征拼接,生成判别性特征的能力有限
- PointNet++ 采用编码器-解码器结构,通过上采样和跳跃连接将局部和全局特征更好地融合
- 点云密度不够均匀:PointNet 对不同密度的点云处理能力有限
- PointNet++ 提出了多尺度分组(MSG)和多分辨率分组(MRG)方法,能够自适应地处理不同密度的点云
- 局部结构信息缺失:PointNet 对每个点独立提取特征,缺乏对局部结构的捕捉能力
- PointNet++ 基本出发点:基于半径选择局部区域(簇),针对上述每个区域进行特征提取(卷积)
b. 最远点采样
- 随机选择第一个点
- 在点云数据中选择距离第一个点最远的点
- 再在点云数据中,使用最大最小值的方法,选择距离第一、二个点最远的点
- 对于多个备选点,计算各点距离已选点的最小值,所有最小值中最大的最小值对应的点就是最远点
- 以此类推,直至选出目标个数的点,使得构成的簇能够覆盖所有点云数据
c. 分组
- 分组要求每个簇有相同的样本点数,如 16
- 假设样本数为 16,由于最远点采样的结果可能会导致簇中点数不等于 16,对于这些簇:
- 点数大于 16:依次移除距离中心点最远的点,直至剩余点数为 16
- 点数小于 16:复制距离中心点最近的点,直至点数达到 16
- 假设样本数为 16,由于最远点采样的结果可能会导致簇中点数不等于 16,对于这些簇:
- 分组结果为:\(原始数据 \times 中心点数 \times 样本数 \times 特征量\)
- 在实际计算时,可以采用多种半径,分别对应多种样本量,如:\(半径=(0.1, 0.2, 0.4) \to 样本量=(16, 32, 64)\)
d. 分层降采样
-
维度变换(channel first),也就是将分组结果的中心点数与特征量交换位置:\(原始数据 \times 特征量 \times 样本数 \times 中心点数\)
-
卷积操作,如:
graph LR A[原始数据<br/>batch * 3 * 16 * 128]--in=3/out=64-->B[卷积结果<br/>batch * 64 * 16 *128] -
最大池化,将每个簇提取出一个特征,如:\(batch \times 64 \times 1 \times 128\)
-
重复上述操作,直至完成多种半径的特征提取
-
将每次操作的结果进行拼接
e. 分类与分割
-
根据多层采样、分组后得到的整体特征进行分类/分割
- Hierarchical point set feature learning:分层点集特征学习
- sampling & grouping:采样与分组
- Segmentation:分割
- skip link concatenation:跳跃连接
- interpolate:插值
- Classification:分类
- full connected layers:全连接层
- Hierarchical point set feature learning:分层点集特征学习
-
其中,分割还需要进行上采样
f. MSG 与 MRG
-
由于 PointNet++ 易受样本点数影响,需要选择以下两种方法进行优化:
- 多半径进行特征拼接,即多尺度分组(MSG,左图)
- 跨层提取不同分辨率特征,即多分辨率分组(MRG,右图)
- Accuracy:准确率
0x03 点云补全
- 由于扫描或距离原因导致点云局部缺失,需要对其进行补全

0x04 点云配准
- 将两个或多个来自不同视角或时间的点云数据对齐到同一坐标系下的过程,使它们能够融合或进行后续分析
- 配准分为:
- 刚性配准:旋转与平移操作
- 非刚性配准:刚性配准基础上,增加缩放、裁剪等操作
- 常用配准算法包括:ICP、RPM、RPM-Net 等
- 基本流程:
- 通过 PointNet++ 对 X 和 Y 分别提取输入的特征
- 使用得到的特征去预测传统算法所需参数并求变换矩阵

参考文献
[1] PointNet++: Deep Hierarchical Feature Learning on Point Sets in a Metric Space.https://arxiv.org/pdf/1706.02413
[2] PF-Net: Point Fractal Network for 3D Point Cloud Completion.https://arxiv.org/pdf/2003.00410
[3] RPM-Net: Robust Point Matching using Learned Features.http://arxiv.org/pdf/2003.13479
-End-

浙公网安备 33010602011771号