3D Object Detector PointNet++
Sampling layer
使用 FPS(farthest point sampling)算法从输入点集\(\{ x_1, x_2,...,x_n\}\)中选择子集\(\{ x_{i_1},x_{i_2},...,x_{i_m} \}\)
Grouping layer
该层输入为大小为\(N \times (d+C)\)的点集和大小为\(N' \times d\)的质心集的坐标,输出是大小为 \(N' \times K \times (d+C)\)的点集组,其中每组对应一个局部区域,\(K\)是质心点在邻域内的点数。 > \(K\)是随着组变化的,但是后续的PointNet层能够将灵活数量的点转换为固定长度的局部区域特征向量。
球查询
以样本点为球心,按照给定搜索半径R得到一个球形搜索区域,然后从该区域提取K个邻近点。
给定领域中点的个数不足K个或者多余K个如何处理?
- 如果不足K个,则直接对某个点重采样,凑够K个;
- 如果大于K个,则选取距离最小的前K个。 对于稀疏网络而言,样本分布不均匀,如何处理?
- PointNet++提出了多尺度方法MSG和多层级方法
MRG
,这个见后面具体介绍。
PointNet layer
该层中,输入数据大小为\(N' \times K \times (d+C)\)的\(N'\)个局部区域,输出大小为\(N' \times (d+C')\),其每个局部区域都是由质心和对质心邻域进行编码的局部特征进行抽象的。
- 特征提取时,未采用T-Net,那如何保证特征旋转不变性?
PointNet++未像PointNet一样采用T-Net,而是采用局部相对坐标,就是对每个采样点及其K个领域点的空间坐标进行变换。 > 这里变换只针对坐标,其他特征不变 通过使用相对坐标和点特征,我们可以捕获局部区域中的点对点关系。
interpolate
主要针对分割网络,因为分割结果需要对每一个点云分配一个语义标签。但是目前只获取到了下采样后点云的特征,那插值的作用就是得到下采样过程中忽视的点云的特征。
稀疏点云处理
如果按照同一领域半径去寻找领域点,那对于稀疏的地方局部特征其实是比较差的,为了解决这一问题,作者提出了MSG和MRG两种方式。
MSG
多尺度进行采样,即前面提到的grouping layer不采用同一个半径R,而是采用不同的半径和采样个数,然后每次采样的特征都经过pointnet layer提取到特征后再进行融合。
MRG
多层级进行采样,主要是考虑到如果对每一个采样点都进行MSG,计算量太大。MRG采用两个pointnet layer对特征进行提取和聚合。
实验结果
DP表示训练期间随机输入dropout.