pointnet++ 译文阅读
摘要
以前很少有人研究深度学习在点集中的应用。PointNet是这方面的先驱。然而,PointNet并不能捕捉到由度量(metric)空间点所产生的局部结构,从而限制了它识别分类精密模型(fine-grained patterns)和对复杂场景的通用性。在PointNet++中,我们引入了一个多层次神经网络模型,该模型将PointNet循环应用于输入点集的内嵌分组的。通过度量空间距离,我们的网络能够通过增加相关尺度来学习局部特征(local features)。通过进一步观察发现点集通常以不同密度被采样,这导致在均匀密度下训练的网络的表现被大大削弱。实验表明,我们的网络PointNet++能够有效地学习深度点集的特征。特别地,在具有挑战性的3D点云基准测试(benchmarks of 3D point clouds)中获得的结果明显优于最先进(state-of-the-art)的技术。
pointnet 缺点 :PointNet并不能捕捉到由度量(metric)空间点所产生的局部结构
pointnet++解决的方式:在PointNet++中,我们引入了一个多层次神经网络模型,该模型将PointNet循环应用于输入点集的内嵌分组的。
引言
作为一个集合,这样的数据必须对其元素的排列具有不变性。
此外,距离度量定义了可能显示不同属性的局部特征。
例如,点的密度或其他属性在不同的位置上可能不一致——在三维扫描中,密度变化可以来自透视效果、径向密度变化、移动等
PointNet的基本思想是学习每个点的空间编码,然后将所有单个点特征(point features)聚合到点云的全局特征( global point cloud signature)中。
由于这样的设计,PointNet没有捕获到由度量(metric)引起的局部结构特征。
然而,局部结构特征对于卷积架构(CNN)的成功与否至关重要。CNN将常规2D网格上定义的数据作为输入,并能够在多分辨率层次上以越来越大的尺度上逐步捕获特征。较低层的神经元接受域较小,而较高层的神经元接受域较大。这种沿着多层结构逐步抽象局部特征的能力使得CNN允许对深层不可见的特征有更好的概括性。
我们引入了一个多层神经网络,以分层方式处理在度量空间中采样的每一组点
PointNet++的基本思想:
我们用基础空间的距离度量将点集划分为重叠的局部区域。与CNN相似,我们从小区域内提取点云得局部特征,捕捉精细的几何结构
这些局部特征被进一步分组成更大的单元,并被处理用来产生更高级别的特征。重复这个过程直到我们得到整个点集的特征。
PointNet++必须解决两个问题:
如何对数据集进行分割
如何通过局部特征学习模块来抽象点集或局部特征集
PointNet+在多个尺度上利用邻近球法,以实现健壮性和细节捕获。在训练过程中对训练数据辅以随机弃权,网络学习将自适应检测到不同尺度的权重模式,并根据输入数据结合多尺度特征。实验表明,我们的PointNet+能够高效、健壮地处理点集。特别地,在具有挑战性的3D点云基准测试中获得了明显优于最先进水平的结果。
临近球法?解决如何对数据进行分割的问题
问题阐述
假设x = ( M , d ) x=(M,d)x=(M,d)是一个离散度量空间的度量,存在于欧式空间R n R^nR n 中,其中M ⊆ R n M⊆R^nM⊆R n 是点集,d dd是距离度量。此外,欧几里德空间中M MM周围区域的密度可能不是处处均匀的。我们感兴趣的是集合学习函数f ff,它以x xx作为输入(以及每个点的附加属性),并生成语义特征来重新评估x xx的信息。实际上,f ff可以理解为给X XX分配标签的分类函数,也可以是给M MM中的每个元素分配每个点标签的分割函数。
M是一个点?还是很多个点? d是距离度量
M周围区域的密度可能不是处处均匀的
方法
我们的工作可以看作是PointNet的扩展,添加了层次结构。首先回顾了PointNet(3.1小节),然后介绍了具有层次结构的PointNet的基本扩展(3.2小节)。最后,我们提出了我们的PointNet++,它能够在非均匀采样点集(3.3小节)中很好地学习特征。
3.1 PointNet[20]的概述:一种通用的连续数集函数拟合器
这个就是解决pointnet解决点云无序性的公式
xi 就是一个点
h为一个映射函数
3.2 多层次点云特征学习
当PointNet使用单个最大池化(max pooling)操作来聚合整个点集时,新的结构体系构建了点的层次分组,并沿着层次结构逐步提取越来越抽象的局部特征区域。
网络的层次结构是由一系列集合抽象层(图2)(set abstraction)组成的
在每个层次上,处理和抽象一组点,产生一组元素更少的集合。
ps:看图很容易理解 其实就和卷积特别像 这里选定区域之后使用point来进行处理
抽象层由三个关键层组成:采样层、分组层和PointNet层。
采样层:
采样层从输入点中选择一组点,定义局部区域的质心
最远点采样?:
分组层:
找质心周围的“相邻”点来构造局部区域集
输入:一层的输入是大小为N × ( d + C ) 的一组点
一组尺寸为N'*d的质心坐标
输出:大小为N ′ × K × ( d + C ) 的点集组,每组点集对应于一个局部区域。K心邻域点的数量。注意,K 在不同的组之间是不同的但是随后的PointNet层能够灵活的将点数转换为固定长度的局部区域特征向量。
两种方法
Ball query方法查询质心点半径范围内的所有点(在调配网络时设置K的上限)
K邻近(K nearest neighbor,KNN)搜索,它可以找到固定数量的相邻点
ball query 的局部邻域保证了一个固定的区域尺度,从而使局部区域特征在空间上具有更好的可泛化性(这里就使用了这种方法 就是在以质心,半径为r构建球体,球体包括的点就是要输入的点集合 但是每组球包括的点个数可能会不一样)
PointNet层:
使用一个迷你PointNet结构作为局部特征学习模块
这样局部的特征就被抽取了出来
这个也好理解 就是转换为以质心为坐标原点的新的坐标位置
举例 x1=[2,3,4] ( 质心周围点) x0[ 1,1 ,1] (质心)
x1 = [2,3,4]-[1,1,1]=[1,2,3]
就是相对坐标了(相对于质心的坐标)
抽象层 :N是点的个数,(d + c) d是点的坐标信息 c是点特性
N‘ 子样本点 d坐标信息 c’ 局部特征
3.3 非均匀采样密度下的鲁棒特征学习
问题:区域点集的密度不一致是非常普遍的
密集数据中学习到的特性可能无法推广到稀疏采样区域。当然,为稀疏点云训练的模型可能无法识别细粒级高精度的局部结构
希望:在密集采样区域捕获最精细的细节然而,在低密度地区,这种近距离检查是无法做到的
有了以上问题 点云密度不一样 采样半径需要调整 于是提出 密度自适应点网层
当输入采样密度发生变化时,该层学会了结合来自不同尺度区域的特征。我们将具有密度自适应切入点网络层的层次网络称为PointNet++
Multi-scale grouping (MSG)不同尺度的分组:
这里看不太懂 看看代码吧
获取多尺度模式 根据不同的切入点提取每个尺度的特征。不同尺度的特征被连接起来(concat)形成一个多尺度的特征。
这种策略这是通过对每个实例的输入点随机弃权来实现的,我们称之为随机输入弃权。具体来说,对于每个训练点集,我们选择一个弃权比例θ θθ从[ 0 , p ] p ≤ 1 [0,p]p≤1[0,p]p≤1中均匀采样。对于每一个点来说,就是以θ θθ的概率随机弃权一个点。在实践中,我们设置p = 0.95 p = 0.95p=0.95以避免生成空点集。这样做我们提出各种稀疏的网络训练集(由θ θθ决定)和不一致性的网络训练集(随机性弃权产生)。在测试集中,我们保留所有可用点。
Multi-resolution grouping (MRG).:
MSG方法在计算成本非常昂贵 上面的MSG方法在计算成本非常昂贵,因为它在每个质心点的大范围邻域中运行局部特征学习模块PointNet。而且,由于质心点的数量通常在网络的前几层是相当大的,运算的时间成本非常高昂。
避免了如此昂贵的计算 仍然保留了根据点的分布特性自适应地聚合信息的能力
MRG :
感觉很像模仿了残差连接啊 主要是综合了低层和高层的信息
g(x) = f(x) + x
3.4 点集分割中的特征传播规律
我们想要获得所有原始点的点特征
解决方案是运用特征传播的方法,将特征从子采样点传播到原始点
基于距离插值的分层传播策略和跨层跳跃链接(across level skip links)的方式来实现
距离插值 :
在某一层的特性传播过程中,我们从Ni× ( d + C ) 向Ni-1 传播点特性 Nil≤Ni−1 i的输入和输出的点集的大小
我们通过插值的方式来实现特征传播,在Ni− 1 个点的坐标中插入Ni
个质心点的分割函数f的值 在插值方式的众多选择中,我们选择使用基于k邻近法(KNN ,E q . 2 在默认我们使用p = 2 , k = 3)来反向加权求平均
再将Ni− 1
点的插值特征值与点集抽象层的特征值通过跨层跳越链接的方式组合在一起。然后,连接好的特征值将传递到一个“PointNet单元”中。这个单元与与CNNs中的一层一层卷积类似。应用一些共享的全连接层和ReLU层更新每个点的特征向量。重复这个过程,直到我们将特征传播到最原始的点集。
跨层跳跃链接:
有些点直接保留到下一层
这里没太看懂 到时候看一下代码
4.实验
总结:
1. 解决 PointNet没有捕获到由度量(metric)引起的局部结构特征
解决方法:类似卷积神经网络逐层提取特征的方式 由局部到整体的方法
2. 点云密度不统一
解决方法密度自适应点网层
3.怎么确定区域(如何对数据集进行分割)
解决方法 抽象层 set abstraction
4.如何通过局部特征学习模块来抽象点集或局部特征集
解决方法: PointNet层使用迷你PointNet将局部区域模式编码为特征向量
译文参考了这两篇博客 感谢这些博主