-
Notifications
You must be signed in to change notification settings - Fork 2
/
eval.py
54 lines (39 loc) · 1.8 KB
/
eval.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import argparse
import logging
import os
import subprocess
import sys
import scipy.io as sio
import torch
from utils.eval_cmc import eval_feature
if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument("gpu", type=int)
parser.add_argument("model_path", type=str)
parser.add_argument("--dataset", type=str, default=None)
args = parser.parse_args()
dataset, fname = args.model_path.split("/")[1], args.model_path.split("/")[-1]
if args.dataset is not None:
dataset = args.dataset
prefix = os.path.splitext(fname)[0]
logging.basicConfig(level=logging.INFO, format="%(message)s")
# extract feature
cmd = "python{} extract.py {} {} ".format(sys.version[0], args.gpu, args.model_path)
if args.dataset is not None:
cmd += "--dataset {}".format(args.dataset)
subprocess.check_call(cmd.strip().split(" "))
# evaluation
query_features_path = 'features/%s/query-%s.mat' % (dataset, prefix)
gallery_features_path = "features/%s/gallery-%s.mat" % (dataset, prefix)
assert os.path.exists(query_features_path) and os.path.exists(gallery_features_path)
query_mat = sio.loadmat(query_features_path)
gallery_mat = sio.loadmat(gallery_features_path)
query_features = query_mat["feat"]
query_ids = query_mat["ids"].squeeze()
query_cam_ids = query_mat["cam_ids"].squeeze()
gallery_features = gallery_mat["feat"]
gallery_ids = gallery_mat["ids"].squeeze()
gallery_cam_ids = gallery_mat["cam_ids"].squeeze()
mAP, r1, r5, r10 = eval_feature(query_features, gallery_features, query_ids, query_cam_ids, gallery_ids,
gallery_cam_ids, torch.device("cuda", args.gpu))
print('mAP = %f , r1 precision = %f , r5 precision = %f , r10 precision = %f' % (mAP, r1, r5, r10))