mirror of
https://github.com/MarcosRodrigoT/ViT-Face-Recognition.git
synced 2025-12-30 08:02:29 +00:00
Extend experiments as requested by reviewers
This commit is contained in:
6
.gitignore
vendored
6
.gitignore
vendored
@@ -17,9 +17,9 @@ saved_results/Tests/UPM-GTI-Face/Mask/*
|
||||
!saved_results/Tests/UPM-GTI-Face/Mask/AUC Curves.xlsx
|
||||
!saved_results/Tests/UPM-GTI-Face/Mask/AUC paper.png
|
||||
|
||||
saved_results/Tests/UPM-GTI-Face/No Mask/*
|
||||
!saved_results/Tests/UPM-GTI-Face/No Mask/AUC Curves.xlsx
|
||||
!saved_results/Tests/UPM-GTI-Face/No Mask/AUC paper.png
|
||||
saved_results/Tests/UPM-GTI-Face/No mask/*
|
||||
!saved_results/Tests/UPM-GTI-Face/No mask/AUC Curves.xlsx
|
||||
!saved_results/Tests/UPM-GTI-Face/No mask/AUC paper.png
|
||||
|
||||
saved_results/Tests/RealWorldOccludedFaces/*
|
||||
!saved_results/Tests/RealWorldOccludedFaces/Histogram.png
|
||||
|
||||
93
lfw_test.py
93
lfw_test.py
@@ -1,11 +1,12 @@
|
||||
import tensorflow as tf
|
||||
from vit_keras import vit
|
||||
from scipy.spatial.distance import cosine
|
||||
from sklearn.metrics import roc_curve, auc
|
||||
from sklearn.metrics import roc_curve, auc, recall_score, precision_score, f1_score
|
||||
import pickle
|
||||
import matplotlib.pyplot as plt
|
||||
import numpy as np
|
||||
import pandas as pd
|
||||
from tqdm import tqdm
|
||||
|
||||
|
||||
def preprocess(paths):
|
||||
@@ -63,8 +64,21 @@ def compute_roc(results_dictionary, fig_name, positive_label=1):
|
||||
eer_vit = fpr_vit[np.argmin(np.absolute(fnr_vit - fpr_vit))]
|
||||
eer_vit_threshold = thresholds_vit[np.argmin(np.absolute(fnr_vit - fpr_vit))]
|
||||
|
||||
# Find the maximum F1 score and corresponding threshold
|
||||
fscore = 0
|
||||
recall = 0
|
||||
precision = 0
|
||||
|
||||
for thresh in tqdm(thresholds_vit, desc="Processing thresholds"):
|
||||
binarized_results = [1 if score >= thresh else 0 for score in vit_results]
|
||||
current_fscore = f1_score(gt_results, binarized_results)
|
||||
if current_fscore > fscore:
|
||||
fscore = current_fscore
|
||||
recall = recall_score(gt_results, binarized_results)
|
||||
precision = precision_score(gt_results, binarized_results)
|
||||
|
||||
# Plot
|
||||
ax.plot(fpr_vit, tpr_vit, linestyle='-', lw=lw, color='blue', label=f'ViT_B32 (EER={eer_vit:.2f}, AUC={auc_vit:.3f})')
|
||||
ax.plot(fpr_vit, tpr_vit, linestyle='-', lw=lw, color='blue', label=f'ViT_B32 (EER={eer_vit:.2f}, AUC={auc_vit:.3f}, R={recall:.3f}, P={precision:.3f}, F={fscore:.3f})')
|
||||
ax.scatter(eer_vit, tpr_vit[np.argmin(np.absolute(fnr_vit - fpr_vit))], color='blue', linewidths=8, zorder=10)
|
||||
|
||||
# CSV
|
||||
@@ -80,8 +94,21 @@ def compute_roc(results_dictionary, fig_name, positive_label=1):
|
||||
eer_resnet = fpr_resnet[np.argmin(np.absolute(fnr_resnet - fpr_resnet))]
|
||||
eer_resnet_threshold = thresholds_resnet[np.argmin(np.absolute(fnr_resnet - fpr_resnet))]
|
||||
|
||||
# Find the maximum F1 score and corresponding threshold
|
||||
fscore = 0
|
||||
recall = 0
|
||||
precision = 0
|
||||
|
||||
for thresh in tqdm(thresholds_resnet, desc="Processing thresholds"):
|
||||
binarized_results = [1 if score >= thresh else 0 for score in resnet_results]
|
||||
current_fscore = f1_score(gt_results, binarized_results)
|
||||
if current_fscore > fscore:
|
||||
fscore = current_fscore
|
||||
recall = recall_score(gt_results, binarized_results)
|
||||
precision = precision_score(gt_results, binarized_results)
|
||||
|
||||
# Plot
|
||||
ax.plot(fpr_resnet, tpr_resnet, linestyle='-', lw=lw, color='orange', label=f'ResNet_50 (EER={eer_resnet:.2f}, AUC={auc_resnet:.3f})')
|
||||
ax.plot(fpr_resnet, tpr_resnet, linestyle='-', lw=lw, color='orange', label=f'ResNet_50 (EER={eer_resnet:.2f}, AUC={auc_resnet:.3f}, R={recall:.3f}, P={precision:.3f}, F={fscore:.3f})')
|
||||
ax.scatter(eer_resnet, tpr_resnet[np.argmin(np.absolute(fnr_resnet - fpr_resnet))], color='orange', linewidths=8, zorder=10)
|
||||
|
||||
# CSV
|
||||
@@ -97,8 +124,21 @@ def compute_roc(results_dictionary, fig_name, positive_label=1):
|
||||
eer_vgg = fpr_vgg[np.argmin(np.absolute(fnr_vgg - fpr_vgg))]
|
||||
eer_vgg_threshold = thresholds_vgg[np.argmin(np.absolute(fnr_vgg - fpr_vgg))]
|
||||
|
||||
# Find the maximum F1 score and corresponding threshold
|
||||
fscore = 0
|
||||
recall = 0
|
||||
precision = 0
|
||||
|
||||
for thresh in tqdm(thresholds_vgg, desc="Processing thresholds"):
|
||||
binarized_results = [1 if score >= thresh else 0 for score in vgg_results]
|
||||
current_fscore = f1_score(gt_results, binarized_results)
|
||||
if current_fscore > fscore:
|
||||
fscore = current_fscore
|
||||
recall = recall_score(gt_results, binarized_results)
|
||||
precision = precision_score(gt_results, binarized_results)
|
||||
|
||||
# Plot
|
||||
ax.plot(fpr_vgg, tpr_vgg, linestyle='-', lw=lw, color='green', label=f'VGG_16 (EER={eer_vgg:.2f}, AUC={auc_vgg:.3f})')
|
||||
ax.plot(fpr_vgg, tpr_vgg, linestyle='-', lw=lw, color='green', label=f'VGG_16 (EER={eer_vgg:.2f}, AUC={auc_vgg:.3f}, R={recall:.3f}, P={precision:.3f}, F={fscore:.3f})')
|
||||
ax.scatter(eer_vgg, tpr_vgg[np.argmin(np.absolute(fnr_vgg - fpr_vgg))], color='green', linewidths=8, zorder=10)
|
||||
|
||||
# CSV
|
||||
@@ -114,8 +154,21 @@ def compute_roc(results_dictionary, fig_name, positive_label=1):
|
||||
eer_inception = fpr_inception[np.argmin(np.absolute(fnr_inception - fpr_inception))]
|
||||
eer_inception_threshold = thresholds_inception[np.argmin(np.absolute(fnr_inception - fpr_inception))]
|
||||
|
||||
# Find the maximum F1 score and corresponding threshold
|
||||
fscore = 0
|
||||
recall = 0
|
||||
precision = 0
|
||||
|
||||
for thresh in tqdm(thresholds_inception, desc="Processing thresholds"):
|
||||
binarized_results = [1 if score >= thresh else 0 for score in inception_results]
|
||||
current_fscore = f1_score(gt_results, binarized_results)
|
||||
if current_fscore > fscore:
|
||||
fscore = current_fscore
|
||||
recall = recall_score(gt_results, binarized_results)
|
||||
precision = precision_score(gt_results, binarized_results)
|
||||
|
||||
# Plot
|
||||
ax.plot(fpr_inception, tpr_inception, linestyle='-', lw=lw, color='cyan', label=f'Inception_V3 (EER={eer_inception:.2f}, AUC={auc_inception:.3f})')
|
||||
ax.plot(fpr_inception, tpr_inception, linestyle='-', lw=lw, color='cyan', label=f'Inception_V3 (EER={eer_inception:.2f}, AUC={auc_inception:.3f}, R={recall:.3f}, P={precision:.3f}, F={fscore:.3f})')
|
||||
ax.scatter(eer_inception, tpr_inception[np.argmin(np.absolute(fnr_inception - fpr_inception))], color='cyan', linewidths=8, zorder=10)
|
||||
|
||||
# CSV
|
||||
@@ -131,8 +184,21 @@ def compute_roc(results_dictionary, fig_name, positive_label=1):
|
||||
eer_mobilenet = fpr_mobilenet[np.argmin(np.absolute(fnr_mobilenet - fpr_mobilenet))]
|
||||
eer_mobilenet_threshold = thresholds_mobilenet[np.argmin(np.absolute(fnr_mobilenet - fpr_mobilenet))]
|
||||
|
||||
# Find the maximum F1 score and corresponding threshold
|
||||
fscore = 0
|
||||
recall = 0
|
||||
precision = 0
|
||||
|
||||
for thresh in tqdm(thresholds_mobilenet, desc="Processing thresholds"):
|
||||
binarized_results = [1 if score >= thresh else 0 for score in mobilenet_results]
|
||||
current_fscore = f1_score(gt_results, binarized_results)
|
||||
if current_fscore > fscore:
|
||||
fscore = current_fscore
|
||||
recall = recall_score(gt_results, binarized_results)
|
||||
precision = precision_score(gt_results, binarized_results)
|
||||
|
||||
# Plot
|
||||
ax.plot(fpr_mobilenet, tpr_mobilenet, linestyle='-', lw=lw, color='magenta', label=f'MobileNet_V2 (EER={eer_mobilenet:.2f}, AUC={auc_mobilenet:.3f})')
|
||||
ax.plot(fpr_mobilenet, tpr_mobilenet, linestyle='-', lw=lw, color='magenta', label=f'MobileNet_V2 (EER={eer_mobilenet:.2f}, AUC={auc_mobilenet:.3f}, R={recall:.3f}, P={precision:.3f}, F={fscore:.3f})')
|
||||
ax.scatter(eer_mobilenet, tpr_mobilenet[np.argmin(np.absolute(fnr_mobilenet - fpr_mobilenet))], color='magenta', linewidths=8, zorder=10)
|
||||
|
||||
# CSV
|
||||
@@ -148,8 +214,21 @@ def compute_roc(results_dictionary, fig_name, positive_label=1):
|
||||
eer_efficientnet = fpr_efficientnet[np.argmin(np.absolute(fnr_efficientnet - fpr_efficientnet))]
|
||||
eer_efficientnet_threshold = thresholds_efficientnet[np.argmin(np.absolute(fnr_efficientnet - fpr_efficientnet))]
|
||||
|
||||
# Find the maximum F1 score and corresponding threshold
|
||||
fscore = 0
|
||||
recall = 0
|
||||
precision = 0
|
||||
|
||||
for thresh in tqdm(thresholds_efficientnet, desc="Processing thresholds"):
|
||||
binarized_results = [1 if score >= thresh else 0 for score in efficientnet_results]
|
||||
current_fscore = f1_score(gt_results, binarized_results)
|
||||
if current_fscore > fscore:
|
||||
fscore = current_fscore
|
||||
recall = recall_score(gt_results, binarized_results)
|
||||
precision = precision_score(gt_results, binarized_results)
|
||||
|
||||
# Plot
|
||||
ax.plot(fpr_efficientnet, tpr_efficientnet, linestyle='-', lw=lw, color='brown', label=f'EfficientNet_B0 (EER={eer_efficientnet:.2f}, AUC={auc_efficientnet:.3f})')
|
||||
ax.plot(fpr_efficientnet, tpr_efficientnet, linestyle='-', lw=lw, color='brown', label=f'EfficientNet_B0 (EER={eer_efficientnet:.2f}, AUC={auc_efficientnet:.3f}, R={recall:.3f}, P={precision:.3f}, F={fscore:.3f})')
|
||||
ax.scatter(eer_efficientnet, tpr_efficientnet[np.argmin(np.absolute(fnr_efficientnet - fpr_efficientnet))], color='brown', linewidths=8, zorder=10)
|
||||
|
||||
# CSV
|
||||
|
||||
@@ -6,7 +6,8 @@ import tensorflow as tf
|
||||
import matplotlib.pyplot as plt
|
||||
from vit_keras import vit
|
||||
from scipy.spatial.distance import cosine
|
||||
from sklearn.metrics import roc_curve, auc
|
||||
from sklearn.metrics import roc_curve, auc, recall_score, precision_score, f1_score
|
||||
from tqdm import tqdm
|
||||
|
||||
|
||||
def remove_empty_directories():
|
||||
@@ -167,8 +168,21 @@ def plot_and_csv(models, ground_truth_, categories, positive_label=1):
|
||||
eer = fpr[np.argmin(np.absolute(fnr - fpr))]
|
||||
eer_threshold = thresholds[np.argmin(np.absolute(fnr - fpr))]
|
||||
|
||||
# Find the maximum F1 score and corresponding threshold
|
||||
max_f1 = 0
|
||||
max_f1_recall = 0
|
||||
max_f1_precision = 0
|
||||
|
||||
for thresh in tqdm(thresholds, desc="Processing thresholds"):
|
||||
binarized_results = [1 if score >= thresh else 0 for score in model_scores_]
|
||||
current_fscore = f1_score(ground_truth_, binarized_results)
|
||||
if current_fscore > max_f1:
|
||||
max_f1 = current_fscore
|
||||
max_f1_recall = recall_score(ground_truth_, binarized_results)
|
||||
max_f1_precision = precision_score(ground_truth_, binarized_results)
|
||||
|
||||
# Plot
|
||||
ax.plot(fpr, tpr, linestyle='-', lw=3, color=model_color_, label=f'{model_name_} (EER={eer:.2f}, AUC={auc_result:.3f})')
|
||||
ax.plot(fpr, tpr, linestyle='-', lw=3, color=model_color_, label=f'{model_name_} (EER={eer:.2f}, AUC={auc_result:.3f}, R={max_f1_recall:.3f}, P={max_f1_precision:.3f}, F={max_f1:.3f})')
|
||||
ax.scatter(eer, tpr[np.argmin(np.absolute(fnr - fpr))], color=model_color_, linewidths=8, zorder=10)
|
||||
|
||||
# CSV
|
||||
|
||||
@@ -6,7 +6,8 @@ import tensorflow as tf
|
||||
import matplotlib.pyplot as plt
|
||||
from vit_keras import vit
|
||||
from scipy.spatial.distance import cosine
|
||||
from sklearn.metrics import roc_curve, auc
|
||||
from sklearn.metrics import roc_curve, auc, recall_score, precision_score, f1_score
|
||||
from tqdm import tqdm
|
||||
|
||||
|
||||
def preprocess_image(img_path):
|
||||
@@ -34,7 +35,7 @@ def plot_and_csv(models, ground_truth_, cameras, distances, positive_label=1):
|
||||
# Figure
|
||||
fig, ax = plt.subplots(1, 1, figsize=(10, 9))
|
||||
|
||||
for model in models.keys():
|
||||
for model in tqdm(models.keys(), desc="Processing model"):
|
||||
model_name_ = models[model]['name']
|
||||
model_color_ = models[model]['color']
|
||||
model_scores_ = models[model]['scores']
|
||||
@@ -46,8 +47,21 @@ def plot_and_csv(models, ground_truth_, cameras, distances, positive_label=1):
|
||||
eer = fpr[np.argmin(np.absolute(fnr - fpr))]
|
||||
eer_threshold = thresholds[np.argmin(np.absolute(fnr - fpr))]
|
||||
|
||||
# Find the maximum F1 score and corresponding threshold
|
||||
max_f1 = 0
|
||||
max_f1_recall = 0
|
||||
max_f1_precision = 0
|
||||
|
||||
for thresh in tqdm(thresholds, desc="Processing thresholds"):
|
||||
binarized_results = [1 if score >= thresh else 0 for score in model_scores_]
|
||||
current_fscore = f1_score(ground_truth_, binarized_results)
|
||||
if current_fscore > max_f1:
|
||||
max_f1 = current_fscore
|
||||
max_f1_recall = recall_score(ground_truth_, binarized_results)
|
||||
max_f1_precision = precision_score(ground_truth_, binarized_results)
|
||||
|
||||
# Plot
|
||||
ax.plot(fpr, tpr, linestyle='-', lw=3, color=model_color_, label=f'{model_name_} (EER={eer:.2f}, AUC={auc_result:.3f})')
|
||||
ax.plot(fpr, tpr, linestyle='-', lw=3, color=model_color_, label=f'{model_name_} (EER={eer:.2f}, AUC={auc_result:.3f}, R={max_f1_recall:.3f}, P={max_f1_precision:.3f}, F={max_f1:.3f})')
|
||||
ax.scatter(eer, tpr[np.argmin(np.absolute(fnr - fpr))], color=model_color_, linewidths=8, zorder=10)
|
||||
|
||||
# CSV
|
||||
|
||||
@@ -8,7 +8,8 @@ from vit_keras import vit
|
||||
from copy import deepcopy
|
||||
import matplotlib.pyplot as plt
|
||||
from scipy.spatial.distance import cosine
|
||||
from sklearn.metrics import roc_curve, auc
|
||||
from sklearn.metrics import roc_curve, auc, recall_score, precision_score, f1_score
|
||||
from tqdm import tqdm
|
||||
|
||||
|
||||
def get_label(file_path):
|
||||
@@ -193,9 +194,9 @@ def create_all_pairs_no_mask(skip_distances):
|
||||
all_gallery = {}
|
||||
all_probe = {}
|
||||
|
||||
with open('./saved_results/Tests/UPM-GTI-Face/embeddings_FC_I_N.pickle', 'rb') as file:
|
||||
with open('./saved_results/Tests/UPM-GTI-Face/No mask/embeddings_FC_I_N.pickle', 'rb') as file:
|
||||
gallery_dict_FC_indoor, probe_dict_FC_indoor = pickle.load(file)
|
||||
with open('./saved_results/Tests/UPM-GTI-Face/embeddings_FC_O_N.pickle', 'rb') as file:
|
||||
with open('./saved_results/Tests/UPM-GTI-Face/No mask/embeddings_FC_O_N.pickle', 'rb') as file:
|
||||
gallery_dict_FC_outdoor, probe_dict_FC_outdoor = pickle.load(file)
|
||||
|
||||
for person in gallery_dict_FC_indoor.keys():
|
||||
@@ -249,9 +250,9 @@ def create_all_pairs_mask(skip_distances):
|
||||
all_gallery = {}
|
||||
all_probe = {}
|
||||
|
||||
with open('./saved_results/Tests/UPM-GTI-Face/embeddings_FC_I_M.pickle', 'rb') as file:
|
||||
with open('./saved_results/Tests/UPM-GTI-Face/Mask/embeddings_FC_I_M.pickle', 'rb') as file:
|
||||
gallery_dict_FC_indoor, probe_dict_FC_indoor = pickle.load(file)
|
||||
with open('./saved_results/Tests/UPM-GTI-Face/embeddings_FC_O_M.pickle', 'rb') as file:
|
||||
with open('./saved_results/Tests/UPM-GTI-Face/Mask/embeddings_FC_O_M.pickle', 'rb') as file:
|
||||
gallery_dict_FC_outdoor, probe_dict_FC_outdoor = pickle.load(file)
|
||||
|
||||
for person in gallery_dict_FC_indoor.keys():
|
||||
@@ -386,12 +387,26 @@ def compute_roc(ds_dict, fig_name, positive_label=1):
|
||||
eer_vit = fpr_vit[np.argmin(np.absolute(fnr_vit - fpr_vit))]
|
||||
eer_vit_threshold = thresholds_vit[np.argmin(np.absolute(fnr_vit - fpr_vit))]
|
||||
|
||||
ax.plot(fpr_vit, tpr_vit, linestyle='-', lw=lw, color='blue', label='ViT_B32 (EER=%s, AUC=%s)' % ('{0:.2f}'.format(eer_vit), '{0:.2f}'.format(auc_vit)))
|
||||
# Find the maximum F1 score and corresponding threshold
|
||||
fscore = 0
|
||||
recall = 0
|
||||
precision = 0
|
||||
|
||||
for thresh in tqdm(thresholds_vit, desc="Processing thresholds"):
|
||||
binarized_results = [1 if score >= thresh else 0 for score in vit_results]
|
||||
current_fscore = f1_score(gt_results, binarized_results)
|
||||
if current_fscore > fscore:
|
||||
fscore = current_fscore
|
||||
recall = recall_score(gt_results, binarized_results)
|
||||
precision = precision_score(gt_results, binarized_results)
|
||||
|
||||
# Plot
|
||||
ax.plot(fpr_vit, tpr_vit, linestyle='-', lw=lw, color='blue', label=f'ViT_B32 (EER={eer_vit:.2f}, AUC={auc_vit:.3f}, R={recall:.3f}, P={precision:.3f}, F={fscore:.3f})')
|
||||
ax.scatter(eer_vit, tpr_vit[np.argmin(np.absolute(fnr_vit - fpr_vit))], color='blue', linewidths=8, zorder=10)
|
||||
|
||||
vit_pd = pd.DataFrame({'FPR_ViT': fpr_vit, 'TPR_ViT': tpr_vit})
|
||||
vit_pd['EER_ViT'] = pd.DataFrame([eer_vit, tpr_vit[np.argmin(np.absolute(fnr_vit - fpr_vit))]])
|
||||
vit_pd.to_csv('./saved_results/Tests/UPM-GTI-Face/ViT_B32_ROC.csv', header=True, index=False)
|
||||
# vit_pd.to_csv('./saved_results/Tests/UPM-GTI-Face/ViT_B32_ROC.csv', header=True, index=False)
|
||||
|
||||
# ResNet
|
||||
fpr_resnet, tpr_resnet, thresholds_resnet = roc_curve(gt_results, resnet_results, pos_label=positive_label)
|
||||
@@ -400,7 +415,21 @@ def compute_roc(ds_dict, fig_name, positive_label=1):
|
||||
eer_resnet = fpr_resnet[np.argmin(np.absolute(fnr_resnet - fpr_resnet))]
|
||||
eer_resnet_threshold = thresholds_resnet[np.argmin(np.absolute(fnr_resnet - fpr_resnet))]
|
||||
|
||||
ax.plot(fpr_resnet, tpr_resnet, linestyle='-', lw=lw, color='orange', label='ResNet_50 (EER=%s, AUC=%s)' % ('{0:.2f}'.format(eer_resnet), '{0:.2f}'.format(auc_resnet)))
|
||||
# Find the maximum F1 score and corresponding threshold
|
||||
fscore = 0
|
||||
recall = 0
|
||||
precision = 0
|
||||
|
||||
for thresh in tqdm(thresholds_resnet, desc="Processing thresholds"):
|
||||
binarized_results = [1 if score >= thresh else 0 for score in resnet_results]
|
||||
current_fscore = f1_score(gt_results, binarized_results)
|
||||
if current_fscore > fscore:
|
||||
fscore = current_fscore
|
||||
recall = recall_score(gt_results, binarized_results)
|
||||
precision = precision_score(gt_results, binarized_results)
|
||||
|
||||
# Plot
|
||||
ax.plot(fpr_resnet, tpr_resnet, linestyle='-', lw=lw, color='orange', label=f'ResNet_50 (EER={eer_resnet:.2f}, AUC={auc_resnet:.3f}, R={recall:.3f}, P={precision:.3f}, F={fscore:.3f})')
|
||||
ax.scatter(eer_resnet, tpr_resnet[np.argmin(np.absolute(fnr_resnet - fpr_resnet))], color='orange', linewidths=8, zorder=10)
|
||||
|
||||
resnet_pd = pd.DataFrame({'FPR_RESNET': fpr_resnet, 'TPR_RESNET': tpr_resnet})
|
||||
@@ -414,7 +443,21 @@ def compute_roc(ds_dict, fig_name, positive_label=1):
|
||||
eer_vgg = fpr_vgg[np.argmin(np.absolute(fnr_vgg - fpr_vgg))]
|
||||
eer_vgg_threshold = thresholds_vgg[np.argmin(np.absolute(fnr_vgg - fpr_vgg))]
|
||||
|
||||
ax.plot(fpr_vgg, tpr_vgg, linestyle='-', lw=lw, color='green', label='VGG_16 (EER=%s, AUC=%s)' % ('{0:.2f}'.format(eer_vgg), '{0:.2f}'.format(auc_vgg)))
|
||||
# Find the maximum F1 score and corresponding threshold
|
||||
fscore = 0
|
||||
recall = 0
|
||||
precision = 0
|
||||
|
||||
for thresh in tqdm(thresholds_vgg, desc="Processing thresholds"):
|
||||
binarized_results = [1 if score >= thresh else 0 for score in vgg_results]
|
||||
current_fscore = f1_score(gt_results, binarized_results)
|
||||
if current_fscore > fscore:
|
||||
fscore = current_fscore
|
||||
recall = recall_score(gt_results, binarized_results)
|
||||
precision = precision_score(gt_results, binarized_results)
|
||||
|
||||
# Plot
|
||||
ax.plot(fpr_vgg, tpr_vgg, linestyle='-', lw=lw, color='green', label=f'VGG_16 (EER={eer_vgg:.2f}, AUC={auc_vgg:.3f}, R={recall:.3f}, P={precision:.3f}, F={fscore:.3f})')
|
||||
ax.scatter(eer_vgg, tpr_vgg[np.argmin(np.absolute(fnr_vgg - fpr_vgg))], color='green', linewidths=8, zorder=10)
|
||||
|
||||
vgg_pd = pd.DataFrame({'FPR_VGG': fpr_vgg, 'TPR_VGG': tpr_vgg})
|
||||
@@ -428,7 +471,21 @@ def compute_roc(ds_dict, fig_name, positive_label=1):
|
||||
eer_inception = fpr_inception[np.argmin(np.absolute(fnr_inception - fpr_inception))]
|
||||
eer_inception_threshold = thresholds_inception[np.argmin(np.absolute(fnr_inception - fpr_inception))]
|
||||
|
||||
ax.plot(fpr_inception, tpr_inception, linestyle='-', lw=lw, color='cyan', label='Inception_V3 (EER=%s, AUC=%s)' % ('{0:.2f}'.format(eer_inception), '{0:.2f}'.format(auc_inception)))
|
||||
# Find the maximum F1 score and corresponding threshold
|
||||
fscore = 0
|
||||
recall = 0
|
||||
precision = 0
|
||||
|
||||
for thresh in tqdm(thresholds_inception, desc="Processing thresholds"):
|
||||
binarized_results = [1 if score >= thresh else 0 for score in inception_results]
|
||||
current_fscore = f1_score(gt_results, binarized_results)
|
||||
if current_fscore > fscore:
|
||||
fscore = current_fscore
|
||||
recall = recall_score(gt_results, binarized_results)
|
||||
precision = precision_score(gt_results, binarized_results)
|
||||
|
||||
# Plot
|
||||
ax.plot(fpr_inception, tpr_inception, linestyle='-', lw=lw, color='cyan', label=f'Inception_V3 (EER={eer_inception:.2f}, AUC={auc_inception:.3f}, R={recall:.3f}, P={precision:.3f}, F={fscore:.3f})')
|
||||
ax.scatter(eer_inception, tpr_inception[np.argmin(np.absolute(fnr_inception - fpr_inception))], color='cyan', linewidths=8, zorder=10)
|
||||
|
||||
inception_pd = pd.DataFrame({'FPR_INCEPTION': fpr_inception, 'TPR_INCEPTION': tpr_inception})
|
||||
@@ -442,7 +499,21 @@ def compute_roc(ds_dict, fig_name, positive_label=1):
|
||||
eer_mobilenet = fpr_mobilenet[np.argmin(np.absolute(fnr_mobilenet - fpr_mobilenet))]
|
||||
eer_mobilenet_threshold = thresholds_mobilenet[np.argmin(np.absolute(fnr_mobilenet - fpr_mobilenet))]
|
||||
|
||||
ax.plot(fpr_mobilenet, tpr_mobilenet, linestyle='-', lw=lw, color='magenta', label='MobileNet_V2 (EER=%s, AUC=%s)' % ('{0:.2f}'.format(eer_mobilenet), '{0:.2f}'.format(auc_mobilenet)))
|
||||
# Find the maximum F1 score and corresponding threshold
|
||||
fscore = 0
|
||||
recall = 0
|
||||
precision = 0
|
||||
|
||||
for thresh in tqdm(thresholds_mobilenet, desc="Processing thresholds"):
|
||||
binarized_results = [1 if score >= thresh else 0 for score in mobilenet_results]
|
||||
current_fscore = f1_score(gt_results, binarized_results)
|
||||
if current_fscore > fscore:
|
||||
fscore = current_fscore
|
||||
recall = recall_score(gt_results, binarized_results)
|
||||
precision = precision_score(gt_results, binarized_results)
|
||||
|
||||
# Plot
|
||||
ax.plot(fpr_mobilenet, tpr_mobilenet, linestyle='-', lw=lw, color='magenta', label=f'MobileNet_V2 (EER={eer_mobilenet:.2f}, AUC={auc_mobilenet:.3f}, R={recall:.3f}, P={precision:.3f}, F={fscore:.3f})')
|
||||
ax.scatter(eer_mobilenet, tpr_mobilenet[np.argmin(np.absolute(fnr_mobilenet - fpr_mobilenet))], color='magenta', linewidths=8, zorder=10)
|
||||
|
||||
mobilenet_pd = pd.DataFrame({'FPR_MOBILENET': fpr_mobilenet, 'TPR_MOBILENET': tpr_mobilenet})
|
||||
@@ -456,7 +527,21 @@ def compute_roc(ds_dict, fig_name, positive_label=1):
|
||||
eer_efficientnet = fpr_efficientnet[np.argmin(np.absolute(fnr_efficientnet - fpr_efficientnet))]
|
||||
eer_efficientnet_threshold = thresholds_efficientnet[np.argmin(np.absolute(fnr_efficientnet - fpr_efficientnet))]
|
||||
|
||||
ax.plot(fpr_efficientnet, tpr_efficientnet, linestyle='-', lw=lw, color='brown', label='EfficientNet_B0 (EER=%s, AUC=%s)' % ('{0:.2f}'.format(eer_efficientnet), '{0:.2f}'.format(auc_efficientnet)))
|
||||
# Find the maximum F1 score and corresponding threshold
|
||||
fscore = 0
|
||||
recall = 0
|
||||
precision = 0
|
||||
|
||||
for thresh in tqdm(thresholds_efficientnet, desc="Processing thresholds"):
|
||||
binarized_results = [1 if score >= thresh else 0 for score in efficientnet_results]
|
||||
current_fscore = f1_score(gt_results, binarized_results)
|
||||
if current_fscore > fscore:
|
||||
fscore = current_fscore
|
||||
recall = recall_score(gt_results, binarized_results)
|
||||
precision = precision_score(gt_results, binarized_results)
|
||||
|
||||
# Plot
|
||||
ax.plot(fpr_efficientnet, tpr_efficientnet, linestyle='-', lw=lw, color='brown', label=f'EfficientNet_B0 (EER={eer_efficientnet:.2f}, AUC={auc_efficientnet:.3f}, R={recall:.3f}, P={precision:.3f}, F={fscore:.3f})')
|
||||
ax.scatter(eer_efficientnet, tpr_efficientnet[np.argmin(np.absolute(fnr_efficientnet - fpr_efficientnet))], color='brown', linewidths=8, zorder=10)
|
||||
|
||||
efficientnet_pd = pd.DataFrame({'FPR_EFFICIENTNET': fpr_efficientnet, 'TPR_EFFICIENTNET': tpr_efficientnet})
|
||||
@@ -890,7 +975,8 @@ all_pairs_FC = compute_scores_and_ground_truths(all_pairs_FC)
|
||||
COMPUTE ROC CURVES
|
||||
"""
|
||||
|
||||
results_FC = compute_roc(all_pairs_FC, fig_name='FC_ROC', positive_label=1)
|
||||
results_FC = compute_roc(all_pairs_FC, fig_name='No mask/ROC', positive_label=1)
|
||||
# results_FC = compute_roc(all_pairs_FC, fig_name='Mask/ROC', positive_label=1)
|
||||
|
||||
|
||||
"""
|
||||
|
||||
Reference in New Issue
Block a user