Dynamic Gcnn For Pointcloud Cls&seg

Posted by Packy on May 25, 2019

DGCNN

img

1、四个问题

  1. 要解决什么问题?

    • 使用深度学习处理3D点云
    • 设计一个可以直接使用点云作为输入的CNN架构,同时可以获取足够的局部信息,可适用于分类、分割等任务。
  2. 用了什么方法解决?

    • 提出了一个新的神经网络模块——EdgeConv。

    • EdgeConv是可微的,并能嵌入已有的网络架构中。

    • EdgeConv的优点:

      1. 包含了局部领域信息;
      2. 通过堆叠EdgeConv模块或循环使用,可以提取到全局形状信息;
      3. 在多层系统中,特征空间中的相对关系包含了语义特征。(注:点云中形状近似的部分,在特征空间中距离较小。)
  3. 效果如何?

    • 在标准数据集ModelNet40和S3DIS上取得了state-of-the-art的效果。
  4. 还存在什么问题?

    • EdgeConv考虑了点的坐标,与领域点的距离,忽视了相邻点之间的向量方向,最终还是损失了一部分局部几何信息。
    • 平移不变性还是没有处理好。这个问题可能是暂时无解。。。 只能部分的解决
    • 考虑点与点之间的关系,也可以考虑更大的点的元组之间的高阶关系,这个是未来研究的方向。
    • 非共享的MLP,为每个Patch单独设置一个MLP

2、论文概述

我们提出一种受PointNet和卷积运算启发的方法。 但是,我们本着图神经网络的精神,而不是像PointNet那样在单个点上工作,而是通过构造局部邻域图并在连接相邻点对的边缘上应用类似卷积的运算来利用局部几何结构。

我们在下面显示,这种称为边缘卷积(EdgeConv)的运算具有位于平移不变性和非局部性之间的属性。

与图CNN不同,我们的图不是固定的,而是在网络的每一层之后动态更新的。 即,一个点的k个最近邻的集合在网络的一层到另一层之间变化,并且是根据嵌入顺序来计算的。 特征空间中的邻近度不同于输入中的邻近度,从而导致信息在整个点云中的非局部扩散。 如

换句话说,我们的体系结构学习如何构造用于各层的图G,而不是将其视为在评估网络之前构造的固定常数。 在我们的实现中,我们计算特征空间中的成对距离矩阵,然后为每个单点取最近的k点

k个点是不是也可以变为可学习的呢?

解释说明了为什么DGCNN有顺序不变性和平移不变性

“部分”的平移不变性

img

顺序不变:maxpool 因为max是一个对称函数(其他对称函数也适用)。 用于汇总点要素的全局最大池化运算符也是置换不变的。

2.1、简介

在这里插入图片描述

  • 最近的算法倾向于搜索点云中的语义线索和一致性,而不是像角点和边缘点这样显著的几何特征。仅仅通过传统方法如计算或者微分这类的方法提取的几何信息显然不够用,所以现在更多地需要基于学习的方法(源自于通过对有标签或无标签的数据集的统计分析得到的相关信息)。

  • 文中主要考虑点云分类和分割任务。

  • 传统的解决办法是,提取handcrafted的特征来获取点云的几何信息。

  • 近来,深度学习在图像处理领域的大获成功,催化了使用数据驱动方法来从点云学习特征的研究。

  • 由于常规的深度网络的输入都是规则结构的数据,而点云则是不规则的数据:每个点在空间中都是连续分布的,并且任何点在顺序上的置换都不会改变空间分布。

  • 一类常用的方法是,将点云转换为volumetric representation(体表示),也就是3D网格,随后便可以采用3D的CNN网络来提取特征。

    • 然而,这种方法会造成quantization artifacts,和额外的内存占用,导致难以提取高分辨率或者细粒度特征。
  • 另一类方法,则是可以直接将不规则的点云作为输入的深度网络,即PointNet系的网络。

    • PointNet,通过独立地处理每个点,能实现置换不变性(permutation invariance)。随后使用一个对称函数(symmetric function)来聚合特征。
    • 之后,一些基于PointNet的改进网络会考虑点的局部特征,而不是分开处理。这样可以让网络提取到局部特征,提高模型的性能。
    • 然而这类算法,在处理局部区域的点的时候为了保证置换不变性,而导致过于独立。这样会忽视点之间的几何相关信息,导致丢失一部分局部特征信息。
  • 为了解决这个问题,就提出了EdgeConv,在保证置换不变性的同时捕获局部几何信息。

  • 贡献:

    1. 提出了一个新的操作,EdgeConv,可以直接在点云上操作。EdgeConv能在在保证置换不变性的同时捕获局部几何信息。
    2. DGCNN模型可以在动态更新图的同时,在语义上将点聚合起来。
    3. EdgeConv可以被集成,嵌入多个已有的点云处理框架中。
    4. 使用EdgeConv搭建的DGCNN网络,在多个基准数据集上取得了state-of-the-art的效果。

2.2、方法

2.2.1、Edge Convolution

在这里插入图片描述

  • 假设一个F维点云有n个点,定义为:X={x_1, …, x_n} \in R^FX=x1,…,xn∈RF。最简单地情况下,F=3,即三维坐标。当然也可能包含额外的坐标,包含颜色、表面法线等等的信息。

  • 在一个深度神经网络中,后面的层都会接受前一层的输出,因此更一般的情况下,维度F也可以表示某一层的特征维度。

  • 假设给定一个有向图G = (\nu, \epsilon)G=(ν,ϵ),用来表示点云的局部结构,其中顶点为\nu = {1,…,n}ν={1,…,n},而边则为\epsilon \in \nu \times \nuϵ∈ν×ν。在最简单地情况下,我们建立一个KNN图G。假设距离点x_ixi最近的点x_{j_{i1}}xji1, …, x_{j_{ik}}xjik包含许多有向边缘(i, j_{i1}), …, (i, j_{ik})(i,ji1),…,(i,jik)。

  • 我们定义边缘特征为:e_{ij} = h_{\Theta}(x_i, x_j)eij=hΘ(xi,xj),其中h_{\Theta}: \mathbb{R}^F \times \mathbb{R}^F \rightarrow \mathbb{R}^{F^{'}}hΘ:RF×RF→RF′,是一些使用一些可学习的参数\ThetaΘ构成的非线性函数。

  • 最后在EdgeConv操作上添加一个通道级的对称聚合操作\square□,完整公式为:x_i^{'} = \square_{j:(i, j)\in \epsilon} h_{\Theta} (x_i, x_j)xi′=□j:(i,j)∈ϵhΘ(xi,xj)。

  • 关于公式中的hh和\square□有四种可能的选择:

    1. h_{\Theta}(x_i, x_j) = \theta_j x_jhΘ(xi,xj)=θjxj,聚合操作采用求和操作:x_i^{'} = \sum_{j:(i, j)\in \epsilon} \theta_j x_jxi′=∑j:(i,j)∈ϵθjxj。
    2. h_{\Theta}(x_i, x_j) = h_{\Theta}(x_i)hΘ(xi,xj)=hΘ(xi),只提取全局形状信息,而忽视了局部领域结构。这类网络实际上就是PointNet,因此PointNet中可以说使用了特殊的EdgeConv模块。
    3. h_{\Theta}(x_i, x_j) = h_{\Theta}(x_j - x_i)hΘ(xi,xj)=hΘ(xj−xi)。这种方式只对局部信息进行编码,在本质上就是将原始点云看做一系列小块的集合,丢失了原始的全局形状结构信息。
    4. 第四种,也是文中采用的,h_{\Theta}(x_i, x_j) = h_{\Theta}(x_i, x_j - x_i)hΘ(xi,xj)=hΘ(xi,xj−xi),这样的结构同时结合了全局形状信息以及局部领域信息。

2.2.2、动态图CNN

  • 假设第l层的输出为X^l = { x_1^l, …, x_n^l } \subseteq \mathbb{R}^{F_l}Xl={x1l,…,xnl}⊆RFl,而X^0X0就是输入点云。

  • 实验表明,每次都重新计算每一层上的图中的点在特征空间中的最近邻点,是有用的。这也是动态图CNN与普通的图CNN的不同之处。

  • 因此,将包含了这样的图的网络命名为动态图CNN(Dynamic Graph CNN, DGCNN)。

    • 每一层都会得到一个不同的图G^l = (\nu^l, \epsilon^l)Gl=(νl,ϵl)。
    • 每一层的边缘特征为(i, j_{i1}), …, (i, j_{ik})(i,ji1),…,(i,jik),取决于点x_i^lxil的k_lkl个最近邻的点x_{j_{i1}}^lxji1l, …, x_{j_{ik}}^lxjikl。
    • 更新公式:x_i^{l+1} = \square_{j:(i, j)\in \epsilon^l} h_{\Theta}^l (x_i^l, x_j^l)xil+1=□j:(i,j)∈ϵlhΘl(xil,xjl)。

2.2.3、实现细节

  • 网络结构见下图:

在这里插入图片描述

  • 整体的网络结构与PointNet的很类似,都使用了一个空间变换单元,最后计算了一个全局信息。
  • 分类网络中包含了两个EdgeConv层,后面接上了一个池化操作和3个全连接层,然后得到分类结果。
  • 分割网络使用了三个EdgeConv层,后面接上了三个全连接层,最后每个点都会输出一个预测分数。
  • 对于每个EdgeConv模块,我们都是用共享边缘函数:h^l(x_i^l, x_j^l) = h(x_i^l, x_j^l-x_i^l)hl(xil,xjl)=h(xil,xjl−xil),而这个函数是用一个多层感知机实现的,聚合操作\square=max□=max即为最大池化。
  • KNN图中的K值是一个超参,分类网络中K=20,而在分割网络中K=30。

2.3、与其他方法比较

  • 主要跟两类方法做对比:一个是PointNet系列,一个是图CNN系列。
  • PointNet是我们的网络的一种特殊情况,即取KNN图的K=1,即图中的边都为空。PointNet中的边缘特征函数为h(x_i, x_j) = h(x_i)h(xi,xj)=h(xi),仅仅考虑了全局几何信息而丢弃了局部信息。PointNet中的聚合操作\square=max□=max(或者\sum∑),其实就相当于全局最大池化(或平均池化)。
  • PointNet++试着通过在局部区域使用PointNet来提取点云的局部结构信息。PointNet++的边缘特征函数也是h(x_i, x_j) = h(x_i)h(xi,xj)=h(xi),聚合操作也是最大池化。
  • 注:图神经网络这部分还不熟悉,先留个坑。
  • 下图显示了不同特征空间的距离,证实了在更深层上的距离也能在长距离范围内携带语义信息。

在这里插入图片描述

2.4、实验验证

2.4.1、分类任务

  • 分类结果:

在这里插入图片描述

  • 模型复杂度:

在这里插入图片描述

  • 网络中不同组件的有效性:

在这里插入图片描述

  • 不同K近邻值的情况:

在这里插入图片描述

  • 不同点数下模型的性能:

在这里插入图片描述

2.4.2、分割任务

  • 分割结果:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 可视化结果:

在这里插入图片描述

  • 分割结果比较:

在这里插入图片描述

  • 验证时随机丢弃一些点的分割结果:

在这里插入图片描述

  • 在ShapeNet上的实验结果:

在这里插入图片描述

2.4.3、室内场景分割

  • 实验结果:

在这里插入图片描述

  • 分割结果对比:

在这里插入图片描述

3、参考资料

  1. Dynamic Graph CNN for Learning on Point Clouds

来自 http://www.pianshen.com/article/2824148324/