def compute(self): feats = torch.cat(self.feats, dim=0) if self.feat_norm == 'yes': #print("The test feature is normalized") feats = torch.nn.functional.normalize(feats, dim=1, p=2) # query qf = feats[:self.num_query] q_pids = np.asarray(self.pids[:self.num_query]) q_camids = np.asarray(self.camids[:self.num_query]) # gallery gf = feats[self.num_query:] g_pids = np.asarray(self.pids[self.num_query:]) g_camids = np.asarray(self.camids[self.num_query:]) distmat = euclidean_dist(qf, gf).cpu().numpy() if self.validation_flag: cmc, mAP = eval_func(distmat, q_pids, g_pids, q_camids, g_camids) else: cmc, mAP = np.zeros((self.max_rank,)), 0.0 if self.output_flag: indices = np.argsort(distmat, axis=1) np.savetxt("result.txt", indices[:, :100], fmt="%05d") return cmc, mAP
def compute(self): feats = torch.cat(self.feats, dim=0) camfeats = torch.cat(self.camfeats, dim=0) if self.feat_norm == 'yes': #print("The test feature is normalized") feats = torch.nn.functional.normalize(feats, dim=1, p=2) camfeats = torch.nn.functional.normalize(camfeats, dim=1, p=2) feats = feats.cpu().numpy().astype(np.float16) # merge by trkid self.pids = np.asarray(self.pids) trkids = list(set(self.trkids)) merged_feats = np.zeros((len(trkids),feats.shape[1])) merged_labels = np.zeros(len(trkids)) - 1 for i in range(len(trkids)): tmpidxs = np.where(self.trkids==trkids[i]) tmpfeats = feats[tmpidxs] merged_feats[i] = np.mean(tmpfeats,axis=0) merged_labels[i] = self.pids[tmpidxs][0] feats = torch.from_numpy(merged_feats).cuda() distmat = re_ranking(feats, feats, 20, 6, 0.3) if self.finetune: camdistmat = euclidean_dist(camfeats, camfeats).cpu().numpy() distmat -= camdistmat * 0.1 pos_bool = (distmat < 0) distmat[pos_bool] = 0 eps = self.dist_thrd cluster = DBSCAN(eps=eps,min_samples=4, metric='precomputed', n_jobs=2) ret = cluster.fit_predict(distmat.astype(np.double)) # most count labelset = Counter(ret[ret>=0]) labelset = labelset.most_common() labelset = [i[0] for i in labelset] labelset = labelset[:self.topk] idxs = np.where(np.in1d(ret,labelset))[0] psolabels = ret[idxs] pids = merged_labels[idxs] acc = sklearn.metrics.cluster.normalized_mutual_info_score(psolabels,pids) # back to train images outret = np.zeros(len(self.trkids)) - 1 for i in range(len(trkids)): if ret[i] >= 0: outret[self.trkids==trkids[i]] = ret[i] # relabel outret_set = set(outret) outret_set_len = len(labelset) - 1 outliers = 0 pid2label = {} for pid in outret_set: if pid in labelset: pid2label[pid] = labelset.index(pid) elif self.finetune and outliers <= 200: pid2label[pid] = outret_set_len + outliers outliers += 1 else: pid2label[pid] = -1 outret = np.asarray([pid2label[i] for i in outret]) return outret,acc,len(outret[outret!=-1])
def compute(self): feats = torch.cat(self.feats, dim=0) camera_feats = torch.cat(self.camera_feats, dim=0) if self.feat_norm == 'yes': #print("The test feature is normalized") feats = torch.nn.functional.normalize(feats, dim=1, p=2) camera_feats = torch.nn.functional.normalize(camera_feats, dim=1, p=2) # query qf = feats[:self.num_query] q_campred = np.asarray(self.camera_scores[:self.num_query], np.int) qcf = camera_feats[:self.num_query] q_pids = np.asarray(self.pids[:self.num_query]) q_camids = np.asarray(self.camids[:self.num_query]) # gallery gf = feats[self.num_query:] g_campred = np.asarray(self.camera_scores[self.num_query:], np.int) gcf = camera_feats[self.num_query:] g_pids = np.asarray(self.pids[self.num_query:]) g_camids = np.asarray(self.camids[self.num_query:]) qf = qf.cpu().numpy().astype(np.float16) gf = gf.cpu().numpy().astype(np.float16) P, neg_vec = compute_P2(qf, gf, g_campred, 0.02) qf = meanfeat_sub(P, neg_vec, qf, q_campred) gf = meanfeat_sub(P, neg_vec, gf, g_campred) gf_new = gf.copy() for _ in range(3): gf_new = mergesetfeat(gf_new, g_campred, gf, g_campred, 0.03, 50) qf_new = qf.copy() for _ in range(3): qf_new = mergesetfeat(qf_new, q_campred, gf_new, g_campred, 0.03, 50) qf = torch.from_numpy(qf_new).cuda() gf = torch.from_numpy(gf_new).cuda() distmat = re_ranking(qf, gf, k1=30, k2=8, lambda_value=0.3) camdistmat = euclidean_dist(qcf, gcf).cpu().numpy() if self.output_flag: np.save(os.path.join(self.output_dir, 'distmat.npy'), distmat) np.save(os.path.join(self.output_dir, 'q_pred.npy'), q_campred) np.save(os.path.join(self.output_dir, 'g_pred.npy'), g_campred) np.save(os.path.join(self.output_dir, 'camdistmat.npy'), camdistmat) distmat -= camdistmat * 0.1 campredmat = np.equal(q_campred.reshape(-1,1), g_campred.T) distmat += campredmat * 1.0 distmat = add_space(distmat, q_campred, g_campred) if self.validation_flag: cmc, mAP = eval_func(distmat, q_pids, g_pids, q_camids, g_camids) else: cmc, mAP = np.zeros((self.max_rank,)), 0.0 if self.output_flag: indices = np.argsort(distmat, axis=1) np.savetxt("result.txt", indices[:, :100], fmt="%05d") return cmc, mAP