reference
这篇文章发表在17年的nips上,正好之后的工作可能是在3D点云分割上,因此这一篇文章还是算比较基础需要认真研读的。
摘要
以前很少有在点云的deep learning方面的研究,PointNet是这方面的先驱。然而,pointnet并不能捕获由点所在的度量空间所决定的局部结构,这会限制模型的细腻度识别能力以及对于复杂场景的泛化能力。在此次工作上,我们引入了一个分层的神经网络,该网络在输入特征点的一个嵌套分区上递归的使用pointnet。通过探索度量空间的距离,我们的网络可以通过增加相关尺度学习到局部特征结构,进一步观察到,点集采样通常是不同密度的,这导致训练在均匀密度下的网络性能大大降低,我们提出了新的数据集学习层,自适应地结合来自多个尺度的特征,实验表明我们的网络可以有效和鲁棒的学习到点集的特征。特别的,实验结果比在具有挑战性的点云基础上最好的算法要更好。
背景
我们对点云,也就是一些在欧式空间中点的集合感兴趣,一种特殊且重要的被3D扫描仪器捕获的几何点集,例如从装备适合的自动驾驶车上捕获的点云。作为一个集合,这些数据必须保持排列的不变性。此外,此外,距离度量还定义了可能具有不同属性的局部邻域。例如,例如,不同位置的点的密度和其他属性可能不一致,在三维扫描中,密度的变化可以来自透视效果、径向密度变化、运动等。
一些之前的deeplearning 的工作。 pointnet是直接处理point cloud的先驱网络,其基础的想法是学习一个学习每个点的空间编码,然后将所有单独的点特性聚合到一个全局点云集合,通过这样的设计,pointnet并没有获得由度量空间所展示的局部信息。然而,局部结构的利用已经被认为是卷积网络取得成功的关键点。把规则网格作为输入的CNN能够沿着多分辨率层次结构以越来越大的尺度逐步捕获特征。A CNN takes data defined on regular grids as the input and is able to progressively capture features at increasingly larger scales along a multi-resolution hierarchy
在较低层次的神经元有较小的接受域,而在较高层次的神经元有较大的接受域,沿着层次结构抽象局部特征的能力对不可见的物体具有更好的泛化性。
我们引入了一个多层次结构的神经网络,称之为Pointnet++,用于处理一组在度量空间通过多层结构采样的点。PointNet++的思想是很简单的,我们首先通过底层空间的距离度量将一组点划分为重叠的局部区域,就如同CNNs一样,我们从小的邻域中提取局部特征,该特征能够捕捉精细的几何结构,这种局部特征可以进一步整合成更大的单元用于降低高维的数据特征,整个过程会一直重复直到我们得到了点集的全局特征。
Pointnet++的设计需要解决两个问题:如何生成点集的分区,以及怎样通过一个局部特征学习器得到点集或者邻域的特征,这两个问题是相关的,因为点集的分区会在分区之间产生公共结构,因此局部特征学习器是可以共享权重的,就如同卷积设置一样。我们选择我们的局部特征学习模块为pointnet,正如在那篇文章证明的一样,对于无序点集的语义特征提取来说,pointnet是一个很有效的结构,此外,这个结构对输入损坏的数据鲁棒。作为一个基础的block,pointnet提取一系列局部点云或者特征结构表示为更高层次的表达。In this view ,pointnet++在输入集合的嵌套分区上循环的使用pointnet。
一个仍然需要解决的问题是如何生成有重叠区域的分区,每个分区都定义为在欧几里得空间的邻接球,为了均匀的覆盖整个输入点集,我们采取了最远点采样的方法(FPS),和以一个固定步长扫描整个数去的体素CNN相比,我们的局部感知依赖于输入和度量,因此会更加有效。
确定适当大小的邻域球,然而,由于特征尺度的互相关性和输入的不均匀性导致了这是一个很具有挑战性但是很有趣的问题,我们假设输入的点集在不同区域有这笔不一样的密度大小,这很符合实际扫描出来的数据特点,如下图所示:
我们的输入和CNN的相当不同,CNN的输入可以当做是被定义在均匀网格上,并且具有连续均匀密度的数据集合。在CNNs中,和分区大小所对应的是卷积核的大小,【25】展示了如何使用更小的核帮助提高CNN的性能,我们在点集上的实验表明,我们的效果与此相反。由于采样不足,小邻域可能由太少的点组成,这可能不足以让pointnet鲁棒地捕获局部特征。
本文一个重要的贡献在于我们的pointnet++在多尺度上利用了邻域信息来达到鲁棒性和细节提取。借助输入的random dropout,网络根据不同的scals 自适应的学习了权重参数并且根据输入的数据结合多尺度特征。实验表明我们的pointnet++能够有效和鲁棒的处理输入点集,特殊的,结果比目前3D最好的效果要好。
问题描述
假设X = (M, d)
是一个由欧几里得空间所继承而来的离散度量空间,其中M是点云集,d是度量距离.此外,密度在欧几里得空间中不一定是处处均匀的。我们的兴趣点在于通过输入X以及它的额外特征信息来学习对应和X相关的语义信息。实际上,这样一个学习到的函数可以是一个直接分配给X标签的分类函数,也可以是对每一个点都分配标签的分割函数。
方法
我们的工作可以看做是pointnet添加了层次结构的延续工作,我们会在3.1节中回顾pointnet,然后再3.2节讲具有延伸层次结构的pointnet,最后我们提出我们的pointnet++,pointnet++ 是可以鲁棒的学习特征,尽管是在不平衡点集上的采样。
3.1 pointnet 的回顾
考虑一组不平衡数据集{x1,x2,...,xn}\{x_1,x_2,...,x_n\}{x1,x2,...,xn},其中xi∈Rdx_i\in R^dxi∈Rd,集合函数fff可以定义为:x→Rx\rightarrow Rx→R的一组点集映射到一个向量的函数:
f(x1,x2,...xn)=r(maxi=1,...,n{h(xi)})
f(x_1,x_2,...x_n)=r(\max_{i=1,...,n}\{h(x_i)\})
f(x1,x2,...xn)=r(i=1,...,nmax{h(xi)})
其中的r和hr和hr和h通常是多层感知器网络,上述的式子对输入点集具有排列不变性,以及能够逼近任意连续集合函数,注意到hhh函数的返回值可以看做是一个点的空间编码。
pointnet 在一些基准上取得了不错的效果,但是,它缺乏在不同尺度上提取局部特征的能力,下一节我们将要介绍一个富哦层特征提取结构来解决这个问题。
3.2 多层点集特征学习
尽管pointnet仅仅使用poolIng 来整合整个点集,但是我们的新结构设计了一个多层次点集组合并且一步一步提取了越来越大的局部区域。
我们的多层次结构是由一系列的set-abstraction结构组成,如下图:
在每一个层级结构上,一个集合的点被处理和提取来生成一些更少元素的新集合,set-abstraction包括了三个主要层级:Sanpleing layer, Group layer和Pointnet Layer
,SamplelayerSample layerSamplelayer从输入集合中采样一系列点集代表了局部区域的中心点。Group−layerGroup-layerGroup−layer根据中心点重建局部区域。Pointnet−layerPointnet-layerPointnet−layer采用一个mini-pointnet对局部区域的特征进行编码成向量。
一个set−absractionset-absractionset−absraction的结构输入是N∗(d+c){N*(d+c)}N∗(d+c)的矩阵(表示的是具有N个点,每个点d维,包含有c个点特征)。它输出的是N′∗(d+C′)N'*(d+C')N′∗(d+C′)的矩阵,这里边呢,是d维的,C’维度特征的向量(从局部特征结构中提取出)。
Sample−layerSample-layerSample−layer: {x1,x2,...,xn}\{x_1,x_2,...,x_n\}{x1,x2,...,xn}为输入集合,我们使用迭代最远采样的方式采取点的子集{xi1,xi2,...,xim}\{x_ {i1},x_ {i2},...,x_{im}\}{xi1,xi2,...,xim},每一个xijx_{ij}xij都是距离集合xi1,xi2,...,xi,j−1{x_ {i1},x_ {i2},...,x_ {i,j-1}}xi1,xi2,...,xi,j−1最远的点。和随机采样相比,在给定的中心点数一样的情形下,最远点采样最原始集合具有更好的概括性,和CNNS不同的是,CNNS所扫描的数据并不知道数据分布是怎样的,我们的采样方式以一种数据依赖的方式生成receptive fileds。
Group−layerGroup-layerGroup−layer 这一层的输入是一个点的集合,对应的大小为N∗(d+c){N*(d+c)}N∗(d+c),一组大小为N′∗dN'*dN′∗d的质心的大小。输出则是一组点集大小为N′∗K∗(d+c)N'*K*(d+c)N′∗K∗(d+c),这是每一个组对应着一个局部邻域,其中kkk表示的是每个邻域所含有点的个数,注意到KKK的值是随着不同组而不同的,而后使用的pointnet也是能够将可变的点数转化为固定长度的局部特征结构。
在卷积网络中,一个像素的局部区域包含了由曼哈顿距离所衡量的以其为中心的矩阵,也就是卷积核,在一个通过从度量空间采样得到的点集中,数据的邻域是根据欧式距离来的。
Ball query是查找离中心点半径内的所有点(在实现时,设置了上限K的值)。一个可以替代的采样方式是KNN,这会收集到固定值的点的集合。和CNN相比,ball query的局部领域保证了一个固定的区域大小,因此可以使得局部特征更加一般化,这更加适用于需要局部模式识别的任务。
PointNet−LayerPointNet- LayerPointNet−Layer 这一层次结构,输入为N’个局部领域的矩阵N′∗K∗(d+c)N'*K*(d+c)N′∗K∗(d+c)。输出中的每个局部区域由其质心和编码质心邻域的局部特征抽象而成,输出的大小为N′∗(d+c′)N'*(d+c')N′∗(d+c′)
密度不平衡采样的鲁棒特征学习
正如前面所讨论的那样,不同区域的点集具有密度上的不同。这对点集的学习造成了很到的挑战性。从密集数据中学习到的数据特征可能并不适用了稀疏采样的点集,因此,使用稀疏点集合所学习到的模型或许并不能很好的识别细粒度识别局部结构。
理想上的,我们希望尽可能近距离地检查一个点集,以捕捉密集采样区域的最细微的细节,然而,在低密度地区,这种检查是禁止的,因为局部模式可能会被采样不足所破坏。在这种情况下,我们应该在更大的区域寻找更大的尺度模式,为了实现这个目标,正如下图所展示的那样,我们提出了密度自适应Pointnet-layers用于在输入的采样密度变化时,学习从不同的尺度上组合特征,我们把我们具有多层次自适应密度网络的结构称为pointnet++。
回顾3.2,每一个abstraction层次包含了组合和对的单个区域的特征提取。在pointnet++中,每一个abstraction结构会提取多个尺度的特征并且根据邻域点密度聪明的组合他们,为了在局部区域上进行分组和在不同尺度上组合特征结构,我们提出了两种密度自适应的方法。上图所示。
Multi−scaleGroupingMulti-scale GroupingMulti−scaleGrouping如上图a所示的那样子,一个简单且高效的方法就是在group layer当中采用不同的尺度大小,并采用pointnet对每一个维度进行特征提取。不同尺度的特征最后被整合在一个特征图上。
我们结合多尺度特征训练了一个优化策略。根据一个概率随机的丢掉一些输入的数据来完成这一任务,我们称之为,随机输入丢失。特殊的,对每一个训练的数据集合,我们选择一个随机丢失比例θ\thetaθ,其中θ\thetaθ,从均匀采样的[0,p][0,p][0,p]采样得出,其中p≤1p \le{1}p≤1.对于每一个点而言,我们按照概率θ\thetaθ随机的都说是,实际上,为了避免生成空的数据集,我们设置的参数p=0.95p=0.95p=0.95,在做这个过程中,我们用各种由θ\thetaθ引起的稀疏集合和由丢失的随机性带来的不同均匀性来表征网络。
Multi−resolution−GroupingMulti-resolution -GroupingMulti−resolution−Grouping MSG方法的计算代价是很大的,这是因为他会在每一个尺度大小的局部结构上都采用pointnet进行特征提取。特殊的,因为中心点的个数在低层次的网络结构中是很多的,因此在计算的时间上消费也很大。
这里我们提出一个可用于替代的方法,该方法可以避免如此大的计算耗费,却也依然可以保留着通过点分布自适应整合数据特征的能力,如图3(b)所示,在LiL_iLi层的局部特征由两个向量组成,其一(左边坐标)是由上一层Li−1L_{i-1}Li−1提取整合的特征结构,而右边的向量是在局部邻域上采用单一pointnet处理这一层的数据得到的特征向量。
当局部区域的密度很低的时候,第一个向量的可信度比第二个向量的可信度要低很多,因为计算第一个向量的子区域包含更稀疏的点,且采样不足的情况更严重。在这种情况下,第二个向量应该给予更高的权重。另外一方面,当局部区域的密度很高的时候,第一个向量提高更好的细节信息因为它具有在较低的层级上,以较高的分辨率递归检查。和MSG相比,这个方法高效很多,原因是在更低的层级上,我们无需耗费这么大的计算量。
分割的点特征传递
在set-abstraction 层,原始的数据是二次抽样的样本。然而在点集分割任务例如点的语义标签,我们希望得到每一个点的点特征。一个解决的办法是把所有点都当做中心点进行采样,这样的话会导致很高的计算量,另外一个方式是从二次采样的点到原始点进行特征传递。
我们采用了一种采用基于距离插值和跨级跳转链接的分层传播策略,在特征传播层,我们将点特征从Nl∗(d+C)N_l*(d+C)Nl∗(d+C)的点集传播到Nl−1N_{l-1}Nl−1个点,其中Nl和Nl−1N_l和N_{l-1}Nl和Nl−1分别表示的是set-abstraction的第l层的输入数据和输出数据(Nl<Nl−1)(N_l <N_{l-1})(Nl<Nl−1),在众多插值选择中,我们使用了基于k个最近邻的距离逆加权平均(如图2所示,我们使用的是p=2,k=3p=2,k=3p=2,k=3),然后将Nl−1N_{l-1}Nl−1点上的插值特征与集合抽象级别上的跳过链接点特征连接起来.然后将连接的特征通过一个“单元点网”传递,这类似于CNNs中的逐点卷积,一些共享完全连接和应用ReLU层更新每个点的特征向量,这个过程会重复,直到我们将特性传播到原始的点集为止.