From 1bcf3953c05cfe1c8ab3ed7aa39f5c10f742143b Mon Sep 17 00:00:00 2001 From: haddyadnan Date: Tue, 8 Apr 2025 14:48:54 +0300 Subject: [PATCH 1/2] update the threshold values for angular distance --- deepface/modules/verification.py | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/deepface/modules/verification.py b/deepface/modules/verification.py index c5d1d53..04ba969 100644 --- a/deepface/modules/verification.py +++ b/deepface/modules/verification.py @@ -454,17 +454,17 @@ def find_threshold(model_name: str, distance_metric: str) -> float: "cosine": 0.68, "euclidean": 1.17, "euclidean_l2": 1.17, - "angular": 0.43, + "angular": 0.39, }, # 4096d - tuned with LFW - "Facenet": {"cosine": 0.40, "euclidean": 10, "euclidean_l2": 0.80, "angular": 0.47}, - "Facenet512": {"cosine": 0.30, "euclidean": 23.56, "euclidean_l2": 1.04, "angular": 0.49}, - "ArcFace": {"cosine": 0.68, "euclidean": 4.15, "euclidean_l2": 1.13, "angular": 0.43}, - "Dlib": {"cosine": 0.07, "euclidean": 0.6, "euclidean_l2": 0.4, "angular": 0.50}, - "SFace": {"cosine": 0.593, "euclidean": 10.734, "euclidean_l2": 1.055, "angular": 0.445}, - "OpenFace": {"cosine": 0.10, "euclidean": 0.55, "euclidean_l2": 0.55, "angular": 0.50}, - "DeepFace": {"cosine": 0.23, "euclidean": 64, "euclidean_l2": 0.64, "angular": 0.49}, - "DeepID": {"cosine": 0.015, "euclidean": 45, "euclidean_l2": 0.17, "angular": 0.50}, - "GhostFaceNet": {"cosine": 0.65, "euclidean": 35.71, "euclidean_l2": 1.10, "angular": 0.43}, + "Facenet": {"cosine": 0.40, "euclidean": 10, "euclidean_l2": 0.80, "angular": 0.33}, + "Facenet512": {"cosine": 0.30, "euclidean": 23.56, "euclidean_l2": 1.04, "angular": 0.35}, + "ArcFace": {"cosine": 0.68, "euclidean": 4.15, "euclidean_l2": 1.13, "angular": 0.39}, + "Dlib": {"cosine": 0.07, "euclidean": 0.6, "euclidean_l2": 0.4, "angular": 0.12}, + "SFace": {"cosine": 0.593, "euclidean": 10.734, "euclidean_l2": 1.055, "angular": 0.36}, + "OpenFace": {"cosine": 0.10, "euclidean": 0.55, "euclidean_l2": 0.55, "angular": 0.11}, + "DeepFace": {"cosine": 0.23, "euclidean": 64, "euclidean_l2": 0.64, "angular": 0.12}, + "DeepID": {"cosine": 0.015, "euclidean": 45, "euclidean_l2": 0.17, "angular": 0.04}, + "GhostFaceNet": {"cosine": 0.65, "euclidean": 35.71, "euclidean_l2": 1.10, "angular": 0.38}, "Buffalo_L": {"cosine": 0.55, "euclidean": 0.6, "euclidean_l2": 1.1, "angular": 0.45}, } From 530c53899b266123772b2d11761633b92c8b498c Mon Sep 17 00:00:00 2001 From: haddyadnan Date: Tue, 8 Apr 2025 14:54:38 +0300 Subject: [PATCH 2/2] fix typos --- README.md | 2 +- deepface/modules/streaming.py | 4 ++-- deepface/modules/verification.py | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 8edf306..7e50f15 100644 --- a/README.md +++ b/README.md @@ -153,7 +153,7 @@ Face recognition models are regular [convolutional neural networks](https://sefi Similarity could be calculated by different metrics such as [Cosine Similarity](https://sefiks.com/2018/08/13/cosine-similarity-in-machine-learning/), Angular Distance, Euclidean Distance or L2 normalized Euclidean. The default configuration uses cosine similarity. According to [experiments](https://github.com/serengil/deepface/tree/master/benchmarks), no distance metric is overperforming than other. ```python -metrics = ["cosine", "euclidean", "euclidean_l2", 'angular'] +metrics = ["cosine", "euclidean", "euclidean_l2", "angular"] result = DeepFace.verify( img1_path = "img1.jpg", img2_path = "img2.jpg", distance_metric = metrics[1] diff --git a/deepface/modules/streaming.py b/deepface/modules/streaming.py index 75e543b..01da948 100644 --- a/deepface/modules/streaming.py +++ b/deepface/modules/streaming.py @@ -223,7 +223,7 @@ def search_identity( 'mtcnn', 'ssd', 'dlib', 'mediapipe', 'yolov8', 'yolov11n', 'yolov11s', 'yolov11m', 'centerface' or 'skip' (default is opencv). distance_metric (string): Metric for measuring similarity. Options: 'cosine', - 'euclidean', 'euclidean_l2', angular, (default is cosine). + 'euclidean', 'euclidean_l2', 'angular', (default is cosine). Returns: result (tuple): result consisting of following objects identified image path (str) @@ -474,7 +474,7 @@ def perform_facial_recognition( 'mtcnn', 'ssd', 'dlib', 'mediapipe', 'yolov8', 'yolov11n', 'yolov11s', 'yolov11m', 'centerface' or 'skip' (default is opencv). distance_metric (string): Metric for measuring similarity. Options: 'cosine', - 'euclidean', 'euclidean_l2', angular (default is cosine). + 'euclidean', 'euclidean_l2', 'angular' (default is cosine). model_name (str): Model for face recognition. Options: VGG-Face, Facenet, Facenet512, OpenFace, DeepFace, DeepID, Dlib, ArcFace, SFace and GhostFaceNet (default is VGG-Face). Returns: diff --git a/deepface/modules/verification.py b/deepface/modules/verification.py index 04ba969..60395ec 100644 --- a/deepface/modules/verification.py +++ b/deepface/modules/verification.py @@ -51,7 +51,7 @@ def verify( 'centerface' or 'skip' (default is opencv) distance_metric (string): Metric for measuring similarity. Options: 'cosine', - 'euclidean', 'euclidean_l2', angular (default is cosine). + 'euclidean', 'euclidean_l2', 'angular' (default is cosine). enforce_detection (boolean): If no face is detected in an image, raise an exception. Set to False to avoid the exception for low-resolution images (default is True).