当前位置: 代码迷 >> 综合 >> ML - PointNet PointNet++(理论部分)
  详细解决方案

ML - PointNet PointNet++(理论部分)

热度:33   发布时间:2024-02-28 07:57:58.0

目录

    • 参考
    • 点云特性与PointNet
    • PointNet++
      • Set Abstraction
      • classification
      • segmentation
      • multi-scale grouping(MSG)

参考

《PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation》
《PointNet++: Deep Hierarchical Feature Learning on Point Sets in a Metric Space》

点云特性与PointNet

在这里插入图片描述

点云几个两个很重要的特性。
(1)无序性。点云中的点在打乱它们的索引之后,依然能表达空间结构。
(2)旋转不变形。点云整体经过旋转之后,依然是这个物体。

对于(1)
所设计的ML模型必须是一个对称函数,因为对称函数的结果与输入的参数的顺序无关。比如sum、max函数。可以类比二维卷积神经网络中的max pooling操作。实际上论文中的max pooling操作在代码里用的就是max函数。
在这里插入图片描述
以上这种直接对坐标进行max的操作会使大量的点丢失(可能会导致特征丢失),所以要先使用多层感知器(MLP)将每个点映射到更高的维度(此时信息会冗余)
在这里插入图片描述
对于(2)
论文中使用了T-Net去学习物体的旋转,相当需要学习一个3x3的矩阵
在这里插入图片描述
所以整体PointNet的结构如下:
在这里插入图片描述

PointNet++

在这里插入图片描述

由PointNet可以看到,结构中只有一个max pool操作,并且得到了一个全局特征,没有得到局部特征,所以模型本身在三维点云场景分割的效果比较差。所以在PointNet的第二代,参考了二维图像中CNN的做法。CNN通过分层不断地使用卷积核扫描图像上的像素,使得越到后面的特征图感受野越大,同时每个像素包含的信息也越多。
在这里插入图片描述
在这里插入图片描述
先对整个点云数据划分一个个范围,范围内中心点之间的距离足够远,范围内其他点作为局部的特征,然后用PointNet进行一次特征的提取。通过了多次这样的操作后,原本的点的个数变得越来越少,每个点都是上一层通过PointNet提取出来的局部特征。这个过程论文中称为Set Abstraction(SA)。
在这里插入图片描述

Set Abstraction

一个SA层包含三个步骤:
Sampling:利用farthest point sample(最远点采样)随机采样点。
Grouping:利用query ball point划一个R为半径的圈,将每个圈里面的点云作为一簇。
PointNet: 对Sampling+Grouping以后的点云进行局部的全局特征提取。

classification

SA之后出现两个分支,classification和segmentation,classification部分包括一个PointNet和全连接层。
在这里插入图片描述

segmentation

论文中对于上采样的处理使用的是线性插值的方法。公式如下:
在这里插入图片描述
在这里插入图片描述

multi-scale grouping(MSG)

论文中还提出PointNet++在处理不同密集程度的点云时出现的情况,表示稀疏情况下效果不理想。所以提出了MSG来改进PointNet++。MSG大致的思想是,在Grouping阶段通过不同的R来划分区域,进而concat特征。
在这里插入图片描述