# **Cahier de recherche v1.00**
## Évolutions de la version
| **Date** | **Auteur(s)** | **Modification(s)** | **Partie(s) modifiée(s)** |
|---|---|---|---|
| 2021/02/17 | lclair, lmaillard, lcasino, lpreel, eguerry, lscellos, lwannemacher | Rédaction | v1.00 |
| | | | |
## Table des matières
[[_TOC_]]
## POC n°1: Port lunettes
### Description détaillée
User story associée : US3
>En tant qu'ingénieur R&D en optique <br>
Je veux pouvoir détecter si le sujet porte des lunettes ou non <br>
Afin de, par la suite, placer les landmarks correspondants.
#### Spécification (US3.1)
> En tant que Équipe PIC, <br>
Je veux spécifier les besoins du client, <br>
Afin de proposer une solution robuste.
Selon le cahier des charges, le client aimerait détecter, en plus des landmarks sur le visage, des landmarks sur les montures.
> Les points d'interêts sur les lunettes doivent permettre un "boxing": points en haut, en bas, à gauche, à droite, au milieu du pont et sur les branches quand la personne n'est pas de face."
Ainsi, afin de pouvoir honorer complètement le cahier des charges, nous voulons pouvoir détecter au préléable si la personne porte ou non des lunettes.
Les **entrées** seront des images de visages 2D au format RGB(les vidéos étant des successions d'images 2D) pouvant porter des lunettes ou non. Chaque image sera redimensionnée, toute à la même taille. Cela nous permettra d'utiliser des réseaux qui ont pour contrainte de prendre des images de taille fixe en entrée. Nous pourrons ainsi avoir un réseau de neurones plus légers qui s'exécute rapidement. De plus nous n'avons pas de contraintes sur l'arrière-plan des images. Il est donc possible d'avoir tout type de fond (unit ou non)
De ce fait, nous prendrons en entrée des images de visages RGB de taille 120x120. L'image sera donc recadrée et redimensionnée. Par la suite, nous entrainerons un réseau de neuronnes ayant pour objectif de classifier les images en deux catégories: présence de lunettes, absence de lunettes.
Nous estimons une taille de dataset à environ 50 000 images.
<div align="center">
<img src="Images/Spé_POC1.png" width="400">
</div>
<div align="center">Schéma de la solution</div>
<br>
#### Recherches documentaires (US3.2)
> En tant qu'étudiant, <br>
Je veux effectuer une recherche documentaire sur les technologies disponibles, <br>
Afin d'avoir une vision globale des solutions possibles.
<ins>**Les différens datasets :**</ins>
D'après les études trouvées sur internet, le dataset [MeGlass](https://github.com/cleardusk/MeGlass) de *cleardusk* (développeur de 3DDFA) comporte 47,917 images pour l'entraînement et 3,420 images de test. Ces images ont été obtenues synthétiquement, via une méthode détaillée dans leur [papier](https://arxiv.org/abs/1806.01196) [[1]](#Eyeglass). Ainsi, chaque sujet possède au moins 2 images avec des lunettes et 2 images sans.
Les classes sont *imbalanced* : le dataset d'entraînement comporte 14,832 exemples avec des lunettes contre 33,085 exemples sans.
Une deuxième étude disponible présente un modèle entraîné/évalué sur le dataset [Glasses or No Glasses sur Kaggle](https://www.kaggle.com/jeffheaton/glasses-or-no-glasses) qui comporte des visages synthétiques de personnes générés par un GAN (Generative Adversarial Network). Cet ensemble de données regroupe 4500 images d'entraînement et 500 images dédiées au test.
Un troisième dataset est **LFW** [[2]](#LFW) : il contient 13 233 images de visages de 5 749 personnes différentes collectées sur le web, dont 1 244 images avec des lunettes.
<ins>**Les modèles employés :**</ins>
**Le réseau :**
Dans l'étude *Face Synthesis for Eyeglass-Robust Face Recognition*, le modèle de réseau de neuronne utilisé est le suivant :
<div align="center">
<img src="Images/Table1.png" width="500">
</div>
<div align="center">Structure de réseau ResNet-22</div>
<br>
*Conv3.x*, *Conv4.x* et *Conv5.x* indiquent les unités de convolution qui peuvent contenir plusieurs couches de convolution et les blocs résiduels sont indiqués entre crochets à double colonne. Par exemple, [3 × 3, 128] × 3 désigne 3 couches de convolution en cascade 128 feature maps avec des filtres de taille 3 × 3.
**La loss :**
Dans l'étude *Face Synthesis for Eyeglass-Robust Face Recognition*, ils utilisent la *Mining-Contrasive loss* [[3]](#Mining-Contrasive) pour élargir davantage les différences inter-identité et réduire les variations intra-identité.
#### Conception (US3.3)
>En tant que développeur, <br>
Je veux réaliser une phase de conception, <br>
Afin de définir les données sur lesquelles apprendre (app/valid/test), de choisir le ou les modèles adaptés, choisir les métriques et la loss.
### Code associé et/ou état de l'art (US3.4)
### Résultats (US3.5)
### Conclusions et discussions
## POC n°2: Port masque
### Description détaillée
User story associée : US4
> En tant que ingénieur R&D en optique <br>
Je veux pouvoir détecter si un utilisateur porte un masque <br>
Afin de déterminer quels landmarks placer sur son visage
#### Spécification
##### US4.1
> En tant que Équipe PIC, <br>
Je veux spécifier les besoins du client, <br>
Afin de proposer une solution robuste.
L'objectif est de développer un réseau de neurones qui prendra en entrée des images de visages et les classifiera en 2 catégories : port du masque, non port du masque.
**Paramètre du modèles**
* Entrée : Image RGB taille fixe (possibilité de redimensionner toutes les images avant le traitement)
* Sortie : Masque ou non. Problème de classification
##### US4.2
> En tant que Équipe PIC, <br>
Je veux effectuer une recherche documentaire sur les technologies disponibles <br>
Afin d'explorer celles-ci.
Il y a beaucoup de projets depuis 1 an qui traitent de ce problème. L'objectif ici est de trouver une solution appropriée à notre problème.
Il faut trouver une solution ayant un bon compromis entre un maximum de précision et un temps de calcul rapide.
##### US4.3
> En tant que Développeur, <br>
Je veux réaliser une phase de conception <br>
Afin de définir les données sur lesquelles apprendre (app/valid/test), choisir le ou les modèles adaptés, choisir les métriques et la loss.
Création de critères pour déterminer la pertinence du dataset :
* Différente position du visage: vue coté ou vue dessus/dessous
* Différence de visages : couleur de peau, age de la personne.
* Masque rajouté sur photo réelle ou masque réelement porté
**Datasets envisagés**
* https://www.kaggle.com/omkargurav/face-mask-dataset
> 7553 images RGB, 3725 avec masque, 3828 sans masque. <br>
Problème potentiel : une partie des images avec masque sont en fait des images sans masque sur lesquelles un masque a été ajouté rajouté via un montage photo
* [Face Mask Detection de chandrikadeb](https://github.com/chandrikadeb7/Face-Mask-Detection/tree/master/dataset) :
> Nb images : 4096 en tout - 2165 avec masque / 1930 sans masque <br>
Image réel : Oui <br>
Source : Bing search API, Kaggle dataset , RMFD dataset <br>
Problème potentiel : Beaucoup de personne de type asiatique, peu de personne de type européenne, africaine ou latine. <br>
Différente position du visage: Oui
### Code associé et/ou état de l'art
### Résultats
### Conclusions et discussions
## POC n°3: Landmarks
### Description détaillée
### Code associé et/ou état de l'art
### Résultats
### Conclusions et discussions
### Références
<a name="Eyeglass">[1]</a> Jianzhu Guo, Xiangyu Zhu, Zhen Lei, Stan Z. Li. *Face Synthesis for Eyeglass-Robust Face Recognition*. 2021
<a name="LFW">[2]</a> Gary B. Huang, Marwan Mattar, Tamara Berg, Eric Learned-Miller. *Labeled Faces in the Wild: A Database forStudying Face Recognition in Unconstrained Environments*. Workshop on Faces in 'Real-Life' Images: Detection, Alignment, and Recognition, Erik Learned-Miller and Andras Ferencz and Frédéric Jurie, Oct 2008, Marseille, France. ⟨inria-00321923⟩
<a name="Mining-Contrasive">[3]</a> Sun Y, Chen Y, Wang X, Tang X: *Deep learning face representation by joint identification-verification*. NIPS (2014)
## Signatures
| **Rôle** | **Nom(s)** |**Fonction(s)** |**Date** | **Signature** |
|---|---|---|---|---|
| Rédacteur | lclair, lmaillard, lcasino, eguerry, lpreel, lscellos, lwannenmacher | Développeurs, RQ | 2021/03/15 | commit |
| Vérification | | | | |
| Validation | | || |