目录
一、导言
二、PointNet介绍
三、PointNet网络结构
1、损失函数
2、正则化
四、PointNet++
1、分层次的点集抽象层
一、导言
PointNet来自CVPR2017,是最早直接处理点云数据用于计算机视觉的模型,并运用于分割、检测、场景理解任务,PointNet++来自NIPS2017(这么高产吗?),作为PointNet的改进包括添加了多尺度提取特征等工作,优化PointNet网络架构。
二、PointNet介绍
2017年之前大部分工作都是将3D点云体素化转为多个视角的2D图像,来进行常规的卷积神经网络,而没有直接使用点云进行提取特征。
该论文提出只输入点的坐标信息,考虑通过法向量或者角度信息,来添加更多的维度。
(1)点云无序性解决:使用单一的对称函数,本文使用最大池化层,来解决无序性的问题。通过最大池化层方法可以保证所有点云没有先后顺序,聚合成全局点集特征。
对称函数:
对于无序点云数据,定义一组函数,将点云映射到向量上,其中γ和h为MLP网络。
(2)特征对齐:考虑到网络预测结果对特定的变换(如刚性变换)具有不变性,提出通过T-Net变换矩阵提取特征并与输入feature进行乘法。
T-Net结构:
T-Net与原特征乘法通道连接:
(3)稳定性:由于模型可以拟合任何连续函数,而对于微小扰动不会影响函数拟合,通过在输入点云中引入一定噪声点,以及删除一定数据来增强网络的鲁棒性,提高预测效果。
三、PointNet网络结构
PointNet网络的主干网络保持不变,对于分类和分割来说有不同的Head,对于分割头有更多不同层的特征进行融入,提高特征多维化。但是这网络特征提取方式过于简单,也造成对于局部的,特定场景的,效果可能有缺陷。
1、损失函数
对于不同问题的损失,均可以表示为特定问题Head的损失加上特征变换矩阵的损失。
(1)分类问题:分类损失交叉熵
(2)分割问题:将分割问题转换为每个点的分类问题,再用交叉熵
(3)特征变换矩阵损失:理想情况下特征矩阵应该是正交矩阵,而实际的特征矩阵可能有所偏差,根据正交矩阵的性质,一定有,所以我们将特征变换矩阵损失表示为:
2、正则化
论文中考虑在第二次使用T-Net时添加正则化,来提高模型鲁棒性。
四、PointNet++
解决了PointNet不能很好地提取局部特征的问题,并进一步提取不同尺度下的特征。
1、分层次的点集抽象层
使用多个点集抽象层(SA层,Set Abstraction)来进行逐层特征提取,差别在于每一个SA模块的采样点和采样数量不一样,会逐层增大。
SA模块包括三个关键层:Sampling Layer、Grouping Layer、PointNet Layer。
(1)采样层:从输入点中使用迭代最远点采样法(FPS)选择一组局部区域质心点。
FPS算法:
首先,从输入点集中随机选择一个点作为第一个采样点。
然后,从剩余点集中选择与已选采样点中最远的点作为下一个采样点
重复第二步,直到采样足够多的点作为中心点。
(2)分组层:通过采样的质心以及邻近点来构造局部区域集。
五、PointNet++网络结构
论文参考1:PointNet
论文参考2:PointNet++