PointNet++
PointNet++ 是针对于 PointNet 存在的问题来进一步讨论,因为在 PointNet 关注的全局特征和个别点的特征,但是这样并没有很好收集局部的结构化的信息。经过多个 mlp 进行维度升维度,然后进行 max pooling。
所以在 PointNet++ 借鉴CNN 多层结构化神经网络的设计思想,通过逐层扩大网络的感受野,不断捕获不同级别上图像的特征。为此在 PointNet++ 引入了 set abstraction 来实现多级别的特征的学习。
对于每一层感受野学习特征,多层级别来学习特征,在 PointNet
学习到信息,从一个点学习信息或者从全局来学习到信息。
- 参考了 Hierarchical feature learning
- 在 PointNet 缺失了局部特征点学习
- 在局部区域多次应用 PointNet 从而提取局部特征,而且能够保留局部不变性
Set Abstraction
在 Set Abstraction 主要包括了 3 个环节,分别是 sampling、grouping 和 pointnet
- sampling (选取中心点(enteried)
- grouping(采用点为中心构建区域)
- pointnet (对于点云的局部特征提取)
首先在点云上采样一个点,例如上图橘黄色点,然后以该点为中心在其周围选取一组点,将一组点输入到一个 PointNet 网络得到一个局部特征向量。
然后这些点组输入 Pointnet 来获取新的点,这些点通过特征提取得到点。然后基于这些点再重复上面步骤来提取点的特征。
通过将点集划分为重叠的局部区域,提取局部特征来捕获来自小邻域的精细几何结构。然后逐层迭代获取更高级的信息。
采样(sampling)
- Uniform sampling: 均匀采样
- Farthest sampling: 最远点采样 迭代,点集距离点集最远的点,能够更好覆盖整个采样空间
以上 2 种采样方式中,Pointnet++ 通常采样的是最远点采样(Farthest sampling)的方式
最远点采样
- 找到一个点,这一点距离点集最远点,能够更好覆盖采样空间
分组(grouping)
- K nearest neighbors:选择 k 个与中心点
- Ball query(within range):ball 查询,这是一个在 3 维或者高维空间的球区域内进行搜索,与 kNN 相比,ball 查询的局部邻域可确保固定的区域尺寸,使局部区域的特征在整个空间中具有更好通用性。
Pointnet++ 和 pointnet 一样可以用于分类(classification)和语义分割(segmentation)两个任务,
分类(classification)
语义分割(segmentation)
- 会做插值来增点点数(interpolate),做插值有点像卷积中向上采样过程
- 然后对应尺寸进行拼接来获取更多的信息
上采样
- 基于距离的来计算插值,也就是距离越远的点权重越小
f(j)(x)=∑i=1kwi(x)fi(j)∑i=1kwi(x)f^{(j)}(x) = frac{sum_{i=1}^k w_i(x)f_i^{(j)}}{sum_{i=1}^k w_i(x)}
wi(x)=1d(x,xi)w_i(x) = frac{1}{d(x,x_i)}
Non-uniform Sampling Density in Point Clouds
- 近密远疏
- 也就是在考虑半径选取,需要考虑到近密远疏这种现象
MSG(Multi-scale grouping)
对于同一个级别选取不同大小区域半径的,然后再进行拼接获取不同半径大小特征信息
MRG(Multi-resolution grouping)
- 不同级别特征进行拼接