def __init__(self, adj, adj_mutual, person_num, hid_dim, coords_dim=(2, 3), num_layers=4, nodes_group=None): super(MultiSemGCN, self).__init__() _gconv_input = [_GraphConv(adj, coords_dim[0], hid_dim, p_dropout=None)] #出来是17*hid_dim的矩阵 _gconv_layers = [] _gconv_mutual = [] self.num_layers = num_layers if nodes_group is None: for i in range(num_layers): _gconv_layers.append(_ResGraphConv(adj, hid_dim, hid_dim, hid_dim, p_dropout=None)) else: group_size = len(nodes_group[0]) assert group_size > 1 grouped_order = list(reduce(lambda x, y: x + y, nodes_group)) ##list展开 restored_order = [0] * len(grouped_order) for i in range(len(restored_order)): for j in range(len(grouped_order)): if grouped_order[j] == i: restored_order[i] = j break ## 相当于先转换为grouped_order的顺序into nonlocal layer,然后再用restored_order恢复原来的顺序 _gconv_input.append(_MutualGraphNonLocal(hid_dim, grouped_order, restored_order, group_size, person_num)) _gconv_layers.append(_ResGraphConv(adj, hid_dim, hid_dim, hid_dim, p_dropout=None)) _gconv_layers.append(_MutualGraphNonLocal(hid_dim, grouped_order, restored_order, group_size, person_num)) _gconv_mutual.append(_MultiGraphConv(person_num, adj_mutual, hid_dim, hid_dim)) self.gconv_input = nn.Sequential(*_gconv_input) self.gconv_layers = nn.Sequential(*_gconv_layers) self.gconv_mutual = nn.Sequential(*_gconv_mutual) self.gconv_output = SemGraphConv(hid_dim, coords_dim[1], adj)
def __init__(self, adj, hid_dim, coords_dim=(2, 3), num_layers=4, nodes_group=None, p_dropout=None): super(SemGCN, self).__init__() _gconv_input = [_GraphConv(adj, coords_dim[0], hid_dim, p_dropout=p_dropout)] _gconv_layers = [] if nodes_group is None: for i in range(num_layers): _gconv_layers.append(_ResGraphConv(adj, hid_dim, hid_dim, hid_dim, p_dropout=p_dropout)) else: group_size = len(nodes_group[0]) assert group_size > 1 grouped_order = list(reduce(lambda x, y: x + y, nodes_group)) restored_order = [0] * len(grouped_order) for i in range(len(restored_order)): for j in range(len(grouped_order)): if grouped_order[j] == i: restored_order[i] = j break _gconv_input.append(_GraphNonLocal(hid_dim, grouped_order, restored_order, group_size)) for i in range(num_layers): _gconv_layers.append(_ResGraphConv(adj, hid_dim, hid_dim, hid_dim, p_dropout=p_dropout)) _gconv_layers.append(_GraphNonLocal(hid_dim, grouped_order, restored_order, group_size)) self.gconv_input = nn.Sequential(*_gconv_input) self.gconv_layers = nn.Sequential(*_gconv_layers) self.gconv_output = SemGraphConv(hid_dim, coords_dim[1], adj) self.LSTM = nn.LSTM()
def __init__(self, convm, adj, input_dim, output_dim, p_dropout=None): super(_GraphConv, self).__init__() self.gconv = SemGraphConv(convm, input_dim, output_dim, adj) self.bn = nn.BatchNorm1d(output_dim) self.relu = nn.ReLU() if p_dropout is not None: self.dropout = nn.Dropout(p_dropout) else: self.dropout = None