Spaces:
Sleeping
A newer version of the Gradio SDK is available:
5.43.1
EdgeFace: Efficient Face Recognition Model for Edge Devices
This repository contain inference code and pretrained models to use EdgeFace: Efficient Face Recognition Model for Edge Devices, which is the winning entry in the compact track of "EFaR 2023: Efficient Face Recognition Competition" organised at the IEEE International Joint Conference on Biometrics (IJCB) 2023. For the complete source code of training and evaluation, please check the official repository.
Installation
pip install -r requirements.txt
Note: If cannot import cv2
, run above CLI in Linux
chmod +x packages.txt
sudo ./packages.txt
Inference
The following code shows how to use the model for inference:
import torch
from torchvision import transforms
from face_alignment import align
from backbones import get_model
# load model
model_name="edgeface_s_gamma_05" # or edgeface_xs_gamma_06
model=get_model(model_name)
checkpoint_path=f'checkpoints/{model_name}.pt'
model.load_state_dict(torch.load(checkpoint_path, map_location='cpu')) # Load state dict
model.eval() # Call eval() on the model object
transform = transforms.Compose([
transforms.ToTensor(),
transforms.Normalize(mean=[0.5, 0.5, 0.5], std=[0.5, 0.5, 0.5]),
])
paths = 'tests/test_images/Elon_Musk.jpg'
batch_size = len(paths) if isinstance(paths, (list, tuple)) else 1
# Align faces (assuming align.get_aligned_face returns a list of tuples)
aligned_result = align.get_aligned_face(paths, algorithm='yolo')
transformed_inputs = [transform(result[1]) for result in aligned_result]
transformed_inputs = torch.stack(transformed_inputs)
# Extract embeddings
embeddings = model(transformed_inputs)
print(embeddings.shape) # Expected: torch.Size([batch_size, 512])
Pre-trained models
- EdgeFace-s (gamma=0.5): available in
checkpoints/edgeface_s_gamma_05.pt
- EdgeFace-xs (gamma=0.6): available in
checkpoints/edgeface_xs_gamma_06.pt
Performance
The performance of each model is reported in Table 2 of the paper:
:rocket: New! Using EdgeFace Models via torch.hub
Available Models on torch.hub
edgeface_base
edgeface_s_gamma_05
edgeface_xs_q
edgeface_xs_gamma_06
edgeface_xxs
edgeface_xxs_q
NOTE: Models with _q
are quantised and require less storage.
Loading EdgeFace Models with torch.hub
You can load the models using torch.hub
as follows:
import torch
model = torch.hub.load('otroshi/edgeface', 'edgeface_xs_gamma_06', source='github', pretrained=True)
model.eval()
Performance benchmarks of different variants of EdgeFace
Model | MPARAMS | MFLOPs | LFW(%) | CALFW(%) | CPLFW(%) | CFP-FP(%) | AgeDB30(%) |
---|---|---|---|---|---|---|---|
edgeface_base | 18.23 | 1398.83 | 99.83 ± 0.24 | 96.07 ± 1.03 | 93.75 ± 1.16 | 97.01 ± 0.94 | 97.60 ± 0.70 |
edgeface_s_gamma_05 | 3.65 | 306.12 | 99.78 ± 0.27 | 95.55 ± 1.05 | 92.48 ± 1.42 | 95.74 ± 1.09 | 97.03 ± 0.85 |
edgeface_xs_gamma_06 | 1.77 | 154.00 | 99.73 ± 0.35 | 95.28 ± 1.37 | 91.58 ± 1.42 | 94.71 ± 1.07 | 96.08 ± 0.95 |
edgeface_xxs | 1.24 | 94.72 | 99.57 ± 0.33 | 94.83 ± 0.98 | 90.27 ± 0.93 | 93.63 ± 0.99 | 94.92 ± 1.15 |
Reference
If you use this repository, please cite the following paper, which is published in the IEEE Transactions on Biometrics, Behavior, and Identity Science (IEEE T-BIOM). The PDF version of the paper is available as pre-print on arxiv. The complete source code for reproducing all experiments in the paper (including training and evaluation) is also publicly available in the official repository.
@article{edgeface,
title={Edgeface: Efficient face recognition model for edge devices},
author={George, Anjith and Ecabert, Christophe and Shahreza, Hatef Otroshi and Kotwal, Ketan and Marcel, Sebastien},
journal={IEEE Transactions on Biometrics, Behavior, and Identity Science},
year={2024}
}