Pointnet++
参考博客:https://zhuanlan.zhihu.com/p/266324173
背景
先前提出的pointnet网络只是使用了MLP和maxpooling,对局部结构信息的获取的能力是不足的,特别是在一些比较复杂的场景上效果是较差的。
解决的问题
-
问题一:对局部结构信息的获取能力较差
解决方案: 提出sampling和grouping网络结构,通过对点云的局部信息的分布整合,可以更好提取出点云的局部信息。 -
问题二:全局信息由maxpooling进行提取,信息提取损失较为严重
解决方案: 提出层次特征学习结构(hierarchical feature learning framework),通过降采样获取得到不同层次的点云特征。 -
问题三:pointnet之前分割网络部分的全局特征与局部特征的相结合比较粗糙
解决方案:采用了encoder-deconder结构和skip-connection结构对特征进行拼接。
网络架构
基本架构介绍:网络可以看为是一种encoder-deconder结构,即先下采样再上采样,通过下采样过程可以得到不同点云的特征。
Encoder结构
- sampling layer:采用了FPS(最远点采样)对点集进行降采样,使得点集从N变成N1。
FPS实现方法:(参考博客:https://blog.csdn.net/QTVLC/article/details/108750870)首先随机选取一个点作为起始采样点,然后计算为采样点与选取点的距离的dis,将距离最远的点采样,然后继续计算采样点与未采样点的距离大小,同样选取距离最大的点,一直进行迭代,直到选取的点达到目标数量。
网络中参数解释:其中N代表点集中的点的数量,d表示点的坐标维度,C表示点的其余特征(比如法向量等)维度。 - grouping layer:以每一个点作为中心,找出邻近的点(K个),并组成一个局部领域,生成N1个局部领域。而寻找领域论文采用了两种方法,分别为KNN和query ball point。
query ball point:随机选取点并规定一个半径,半径球内所有的点即为选定点的邻点。
两者比较:query ball更加适用于局部信息的提取上,因为相比于KNN的话,query ball对点集的提取范围是相对较广的,因此可以提取到KNN方法所不能提取到的一些局部点信息。
注意点:同上面的sampling layer一样,进行邻近采样处理的数据都为点云点的坐标空间处理的,点的特征空间特征是不参与计算的。 - pointnet layer:与之前pointnet类似,首先先进行1x1卷积处理,在对每一个局部领域做pooling操作,最后进行MLP。
- Encoder缺点:对于不均匀的点云数据的特征提取是较为薄弱的。点云数据在空间的分布是不规则且不均匀的,即局部均匀分布是不一致的,因此网络可能不能提取到很好的局部特征。因此在稀疏的地方应该考虑更大的尺度范围来提取特征。论文提出了MSG和MRG两种不同的组合方式来进行特征的提取。
多尺度组合(multi-scale grouping, MSG): 对当前层的每个中心点,取不同的半径的query ball,可以得到多个大小不同但是中心相同的局部球型领域,并且对这些局部领域的特征进行特征拼接。但是这种方法的计算量是显著增加的。
多分辨率组合(multi-resolution grouping,MRG): 为了解决MSG计算领太大的问题,论文提出MSG。此种方法在某一层对每个局部提取到的特征由两个向量串联构成。左边为对上层提取的特征再次进行特征提取,右边为直接对局部对应的原始点云数据的点进行特征提取。
Decoder结构
- 分类任务的decoder:直接将降采样得到的数据送入全连接层网络最后softmax进行分类。
- interpolate(反向插值):对下采样得到的数据进行反向插值从而来实现上采样。
在原始点云坐标空间下,寻找对应最近的k个点(插值的方式与双向线性插值的方式大致一致,为target对应src),然后对这k个点进行特征加权求和,从而得到新增的点的特征。从公式可以看出,当距离x的距离越远,对x的特征贡献也就越小。 - skip connection:因为之前由上层传回的为全局特征,缺少局部特征的补充,因此将之前encoder对应的层的对应表征进行拼接处理。