danhtran2mind's picture
Upload 258 files
20cf96a verified

A newer version of the Gradio SDK is available: 5.43.1

Upgrade

EdgeFace: Efficient Face Recognition Model for Edge Devices

PWC PWC PWC PWC PWC PWC PWC

arXiv HF-Demo HF-Model

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.

EdgeFace

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

Performance

The performance of each model is reported in Table 2 of the paper:

performance

: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}
}