论文解读PointNet(用于点云处理的深度学习框架)

        随着最近几年神经网络在CV、NPL等领域取得重大的成果,因此就有学者希望将神经网络应用于3D任务中。在这篇文章(PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation)出现之前,一般在3D任务中用的最多的数据格式是3D体素(3D voxel grids)以及多视角投影,因为3D体素数据格式可以直接用过3D卷积处理数据,多视角投影数据格式可以通过2D卷积处理数据,这两种数据格式都可以利用CNN算子共享权重减少计算量;但是对于3D体素格式来说任务效果以及计算量是取决于它的分辨率的,高分辨当然可以获得不错的效果,但是计算量会几何的增加,对于多视角投影来说往往会损失一些几何信息,比如遮挡。点云数据在3D几何表示中作为一种重要的数据格式,它不存在着3D体素以及多视角投影遇到的那些问题,因此这篇文章提出了一种通用的用于处理点云数据的神经网络框架。

 模型架构

        我们先来看PointNet的整理框架,如下图1所示,可以将框架分成两个部分,第一个部分用于提取全局特征,第二个部分用于点云分类或者点云分割。对于第一个部分,首先是通过一个仿射变换模块(T-Net)对数据做仿射变换,然后由共享的多层感知器(MLP)逐点提取特征,此时数据维度为64,然后又经过一个T-Net模块做放射变换,再由共享的多层感知器逐点提取特征,此时的数据维度为1024,最后再经过max pool得到一个1024维的向量。对于第二个部分,如果是点云分类任务,可以直接将全局特征输入mlp预测scores,如果是点云分割,那么需要将全局特征与每个顶点向量cat起来,然后输入给mlp对每个顶点分类。后面我们逐个介绍为什么作者要设计这些模块。

论文解读PointNet(用于点云处理的深度学习框架)_第1张图片

      图1 整体架构 

T-Net模块        

        如果对于点云分类或者点云分割任务来说,我们希望点云无论在什么仿射变换下都能得到一样的稳定的结果,一般的我们可以想到通过仿射变换增强来达到这个效果,但是作者是直接让网络学习这样一个仿射变换矩阵来解决这个问题的。

        我看了一下代码,这个模块由三部分组成。第一个部分是三层共享的mlp构成的,用于提取特征;第二个部分就是一个对称函数max,用于聚合出全局信息;第三个部分是两层的全连接隐藏层加上一个线性层,用于预测仿射变换矩阵。

        为了减少训练难度,提高训练的稳定性,作者加入了一个正则化项:

论文解读PointNet(用于点云处理的深度学习框架)_第2张图片

I是一个单位正交矩阵,A是网络预测出来的仿射变换矩阵。

max pool 

        我们知道点云数据的顶点排列顺序是无序的,我们希望无论顶点是怎么排列都不会影响最终的处理结果,作者想到了三种处理办法。方法一是先对所有的顶点按照一定规则进行排序,然后输入给mlp;方法二是将点云数据当成一系列的sequence去训练RNN,但是对于顶点的排列顺序要做扰动增强;方法三是采用一个简单的对称函数聚合所有顶点的信息。对于这三个方法在点云分类任务上做了对比实验,如下图所示,方法三的精度都比较高,其中max pooling是最高的。

论文解读PointNet(用于点云处理的深度学习框架)_第3张图片

图2

Theoretical Analysis
         另外作者还对pointnet提供了一些理论分析与结果,这里捡比较重要的两个来说。第一个是只要神经元足够多,pointnet也可以逼近任意的连续函数,这里也就为pointnet处理各种复杂的3D任务提供了理论支持。

        第二个是pointnet其实是提取了关键点(key points)的特征,这些关键点形成了物体的skeleton,如下图所示。只要点云中包括了这些关键点,那么pointnet提取出来的特征就是不变的。当max pooling出来的维度k比较小的时候,k会限制关键点的数量,因为实际关键点的数量不会超过k,此时k越大关键点数量也就越多,模型表现也就越好也更稳定。

论文解读PointNet(用于点云处理的深度学习框架)_第4张图片

图3

你可能感兴趣的:(深度学习,机器学习)