【3D计算机视觉】Dynamic Graph CNN——点云动态图卷积神经网络
Dynamic Graph CNN for Learning on Point Clouds
1.简介
该文章是最新出的一篇针对点云数据分类、分割的网路,它是受PointNet以及PointNet++的启发所进行的修改,PointNet只是独立处理每个点,同过最大池化后的全局特征来进行网络输出,但忽视了点之间的局部特征。所以这篇文章主要提出了一个EdgeConv层来实现获取局部特征,解决PointNet所没有的处理局部特征的问题。
1.1 解决的问题
- 使用深度学习处理3D点云。
- 设计一个可以直接使用点云作为输入的CNN架构,同时可以获取足够的局部信息,可适用于分类、分割等任务。
1.2 贡献
- 提出了一个新的操作——EdgeConv,可以直接在点云上操作。EdgeConv能在在保证置换不变性的同时捕获局部几何信息。
- DGCN模型可以在动态更新图的同时,在语义上将点聚合起来。
- EdgeConv可以被集成,嵌入多个已有的点云处理框架中。
- 使用EdgeConv搭建的DGCNN网络,在多个基准数据集上取得了state-of-the-art的效果。
1.3 EdgeConv的优缺点:
- 包含了局部领域信息;
- 通过堆叠EdgeConv模块或循环使用,可以提取到全局形状信息;
- 在多层系统中,特征空间中的相对关系包含了语义特征。(注:点云中形状近似的部分,在特征空间中距离较小。)
效果如何? - 在标准数据集ModelNet40和S3DIS上取得了state-of-the-art的效果。
- EdgeConv考虑了点的坐标,与领域点的距离,忽视了相邻点之间的向量方向,最终还是损失了一部*部几何信息。
2.网络结构
该文章的网络结构和PointNet的相似,只是对其中的提取特征的结构进行了修改为EdgeConv。
其中EdgeConv的设计是文章的创新之处。文章原文是这样描述的:输入为的张量,通过MLP按照给定的每一层的输出特征尺寸计算边缘特征,最后沿着neighboring的边缘特征的方向做pooling操作生成新的的张量。
2.1 EdgeConv层介绍
框架如下:
-
假设一个F维点云有n个点,定义为: 。最简单地情况下,F=3,即三维坐标。当然也可能包含额外的坐标,包含颜色、表面法线等等的信息。在一个深度神经网络中,后面的层都会接受前一层的输出,因此更一般的情况下,维度F也可以表示某一层的特征维度。
-
假设给定一个有向图,用来表示点云的局部结构,其中顶点为,而边则为。在最简单地情况下,我们建立一个KNN图G。假设距离点 最近的点包含许多有向边缘。
-
我们定义边缘特征为:,其中 是一些使用一些可学习的参数构成的非线性函数。
-
最后在EdgeConv操作上添加一个通道级的对称聚合操作,完整公式从图中可以更具体的看出:
-
图1 描述了一个关注点和其邻近的一个点的边缘特征的求解过程,图中的全连接操作只是一个示例。实际操作作者使用MLP操作。
-
图2 假设一个关注点Xi周围的K个邻近点(图中K=5)。按照图例,需要按照图1的方式计算Xi和图中5个点的边缘特征。
-
图3 将计算出的5个邻近点的边缘特征pooling到点数乘以特征的尺寸上。(公式如下,可以采取求和或max的聚合方式)
2.2 函数的选择
关于公式中的h和有四种可能的选择
(1)第一种,描述了一种2D图像的场景,如果我们的关注点为一个图像的像素点,而可以认为是其周围相连接的一些像素值,此时可以将边缘特征的计算过程写成如下。此时形式和一个卷积核的加权求和过程一致,
(2)第二种,描述了一种仅考虑全局特征的形式,即只有关注点的形式,也就是PointNet中提到的形式,此时
所以说PointNet中使用MLP操作可以认识是EdgeConv中特殊的一种操作。
(3)第三种,描述了一种仅考虑局部特征的形式,即只有关注点和邻近点之间联系的操作,此时
(4)最后一种,也是文章采用的一种,既考虑全局又考虑局部,即将上述(2)和(3)操作结合
2.3 动态CNN
- 假设第层的输出为,而就是输入点云。
- 实验表明,每次都重新计算每一层上的图中的点在特征空间中的最近邻点,是有用的。这也是动态图CNN与普通的图CNN的不同之处。
- 因此,将包含了这样的图的网络命名为动态图CNN(Dynamic Graph CNN, DGCNN)。
- 每一层都会得到一个不同的图
- 每一层的边缘特征为,取决于点的个最近邻的点。
- 更新公式:
2.4 实现细节
- 整体的网络结构与PointNet的很类似,都使用了一个空间变换单元,最后计算了一个全局信息。
- 分类网络中包含了两个EdgeConv层,后面接上了一个池化操作和3个全连接层,然后得到分类结果。
- 分割网络使用了三个EdgeConv层,将全局特征和局部特征逐点拼接,最后每个点都会输出一个预测分数。
- 对于每个EdgeConv模块,我们都是用共享边缘函数:,而这个函数是用一个多层感知机实现的,聚合操作即为最大池化。
- KNN图中的K值是一个超参,分类网络中K=20,而在分割网络中K=30。
3.实验结果:
该网络在分类和分割上都有不错的效果:
同时实验还证明了在不同的特征空间都可以长距离范围内携带语义信息,例如即使桌子的两个角距离较远,还是在高维语义特征上表现为接近。
参考
https://blog.****.net/hongbin_xu/article/details/85258278
https://blog.****.net/legend_hua/article/details/79175315
https://github.com/ToughStoneX/DGCNN