def _check_colours_list(render_flag, colours_list, n_objects, error_str): from menpo.visualize.viewmatplotlib import sample_colours_from_colourmap if render_flag: if colours_list is None: # sample colours from jet colour map colours_list = sample_colours_from_colourmap(n_objects, GLOBAL_CMAP) if isinstance(colours_list, list): if len(colours_list) == 1: colours_list[0] = _parse_colour(colours_list[0]) colours_list *= n_objects elif len(colours_list) != n_objects: raise ValueError(error_str) else: colours_list = [_parse_colour(colours_list)] * n_objects else: colours_list = [None] * n_objects return colours_list
def _check_colours_list(render_flag, colours_list, n_objects, error_str): from menpo.visualize.viewmatplotlib import sample_colours_from_colourmap if render_flag: if colours_list is None: # sample colours from jet colour map colours_list = sample_colours_from_colourmap( n_objects, GLOBAL_CMAP) if isinstance(colours_list, list): if len(colours_list) == 1: colours_list[0] = _parse_colour(colours_list[0]) colours_list *= n_objects elif len(colours_list) != n_objects: raise ValueError(error_str) else: colours_list = [_parse_colour(colours_list)] * n_objects else: colours_list = [None] * n_objects return colours_list
def FAR_TAR(): job='insightface' target='A200' files = [score_save_file]#人脸比对得到的相似度文件 methods = [] scores = [] for file in files: methods.append(Path(file).stem)#模型方法名字 scores.append(np.load(file)) #相似度 methods = np.array(methods) scores = dict(zip(methods,scores)) colours = dict(zip(methods, sample_colours_from_colourmap(methods.shape[0], 'Set2'))) #x_labels = [1/(10**x) for x in np.linspace(6, 0, 6)] x_labels = [10**-6, 10**-5, 10**-4,10**-3, 10**-2, 10**-1] tpr_fpr_table = PrettyTable(['Methods'] + [str(x) for x in x_labels]) fig = plt.figure() for method in methods: fpr, tpr, _ = roc_curve(label, scores[method]) roc_auc = auc(fpr, tpr) fpr = np.flipud(fpr) tpr = np.flipud(tpr) # select largest tpr at same fpr plt.plot(fpr, tpr, color=colours[method], lw=1, label=('[%s (AUC = %0.4f %%)]' % (method.split('-')[-1], roc_auc*100))) tpr_fpr_row = [] tpr_fpr_row.append("%s-%s"%(method, target)) for fpr_iter in np.arange(len(x_labels)): _, min_index = min(list(zip(abs(fpr-x_labels[fpr_iter]), range(len(fpr))))) #tpr_fpr_row.append('%.4f' % tpr[min_index]) tpr_fpr_row.append('%.2f' % (tpr[min_index]*100)) tpr_fpr_table.add_row(tpr_fpr_row) plt.xlim([10**-6, 0.1]) plt.ylim([0.3, 1.0]) plt.grid(linestyle='--', linewidth=1) plt.xticks(x_labels) plt.yticks(np.linspace(0.3, 1.0, 8, endpoint=True)) plt.xscale('log') plt.xlabel('False Positive Rate') plt.ylabel('True Positive Rate') plt.title('ROC on IJB') plt.legend(loc="lower right") #plt.show() fig.savefig(os.path.join(save_path, '%s.pdf'%job)) print(tpr_fpr_table)
p1, p2, label = read_template_pair_list( os.path.join('%s/meta' % image_path, '%s_template_pair_label.txt' % 'ijbc')) methods = [] scores = [] for file in files: methods.append(file.split('/')[-2]) scores.append(np.load(file)) methods = np.array(methods) scores = dict(zip(methods, scores)) colours = dict( zip(methods, sample_colours_from_colourmap(methods.shape[0], 'Set2'))) x_labels = [10 ** -6, 10 ** -5, 10 ** -4, 10 ** -3, 10 ** -2, 10 ** -1] tpr_fpr_table = PrettyTable(['Methods'] + [str(x) for x in x_labels]) fig = plt.figure() for method in methods: fpr, tpr, _ = roc_curve(label, scores[method]) roc_auc = auc(fpr, tpr) fpr = np.flipud(fpr) tpr = np.flipud(tpr) # select largest tpr at same fpr plt.plot(fpr, tpr, color=colours[method], lw=1, label=('[%s (AUC = %0.4f %%)]' % (method.split('-')[-1], roc_auc * 100))) tpr_fpr_row = []
def main(): global args args = parse_args() print(args) img_path = args.img_path img_list_path = args.img_list_path model_path = args.model_path epoch_num = args.epoch_num # os.environ["CUDA_VISIBLE_DEVICES"] = args.gpu_id gpus = args.gpu_id.split(",") gpu_id = [] for gpu in gpus: gpu_id.append(int(gpu)) print('gpu id:', gpu_id) #time.sleep(3600*6.5) # # Step1: Load Meta Data # In[9]: # ============================================================= # load image and template relationships for template feature embedding # tid --> template id, mid --> media id # format: # image_name tid mid # ============================================================= start = timeit.default_timer() templates, medias = read_template_media_list(os.path.join('IJBC/meta', 'ijbc_face_tid_mid.txt')) stop = timeit.default_timer() print('Time: %.2f s. ' % (stop - start)) # In[10]: # ============================================================= # load template pairs for template-to-template verification # tid : template id, label : 1/0 # format: # tid_1 tid_2 label # ============================================================= start = timeit.default_timer() p1, p2, label = read_template_pair_list(os.path.join('IJBC/meta', 'ijbc_template_pair_label.txt')) stop = timeit.default_timer() print('Time: %.2f s. ' % (stop - start)) # # Step 2: Get Image Features # In[12]: # ============================================================= # load image features # format: # img_feats: [image_num x feats_dim] (227630, 512) # ============================================================= start = timeit.default_timer() #img_feats = read_image_feature('./MS1MV2/IJBB_MS1MV2_r100_arcface.pkl') img_feats, faceness_scores = get_image_feature(img_path, img_list_path, model_path, epoch_num, gpu_id) stop = timeit.default_timer() print('Time: %.2f s. ' % (stop - start)) print('Feature Shape: ({} , {}) .'.format(img_feats.shape[0], img_feats.shape[1])) # # Step3: Get Template Features # In[34]: # ============================================================= # compute template features from image features. # ============================================================= start = timeit.default_timer() # ========================================================== # Norm feature before aggregation into template feature? # Feature norm from embedding network and faceness score are able to decrease weights for noise samples (not face). # ========================================================== # 1. FaceScore (Feature Norm) # 2. FaceScore (Detector) use_norm_score = False # if Ture, TestMode(N1) use_detector_score = False # if Ture, TestMode(D1) use_flip_test = False # if Ture, TestMode(F1) if use_flip_test: # concat --- F1 #img_input_feats = img_feats # add --- F2 img_input_feats = img_feats[:,0:img_feats.shape[1]/2] + img_feats[:,img_feats.shape[1]/2:] else: img_input_feats = img_feats[:,0:img_feats.shape[1]/2] if use_norm_score: img_input_feats = img_input_feats else: # normalise features to remove norm information img_input_feats = img_input_feats / np.sqrt(np.sum(img_input_feats ** 2, -1, keepdims=True)) if use_detector_score: img_input_feats = img_input_feats * np.matlib.repmat(faceness_scores[:,np.newaxis], 1, img_input_feats.shape[1]) else: img_input_feats = img_input_feats template_norm_feats, unique_templates = image2template_feature(img_input_feats, templates, medias) stop = timeit.default_timer() print('Time: %.2f s. ' % (stop - start)) # # Step 4: Get Template Similarity Scores # In[35]: # ============================================================= # compute verification scores between template pairs. # ============================================================= start = timeit.default_timer() score = verification(template_norm_feats, unique_templates, p1, p2) stop = timeit.default_timer() print('Time: %.2f s. ' % (stop - start)) # In[36]: score_save_name = './IJBC/result/MS1MV2-' + args.model_name + '-TestMode(' + str(epoch_num) + 'epoch).npy' np.save(score_save_name, score) # # Step 5: Get ROC Curves and TPR@FPR Table # In[38]: score_save_path = './IJBC/result' files = glob.glob(score_save_path + '/MS1MV2*.npy') methods = [] scores = [] for file in files: methods.append(Path(file).stem) scores.append(np.load(file)) methods = np.array(methods) scores = dict(zip(methods,scores)) colours = dict(zip(methods, sample_colours_from_colourmap(methods.shape[0], 'Set2'))) #x_labels = [1/(10**x) for x in np.linspace(6, 0, 6)] x_labels = [10**-6, 10**-5, 10**-4,10**-3, 10**-2, 10**-1] tpr_fpr_table = PrettyTable(['Methods'] + map(str, x_labels)) # fig = plt.figure() for method in methods: fpr, tpr, _ = roc_curve(label, scores[method]) roc_auc = auc(fpr, tpr) fpr = np.flipud(fpr) tpr = np.flipud(tpr) # select largest tpr at same fpr # plt.plot(fpr, tpr, color=colours[method], lw=1, label=('[%s (AUC = %0.4f %%)]' % (method.split('-')[-1], roc_auc*100))) tpr_fpr_row = [] tpr_fpr_row.append(method) for fpr_iter in np.arange(len(x_labels)): _, min_index = min(list(zip(abs(fpr-x_labels[fpr_iter]), range(len(fpr))))) tpr_fpr_row.append('%.4f' % tpr[min_index]) tpr_fpr_table.add_row(tpr_fpr_row) #plt.xlim([10**-6, 0.1]) #plt.ylim([0.3, 1.0]) #plt.grid(linestyle='--', linewidth=1) #plt.xticks(x_labels) #plt.yticks(np.linspace(0.3, 1.0, 8, endpoint=True)) #plt.xscale('log') #plt.xlabel('False Positive Rate') #plt.ylabel('True Positive Rate') #plt.title('ROC on IJB-C') #plt.legend(loc="lower right") #plt.show() #fig.savefig('IJB-B.pdf') # In[39]: print(tpr_fpr_table)