camids.extend(camid) feats = torch.cat(feats, dim=0) q_feat = feats[:num_query] g_feat = feats[num_query:] q_pids = np.asarray(pids[:num_query]) g_pids = np.asarray(pids[num_query:]) q_camids = np.asarray(camids[:num_query]) g_camids = np.asarray(camids[num_query:]) # compute cosine distance distmat = 1 - torch.mm(q_feat, g_feat.t()) distmat = distmat.numpy() logger.info("Computing APs for all query images ...") cmc, all_ap, all_inp = evaluate_rank(distmat, q_pids, g_pids, q_camids, g_camids) logger.info("Finish computing APs for all query images!") visualizer = Visualizer(test_loader.dataset) visualizer.get_model_output(all_ap, distmat, q_pids, g_pids, q_camids, g_camids) logger.info("Start saving ROC curve ...") fpr, tpr, pos, neg = visualizer.vis_roc_curve(args.output) visualizer.save_roc_info(args.output, fpr, tpr, pos, neg) logger.info("Finish saving ROC curve!") logger.info("Saving rank list result ...") query_indices = visualizer.vis_rank_list(args.output, args.vis_label, args.num_vis, args.rank_sort, args.label_sort, args.max_rank)
dim = 512 max_rank = 5 q_feats = np.random.rand(num_q, dim).astype(np.float32) * 20 q_feats = q_feats / np.linalg.norm(q_feats, ord=2, axis=1, keepdims=True) g_feats = np.random.rand(num_g, dim).astype(np.float32) * 20 g_feats = g_feats / np.linalg.norm(g_feats, ord=2, axis=1, keepdims=True) distmat = 1 - np.dot(q_feats, g_feats.transpose()) q_pids = np.random.randint(0, num_q, size=num_q) g_pids = np.random.randint(0, num_g, size=num_g) q_camids = np.random.randint(0, 5, size=num_q) g_camids = np.random.randint(0, 5, size=num_g) cmc_py_d, mAP_py_d, mINP_py_d = evaluate_rank(distmat, q_feats, g_feats, q_pids, g_pids, q_camids, g_camids, max_rank, use_distmat=True, use_cython=False) cmc_py, mAP_py, mINP_py = evaluate_rank(distmat, q_feats, g_feats, q_pids, g_pids, q_camids, g_camids, max_rank, use_distmat=False, use_cython=False) np.testing.assert_allclose(cmc_py_d, cmc_py, rtol=1e-3, atol=1e-6)
# print('Python time: {} s'.format(pytime)) # print('Cython time: {} s'.format(cytime)) # print('Cython is {} times faster than python\n'.format(pytime / cytime)) from fastreid.evaluation import evaluate_rank print("=> Check precision") num_q = 30 num_g = 300 max_rank = 5 distmat = np.random.rand(num_q, num_g) * 20 q_pids = np.random.randint(0, num_q, size=num_q) g_pids = np.random.randint(0, num_g, size=num_g) q_camids = np.random.randint(0, 5, size=num_q) g_camids = np.random.randint(0, 5, size=num_g) cmc, mAP, mINP = evaluate_rank(distmat, q_pids, g_pids, q_camids, g_camids, max_rank, use_cython=False) print("Python:\nmAP = {} \ncmc = {}\nmINP = {}".format(mAP, cmc, mINP)) cmc, mAP, mINP = evaluate_rank(distmat, q_pids, g_pids, q_camids, g_camids, max_rank, use_cython=True) print("Cython:\nmAP = {} \ncmc = {}\nmINP = {}".format(mAP, cmc, mINP))