關於時空圖卷積神經網絡(ST-GCN)的卷積核及其運算

st-gcn中圖卷積的卷積核

卷積核構造步驟如下:
1.對鄰接矩陣A中的所有權重(Aij爲節點i與節點j的權重)進行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

實際上,圖卷積的卷積操作應如下:
在這裏插入圖片描述
其中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
發佈了25 篇原創文章 · 獲贊 3 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章