Facenet
Facenet is a face recognition model implemented in TensorFlow, based on the original paper “FaceNet: A Unified Embedding for Face Recognition and Clustering”.
The official code can be found here.
Weights are available in the releases section of the repository:
squeezenet_VGGFace2:
data/models/face_recognition_facenet/squeezenet_VGGFace2/model-20180204-160909.*
Performance on LFW dataset
Model |
Accuracy |
Inference time (s/img) - CPU |
Inference time (s/img) - GPU |
|---|---|---|---|
squeezenet_VGGFace2 |
98.2% |
0.03542 |
0.0331 |
CPU: Intel(R) Xeon(R) Silver 4116 || GPU: Quadro RTX 8000
Usage example
import cv2
from toolbox.Models.face_recognition_facenet import FaceRecognition
img = cv2.imread("data/samples/images/faces/celeb_single/urn;ngsi-ld;Person;Elton_John.jpg")
img_flip = cv2.flip(img, 1)
# Load the face recognition models
recognition = FaceRecognition(
model_path="data/models/face_recognition_facenet/squeezenet_VGGFace2/model-20180204-160909.ckpt-266000",
use_cuda=False
)
recognition.load_model()
instances = recognition.recognize_image(img)
print(instances)
# > []
features = recognition.predict_features(img)
print(type(features), features.shape, features.dtype)
# > <class 'numpy.ndarray'> (128,) float32
recognition.add_features("elton_john", features)
instances = recognition.recognize_image(img_flip)
print(len(instances), instances[0].fields)
# > 1 ['name', 'distance']
print(instances[0].name, instances[0].distance)
# > elton_john 0.07795006
Project configuration YAML example:
face_recognition:
model_name: face_recognition_facenet
params:
distance_threshold: 0.75
model_path: ../../../data/models/face_recognition_facenet/squeezenet_VGGFace2/model-20180204-160909.ckpt-266000
use_cuda: True