Celebtwin et Deepface
David Allouche — 2025-07-23
Le Wagon Paris 1976
J’ai suivi au printemps 2025 une formation Data Science & IA chez Le Wagon à Paris, batch 1976. À la fin de la formation on doit présenter un projet. Je me suis porté volontaire pour le projet de reconnaissance faciale qui trouve une photo ressemblante dans une base de données de photos de célébrités anglo-saxonnes.
Celebtwin


J’ai rapidement réalisé un prototype qui produit un embedding, une représentation vectorielle compacte, et qui effectue une recherche par distance euclidienne.
Initialement j’ai utilisé Annoy, pour
effectuer une recherche de plus proche voisin approchée, mais je
rencontrais des erreurs d’instruction illégale sur le service conteneurisé.
J’ai essayé ensuite hnswlib, qui semble
plus prudent dans son utilisation d’instructions vectorielles, mais les
problèmes de SIGILL
persistaient en production.
Finalement, j’ai utilisé l’implémentation de recherche exhaustive de
hnswlib, nommée avec à propos:
bruteforce.h.
C’est lent mais c’est ce qui semble le moins causer de SIGILL
.
Il faudrait expérimenter avec des options de compilation
x86 comme
-mtune=generic
pour résoudre ces erreurs.
Il y a eu un peu de travail de mise au point. Initialement les photos prises avec un téléphone étaient tournées de 90º, et les images transférées au backend à trop haute résolution causaient des lenteurs. Une fois ces mises au point effectuées, j’ai ajouté à la version initiale basée sur FaceNet, un autre index basé sur VGG-Face.
Les deux modèles donnent souvent des résultats différents, et selon les images l’un ou l’autre peut être le plus pertinent.
Deepface
Les modèles que j’ai utilisés étaient une étape de détection de visage et de
correction de l’alignement, contribuée par Léonce
Nzamba basée sur
mtcnn
et
OpenCV, et les implémentations de FaceNet
et
VGG-Face
fournies par Deepface, une
bibliothèque de reconnaissance faciale en Python.
J’ai trouvé qu’il y a avait un peu de dette technique à traiter. Par exemple le Workflow sur GitHub utilise encore Python 3.8, alors que la version actuelle de TensorFlow est compatible avec les versions 3.9 à 3.12, selon PyPI. Au moins il y a une suite de tests automatisée, pour accélérer les tests.
Mon premier PR pour DeepFace a été accepté aujourd’hui. J’espère que j’aurai le temps d’en faire plusieurs autres. J’aimerais payer un peu de dette technique en utilisant des versions plus récentes de Python et des dépendances.