DGCNN理解理论篇

本文深入解析DGCNN的工作原理,从输入点集、任务描述、点云特性、局部图结构和图特征提取等方面进行阐述。DGCNN通过K-NN构建局部图结构,利用有向边进行特征学习,并采用MLP提取边特征,实现点云的分类和分割任务,同时具备置换和变换不变性。通过最大池化操作,提取每个点的主要特征,形成高维特征向量。
摘要由CSDN通过智能技术生成

DGCNN理解理论篇

参考了LDGCNN论文,分别从输入点集、任务描述、点云特性、局部图结构、图特征提取等角度给出DGCNN数学理论理解。

输入点集

输入数据可用集合来描述,即向量的集合,每一个向量代表着一个欧式空间点pi,第i个点就可以表示为(xi,yi,zi)。当然这个可以拓展到特征空间,因为在不同的任务中(例如语义分割),输入数据可能包含其他属性(如颜色、反射强度等)。另外,除了第一个边卷积层外,后面的边卷积操作的输入数据均处于特征空间。
在这里插入图片描述

任务描述

1. 分类

分类实际上是将输入点集,映射到标签集合中去,得到一个具体的数值。这个数值是人类预先定义,具有可理解的具体语义,如桌子、地板等。那么,分类任务就是去寻找这样一个转换函数(分类函数fc)。p1,p2,…,pn分别是输入点集中的第一个点,第二个点,第n个点。
在这里插入图片描述

2. 分割

而分割任务实际上是把每一个点归属到一个有限而确定的类别中,即找到一个分割函数fs为每个点计算类别可能性的分布概率,一些文献叫计算分割分数。所以分割函数fs是针对每个点进行处理的,对pi施以fs分割函数得到pi的所属类别。
在这里插入图片描述

点云特性

1. 置换不变性

所谓置换不变性,就是输入点云的排列顺序。例如j1,…,jn与i1,…,in是两种不相同的顺序,这种顺序的不一致性不应该引起分类结果的不同,因此同一个fc分类函数,不同点序的同一个点云集合,其输出结果相同。
在这里插入图片描述

2. 变换不变性

对点云进行平移、旋转不应该改变点云的分类结果和分割结果。因为这样的刚性变换理论上不影响点云的几何属性。下式中的大R是旋转矩阵(三维空间中任何旋转都可以在三个坐标轴上分解),b是平移的参数。所以R乘上点云集合再加上平移量,结果应该与未发生旋转和平移后的情形相同。
在这里插入图片描述

提取局部特征

点集P是p1,…,pn的集合;Li也是集合,是集合P中某一点pi的临近点集,Li是包含于P的;DGCNN并不是从单点中学习特征,而是学习局部特征。所以分类是通过分类函数fc将所有点的局部点映射为一具体类别标签,分割是通过分割函数fs将每一点的临近点转化为该中心点的具体类别。
在这里插入图片描述

局部图结构

在这里插入图片描述
图是由顶点和边组成的,因此可以抽象的描述为:
在这里插入图片描述
顶点集合:点云中的每一个点都是一个顶点
边集合:两个点之间向量都可以看作是边
那么DGCNN并没有让每一个点与其余所有点都构成图结构,因为这种方法十分消耗内存,计算量也很大。所采用的方法是通过K个临近点(K-NN)为一点构建局部图结构。上面示意图中,pi就是点云中的某一点,pi1,pi2,pi3和pi4就是点pi的邻居点(临近点),只不过这张图示意了K为4的情形。
边是一个有方向的量,一个中心点和它的一个临近点可以构成一条边。因为每一个点其实都是由坐标组成的一个向量,两个向量相减,还是一个向量。那为什么叫做,“从临近点指向中心点的有向边”呢?
在这里插入图片描述
首先,DGCNN所构建的图是有向图,每个边是有具体指向的,在数学上实现有向是利用两个向量相见。根据三角形法则计算两个向量相减,就刚刚构造了从临近点指向中心点的一条有向边。所有临近点都执行这个操作,减去中心点,就构建出了以该点为中心的局部图。
在这里插入图片描述

※图特征提取

公式其实不吓人,待我一一道来。
神经网络是如何从这样的图结构中提取特征的呢?所谓每个顶点都有特征是什么意思呢?什么叫做用MLP去提取边特征呢?边又有什么特征呢?
要回答上面这些问题,不妨从张量形状的角度来理解。
在这里插入图片描述
实际上我们输入的点云是一个二维的矩阵。经过构建局部图这个操作,输入的数据就变为一个张量了。我们现在看一个Batch,也就是上面这个示意图。每一行是一个点的局部图,每一列代表这个局部图中的邻居点。
例如第一行第一列,代表了第0个点的第0个临近点
第一行第二列,代表了第0个点的第1个临近点
以此类推。
我们可以借助图像领域的概念来类比理解,上面示意图本质上就是一个图像。只不过,图像的行和列代表了像幅大小(分辨率),每个通道储存了RGB或者特征图的特征。在点云领域,行代表了不同的点,列代表了点的不同临近点,而通道则代表了点云属性。
图像卷积核大小为3×3,在点云领域,通常使用1×1,这变成了一个MLP,因为一个1×1的核是一个神经元,如果用64个这样的1×1卷积核就变成了64个神经元(一层有64个,有多层)。只不过这个MLP是参数共享的,也就是所谓的MLP提取边特征(每个通道存储的值实际上是相应的边eij)。
输入张量如果是(B,N,K,F),且一层神经元的个数是64的话,那么输出张量的形状为(B,N,K,64)。这个时候,我们按照顺序一行一行看(也就是一个点一个点的看),以每个通道为一个维度,比较这一行的最大值,取出来代替整个行的数值。这个操作就是沿着倒数第二个轴进行最大池化,即“从每个图中选取最主要的边特征”,得到的张量形状为(B,N,1,64),再把1给砍了变成(B,N,64),这样的话原始输入点为(B,N,3)就变为了(B,N,64),3个坐标值就变成了64维特征。
用公式的话表示为:
在这里插入图片描述
上面公式描述了提取图局部特征的过程,也就对应了上面示意图中的一个小蓝色格子。fe是局部特征提取函数,它要提取图G中的局部特征。这个图是某一点pi为中心点构建起的局部图,有K个临近点。因此,用MLP拟合h(x)函数,提取边特征。边一共有K个边,分别是ei1,ei2,…,eiK。因为DGCNN的边特征是由中心点的属性与边拼接而成的,然后使用MLP进行提取,所以MLP提取的过程就描述成h(pi,ei1),h(pi,ei2),…。上面讲到了最大池化,所以上式中取max(·)提取所有边的主要特征,它是和点序无关的,具备置换不变性。
对于用MLP提取特征,也有相应的数学描述:
在这里插入图片描述
以示意图中蓝格子为例,假如MLP一层有64个神经元,那么hc’(pi,eij)描述了其中一个神经元的计算过程。蓝格子中的所有的数值都应该是一个神经元的输入数据,因此,一个输入数据对应着一个权重参数。只不过上面式子第一行是分开写的,因为是pi与eij拼接成为蓝格子,所以用加号将带权重参数的两部分连接,加上一个偏置项b。至于下标的话,大C实际上是输入数据的通道数量。小c是从1开始,到大C。wc’c是第c’个神经元对于第c个通道的权重用来与中心点pi的第c个通道数值相乘,同理,wc’(c+C)是第c‘个神经元对于第c+C个通道的权重用来与边eij的第c个通道数值相乘。式子中的第二行描述了MLP的每一个神经元的提取过程,一共有C’个。

欢迎讨论,建议大家结合LDGCNN论文进行参考。
参考文献:
Zhang, Kuangen & Hao, Ming & Wang, Jing & Silva, Clarence & Fu, Chenglong. (2019). Linked Dynamic Graph CNN: Learning on Point Cloud via Linking Hierarchical Features.

DGCNN(Dynamic Graph Convolutional Neural Network)是一种用于图像分类和分割任务的深度学习模型。它是由Maximilian Nickel等人于2018年提出的。 DGCNN使用图卷积神经网络(GCN)来处理图形数据。传统的卷积神经网络(CNN)主要适用于处理规则结构的图像数据,无法直接处理非规则结构的图数据。而GCN具有处理图数据的能力,可以利用图的邻域信息进行特征提取和图结构处理。 DGCNN的主要特点是使用动态图来建模非规则的图形数据。它通过构建一个动态的k最近邻图来捕捉图像的空间特征。然后,通过一系列的图卷积层和max-pooling层对图像的特征进行提取和汇总。最后,通过全连接和softmax层进行分类或分割任务。 在使用Python实现DGCNN时,我们可以使用深度学习框架,如TensorFlow或PyTorch。首先,我们需要定义模型的网络结构,包括图卷积层、max-pooling层和全连接层等。然后,我们可以使用训练数据进行模型的训练和优化。训练过程中,我们可以使用反向传播算法来更新模型的参数,使得模型能够更好地拟合训练数据。最后,我们可以使用测试数据对模型进行评估,并计算准确率或其他评价指标。 总之,DGCNN是一种用于图像分类和分割任务的深度学习模型。它通过动态图建模非规则图像数据,并使用图卷积神经网络对图像特征进行提取和汇总。使用Python实现DGCNN时,我们可以使用深度学习框架来定义网络结构、训练模型和评估模型。
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值