def recog_eval(): correct_cnt = 0 total_cnt = 0 print('Start Recognization Eval:') for wavpath, people_valid in valid_list: filename = os.path.join(root_dir, wavpath) data_aud = loadWAV(filename, 160) out_content, out_id = S.__S__.forward_aud(data_aud.cuda()) out_id = out_id.cpu().detach().numpy()[0] magnitude = np.linalg.norm(out_id, axis=0) out_id = out_id / magnitude out_id = np.average(out_id, axis=1) max_sim = None max_arg = None for people in register_dict.keys(): sim = cosine_similarity(out_id, register_dict[people]) if max_sim is None or max_sim < sim: max_sim = sim max_arg = people total_cnt += 1 if max_arg == people_valid: correct_cnt += 1 print('\rIter:%04d\tAcc:%.3f%%' % (total_cnt, correct_cnt * 100 / total_cnt), end='')
def veri_eval(threshold): if os.path.exists('npy/match_list.npy') and os.path.exists( 'npy/unmatch_list.npy'): match_list = np.load('npy/match_list.npy') unmatch_list = np.load('npy/unmatch_list.npy') else: match_list = [] unmatch_list = [] for wavpath, people_valid in tqdm(valid_list): filename = os.path.join(root_dir, wavpath) data_aud = loadWAV(filename, 160) out_content, out_id = S.__S__.forward_aud(data_aud.cuda()) out_id = out_id.cpu().detach().numpy()[0] magnitude = np.linalg.norm(out_id, axis=0) out_id = out_id / magnitude out_id = np.average(out_id, axis=1) for people in register_dict.keys(): sim = cosine_similarity(out_id, register_dict[people]) if people == people_valid: match_list.append(sim) else: unmatch_list.append(sim) np.save('npy/match_list.npy', match_list) np.save('npy/unmatch_list.npy', unmatch_list) tn, fp, fn, tp = 0, 0, 0, 0 for i in match_list: if i < threshold: fn += 1 else: tp += 1 for i in unmatch_list: if i < threshold: tn += 1 else: fp += 1 acc = tn * 100 / (tn + fp) tpr = tp * 100 / (tp + fn) fpr = fp * 100 / (tn + fp) fnr = fn * 100 / (tp + fn) # print('ACC: %.3f%% TPR: %.3f%% FPR: %.3f%% FNR: %.3f%%'%(acc, tpr, fpr, fnr)) return fpr, fnr
def evaluateFromListSave(self, listfilename, print_interval=10, test_path='', num_eval=10): self.eval() lines = [] files = [] filedict = {} feats = {} tstart = time.time() ## Read all lines with open(listfilename) as listfile: while True: line = listfile.readline() if (not line): break data = line.split() files.append(data[1]) files.append(data[2]) lines.append(line) setfiles = list(set(files)) setfiles.sort() ## Save all features to file for idx, file in enumerate(setfiles): inp1 = loadWAV(os.path.join(test_path, file), self.__max_frames__ * 4, evalmode=True, num_eval=num_eval).cuda() out_a, out_A = self.__S__.forward_aud(inp1.cuda()) out_AA = torch.mean(out_A, 2) feats[file] = out_AA.detach().cpu() telapsed = time.time() - tstart if idx % print_interval == 0: sys.stdout.write("\rReading %d: %.2f Hz, embed size %d" % (idx, idx / telapsed, out_AA.size()[1])) print('') all_scores = [] all_labels = [] tstart = time.time() ## Read files and compute all scores for idx, line in enumerate(lines): data = line.split() ref_feat = feats[data[1]].cuda() com_feat = feats[data[2]].cuda() dist = F.cosine_similarity( ref_feat.unsqueeze(-1).expand(-1, -1, num_eval), com_feat.unsqueeze(-1).expand(-1, -1, num_eval).transpose( 0, 2)).detach().cpu().numpy() score = numpy.mean(dist) all_scores.append(score) all_labels.append(int(data[0])) if idx % print_interval == 0: telapsed = time.time() - tstart sys.stdout.write("\rComputing %d: %.2f Hz" % (idx, idx / telapsed)) sys.stdout.flush() print('\n') return (all_scores, all_labels)
for data_pair in valid_list: wavpath, index = data_pair if index not in valid_dict.keys(): valid_dict[index] = [wavpath] else: valid_dict[index].append(wavpath) if os.path.exists('npy/register_dict.npy'): register_dict = np.load('npy/register_dict.npy', allow_pickle=True).item() else: register_dict = dict() for people in tqdm(train_dict.keys()): id_features = [] for wavpath in train_dict[people]: filename = os.path.join(root_dir, wavpath) data_aud = loadWAV(filename, 160) out_content, out_id = S.__S__.forward_aud(data_aud.cuda()) out_id = out_id.cpu().detach().numpy()[0] magnitude = np.linalg.norm(out_id, axis=0) out_id = out_id / magnitude out_id = np.average(out_id, axis=1) id_features.append(out_id) register_dict[people] = np.average(id_features, axis=0) np.save('npy/register_dict.npy', register_dict) def recog_eval(): correct_cnt = 0 total_cnt = 0 print('Start Recognization Eval:') for wavpath, people_valid in valid_list: