目录
-
- 参考
- 点云特性与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特征。