点云特征学习(三)–DGCNN论文阅读笔记
一,挑战
在DGCNN算法之前,基于深度学习的点云特征学习算法有:PointNet,PointNet++,PointCNN等。这些算法都能够较好地处理点云数据。但是,这些特征学习方法只是从离散点云的角度的特征出发,没有考虑物体的拓扑结构。点云这种数据结构是离散的,缺乏拓扑信息(也就是单个点与点之间的关联并没有显式建立,但是他们之间应该是有实际意义的)。自然而然地,如果能够通过某种方式建立点与点之间的拓扑关系,应该可以增强表征的能力。这里,存在的一个挑战就是如何表现点云中的拓扑结构,并加以利用。
二,方法
论文中给出了整个DGCNN的网络图,根据分割以及分类任务,分成了两个pipeline。从网络图中可以看出来,整篇文章的创新点主要在于Edge Conv。
2.1 Edge Conv
EdgeConv在网络的每一层上动态构建图结构,将每一点作为中心点来表征其与各个邻点的edge feature,再将这些特征聚合从而获得该点的新表征。
EdgeConv实现的实际就是通过构建局部邻域(这种局部邻域既可以建立在坐标空间,也可以建立在特征空间),对每个点表征。
将多个EdgeConv模块首尾相接不断堆叠也就是为了获得多层次、具有更加丰富语义的表征。
Edge Conv的输入为 N ∗ F N*F N∗F, 输出为 N ∗ F ’ N*F’ N∗F’。
具体而言,构建图结构,顶点就是点云各个点,通过对每个点KNN,连接其K近邻,构建边的关系。
顶点集合:
其中初始状态 F 表示点的三维坐标信息。当然更一般的情况, F 表示神经网络某一层输出的点的特征空间维度信息。
如上图所示,表征分为2步:
1,根据图结构计算edge feature。
2,聚合edge feature,对其对应的中心点表征新的特征。
展开来说:
1,如何计算edge feature?
对于函数
h
h
h 以及聚合函数的选择,论文中给出了五种选择:
选择一:
图结构中每个点的邻点是固定的K个,可以按照类似卷积来实现。这里的聚合操作是 求和。
选择二:
与PointNet类似,只考虑点自身,不考虑邻域邻点信息。所以,文中指出,PointNet可以视为Edgconv的特例。
选择三:
选择四:
这只编码局部信息,将形状视为一个小斑块的集合,并失去了全局结构。
选择五:
EdgeConv选择的就是这个方案,既考虑了局部邻域的global信息 ,又考虑了local neighborhood信息 。
接着送入多层感知机,得到了edge feature:
2.2 图结构的动态更新
不断重新计算各个点在每一层特征空间的近邻是recompute graph的关键。在特征空间中计算一个成对的距离矩阵,然后为每个单点取最近的 k 个点。这是DGCNN和GCN的最大不同,GCN是在坐标空间构建好图结构后整体图结构就固定了,没有动态更新的过程。
2.3 特点
1,排列不变性
这里选择了与PointNet相同的Maxpooling函数解决排列不变,不再解释。
2,部分平移不变性
从文中给出了公式推导可以看出,平移不变性仅仅针对左项。
1,EdgeConv可以有效建模点云局部领域的特征
2,可以通过堆叠(实际中就是池化操作)基于某个中心点相对于其邻点的edge feature来获得该局部邻域的global feature
3,在多层深度网络中,在特征空间提取的邻域信息可以潜在表示在原空间(比如坐标空间)非常远的距离。(摘自原文:the distances in deeper layers carry semantic information over long distances in the original embedding.)
关于第三点的解释:在最左边一列表示原始坐标空间,离红点的远近完全就是取决于欧式距离。在右二列表示Layer3输出的特征空间,离红点近的点已经不是欧式距离了,而是具有一定相似语义的点,比如飞机的两翼、两个喷气泵等。
参考博客:https://zhuanlan.zhihu.com/p/267895014?utm_source=qq