Py学习  »  机器学习算法

PointNet:深度学习在3D点云分类与分割上的应用

AI 菌 • 3 年前 • 533 次点击  

大家好!我是【AI 菌】,一枚爱弹吉他的程序员。我 热爱AI、热爱分享、热爱开源 ! 这博客是我对学习的一点总结与思考。如果您也对 深度学习、机器视觉、数据结构与算法、编程 等感兴趣,可以关注我的动态,我们一起学习,一起进步~
我的博客地址为: 【AI 菌】的博客
我的Github项目地址是: 【AI 菌】的Github

资源传送门:
原论文地址: PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation
开源项目地址: TensorFlow1.0实现 PyTorch1.0实现


1. PointNet简介

点云是一种重要的几何数据结构。由于其格式不规则,大多数研究人员将这些数据转换为规则的三维体素网格(Voxel)或图像,以便于通过深度学习中的卷积操作进行权值共享、优化kernel参数等。但是,这会使得数据变得不必要的庞大,并导致一些问题。

PointNet,由斯坦福大学的Charles R. Qi等人在 CVPR2017 上发表,是一个 端对端 的神经网络,可以直接将 点云数据 作为输入,通过学习,实现对3D点云数据目标的 分类与分割

PointNet的效果很好,并且对输入的扰动等具有很好的鲁棒性,它的表现性能达到了当时最先进的水平。

PointNet的三个重要应用方面:
在这里插入图片描述

2. 提出背景

从数据结构的角度来看,点云是一组无序的向量。虽然深度学习的大部分工作都集中在常规的输入表示上,如序列(语音和语言处理)、图像和体积(视频或三维数据),但在点云的深度学习方面却做得很少。这主要是因为点云具有三个特征: 无序性、稀疏性、信息量有限

Oriol Vinyals等人最近的一项工作研究了这个问题。他们使用 带注意机制 的读写网络来输入无序的集合,并显示他们的网络具有对数字排序的能力。

在欧式空间中的点云集合具有三个特点:

  1. 无序性 。点云是一组没有特定顺序的点。
  2. 点之间的相互作用 。这些点来自具有距离度量的空间,这意味着点不是孤立的,相邻的点可以形成一个有意义的子集。因此,模型需要能够从邻近点捕捉局部结构,以及局部结构之间的相互作用。
  3. 变换下的不变性 。比如点云整体的旋转和平移不应该影响它的分类或者分割。

3. 网络结构

在这里插入图片描述
输入是包含n个点的三维点云(x, y, z) , 原始数据通过一个 3D 空间变换矩阵预测网络 T-Net(3),估计出3x3的变换矩阵T(3) 并作用在原始数据上,实现数据的对齐。对齐后的数据会以点为单位,通过一个共享参数的双层 感知机模型mlp 进行特征提取 。每个点提取出64维的特征,再通过特征空间变换矩阵预测网络 T-Net(64) 预测64x64的变换矩阵,作用到特征上,实现对特征的对齐。然后继续利用三层感知机(64,128,1024)进行以特征点为单位的特征提取,直到把特征的维度变为 1024 ,继而在特征空间的维度上进行Max Pooling,提取出点云的 全局特征向量 global feature。

  1. 一方面,全局特征向量经过三层感知机模型,得到k分类输出,实现k分类任务。
  2. 另一方面,全局特征向量与前面的64维特征向量concat,通过三层感知机模型得到128维的点特征 point features ,再经过两层感知机模型,得到n*m的特征向量。n表示输入点的个数,m表示每个点所属的类别信息,从而完成分割任务。

4. 模型的特点

无序输入的对称函数 。为了使模型对输入排列保持不变性,有三种策略:1)将输入按规范顺序排序;2)将输入视为训练RNN的序列,但通过各种置换来扩充训练数据;3)使用简单的对称函数来聚合每个点的信息。这里,一个对称函数以n个向量作为输入,并输出一个新的向量,该向量与输入顺序不变。例如,+和*运算符是对称的二进制函数。
在这里插入图片描述

用一个多层感知器网络来近似h,用一个单变量函数和一个最大池函数的组合来近似g。实验证明这种方法很有效。通过h的集合,我们可以学习一些f来捕捉集合的不同性质。

局部和全局信息融合 。点分割需要结合局部和全局知识。具体做法是:在计算出全局点云特征向量后,将全局特征与每个点特征连接起来,然后,基于合并的点特征通过3层mlp提取新的逐点特征,提取出的每点特征能同时感知局部和全局信息。

连结对齐网络 。如果点云经过一定的几何变换,如刚性变换,则点云的语义标注必须是不变的。因此,我们期望由我们的点集学习的表示对这些变换是不变的。我们通过一个小型网络 T-Net 预测仿射变换矩阵,并将此变换直接应用于输入点的坐标。小网络本身类似于大网络,由点无关特征提取、最大池和全连通层等基本模块组成。
这种思想还可以进一步扩展到特征空间的对齐。我们可以在点特征上插入另一个对齐网络,并预测一个特征转换矩阵来对齐来自不同输入点云的特征。然而,特征空间中的变换矩阵维数远高于空间变换矩阵,这大大增加了优化的难度。因此,我们在softmax训练损失中添加了一个正则化项。我们将特征变换矩阵约束为接近正交矩阵:
在这里插入图片描述 其中A是由小型网络预测的特征对齐矩阵。正交变换不会丢失输入中的信息,因此是需要的。我们发现通过加入正则化项,优化变得更加稳定,我们的模型获得了更好的性能。

5. 理论分析

  1. 证明了神经网络对连续集函数的普遍逼近能力。通过集合函数的连续性,直观地看,对输入点集的一个小扰动不应使函数值发生很大的变化,如分类或分割得分。

在这里插入图片描述

  1. 定理2(a)说明对于任何输入数据集,都存在一个关键集和一个最大集,使得对和之间的任何集合,其网络输出都和一样。这也就是说,模型对输入数据在有噪声和有数据损坏的情况都是鲁棒的。
  2. 定理2(b)说明了关键集的数据多少由maxpooling操作输出数据的维度K给出上界(框架图中为1024)。个角度来讲,PointNet能够总结出表示某类物体形状的关键点,基于这些关键点PointNet能够判别物体的类别。这样的能力决定了PointNet对噪声和数据缺失的鲁棒性。
    在这里插入图片描述

6. 性能与效果

  1. 3D Object Classification 。在ModelNet40形状分类基准上评估模型,该数据集有12311个CAD模型,来自40个人造目标的类别,9843个数据作为训练集,2468个数据作为测试集。
    在这里插入图片描述

  2. 3D Object Part Segmentation 。部件分割是一项具有挑战性的细粒度三维识别任务。给定3D扫描或网格模型,任务是为每个点或面指定部件类别标签(例如椅子腿、杯柄)。 在这里插入图片描述

  3. Semantic Segmentation in Scenes 。零部件分割网络可以很容易地扩展到语义场景分割,其中点标签变成语义目标类,而不是对象部分标签。
    在这里插入图片描述
    室内场景的目标分割效果:
    在这里插入图片描述


最好的关系是 互相成就 ,各位的「三连」就是【AI 菌】创作的最大动力,我们下期见!

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/71279
 
533 次点击