PointNet++论文笔记

说明:
1.此乃本人阅读论文过程中所记录的笔记,由于本人水平有限,难免会出现遗漏重点或表述不清等问题,请各位见谅。同时希望各位指出我的问题,让我发现问题所在,谢谢大家Thanks♪(・ω・)ノ。
2.有些用词根据原文翻译(或是直接用原文),可能语句不通畅。(毕竟我是一个六级考了五次的憨憨)
3.数据处理部分和结论分析部分没有加入,此处主要为了理清文章描述方法的处理流程。

论文题目:PointNet++: Deep Hierarchical Feature Learning on Point Sets in a Metric Space

摘要:PointNet的主要缺点是无法捕捉局部特征,使得在复杂场景难以实施。PointNet++中,作者通过两个主要的方法来进行改进,使得网络能更好的提取局部特征。第一,利用空间距离(metric space distances),使用PointNet对点集局部区域进行特征迭代提取,使其能够学到局部尺度越来越大的特征。第二,由于点集分布很多时候是不均匀的,如果默认是均匀的,会使得网络性能变差,所以作者提出了一种自适应密度的特征提取方法。通过以上两种方法,能够更高效的学习特征,也更有鲁棒性。

介绍:PointNet++以分层方式处理在度量空间中采样的每一组点,首先,用基础空间的距离度量将点集划分为重叠的局部区域。与CNN相似,从小区域提取点云的局部特征,捕捉精细的几何结构;这些局部特征被进一步分组成更大的单元,并被处理用来产生更高级别的特征,重复这个过程直到我们得到整个点集的特征。

网络架构

PointNet++的主要处理流程如上图,整个分层次处理结构由一些列set abstraction 层组成,在每一层,点集被抽象处理成有更少元素的集合。Set abstraction层主要有三部分组成:
Sampling layer——对输入点进行采样,选取局部区域的中心点。
Grouping layer——用上一层获得的中心点对点集进行区域划分。
PointNet layer——用PointNet对局部区域进行编码,获取特征向量。
每一个set abstraction层以N×(d+C)矩阵作为输入,N为输入点的数目,d为坐标维度,C为特征维度。输出为 N ′ × ( d + C ′ ) N^{'}\times(d+C^{'}) N×(d+C)矩阵, N ′ N^{'} N为输出点的数目, C ′ C^{'} C为新的特征维度。
Sampling layer:使用迭代的farthest point sampling(FPS)方法选择中心点,相比于随机采样,能更好的覆盖整个点集。
Grouping layer:输入为原点集(N×(d+C))和选取的中心点( N ′ × d N^{'}\times d N×d)。输出为区域划分的点集组( N ′ × K × ( d + C ) N^{'}\times K \times (d+C) N×K×(d+C)), N ′ N^{'} N在此处也为组数,每组表示一个区域,K表示每组的点的个数。
注意:此处每组的点的个数会不同,我们通过PointNet layer使得每个区域的点转化为固定长度的区域特征向量。
使用Ball query方法生成局部区域,通过设定球的半径以及区域内点的数目的上限来实现。
PointNet layer:输入为区域划分的点集组( N ′ × K × ( d + C ) N^{'}\times K\times(d+C) N×K×(d+C)),输出为 N ′ × ( d + C ′ ) N^{'}\times(d+C^{'}) N×(d+C)矩阵。对于每个区域,先将每个点的坐标转化为相对于中心点的坐标,然后使用PointNet捕捉局部特征。

非均匀点云的处理方法:
对于非均匀点云,作者提出了以下两种密度自适应方法,用来划分局部区域和结合不同尺度下的特征。
在这里插入图片描述

Multi-scale grouping(MSG):对于同一个中心点,设置不同的半径和点的数目,获得不同尺度的局部区域,然后用不同的PointNet进行训练获取特征,然后将不同尺度下的特征拼接在一起,作为中心点的特征。
Multi-resolution grouping(MRG):MSG由于小尺度下中心点数目往往非常庞大,而且大尺度下计算量庞大,所以MSG非常耗时。L_i level的区域特征由两个向量拼接而成。第一个向量为利用set abstraction layer从L_(i-1) level的各个子区域提取的特征;第二个向量为对区域的初始点集使用PointNet得到的特征。在不同密度下,两个向量所占的权重也不相同,从而学到不同密度下的特征。

点集分割的特征传播
在set abstraction layer中,对原始点集进行子采样。但是在设置分割任务(如语义点标记)时,我们想要获得所有原始点的特征。一种解决方案是在所有抽象层中,将所有点作为质心来进行采样,但是这会导致较高的计算成本。另一种解决方案是将特征从子采样点传播到原始点。
我们采用基于距离插值的分层传播策略和跨层跳跃链接(across level skip links)的方式来实现上述方案(如图2所示)。在某一层的特性传播过程中,我们从 N l × ( d + C ) N_{l}\times(d+C) Nl×(d+C)个点向 N l − 1 N_{l-1} Nl1个点传播点特性,其中 N l N_{l} Nl N l − 1 N_{l-1} Nl1 N l N_{l} Nl N l − 1 N_{l-1} Nl1是点集抽象层l的输入和输出的点集的大小)。我们通过插值的方式来实现特征传播,在 N l − 1 N_{l-1} Nl1个点的坐标中插入 N l N_{l} Nl个中心点的特征值f。在插值方式的众多选择中,我们选择使用基于k邻近法(KNN,在等式2中我们采用p=2,k=3)来反向加权求平均。再将 N l − 1 N_{l-1} Nl1个点的插值特征值与点集抽象层的特征值通过跨层跳越链接的方式组合在一起。然后,连接好的特征值将传递到一个“PointNet单元”中。这个单元与与CNNs中的一层一层卷积类似。应用一些共享的全连接层和ReLU层更新每个点的特征向量。重复这个过程,直到我们将特征传播到最原始的点集。
在这里插入图片描述

参考
https://zhuanlan.zhihu.com/p/88238420
https://blog.csdn.net/weixin_40664094/article/details/83902950

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值