PointNet 学习笔记


前言

点云数据是3D视觉中最为常见的数据类型了,它包含了空间中点的xyz、rgb、normal、curvature等信息,然后实际上点云是一种不规则的表示形式,在研究中经常会将点云转换成3D voxel grids 或者图片的集合来表示。而在pcl中会使用特定的数据结构去保存点云如八叉树和KD树。

PointNet 是斯垣福大学在2016年提出的一种点云分类/分割深度学习框架,是首个直接输入3D点云输出分割结果的深度学习网络,属于开山之作,成为了后续很多工作的BaseLine。众所周知,点云在分类或分割时存在空间关系不规则的特点,因此不能直接将已有的图像分类分割框架套用到点云上,也因此在点云领域产生了许多基于将点云体素化(格网化)的深度学习框架,取得了很好的效果。但是将点云体素化势必会改变点云数据的原始特征,造成不必要的数据损失,并且额外增加了工作量,而 PointNet 采用了原始点云的输入方式,最大限度地保留了点云的空间特征,并在最终的测试中取得了很好的效果。

一、前人工作

在这里插入图片描述

  • 多视角(multi-view):通过多视角二维图片组合为三维物体,此方法将传统CNN应用于多张二维视角的图片,特征被view pooling procedure聚合起来形成三维物体;

  • 基于3DCNN的体素(volumetric):通过将物体表现为空间中的体素进行类似于二维的三维卷积(例如,卷积核大小为5x5x5),是规律化的并且易于类比二维的,但同时因为多了一个维度出来,时间和空间复杂度都非常高,目前已经不是主流的方法了;

  • 传统的人工点云特征分类: a. normal 法向量 ; b. intensity 激光雷达的采样的时候一种特性强度信息的获取是激光扫描仪接受装置采集到的回波强度,此强度信息与目标 的表面材质、粗糙度、入射角方向,以及仪器的发射能量,激光波长有关;c. local density 局部稠密度;d. local curvature 局部曲率

二、点云的问题/特征

1、无序性
点云本质上是一长串点(nx3矩阵,其中n是点数)。在几何上,点的顺序不影响它在空间中对整体形状的表示,例如,相同的点云可以由两个完全不同的矩阵表示。 如下图所示:
在这里插入图片描述
我们希望得到的效果如下图:N代表点云个数,D代表每个点的特征维度。不论点云顺序怎样,希望得到相同的特征提取结果。
在这里插入图片描述
2、旋转、平移不变性
相同的点云在空间中经过一定的刚性变化(旋转或平移),坐标发生变化,我们希望旋转和平移不会改变点云的分类、分割结果。

3、局域特征
点云中的点来自一个具有距离度量的空间,每个点不是独立的,,临近的点来自一个有意义的子集。也就是说,点云具有局部特征。该问题实际上没有得到解决,PointNet并没有捕获点云的局部特征。

三、网络结构

下图是网络的整体结构(分割和分类网络共享大部分网络),蓝色框内是用于分类的网络结构,蓝色框内除了最后的mlp,加上黄色框的网络是用于部件分割或或者语义分割的网络。网络中的重点包括T-Netshared mlpmax pool
在这里插入图片描述

1、PointNet分类网络

上图中上半部分的蓝色区域是分类模型。

在输入点云数据后,首先进行T-Net进行仿射变换,具体表现为乘以3*3的转换矩阵,其后通过卷积层进行特征提取,根据代码得知,mlp(64,64)的两层卷积层的卷积核数量都为64,其中第一层卷积的卷积核大小为1 * 3,第二层为1 * 1的核。而后进行相同的feature transform,在下一个mlp(64,128,1024)中,卷积核的大小都为1 * 1。在max pooling后,分别连接三个全连接层,输出节点个数依次为512、256、k,最终使用softmax函数得到结果。

其中,mlp 是通过共享权重的卷积实现的,第一层卷积核大小是1x3(因为每个点的维度是xyz),之后的每一层卷积核大小都是1x1。即特征提取层只是把每个点连接起来而已。经过两个空间变换网络和两个mlp之后,对每一个点提取1024维特征 nx1024,经过maxpool变成1x1024的全局特征。再经过一个mlp(代码中运用全连接)得到k个score。分类网络最后接的loss是softmax。

shared mlp
shared mlp的意思是多层感知机,这个多层感知机特别的地方在于它的权重是对每个点共享的,自然而然,它的实现使用的是大小为1的卷积核,卷积用的是1D卷积。通过对输入的点云的每个点单独地进行维度提升,最后通过一个max pool进行特征聚合。

T − Net
T−Net是一个mini-PointNet,用于生成一个仿射变换矩阵来对点云的旋转、平移等变化进行规范化处理,即旋转相关参数的学习。它输入原始点云数据,输出为一个 3∗3的旋转矩阵,用这个矩阵对输入的每个点或者每个特征进行空间变换,能够保证变换不变性。论文中说的是,通过T-Net,将输入空间或特征空间对齐到基准空间。
在这里插入图片描述在这里插入图片描述

同样的思路也可以用于对于特征空间的对齐.变换,唯一的不同在于输入编程了64维的特征,而输出则是 64∗64的变换矩阵了:
在这里插入图片描述
通过对特征空间使用T-Net,还需要对最终的损失加上一个正则项
在这里插入图片描述

对称函数max pooling
我们经常看到的SUM和MAX等函数其实都是对称函数,其结果对输入序列的顺序保持不变性。
因此我们可以利用max函数设计一个很简单的点云网络,如下:
在这里插入图片描述
但是这样的网络有一个问题,就是每个点损失的特征太多了,输出的全局特征仅仅继承了三个坐标轴上最大的那个特征,因此我们不妨先将点云上的每一个点映射到一个高维的空间(例如1024维),目的是使得再次做MAX操作,损失的信息不会那么多。
在这里插入图片描述
此时我们发现,当我们将点云的每个点先映射到一个冗余的高维空间后,再去进行max的对称函数操作,损失的特征就没那么多了。由此,就可以设计出这PointNet的雏形,称之为PointNet(vanilla):
在这里插入图片描述
在PointNet网络中,对于每一个N×3的点云输入,网络先通过一个T-Net将其在空间上对齐(旋转到正面),再通过MLP将其映射到64维的空间上,再进行对齐,最后映射到1024维的空间上。这时对于每一个点,都有一个1024维的向量表征,而这样的向量表征对于一个3维的点云明显是冗余的,因此这个时候引入最大池化操作,将1024维所有通道上都只保留最大的那一个,这样得到的1×1024的向量就是N个点云的全局特征。
在这里插入图片描述
其中h就相当于上面的MLP感知机,而 g就是起到对称函数作用的Max Pooling。在网络中mlp(64,64)和mlp(64,128,1024)都是复用的,是一个MLP的n份复制。

如果做的是分类的问题,直接将这个全局特征再进过MLP去输出每一类的概率即可;但如果是分割问题,由于需要输出的是逐点的类别,因此其将全局特征拼接在了点云64维的逐点特征上,最后通过MLP,输出逐点的分类概率。

训练
训练时,在估计类别概率前,对最后一层全连接层(维度256)应用了keep ratio 为0.7的dropout。Batch Normalization的衰减率(decay rate)从初始的0.5逐渐增加到0.99。用adam优化方法,初始学习率0.001,动量(momentum)0.9,batch size 32。学习率每迭代20次下降一半。

在TensorFlow下用GTX1080 GPU和ModelNet数据集训练,网络需要3-6个小时收敛

2、PointNet部件分割网络

下半部分的米白色区域是分割模型。

在分割任务中,由于需要考虑局部特征,需要将n∗64局域特征和1024维的全局特征结合在一起进行融合,在每一个点的64维特征后接续1024全局特征,得到n∗1088特征,这种做法也能一定程度上利用点云之间存在的空间关系,用包含了局部特征和全局特征的混合特征做分割,效果会更好。因为分割不仅仅需要全局特征,还需要局部特征。随后利用一个mlp(512,512,128)对n∗1088维的特征维度进行学习,生成n∗128的向量,再利用(128,m)的感知机对最后的特征进行分类(分割问题其实是针对每一个点的分类问题),其中n对应n个点,而m对应的是点对应的m个分类得分。

而实际在实验部分,作者得到的最好的结果使用是下图的结构:
在这里插入图片描述
可以看到,该结构将前面多个阶段提取的点的特征与全局特征拼接在一起,并且将该物体所属类别的one-hot编码拼接了进去,形成一个n×3024的矩阵。

在分割网络中不应用dropout。训练参数与分类网络相同。

实验

本文重点的三个实验包括在ModelNet40上的分类,在ShapeNet上的部件分割,以及在S3DIS上的场景语义分割。除此之外还有一些消融实验,如验证T-Net的作用、PointNet的鲁棒性。

分类
在这里插入图片描述
至于为什么没有MVCCN效果好,作者原文中说的是PointNet没有捕捉到精细的几何结构。

部件分割
在shapeNet上和其他方法的分割精度对比如下表所示
在这里插入图片描述
场景语义分割
在这里插入图片描述
T-Net消融实验
在这里插入图片描述
鲁棒性实验
在这里插入图片描述

结果
PointNet通过上面的操作,可以得到一个稀疏的关键点集来描述总结点云所表示的形状:
在这里插入图片描述
上图中,第一行是原始数据、第二行树关键点集(类似于骨架)、第三行为外形的上边界。关键点集相当于定义了形状的全局特征,所有的点都将落在第二行和第三行表示之间。网络的鲁棒性就来源于此处,只要保留了关键点,及时点云有变换和扰动结果也不会受到影响。同时关键点集合也意味着可以描述整个点云的性质。

最后贴几个不错的结果:
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
对于点云的编码 h ( p )

最后maxpooling输出的点云编码,可以看做是对于点云的描述。下图是对于1024个点函数在立方中进行可视化的结果,有灰度的范围描述了他们的激活区域,描述了从点云中抽取出的特征表达
在这里插入图片描述

总结

先来看网络的两个亮点:

  1. 空间变换网络解决旋转问题:三维的STN可以通过学习点云本身的位姿信息学习到一个最有利于网络进行分类或分割的DxD旋转矩阵(D代表特征维度,pointnet中D采用3和64)。至于其中的原理,我的理解是,通过控制最后的loss来对变换矩阵进行调整,pointnet并不关心最后真正做了什么变换,只要有利于最后的结果都可以。pointnet采用了两次STN,第一次input transform是对空间中点云进行调整,直观上理解是旋转出一个更有利于分类或分割的角度,比如把物体转到正面;第二次feature transform是对提取出的64维特征进行对齐,即在特征层面对点云进行变换。
  2. maxpooling解决无序性问题:网络对每个点进行了一定程度的特征提取之后,maxpooling可以对点云的整体提取出global feature。

PointNet具有较好的鲁棒性,在数据缺失20%的情况下,分类的准确率仍然保持较好的水平,其原因是PointNet能够学习到一些关键的点。在没有数据缺失的正常情况下,精确度与之前的「体素化」和「图像投影」的方法相比,也是非常优秀的。在分割方面,PointNet的平均IoU也稍优于3dCNN,但其速度是他最大的优势。

参考(感谢)
https://www.cnblogs.com/lewki/p/14101168.html

  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值