【论文笔记】DGCNN:Dynamic Graph CNN for Learning on Point Clouds

摘要

【论文笔记】DGCNN:Dynamic Graph CNN for Learning on Point Clouds
  《Dynamic Graph CNN for Learning on Point Clouds》论文作者基于PointNet和PointNet++做了改进,提出了一个针对点云(Point Clouds)数据进行分类和分割的网络——DGCNN。
  PointNet独立处理点云数据中的每个点来实现排列不变性(Permutation Invariance),忽略了点之间的局部特征。针对这一问题,DGCNN提出一个EdgeConv操作用来获取点之间的局部特征。论文作者已将代码开源,可以到github上下载,地址是https://github.com/WangYueFt/dgcnn

一、DGCNN的研究背景

深度神经网络进行图像处理的成功,激励人们以数据驱动的方式来学习点云的特征。
  标准的深度神经网络要求输入数据是规则的,而点云本身就是不规则的。因为点的位置在空间中是连续分布的,其顺序的任何排列都不会改变空间分布。所以,用深度学习模型来处理点云数据的一种通用方法是,首先将原生的点云数据转化为体表示(Volumetric Representation),即3D网格(3D Grid)。这种方法通常会引入量化伪影(Quantization Artifacts)并且会造成过度的内存消耗,难以捕捉到高分辨率或者细粒度的特征。
  PointNet网络于2017年提出,专门为了处理不规则的点云数据而设计,可以直接对未经加工的点云数据进行操作。PointNet网络独立处理每个点,然后运用对称函数来积累特征,由此实现了排列不变性。许多基于PointNet的后续研究都考虑到邻近点来使得网络获取局部特征,但是大都在局部区域独立处理每个点以保证排列不变性。这种处理方式忽视了点之间的几何关系,会对捕捉局部特征设下限制。PointNet++尝试通过局部应用PointNet的方式来获取局部结构。它首先根据点之间的欧氏距离构建图,然后在每一个网络层中进行图粗化操作(Graph Coarsening)。在每一层,使用最远点采样(Farthest Point Sampling, FPS)来选择一些点。只有被选择的点会在之后的层被保留,其他点都会被剔除。这样一来,每层传递的图会越来越小。

二、DGCNN的基本思想

为了解决上述问题,DGCNN提出了一个名叫EdgeConv的操作,既能保持排列不变性,又能捕捉局部几何结构。
  EdgeConv生成边特征,用于描述每个点和其邻近点之间的关系。EdgeConv被设计为不改变邻近点的顺序,所以保证了排列不变性。EdgeConv显式地构造了一个局部图并学习了边的嵌入,因此该模型能够在欧式空间和语义空间中对点进行分组。EdgeConv易于实现,并且可以很方便地集成到现有深度网络中。DGCNN就是将EdgeConv集成到PointNet的基础版上,无需任何特征变换。
  DGCNN通过构建局部邻接图和对每条邻边应用类卷积操作,从而挖掘出局部几何结构。DGCNN的图是在每一个网络层后动态更新的,而不是固定的。一个点的K最近邻点集在各个网络层之间变化。特征空间中的邻近与输入中的邻近不同,从而导致信息在点云中的非局部扩散。在每个网络层产生的特征空间中,DCGNN利用最近邻点重新计算图。这是DGCNN和GCNN(Graph CNN)的最主要不同之处(GCNN使用的是固定输入图)。DGCNN的网络架构学习如何在每一层中构建图,而不是把图当作一个在网络评估之前就已经构建好的固定常量。
  当训练模型更新参数时,DGCNN让图在各个网络层之间有所变化,甚至对于相同的输入也是。这种做法是首次出现的。这样一来,网络模型不仅学习如何提取局部几何特征,还学习如何将点云中的点分组。

三、EdgeConv操作

EdgeConv是对一个点引申出的所有邻近边的边特征进行通道对称聚合操作(Channel-wise Symmetric Aggregation Operation)。
  给定一个包含n个点的F维点云,EdgeConv会产生一个包含n个点的维点云。第i个点进行EdgeConv的输出被定义为:
   【论文笔记】DGCNN:Dynamic Graph CNN for Learning on Point Clouds

【论文笔记】DGCNN:Dynamic Graph CNN for Learning on Point Clouds
  特别地,作者使用了共享的多层感知机(MultiLayer Perceptron, MLP)进行EdgeConv操作,定义如下,
【论文笔记】DGCNN:Dynamic Graph CNN for Learning on Point Clouds

四、有趣的发现

【论文笔记】DGCNN:Dynamic Graph CNN for Learning on Point Clouds  在论文中,作者提到了一个有趣的发现:如果两个点来自语义相似的两个零件的话,即使它们来自不同的数据源,它们也会被模型判定为彼此相似。这就说明模型可以有很好的泛化性。

五、效果

论文中,作者将DGCNN与之前类似功能的网络做了对比实验。
  实验结果表明,DGCNN在分类、零件分割和语义分割上都有着超前的表现,准确率有所提升。但是由于是对每对点进行pair-wise的距离计算来找出K最近邻点,所以速度比较慢。我在跑通代码进行训练的时候,可以明显感觉到它比我之前接触过的网络训练起来都要更耗时一些(每个epoch耗时更久)。
  作者提出可以通过以下方式改进:
    1、使用快速数据结构(Fast Data Structure),取代成对计算两点距离找最近邻的方式;
    2、考虑点的较大元组之间的高阶关系,而不是将两点成对考虑;
    3、设计一种非共享的特征转换网络(Transformer Network),该网络在每个局部小块上的工作方式不同,而且可以灵活地添加到模型中去。