1. La genèse de DeepFace et ses applications courantes
DeepFace est un outil de reconnaissance faciale développé par Facebook en 2014, dont l’objectif initial était d’améliorer la précision de la reconnaissance faciale en ligne, en permettant aux utilisateurs de taguer des visages dans les photos afin d’encourager l’identification dans les photos.
À l’époque de son développement, DeepFace se démarquait par son utilisation d’un réseau de neurones convolutifs profond (CNN) capable d’apprendre des caractéristiques complexes des visages et de les comparer même sous des angles variés et dans des conditions d’éclairage différentes.
Depuis son lancement, DeepFace a trouvé de nombreuses applications courantes dans des domaines variés. Dans le domaine de la sécurité et de l’identification, DeepFace est utilisé pour les systèmes de contrôle d’accès sécurisés. Dans le marketing, les systèmes de reconnaissance faciale permettent d’adapter l’expérience utilisateur en fonction des émotions détectées. Le modèle DeepFace est également utilisé pour détecter les DeepFake, en réalisant une analyse comparative entre deux images.
Voici les principales « actions » disponibles (« age », « gender », « race », « emotion ») que vous pouvez utiliser.
C’est un peu effrayant… non ?
DeepFace.analyze(img_path="path_to_image.jpg", actions=['age', 'gender', 'race', 'emotion'])
Pour réaliser ces taches de reconnaissance faciale, DeepFace comporte de nombreux hyper paramètres, notamment dans le choix du modèle de détection et du backend (je vous explique plus bas dans l’article la notion de modèle et de backend), afin d’optimiser la vitesse de détection des visages et des formes dans l’image.
Mon objectif ici est de procéder à un comparatif entre les vitesses des différents modèles et des backends.
Dans un second temps, j’ai comparé le paramètre « backends » en ajoutant une option de détection des émotions.
Une conclusion que l’on peut tirer est que dès que l’on modifie le backend de détection en ajoutant l’analyse des émotions, les scores d’émotions deviennent instables et divergent.
2. Le script
L’application est développée avec l’interface Streamlit, ce qui vous permet de tester facilement les différents modèles et backends en téléchargeant simplement une image. Son utilisation nécessite un environnement Python classique ainsi que l’installation des bibliothèques nécessaires. Le démarrage peut sembler un peu lent, car tous les modèles et backends sont téléchargés au préalable pour réaliser les tests à partir de votre image.
3. C’est quoi un modèle et c’est quoi un backend ?
Les modèles de DeepFace comme VGG-Face, FaceNet 512, OpenFace, DeepFace, DeepID, ArcFace, Dlib, SFace, GhostFaceNet sont des modèles de reconnaissance faciale, tandis que les backends (comme RetinaFace, MTCNN,…) sont utilisés pour la détection des visages dans l’image.
Les modèles dans DeepFace (comme VGG-Face, Facenet512, etc.) sont utilisés pour la reconnaissance faciale et l’extraction de caractéristiques du visage. Ils transforment l’image d’un visage en un vecteur de caractéristiques (embedding) qui peut être utilisé pour la reconnaissance, la vérification ou la comparaison de visages.
3.1 Quels modèles trouve t-on dans DeepFace ?
Les principaux modèles disponibles sont :
- VGG-Face
- FaceNet 512
- OpenFace
- DeepFace
- DeepID
- ArcFace
- Dlib (non testé, j’ai « galéré » avec la librairie python…)
- SFace
- GhostFaceNet
On remarque que le modèle par défaut VGG-face est relativement rapide mais nous sommes ici dans le cadre d’une image qui ne pose pas de problème en terme de reconnaissance faciale.
3.2 Quels backends trouvent t-on dans DeepFace ?
Les backends (comme opencv, ssd, mtcnn, retinaface,…) sont des méthodes (spécialisées) de détection de visages ils ont pour fonction de localiser et extraire les visages d’une image.
Les principaux backends disponibles sont, si vous ne spécifiez pas le backend, par défaut DeepFace definiera son backend.
- OpenCV (Peut être le plus utilisé ?)
- SSD
- Dlib (non testé)
- MTCNN (un classique…)
- RetinaFace (un classique)
- MediaPipe
- YOLOv8 (très à la « mode »)
- YuNet
- CenterFace
3.3 Peut-on faire de la détection d’émotion sans backend ?
Non, on ne peut pas faire de détection d’émotion sans backend.
Le backend est nécessaire pour d’abord localiser le visage dans l’image. Une fois le visage localisé, le modèle d’analyse des émotions sera appliqué à cette région.
DeepFace.analyze(img_path="path_to_image.jpg", actions=['emotion'], detector_backend="mtcnn")
3.4 Peut-on faire de la reconnaissance sans modèle et uniquement avec le backend ?
Non, on ne peut pas faire de reconnaissance faciale sans modèle.
Le backend seul peut détecter et localiser les visages, mais il ne peut pas extraire les caractéristiques nécessaires pour la reconnaissance ou la comparaison des visages. C’est le rôle du modèle.
Chaque modèle reconnaît les visages différemment selon la précision et la rapidité du backend qui extrait les visages à analyser.
Cela signifie que la combinaison « modèle + backend » influence les résultats de détection et la vitesse.
On peut choisir différentes combinaisons de modèles et de backends selon les besoins en termes de précision, vitesse et cas d’utilisation spécifiques.
4. Quand la détection se heurte à l’analyse des émotions : Une réalité décevante
Si vous souhaitez utiliser le modèle Facenet512 (par exemple) pour l’analyse des émotions avec YOLOv8 comme backend, le problème est que DeepFace.analyze()
ne permet pas d’utiliser Facenet512
pour les analyses des émotions.
En effet, DeepFace.analyze()
n’autorise l’analyse émotionnelle qu’avec son modèle par défaut.
Si votre objectif est uniquement l’analyse des émotions, vous devrez rester avec le modèle de DeepFace par défaut de analyze().
Les autres modèles disponibles dans DeepFace (comme Facenet, Facenet512, OpenFace,...) sont principalement conçus pour la reconnaissance d’identité et l’extraction de caractéristiques faciales, mais pas pour la classification des émotions.
4.1 L’Impact du Backend sur l’analyse des émotions
Les choses se compliquent lorsqu’on teste le modèle DeepFace (celui utilisé par défaut pour l’analyse des émotions) avec différents backends. Certes, on observe des différences significatives en termes de vitesse, ce qui est un avantage notable si vous devez entraîner votre propre modèle de Deep Learning.
Cependant, l’analyse des émotions devient étonnamment instable selon le backend choisi. Sans explication évidente, les scores d’émotions varient considérablement, rendant les résultats incohérents.
Dans le premier cas : DeepFace + backend MTCNN
Le backend MTCNN n’arrive pas à détecter le visage (Le cadre vert prend toute l’image).
Le second cas : DeepFace + backend Yolo v8
Le 3eme exemple : DeepFace + backend RetinaFace
On pourrait tester ainsi tous les backends pour les comparer, mais on constate ici qu’avec les backends RetinaFace et Yolo v8, les scores d’émotions diffèrent…
Conclusion
On sent bien que DeepFace a d’abord été pensé pour des applications de surveillance et de sécurité 😉
Mais cette technologie pourrait aussi inspirer des applications dans le domaine de la santé mentale et des soins longitudinaux. En effet, la comparaison d’états émotionnels (avant/après) pourrait devenir un outil utile dans des contextes thérapeutiques, par exemple pour suivre les évolutions émotionnelles au cours de thérapies cognitives et comportementales (TCC) en groupe.
Dans ces séances, la prise de conscience de l’état émotionnel à l’instant « T » le jour « J » est souvent un point de départ. Dans ce cadre, il serait intéressant d’expérimenter une approche multimodale (image/texte) qui permettrait au patient de confronter le score émotionnel fourni par l’algorithme avec SON ressenti.
On pourrait même archiver ces données pour une analyse longitudinale, comparant les états émotionnels définis par la machine avec ceux « déclarés » par le patient au fil du temps. Bon à la condition que l’analyse des émotions soient fiables 😉
On voit bien ici que la reconnaissance faciale et l’approche multimodale dépassent de loin les simples applications de surveillance…
[…] l’analyse des émotions, DeepFace utilise un modèle pré-entraîné spécialisé, distinct des (autres) modèles de reconnaissance faciale paramétrables comme VGG-Face ou Facenet. […]