赞
踩
论文地址:
PointNet
PointNet++
经典的卷积神经网络需要一个规律的输入格式,但是点云或者meshes都不是一个规律的格式(点云只是一系列点坐标值的无序集合),很多研究者将点云转化为体素网格(3D voxel grids)或者多视图(如MVCNN)的2D图像送入深度网络中,这种数据形式的转化增加了不必要的数据量,同时还引入了量化伪像,掩盖了数据的自然不变性。
PointNet则直接将点云作为输入,并输出整个输入的类标签或输入的每个点的每个分割/部分标签,从而实现3D物体分类/分割。接下来介绍PointNet是怎么做的:
首先,输入定义为一个3D点集,每个点由一个长度为3的向量(x,y,z)表示,为其坐标。对于物体分类任务,输出为对应k个类别的k个得分。对于语义分割任务,网络的输出为nxm(总共n个点,m个语义分割类,即输出每个点属于每个类别的概率)。
根据点集的这三点特性,设计PointNet的结构如图所示:
PointNet包含三个主要结构:
首先,作者讨论了处理无序输入的三种方式:排序、作为RNN、使用简单的对称函数。
排序的方式难以保证网络学到一个稳定的映射。
而通过RNN训练的目的是希望随机排序的点集,能够让RNN变得对输入顺序具有不变性,但是尽管RNN对长度较短(数十个)的序列的输入排序具有相对较好的鲁棒性,但很难扩展到数千个输入元素,这是点集的常见大小。
而作者提出的方法是通过对点集变换后的结果施加一个对称函数来近似一个点集上的通用函数,也就是说,通过一个MLP对输入的每一个点进行处理,然后通过一个pooling函数将他们加在一起(对称操作,与顺序无关)。
这三种方法的对比实验如下:
可见使用作者提出的方法效果最好,且maxpooling的效果比另外两种好。
这部分用于语义分割,因为语义分割需要用到全局信息,所以将分类时pooling后得到的global feature 拼接到之前的nx64特征的每一个点之后,得到新的nx1088的特征,该特征包含了每个点的local特征以及global特征,最后通过两个MLP得到每个点的分割结果:
如果点云经历某些几何变换(例如刚性变换),则该点云的语义标记必须是不变的。 因此,我们期望通过我们的点集获得的学习表示对于这些变换是不变的。这也是图中两个transform的作用。
图中第一个input transform 以及T-Net的结构,是一个MLP层 (with layer output sizes 64, 128, 1024) ,对每个点进行处理,最后通过一个max pooling操作对所有点的特征进行pooling,得到一个长度为1024的向量,然后通过三个全连接层(输出尺寸:512,256,9)得到长度为9的向量,最终resize成3x3,然后与原始输入Nx3做矩阵乘法,这个3x3的矩阵就是对原物体的坐标变换矩阵,可以对如旋转这类的操作进行对齐。
第二个feature transform也是类似操作。具体细节可以参考源码解析code。
待续…
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。