欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

关于时空图卷积神经网络(ST-GCN)的卷积核及其运算

程序员文章站 2022-03-16 17:44:11
...

st-gcn中图卷积的卷积核

卷积核构造步骤如下:
1.对特征集合集合A中的所有节点特征进行axis=0的求和,形成[1,number_node]的向量V。
2.初始化一个[number_node,number_node]的矩阵Dn
3.依次遍历每个元素,若第i个元素大于0,则我们为Dn的对角元素Dn_ii赋值为V**-1。
4.在st-gcn中卷积核返回为:A左乘Dn(实际上在图卷积过程中,使用的爱因斯坦求和策略中,已经把卷积核转换成(Dn^(-1))A).

STGCN中的构造卷积核的代码如下:

def normalize_digraph(A): #A为节点邻接矩阵
    Dl = np.sum(A, 0) #按照axis=0对A进行所有特征向量的求和
    num_node = A.shape[0] #节点数
    Dn = np.zeros((num_node, num_node)) #初始化对角矩阵
    for i in range(num_node): #遍历DI中的每个元素
        if Dl[i] > 0:#若当前元素>0
            Dn[i, i] = Dl[i]**(-1) #求逆后赋值为Dn的对角元素
    AD = np.dot(A, Dn) #卷积核
    return AD

实际上,图卷积的卷积操作应如下:
关于时空图卷积神经网络(ST-GCN)的卷积核及其运算
其中D(-1)A才是卷积核,在st-gcn的图卷积操作中,作者已经利用爱因斯坦求和约定表示把上述代码中返回的AD转为D(-1)A.
该代码在tgcn.py中,对应的代码段如下:

    def forward(self, x, A):
        assert A.size(0) == self.kernel_size
        x = self.conv(x)
        n, kc, t, v = x.size()
        x = x.view(n, self.kernel_size, kc//self.kernel_size, t, v)
        x = torch.einsum('nkctv,kvw->nctw', (x, A))

        return x.contiguous(), A
相关标签: 计算机视觉