文章目录
- PointNet提取特征的思想
- PointNet++的改进
PointNet提取特征的思想
首先需要知道的是点云数据主要携带的信息,它所携带的信息通常是它在3D空间中的坐标和对应的点所携带的法向量。这种信息有别于图像所携带的信息。可以做这样的假设,如果将图像某一些像素的位置互换,那么它对于整个图像的意义就发生了变化。但是对于点云而言点和点之间进行位置交换是不会影响点云整体表示的,换句话说如果点云是一辆车,就算交换一些点的位置,点云还是表示的一辆车。这是点云无序性的一种体现。
那这样的话,点云就只携带了位置一个信息,而且只表达了这个点的位置信息,和其他点也没有什么关系。为了提取有点云特征, pointnet最开始是使用的找出点中最大值的方式来代表 一个点云的特征。 假设一个3D物体有5000个点来表示,这些点中的最大值是不会因为点云位置的移动而发生改变的。但是很明显的是一个只有3个维度的向量是无法准确表示5000个点的特征的。所以作为一个解决办法,pointnet将这3个维度的向量提升到了1024维,然后使用学习到的这个有1024个维度的向量去做之后的downstream tasks。
PointNet++的改进
明显上述提取点云的方式虽然可以契合点云的无序性,但是这种单纯使用最大值的方式是很片面的。所以在pointnet++加入了最远距离采样和grouping的方式来优化之前pointnet的点云特征提取方式。
首先Pointnet++要做的是将点云分层很多个小cluster,在每一个小的cluster中找最大值。也就是从之前的从全局中找最大值变成了从局部寻找最大值。但是问题在于这个cluster要怎么去分?如果完全随机去采样cluster的中心就有可能出现cluster没有完全覆盖所有点云的情况。所以在pointnet++中提到了 最远距离采样来解决上述问题。具体保证每一次采样的cluster的中心都离已经采样的cluster的中心最远,来保证cluster可以完全覆盖所有点云。
但是这里会涉及到cluster中点的数量不一样问题,假设希望每个cluster中有20个点,如果clsuter的点少于20,那么就复制里中心最近的那个点N次去补到20个点。同理的,如果点多于20个点,就将点按照离中心的距离,从近到远排列起来,将多出的部分抛弃。为了尽可能多的提取特征,pointnet++使用配合了多种半径(指cluster的大小)和cluster中点的数量,并将得到的不同的特征整合成一个特征作为最终的特征。
以上就是Pointnet 和 Pointnet++ 提取点云特征的思想。