图神经网络及在3D点云中的应用.docx
《图神经网络及在3D点云中的应用.docx》由会员分享,可在线阅读,更多相关《图神经网络及在3D点云中的应用.docx(9页珍藏版)》请在冰豆网上搜索。
图神经网络及在3D点云中的应用
图神经网络及在3D点云检测中的应用
图神经网络(GraphNeuralNetwork)
首先指明,本文中所提到的图均指图论中的图(Graph)。
它是一种由若干个结点(Node)及连接两个结点的边(Edge)所构成的图形,用于刻画不同结点之间的关系。
下图是一个生动的例子:
我们做图像识别,对象是图片,是一个二维的结构,于是人们发明了CNN这种神奇的模型来提取图片的特征。
CNN的核心在于它的kernel在图片上平移,通过卷积的方式来提取特征。
这里的关键在于图片结构上的平移不变性:
一个小窗口无论移动到图片的哪一个位置,其内部的结构都是一模一样的,因此CNN可以实现参数共享。
而图片或者语言,都属于欧式空间的数据,因此才有维度的概念,欧式空间的数据的特点就是结构很规则。
但是现实生活中,其实有很多不规则的数据结构,典型的就是图结构,或称拓扑结构,如社交网络、化学分子结构、知识图谱等等;即使是语言,实际上其内部也是复杂的树形结构,也是一种图结构;而像图片,在做目标识别的时候,我们关注的实际上只是二维图片上的部分关键点,这些点组成的也是一个图的结构。
图的结构一般来说是十分不规则的,可以认为是无限维的一种数据,所以它没有平移不变性。
每一个节点的周围结构可能都是独一无二的,这种结构的数据,就让传统的CNN、RNN瞬间失效。
所以很多学者从上个世纪就开始研究怎么处理这类数据了。
状态更新与输出#
最早的图神经网络起源于Franco博士的论文[1],它的理论基础是不动点理论。
给定一张图 G,每个结点都有其自己的特征(feature),本文中用
表示结点v的特征;连接两个结点的边也有自己的特征,本文中用
表示结点v与结点u之间边的特征;GNN的学习目标是获得每个结点的图感知的隐藏状态
(stateembedding),这就意味着:
对于每个节点,它的隐藏状态包含了来自邻居节点的信息。
那么,如何让每个结点都感知到图上其他的结点呢?
GNN通过迭代式更新所有结点的隐藏状态来实现,在t+1时刻,结点v的隐藏状态按照如下方式更新:
上式中的
就是隐藏状态的状态更新函数,在论文中也被称为局部转移函数(localtransactionfunction)。
公式中的
指的是与结点v相邻的边的特征,
指的是结点v的邻居结点的特征,
则指邻居结点在t时刻的隐藏状态。
注意
是对所有结点都成立的,是一个全局共享的函数。
那么如何将它与深度学习结合在一起呢?
即利用神经网络(NeuralNetwork)来拟合这个复杂函数
。
值得一提的是,虽然看起来
的输入是不定长参数,但在
内部我们可以先将不定长的参数通过一定操作变成一个固定的参数,比如说用所有隐藏状态的加和来代表所有隐藏状态。
如下图:
假设结点5为中心结点,其隐藏状态的更新函数如图所示。
这个更新公式表达的思想自然又贴切:
不断地利用当前时刻邻居结点的隐藏状态作为部分输入来生成下一时刻中心结点的隐藏状态,直到每个结点的隐藏状态变化幅度很小,整个图的信息流动趋于平稳。
至此,每个结点都“知晓”了其邻居的信息。
状态更新公式仅描述了如何获取每个结点的隐藏状态,除它以外,我们还需要另外一个函数 gg来描述如何适应下游任务。
举个例子,给定一个社交网络,一个可能的下游任务是判断各个结点是否为水军账号。
在原论文中,g 又被称为局部输出函数(localoutputfunction),与
类似,g 也可以由一个神经网络来表达,它也是一个全局共享的函数。
那么,整个流程可以用下面这张图表达:
仔细观察两个时刻之间的连线,它与图的连线密切相关。
比如说在 T1时刻,结点1的状态接受来自结点3的上一时刻的隐藏状态,因为结点1与结点3相邻。
直到 Tn时刻,各个结点隐藏状态收敛,每个结点后面接一个 g即可得到该结点的输出 o。
对于不同的图来说,收敛的时刻可能不同,因为收敛是通过两个时刻pp-范数的差值是否小于某个阈值 ϵ来判定的,比如:
不动点理论
开头曾提过GNN的理论基础是不动点(thefixedpoint)理论,这里的不动点理论专指巴拿赫不动点定理(Banach'sFixedPointTheorem)。
首先我们用 F表示若干个 f堆叠得到的一个函数,也称为全局更新函数,那么图上所有结点的状态更新公式可以写成:
不动点定理指的就是,不论H0是什么,只要 F 是个压缩映射(contractionmap),H0经过不断迭代都会收敛到某一个固定的点,我们称之为不动点。
压缩映射的定义如下图:
即经过 F 变换后的新空间一定比原先的空间要小,原先的空间被压缩了。
想象这种压缩的过程不断进行,最终就会把原空间中的所有点映射到一个点上。
具体实现
在具体实现中, f 其实通过一个简单的前馈神经网络(Feed-forwardNeuralNetwork)即可实现。
比如说,一种实现方法可以是把每个邻居结点的特征、隐藏状态、每条相连边的特征以及结点本身的特征简单拼接在一起,在经过前馈神经网络后做一次简单的加和。
那我们如何保证 f是个压缩映射呢,其实是通过限制 f对 H 的偏导数矩阵的大小,这是通过一个对雅可比矩阵(JacobianMatrix)的惩罚项(Penalty)来实现的。
在代数中,有一个定理是:
f 为压缩映射的等价条件是 f 的导数要小于1。
这个等价定理可以从压缩映射的形式化定义导出, ||x|| 表示 x在空间中的范数(norm)。
坐标之间的差值可以看作向量在空间中的距离,根据压缩映射的定义,可以导出:
推广一下,即得到雅可比矩阵的罚项需要满足其范数小于等于c等价于压缩映射的条件。
根据拉格朗日乘子法,将有约束问题变成带罚项的无约束优化问题,训练的目标可表示成如下形式:
其中λ是超参数,与其相乘的项即为雅可比矩阵的罚项。
模型学习
在知道如何让 f接近压缩映射后,我们来具体叙述一下图神经网络中的损失 Loss是如何定义,以及模型是如何学习的。
仍然以社交网络举例,虽然每个结点都会有隐藏状态以及输出,但并不是每个结点都会有监督信号(Supervision)。
比如说,社交网络中只有部分用户被明确标记了是否为水军账号,这就构成了一个典型的结点二分类问题。
那么很自然地,模型的损失即通过这些有监督信号的结点得到。
假设监督结点一共有 p 个,模型损失可以形式化为:
那么,模型如何学习呢?
根据前向传播计算损失的过程,不难推出反向传播计算梯度的过程。
前向传播模型即为:
1.调用
若干次,比如 Tn次,直到
收敛。
2.此时每个结点的隐藏状态接近不动点的解。
3.对于有监督信号的结点,将其隐藏状态通过 g 得到输出,进而算出模型的损失。
根据上面的过程,在反向传播时,我们可以直接求出 f和 g对最终的隐藏状态
的梯度。
然而,因为模型递归调用了 f若干次,为计算 f和 g 对最初的隐藏状态
的梯度,我们需要同样递归式/迭代式地计算 Tn 次梯度。
最终得到的梯度即为 f 和 g 对
的梯度,然后该梯度用于更新模型的参数。
这个算法就是Almeida-Pineda算法[2-3]。
图神经网络(GNN)有如下特点:
1、忽略节点的输入顺序;
2、在计算过程中,节点的表示受其周围邻居节点的影响,而图本身连接不变;
3、图结构的表示,使得可以进行基于图的解释和推理。
图神经网络(GNN)尚未解决的问题(局限性):
1、网络结构较浅,堆叠过多层数将导致所有顶点趋同(收敛至相同值);
2、对于非结构化场景没有通用有效的图生成方法;
3、数据的不规则性导致无法应用批量化处理,节点规模过大还会令Laplace算子计算困难;
4、对于动态图(节点变化)的引入,图神经网络(GNN)无法自适应地进行改变。
参考文献:
[1]Almeida,LuisB.(June1987). Alearningruleforasynchronousperceptronswithfeedbackinacombinatorialenvironment.IEEEFirstInternationalConferenceonNeuralNetworks.SanDiego,CA,USA.pp. 608–18.
[2]Pineda,Fernando(9November1987).""GeneralizationofBack-PropagationtoRecurrentNeuralNetworks". PhysicalReviewLetters. 19 (59):
2229–32.
[3]Almeida,LuisB.(June1987). Alearningruleforasynchronousperceptronswithfeedbackinacombinatorialenvironment.IEEEFirstInternationalConferenceonNeuralNetworks.SanDiego,CA,USA.pp. 608–18.
相关论文
PointGNN:
使用图神经网络的3d目标检测方法
WeijingShiandRagunathan(Raj)Rajkumar,Point-GNN:
GraphNeuralNetworkfor3DObjectDetectioninaPointCloud,arxiv:
2003.01251v1
本文提出了一个图神经网络来从激光雷达点云检测目标。
对这个目标,作者将点云有效地编码到一个固定半径的近邻图中。
作者设计了一个称为PointGNN的图神经网络来预测类别和图中每个顶点所属的对象的形状。
理解3D环境对机器人感知及自动驾驶至关重要。
点云是一种广泛应用于三维传感器(如激光雷达)的技术,而点云的检测器目前广泛使用卷积神经网络,虽然卷积运算很有效,但它要求输入是规则的网格数据,而点云通常是稀疏且在规则网格上间隔不均匀的。
把点云放在规则网格会导致每个cell中点的数目不均匀。
在对这些网格进行相同的卷积操作可能会导致拥挤网格中的信息丢失或者空网格浪费计算。
神经网络的一些突破性工作允许以无序的点集作为输入。
此类研究利用这种类型的神经网络来提取点云特征,而不需要将点云映射到网格。
但它们通常需要迭代地对点进行取样和分组(sample&group)从而得到点集表示,而在大型点云上的重复分组和采样计算代价非常昂贵。
本文中,作者们使用图来表示点云,并设计了称为PointGNN的图神经网络来检测对象。
作者把点作为图顶点来编码点云。
图的边(edge)将位于固定半径内的邻域点连接起来,使得特征信息可以在邻域之间流动。
这样的图表示可以直接适应点云的结构,而不需要使它具有规则性。
图神经网络在每一层都重复使用图的边,避免了对点的重复分组和采样。
目前该领域的工作可分为这三类,如图所示
a.将点云转换为规则网格,以利用卷积神经网络。
这种方法将点云投射到2D鸟瞰(BEV)图像上,并使用2DCNN进行对象检测,或把点用3d体素(voxel)表示并用3d卷积来目标检测。
缺点前者由于图像分辨率的限制,这种投影会产生误差。
而采用体素的后者当体素的分辨率增大时,3DCNN的计算量也随之增大
b.在PointNet和DeepSet等点集上的深度学习技术表明神经网络可以直接从无序的集合中提取特征。
这种方法中每一个点都经过多层感知器(MLP)处理以获得点特征向量。
通过平均或最大池化函数将这些功能聚合起来,形成此点集一个全局的特征向量。
c.即本文所采用的GNN结构,GNN在点云中的应用主要以图结构这种不规则的表达数据来替代二维CNN运行模式。
CNN通过连接的edge来更新顶点的特征,目前的边特征整合和MLP在点云中的运用类似,但是GNN能够容纳更加复杂的网络特征,但是不需要采样和group。
在该文中作者只建图一次,剩下的GNN优化过程都是在同一张图上进行优化工作的
上图很清晰的表达了作者做的三部分结构
(1)图构建
(2)PointGCN网络结构(3)bbox融合
•图构建
对于一个点集作者采用P={p1,…,pN}表示,其中每一个元素pi=(xi,si)中的xi表示的是3D坐标中的坐标,si表示的是该点的属性,可以是KITTI中的点的反射强度等等,作者构建的图结构则是以点P为顶点,一个固定半径中的顶连接起来得到一个局部图。
表示如下:
作者在这里指出可以采用方法使得建图的时间复杂度降低到O(cN),这里的c表示在这个固定半径内的点的最大个数O(cN),这里的c表示在这个固定半径内的点的最大个数。
作者为了使得之前的信息不丢失,采用了把voxel编码的信息存放在上式中的sis_isi中作者并将这些特征作为GNN的初始特征,迭代过程可以下图所示:
•使用Auto-Registration更新节点
GNN迭代过程中,会根据边更新顶点的特征,可以表达为:
这里的et表示的是边的第t次迭代的特征,vt是顶点的特征,
表示根据顶点更新边的特征;ρ(.)表示对多条边特征的整合;gt表示将整合的边特征更新为新的顶点特征。
并进一步以相邻顶点特征来精细更新顶点状态为
这里的输入采用的是顶点间的相对坐标作为输入,因为相对坐标对点云的整体平移具有不变性,但是对邻近区域的变换很敏感。
但是假如一个平移被添加到一个顶点时,他们的局部结构还是相似的,但是相对坐标是发生变化的,这会导致增加输入方差。
为了减少平移方差,作者根据邻居的结构特征来调整他们的坐标,而不是使用中心顶点坐标所以作者提出的auto-registration表示为:
•Loss
对于分类loss采用交叉熵:
对于位置loss首先将原始坐标的信息转化为GNN顶点的坐标信息:
如果一个顶点在Box中,那么采用huberloss,最后将所有的locloss求平均:
为了防止过拟合,作者加入了L1正则项:
•实验
在KITTI数据集上做的实验结果表明,该方法(仅限点云)达到了领先水平,精确度甚至可以超过基于merged的算法。
该文的结果证明了利用图神经网络作为一种新的三维目标检测方法的潜力。