PointNet++阅读笔记

来源:互联网 发布:mysql update 返回值 编辑:程序博客网 时间:2024/06/01 20:00
PointNet++是在PointNet上做出了改进,考虑了点云局部特征提取,从而更好地进行点云分类和分割。
先简要说一下PointNet:
PointNet,其本质就是一种网络结构,按一定的规则输入点云数据,经过一层层地计算,得出分类结果或者分割结果。其中比较特殊的地方在于两个转换矩阵(input transform & feature transform)的存在,根据文中所说,这两个转换矩阵可以在深度学习过程中保持点云数据的空间不变性。
根据论文里所说,图中的input transform是一个3*3的矩阵,作为深度学习的一个参数存在。而feature transform由于维数较大(64*64),所以文中采用了正交约束的方法限制这个矩阵,从而使优化可以快速收敛。

接着,斯坦福那帮人又在PointNet的基础上做出了改进,把局部结构考虑了进去,并将一系列改进过后的网络起名为PointNet++ 。
什么是所谓的“局部结构”( local structure )呢?我是这么理解的:这里有一幅图像, 从人眼角度很明显可以将左下角的椅子分为一类:'chair' 。但是PointNet所采用的点云处理方式类似于在进行图像分割处理时,对整幅图像直接输入网络进行卷积处理。但是我们的椅子实际上只占整幅图像的一小部分,这么一来就会影响分割效果。

而,如果我们能从图像中找出一种特征能表述这组成这把椅子的像素之间的关系,并想办法将这种关系作为网络参数优化的约束之一,那么这个网络结构对于椅子的处理效果肯定会有提升。这个特征或者约束关系就是我理解的“局部结构”。对应到点云数据当中同理。
很明显,相邻的像素肯定更趋向于是同一类物体,所以这篇PointNet++主要内容为: 1.以何种方式将点云数据划分为多个区域(例如直接将点云分块进行体素化也是一种区域划分方法); 2.如何在一个块内,提取块内点云的“局部结构”。下面说一下论文中对于这两个问题的解决方式。
这里先回答第二个问题,如何提取点云的“局部结构”?
如下图所示,给一片点云,PointNet++会先对点云进行采样(sampling)和划分区域(grouping),在各个小区域内采用基础的PointNet网络进行特征提取,接着再重复一遍该过程。最后根据需求不同,如果是点云分割麻烦一点,要对点云的全局和局部特征进行融合(其实就是把俩矩阵stack到一起而已),详细的分割步骤都是PointNet里的内容,有兴趣可以去那篇论文里看看;如果是点云分类,则直接用PointNet提取全局特征输入全连接层得到分类结果就好了。
好了,现在我们知道了大致的分割/分类流程,下面我们来看一下这篇文章里是如何进行区域划分的:
首先,要进行区域划分(grouping),就要确定每个区域的中心位置和区域的半径(尺度 Scale)。
针对中心位置的选取,文中采用了一种名为farthest point sampling (FPS) algorithm 的采样方法,并指出,就种方法要优于体素化CNN方法,原因在于体素化CNN的是固定步长,所以在扫描图像的时候肯定限制多多。而这种FPS方法则较为灵活。我对这个FPS方法还没有了解,所以在这里先把这个坑作个标记,日后再挖。
针对 Scale 尺度的选取,文中先使用了Multi-scale grouping, MSG。并指出,在传统二维图像的CNN卷积网络中使用小kernel进行卷积效果会更好的结论,不能直接搬到点云数据上。因为点云数据的不规则性,决定了当使用小Kernel时,在一个可视范围内可能存在的点云数量极少,以此提取出的局部特征肯定没有代表性。该文使用了多尺度的划分(grouping)方法,对点云不同尺度的局部特征分别进行提取,如下图(a)。文中指出在优化时,采用了 random input dropout 策略,先记录下来,后面用到的时候再查。
但是,他们在做的过程中发现,这样做的计算量极大。因为本身点云数据就很大,如果一直变尺度地提取特征,特别是尺度较小时,电脑肯定吃不消。于是,有了接下来的 Multi-resolution grouping (MRG) 方法,如下图(b)。
图b分为左右两部分,右部分对应的靠下方的圆环,对应了较低的层级。其中最低的一级直接在一个任意?划分的grouping里用PointNet提特征,将得到的结果上传到下一层级的圆环中。这样一直递归,便充分提取了点云的特征,可以更好地进行分割分类操作。文中还指出,较高和较低层次的特征所赋予的权重亦不相同,理由是,当两层的级别都较低时,由于采样不可避免地存在缺陷,所以相对较高级别的特征提取不如较低级别的特征提取;反过来,当两层的级别都较高时,较高级别的特征提取会更为充分。

接下来是优化和实验部分,暂时不打算看,等后面开始代码阶段的时候再说。
如果上述理解有错误,希望大家及时指出一起讨论;我也是因为怕自己理解出错,想把错误在初期就发现并解决,才把这样一篇文章写并发表出来,先行谢过!
参考文献:
Qi C R, Su H, Mo K, et al. Pointnet: Deep learning on point sets for 3d classification and segmentation[J]. arXiv preprint arXiv:1612.00593, 2016.
Qi C R, Yi L, Su H, et al. PointNet++: Deep Hierarchical Feature Learning on Point Sets in a Metric Space[J]. arXiv preprint arXiv:1706.02413, 2017.




原创粉丝点击