def generate_pairwise_clip_distance_epic()

in build_graph/tools/generate_r152_neighbors.py [0:0]


def generate_pairwise_clip_distance_epic(args):

    def generate_pdist_matrices(videos, split):

        pattern = re.compile('|'.join(videos))
        uids = [uid for uid in all_uids if pattern.match(uid)]

        avg_feats = torch.stack([all_avg_feats[uid] for uid in uids], 0).numpy()
        pdist_dense = euclidean_distances(avg_feats)
        print (split, pdist_dense.shape)

        # Matches within same kitchen
        pdist = np.array(pdist_dense)
        uid_to_idx = {uid:idx for idx, uid in enumerate(uids)}

        z_idx = {}
        for idxA in range(len(uids)):
            kitchen = uids[idxA][:3]
            if kitchen not in z_idx:
                z_idx[kitchen] = [idxB for idxB in range(len(uids)) if uids[idxB][:3]!=kitchen]

        for idx in tqdm.tqdm(range(len(uids))):
            kitchen = uids[idx][:3]
            pdist[idx][z_idx[kitchen]] = 0
        pdist = csr_matrix(pdist)

        out_fl = f'build_graph/data/{args.dset}/{split}_pdist_r152_samek.pth'
        torch.save({'uids':uids, 'uid_to_idx':uid_to_idx, 'pdist':pdist}, out_fl)

    all_avg_feats = torch.load(f'build_graph/data/{args.dset}/avg_feats_r152.pth')
    all_uids = sorted(all_avg_feats.keys())
    
    dset = epic.EPICInteractions('data/epic', 'val', 32)
    generate_pdist_matrices(dset.train_vids, 'train')
    generate_pdist_matrices(dset.val_vids, 'val')