PointNet++

[NIPS 2017]PointNet++: Deep Hierarchical Feature Learning onPoint Sets in a Metric Space

语雀(原文内容多一点,CSDN导不进来)

[论文地址][项目页面][GitHub]


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


导览

【PointNet作者亲述】90分钟带你了解3D物体检测算法和未来方向!

PPT:


斯坦福大学在读博士生祁芮中台:点云上的深度学习及其在三维场景理

PPT:


pointnet++翻译

一、背景

pointnet缺陷:没有平移不变性、没有局部特征提取能力、没有考虑点之间的关系
这些缺陷急需解决。

二、解决的问题

1.解决pointnet的缺陷,获得特征提取能力更好的网络。
2.多层次结构特征学习。
3.点的稀疏与稠密对特征提取的影响

三、方法

论文中说了很多官话,有兴趣的可以去看下,我稍微简洁点。

1.思路:在局部区域中用pointnet做递归

1.先根据空间距离的度量将点云划分到一些局部的区域中,这些区域可以是重叠的,再对每个小区域采用pointnet聚合特征,将每个区域聚合成一个带有特征向量的点,到此为止,庞大的点云转化为了:少量的点+包含区域特征的特征向量。处理和抽象一组点产生具有较少元素的新集合。
2.获得的新点云重复上面的工作,以扩大特征深度和广度。

举例,现在有一个点云 ( x , y ) (x,y) (x,y),它的一个局部区域中有个点 ( u , v ) (u,v) (u,v),用pointnet聚合区域
PointNet++_第1张图片
得到 ( X , Y , F ) (X,Y,F) (X,Y,F), F F F是该区域特征向量,用 ( X , Y , F ) (X,Y,F) (X,Y,F)代表区域所有点。
PointNet++_第2张图片
所以就将原始点云 ( X , Y ) (X,Y) (X,Y)转化成特征点云 ( Y , Y , F ) (Y,Y,F) Y,Y,F,特征点云点数更少,具有更高维度的信息 F F F

PointNet++_第3张图片
这就是作者文中提到的操作Set Abstraction:
farthest point sampling + grouping + pointnet

2.网络结构

2.1 set abstraction

PointNet++_第4张图片
用两个SA(set abstraction)组成多层点集特征学习网络,SA由三个关键层组成:采样层分组层PointNet层

采样层从输入点中选择一组点,这些点定义了局部区域的质心。 然后,分组层通过查找质心的相邻点来构建局部区域集。PointNet层使用mini-PointNet将局部区域编码为特征向量。

2.1.1 输入:

SA采用 N × ( d + c ) N\times(d+c) N×(d+c)矩阵作为输入

其中:
d代表d维坐标,比如xyz坐标中d=3;
c代表c维特征;

2.1.2 输出:

它输出具有d-dim坐标的 N’个子采样点的N’×(d + C’)矩阵和总结局部上下文的新 C’-dim特征向量。

( N , ( d + c ) ) (N,(d+c)) (N,(d+c)) ————> ( N ′ , ( d + c ) ) (N',(d+c)) (N,(d+c)) ————> ( N ′ , ( d + c ′ ) ) (N',(d+c')) (N,(d+c))

图中k是区域中的k个点

2.1.3 Sampling layer

最远点采样,网上介绍太多,不讲。
其实最远点采样会丢失点云的强度信息,看看后面有什么发现吧。

2.1.4 Grouping layer

( N , ( d + c ) ) (N,(d+c)) (N,(d+c)) ————> ( N ′ , k , ( d + c ) ) (N',k,(d+c)) (N,k,(d+c))
K最近邻(kNN)/Ball query,太多,不讲

2.1.5 PointNet layer

( N , k , ( d + c ) ) (N,k,(d+c)) (N,k,(d+c)) ————> ( N , ( d + c 1 ) ) (N,(d+c1)) (N,(d+c1))
作者还把k个点坐标替换成质心的相对坐标,意义何在,不知道。

2.2 Classification

PointNet++_第5张图片
分类任务:直接最大池化再经过全连接层 ( f c ) (fc) (fc)进行全局分类。

2.3 Segmentation

PointNet++_第6张图片
分割任务:往回插值和向上卷积得到每个点的分类,好好思考网络的过程就可以理解。

2.4 总结构

PointNet++_第7张图片最终得到整个网络。

四、难点

分组过程中,点的稠密与稀疏会影响特征PointNet++_第8张图片
MSG:广度
MRG:深度

性能测试,随机丢失点:
PointNet++_第9张图片

五、结果

Scene Parsing

Better accuracy with hierarchical learning
PointNet++_第10张图片
Robust layers for non-uniform densities (MSG) helps a lot
PointNet++_第11张图片

PointNet++_第12张图片PointNet++_第13张图片

六、总结

一句话总结:分组操作使得点与点之间有了联系,使得局部特征提取有了可能。点的体素化是为了使用cnn,分组操作让pointnet也可以使用cnn思想,而且是直接处理点,因为之前说过pointnet就是为了直接处理点获得特征。所以pointnet的精髓在于分组思想

最远点采样采集的点大部分都是稀疏点,越密集的地方采集越少,会使得分组得到的点非常少

你可能感兴趣的:(3d语义分割,深度学习)