pointnet与pointnet++

PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation

1. 做了啥?

  • 设计了一个新的深度网络架构,适用于无序的三维点集
  • 展示了这个网络在形状部分分割和语义理解任务中该如何训练
  • 对网络的稳定性和效率性做了分析
  • 说选定的神经元在网络中计算出的三维特征,并对其性能进行直观的解释

2. 怎么做的?

在这里插入图片描述

  • 设计了一个深度学网络,这个网络直接使用三维点云(点集:n x 3, n个点每个点有三个属性x, y, z,表示空间座标)作为输入

  • 对于分类任务:可以从三维模型中采样一个点云作为输入,也可以在实际场景中提前分割出来的点云;对于k个类别,网络会输出k个相对应的分数。

  • 对于分割任务:输入:可以是单个对象,也可以是实际场景的子空间;输出:n x m的分数矩阵,表示每个点在m个类上的得分

  • 对于每一个N×3的点云输入,网络先通过一个T-Net将其在空间上对齐(旋转到正面),再通过MLP将其映射到64维的空间上,再进行对齐,最后映射到1024维的空间上。这时对于每一个点,都有一个1024维的向量表征,而这样的向量表征对于一个3维的点云明显是冗余的,因此这个时候引入最大池化操作,将1024维所有通道上都只保留最大的那一个,这样得到的1×1024的向量就是N个点云的全局特征。

  • 如果做的是分类的问题,直接将这个全局特征再进过MLP去输出每一类的概率即可;

  • 但如果是分割问题,由于需要输出的是逐点的类别,因此其将全局特征拼接在了点云64维的逐点特征上,最后通过MLP,输出逐点的分类概率。

三维点云介绍:三维点云指欧氏空间中的点集,表示一种几何形状,主要有一下三个特性

  1. 无序性。与图像中的像素阵列不同的是,点云不需要点用特定顺序组成,这些点直接存储顺序是任意的
  2. 点之间的相互作用。这些来自与欧氏空间,点与点之间有距离关系,相邻的局部点组合成一个有意义的子集,表示三维模型的局部结构。故网络也需要能够捕获局部结构,以及局部结构之间的相互作用。
  3. 变换不变性。例如在旋转、平移下不应该改变点云形状
  • T-Net对齐解决旋转平移不变性;升维后用对称函数解决无序性3维->64维->1024维;
  • 遗留了一个问题:点与点之间的关系没有学到,所以在场景分割任务中效果一般。

pointnet++: Deep Hierarchical Feature Learning on Point Sets in a Metric Space

在这里插入图片描述

1. 改进特征提取方法

pointnet++使用了分层抽取特征的思想,把每一次叫做set abstraction。分为三部分:采样层、分组层、特征提取层。首先来看采样层,为了从稠密的点云中抽取出一些相对较为重要的中心点,采用FPS(farthest point sampling)最远点采样法,这些点并不一定具有语义信息。当然也可以随机采样;然后是分组层,在上一层提取出的中心点的某个范围内寻找最近个k近邻点组成patch;特征提取层是将这k个点通过小型pointnet网络进行卷积和pooling得到的特征作为此中心点的特征,再送入下一个分层继续。这样每一层得到的中心点都是上一层中心点的子集,并且随着层数加深,中心点的个数越来越少,但是每一个中心点包含的信息越来越多。

2. 解决点云密度不同问题

由于采集时会出现采样密度不均的问题,所以通过固定范围选取的固定个数的近邻点是不合适的。pointnet++提出了两个解决方案。
在这里插入图片描述

  1. 如上图左所示,在每一个分组层都通过多个尺度(设置多个半径值) 来确定每一个组,并经过 pointnet提取特征之后将多个特征 concat 起来,得到新特征。
  2. 如上图右所示。左边特征向量是通过2个set abstraction后得到的,每次set abstraction的半径不一样。右边特征向量是直接对当前层中所有点进行pointnet卷积得到。并且,当点云密度不均时,可以通过判断当前patch的密度对左右两个特征向量给予不同权重。例如,当patch中密度很小,左边向量得到的信息就没有对所有patch中点提取的特征可信度更高,于是将右特征向量的权重提高。以此达到减少计算量的同时解决密度问题。

3.对采样密度的鲁棒性

在这里插入图片描述
可以发现,加上dropout(DP),本来他的作用是防止过拟合,但是如右图的结果显示DP对各个密度的数据都有更好的鲁棒性。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章