ddaa.net Homepage

Page d'accueil

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

Celebrity twin comparison Screenshot of celebtwin.streamlit.app
Celebtwin – Qui est ton jumeau célèbre?

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.