预铺知识
1.图 graph
指图论中的图(graph)
由若干个结点(Node) 及连接两个结点的边(Edge) 所构成的图形。
用于刻画不同结点之间的关系
2.GNN
通过结点信息的传播使整张图达到收敛,在其基础上再进行预测。
1.GNN的基础理论是不动点理论,这就意味着GNN沿时间展开的长度是动态的,是根据收敛条件确定的。
2.GNN每次时间步的输入都是所有结点 v 的特征。
3.GNN采用 AP 算法反向传播优化,对收敛性有要求。
4.GNN循环调用 f 的目标是得到每个结点稳定的隐藏状态,所以只有在隐藏状态收敛后才能输出。
图卷积GCN
CNN VS GCN
比较:
1. CNN
用随机的共享的卷积核得到的pixel的加权和从而提取到某种特定的特征,然后反向传播优化。
CNN中有两大核心思想:网络局部连接,卷积核参数共享。
2. GCN
GCN的本质目的是用来提取拓扑图的空间特征。CNN无法处理Non Euclidean Structure的数据,而GCN可以在这样的数据结构(拓扑图)上有效地提取空间特征来进行机器学习。
GCN 实现方法
1. 研究动机
当前卷积神经网络不能够有效建模相距较远区域之间的全局关系
2. 解决思路
提出一种新的推理方法:
- 将坐标空间(Coordinate Space)像素级特征聚合投影到交互空间(Interaction Space);
- 进行有效的关系推理;
- 将具有关系属性的特征反投影回原始的坐标空间
3.具体方法
4. GCN近似公式
Z = ( I − A ) V W g Z = (I-A)VW_g Z=(I−A)VWg
Z = G C N ( V ) = c o n v 1 D ( c o n v 1 D ( V ) T ) T Z = GCN(V) = conv1D(conv1D(V)^{T})^{T} Z=GCN(V)=conv1D(conv1D(V)T)T
即分别对node通道和channel通道进行卷积:
GCN在paddlepaddle下的代码实现
#paddlepaddle version >=2.0
class GCNModule(nn.Layer):
def __init__.(self, num_channels, num_nodes):
super(GCNModule, self).__init__()
self.conv1 = Conv1d(num_nodes, num_nodes, 1)
self.conv2 = Conv1d(num_channels, channels, 1)
self.relu = ReLU()
def forward(self, inputs):
# inputs.shape: B,C,N
x = fluid.layers.transpose(inputs, perms= (0,2,1))
#x.shape: B,N,C
x = self.conv1(x)
# x.shape: B,N,C
x = fluid.layers.transpose(x, perms= (0,2,1))
# x.shape: B,C,N
x = x - inputs
#叠加输入inputs,使参数可以更快的优化
x = self.conv2(x)
x = self.relu(x)
return x
复现GIoRe在Pascal-Context上的实验
相关参数
1. GIoNet
参见aistudio项目链接Paddle 2.0 实现GIoNet
2. Backbone
ResNet101