in anticipation/anticipation/datasets/epic_future_labels.py [0:0]
def get_node_feats(self, graph, trunk_features):
node_feats = []
node_length = []
for node in sorted(graph.nodes()):
visits = graph.node[node]['members']
feats_idx = []
for visit in visits:
v_feat_idx = self.get_visit_feature(trunk_features, visit['start'][1], visit['stop'][1], self.fb_dim)
feats_idx.extend(v_feat_idx)
# feats.append(v_feat)
# feats = feats or [torch.zeros(self.fb_dim)]
# # Pick last self.node_num_member visits
# feats = feats[-self.node_num_member:]
# length = len(feats)
# feats = feats + [torch.zeros(self.fb_dim)]*(self.node_num_member-length)
# uniformly pick self.node_num_member visits
if self.node_num_member > 0:
if self.rand_visit and len(feats_idx) > self.node_num_member:
idxes = sorted(np.random.choice(feats_idx, self.node_num_member, replace=False))
feats = [to_tensor(trunk_features[idx]) for idx in idxes]
else:
if len(feats_idx) > 0:
idxes_ = np.round(np.linspace(0, len(feats_idx) - 1, self.node_num_member)).astype(int)
# print(idxes_, len(feats_idx))
idxes = [feats_idx[i] for i in idxes_]
feats = [to_tensor(trunk_features[idx]) for idx in idxes]
else:
feats = [torch.zeros(self.fb_dim)] * self.node_num_member
else:
if len(feast_idx) > 0:
feats = [to_tensor(trunk_features[idx]) for idx in feats_idx]
feats = [torch.stack(feats, 0).mean(0)]
else:
feats = [torch.zeros(self.fb_dim)]
length = len(feats)
feats = torch.stack(feats, 0) # (K, 2048)
node_feats.append(feats)
node_length.append(length)
node_feats = torch.stack(node_feats, 0) # (N, K, 2048)
node_length = torch.LongTensor(node_length)
return node_feats, node_length