【深度学习——点云】PointNet

时间:2024-04-03 15:41:23

这篇文章是发表在CVPR 2017上的一篇关于对点云数据进行分类与分割的文章,文章链接:PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation

1. Background

大数据时代下3D数据的日益增多,急需一套有效的针对3D数据的深度学习网络来进行分类、分割等任务。点云是一种简洁的、最接近原始传感器数据的结构,在深度学习之前,大多数针对点云数据的特征提取都是手工构造的方法,例如PFH、VFH、RIFT等,这类方法不够高效,对信息的利用率不够高。

但是深度学习模型一般针对是具有规则结构的栅栏型数据如语音、图像,如下图(a),但是点云数据,如图(b)(c)是2D点云数据,是不规则的且无序的。如果网络要处理这样的数据并进行分类,那就要满足两个条件:(1)改变输入点的顺序不会改变最终预测结果,即Invariant to permutation;(2)相同种类的不同点云样本,可能通过不同的采样方式进行采样,使得它们虽然具有相同的结构,却在不同的参考坐标系下,网络需要对这种点云结构的移动、旋转、缩放具有不变性,即Invariance to geometric transformations

【深度学习——点云】PointNet

2. Related Work

在此之前,针对点云的处理方法有(1)手工构造点云特征,再利用分类器进行分类,但这样的特征表达能力欠缺,在此特征基础上的高级任务不够高效;(2)将3D点云数据map到2D图像中,使用2D CNN提取特征进行分类,但是在转换过程中会丢失了很多空间信息;(3)将3D点云数据map到3D的体素数据当中,点云数据中点与点的相对距离相比规则的体素数据会更具有多样性,所以在映射过程中会不可避免丢失信息,且产生的体素数据真正的样本点是稀疏的,会产生大量冗余数据,计算效率底下。

3. Method

3.1 Invariant to permutation

为了实现Invariant to permutation,且去除对输入点的数量的依赖,需要一种具有对称性的函数来处理具有无序性的点云,使得不论如何变化点云的输入顺序都不会对结果产生影响,文章首先使用共享参数的MLP对每个点进行特征提取,再使用MaxPooling在特征维进行池化操作,使得网络对不同数量点的点云产生相同维度的特征向量,且输出对输入点的顺序产生不变性。在得到固定维度的特征向量之后,再使用一个MLP对其进行分类。

【深度学习——点云】PointNet

3.2 Invariance to geometric transformations

为了解决Invariance to geometric transformations的问题,网络提出使用矩阵相乘的方式对输入点进行坐标变化,将不同的数据变换到相同的坐标系下,即实现对齐,变换所用的矩阵由一个T-Net学习得到,该网络的输入是所有样本点,并根据这些样本点返回对应的变换矩阵。网络在输入层和特征提取层中都添加了T-Net来进行对齐。

【深度学习——点云】PointNet

以下是PointNet点云分类网络的整体结构。

【深度学习——点云】PointNet

对于分割任务来说,仅仅利用点云的global feature是不够的,对于单个点的分类需要结合该点的local feature和点云的global feature,才能充分利用信息,下图是PointNet的分割网络结构。可以看到该网络将每个点的中间局部特征和MaxPooling后得到全局特征做组合,再经过MLP进行逐点分类。

【深度学习——点云】PointNet

4. 网络的缺陷

PointNet能够很好地解决点云无序、旋转不变性的问题,但是在提取特征的过程中是单独提取每个点的特征再使用pooling整合,忽略了局部特征的提取。