PointNet++详解

 

PointNet++:使用set abstraction结构逐层提取特征,采样后的点融合了邻域点的特征信息,同时每次采样只保留一半的点云,后续网络层的感受野逐渐扩大,最后通过聚合函数得到紧密的全局点云特征表示。

Set abstraction 包括 sampling,grouping 和PointNet三部分:

1)sampling:对输入点云进行采样,只保留部分点进入下一层网络。采样数一般是输入点云总数量的一半,

                   采样算法是Farthest point sampliing (FPS),以保证采样点均匀分布在整个点云集上 。                        

                   FPS:https://blog.csdn.net/dsoftware/article/details/107184116

2)grouping:为每个采样点寻找半径r(r=0.2)范围内的固定k(k=32)个邻域点,所有点坐标都是归一化后的。

3)PointNet:对这些点用PointNet(MLP)提取特征并max pooling 聚合为采样点坐标。

如上图,做两次set abstraction 操作后,接两个支路:

分类任务,接一个 PointNet(MLP)+max pooling + 2层full connection layers + softmax 提取全局特征;

分割任务,插值+concat+Pointnet来上采样点云数量并提取点云特征。与set abstraction 对应,插值上采样操作也是两次,以恢复原有的点云数量,最后对每个进行softmax分类。上采样采用的是interpolate结构,对于要恢复的点x(上一级中的点),找尺度空间下的最近K个点,按照距离的倒数对特征加权平均,得到上采样后这个点的特征。然后通过FCN中的skip connection操作将上采样后的点特征和之前encoder部分得到的点特征进行concat,再用pointnet进行特征抽取。重复上述三个步骤直至点云分辨率恢复原始点云分辨率。

 

PointNet++还讨论了两种局部特征提取方式:Multi scale grouping (MSG), Multi resolution grouping (MRG)。文章用的MSG,即在同一层网络上,分别用不同的r提取不同的k个邻域点,然后它聚合到的特征concat。

                                 

由于PointNet结构简单又具有强大的表达能力,很多网络都在PointNet的基础上发展而来。如Achlioptas,PAT,Mo-Net,PointWeb,SRINet等。

你可能感兴趣的:(3D点云处理)