L’évolution de la reconnaissance faciale avec les réseaux neuronaux : de DeepFace à ArcFace et au-delà
Introduction
La reconnaissance faciale — identifier ou vérifier une personne à partir de son visage — est l’un des domaines les plus actifs et influents de la vision par ordinateur. Le passage des handcrafted features aux réseaux neuronaux profonds a profondément amélioré la précision, la robustesse et la scalabilité.
Avant le Deep Learning
Eigenfaces et Fisherfaces (années 1990)
Les premières approches traitaient les images de visage comme des vecteurs de grande dimension et utilisaient la réduction de dimension pour classifier. Eigenfaces (PCA) et Fisherfaces (LDA) ont été pionnières, mais restaient sensibles à l’éclairage, à la pose et aux expressions.
Descripteurs de caractéristiques locales (années 2000)
Des méthodes comme LBPH et Gabor Features amélioraient la robustesse grâce à l’encodage de textures locales. Leur pouvoir de représentation restait néanmoins limité pour les scénarios faciaux non contraints.
La révolution du Deep Learning
DeepFace (2014)
DeepFace de Facebook a marqué un tournant en atteignant 97.35% sur LFW, soit un niveau proche de la performance humaine. Ses innovations majeures étaient :
- l’alignement facial 3D en prétraitement
- l’entraînement sur 4 millions d’images
- une architecture CNN profonde avec classification softmax
- la démonstration claire de la supériorité des features apprises
Série DeepID (2014–2015)
La famille DeepID de la Chinese University of Hong Kong a poussé les performances encore plus loin :
- approche multi-patch sur différentes régions du visage
- apprentissage conjoint de l’identification et de la vérification
- 99.47% sur LFW avec DeepID2+
FaceNet (2015)
FaceNet de Google a introduit la triplet loss :
- apprentissage direct d’embeddings dans un espace euclidien
- sélection efficace des triplets
- embeddings de 128 dimensions adaptés à la recherche à grande échelle
- 99.63% sur LFW
La révolution ArcFace
ArcFace : Additive Angular Margin Loss (CVPR 2019)
ArcFace, développé par l’équipe InsightFace, a introduit une loss function simple et très efficace qui est devenue un standard de fait pour l’entraînement en reconnaissance faciale.
Innovation clé
ArcFace ajoute un angular margin à l’angle entre le feature vector et son class center correspondant sur l’hypersphère normalisée. La fonction de perte est :
L = -log(e^(s·cos(θ_yi + m)) / (e^(s·cos(θ_yi + m)) + Σ e^(s·cos(θ_j))))
Ici, m représente l’additive angular margin et s le scaling factor.
Pourquoi ArcFace fonctionne
- Interprétation géométrique : le margin a une signification claire sur l’hypersphère
- Entraînement stable : convergence plus stable que d’autres pertes à marge
- Forte généralisation : meilleure compacité intra-classe et séparation inter-classe
Impact et adoption
ArcFace est aujourd’hui l’une des loss functions les plus adoptées en reconnaissance faciale :
- plus de 8 000 citations
- intégration dans InsightFace et de nombreux autres frameworks
- base de nombreuses soumissions de pointe sur NIST FRVT
Passage à l’échelle avec Partial FC (CVPR 2022)
Entraînement à très grande échelle
Quand les datasets de face recognition atteignent des millions d’identités, la couche de classification devient un goulot d’étranglement. Partial FC y répond ainsi :
- échantillonnage aléatoire d’une partie des class centers à chaque itération
- entraînement possible avec 10M+ identités sur une seule machine
- forte réduction de la mémoire et du calcul sans perte majeure de précision
- composant essentiel des modèles de production à grande échelle
Gestion du bruit : Sub-center ArcFace (ECCV 2020)
Entraînement robuste sur données bruitées
Les données réelles comportent souvent des étiquettes erronées. Sub-center ArcFace traite ce problème en :
- apprenant K sub-centers par classe au lieu d’un seul centre
- laissant les dominant sub-centers représenter les échantillons propres
- utilisant les sub-centers non dominants pour absorber le bruit
- facilitant la détection et le nettoyage automatiques du bruit
État de l’art actuel
InsightFace Recognition Pipeline
InsightFace fournit une pipeline complète de reconnaissance faciale :
from insightface.app import FaceAnalysis
import numpy as np
app = FaceAnalysis(name='buffalo_l')
app.prepare(ctx_id=0, det_size=(640, 640))
# Extract embeddings
face1 = app.get(img1)[0]
face2 = app.get(img2)[0]
# Compute similarity
sim = np.dot(face1.embedding, face2.embedding)
sim = sim / (np.linalg.norm(face1.embedding) * np.linalg.norm(face2.embedding))
print(f"Similarity: {sim:.4f}")
Model Zoo
Le model zoo d’InsightFace propose des modèles préentraînés pour différents scénarios de déploiement :
| Model | Backbone | LFW | CFP-FP | AgeDB-30 |
|---|---|---|---|---|
| buffalo_s | MobileFaceNet | 99.33% | 95.51% | 95.13% |
| buffalo_l | ResNet-50 | 99.83% | 99.50% | 98.23% |
| antelopev2 | ResNet-100 | 99.80% | 99.47% | 98.10% |
Perspectives futures
Le domaine continue d’évoluer autour de :
- Masked face recognition : meilleure robustesse face aux occultations partielles
- Cross-age recognition : identification plus fiable malgré l’écart d’âge
- Privacy-preserving recognition : utilisation du chiffrement homomorphe et du federated learning
- 3D face recognition : exploitation de l’information de profondeur pour améliorer encore la précision
Conclusion
D’Eigenfaces à ArcFace, la reconnaissance faciale a profondément évolué. ArcFace, Partial FC et Sub-center ArcFace d’InsightFace sont au cœur de cette transformation et fournissent à la recherche comme à l’entreprise des briques puissantes pour des systèmes modernes de face recognition.