Date de remise: 1er mars 2023 à 23h59
Due date: 23h59 on March 1st, 2023
Visage moyen de la base de données d'Utrecht
Average face of the Utrecht database
Survol
Dans la partie A de ce travail, vous avez implanté un algorithme de métamorphose. Cela vous a permis de morpher votre visage vers celui de quelqu'un autre, ou peut-être même de morpher un objet ou un animal vers autre chose. Dans cette partie du travail, vous utiliserez votre algorithme de métamorphose afin de calculer le visage moyen d'un ensemble de visages.
En créant un visage moyen, vous aurez l'occasion d'observer les traits et les formes dominants d'un ensemble de visages. De plus, il est possible d'utiliser la forme d'un visage moyen pour modifier un visage ; chose que vous ferez en vous prenant comme cobaye!
Overview
In part A of this assignment, you implemented a morphing algorithm. You used this algorithm to morph your face toward the face of someone else, and perhaps you morphed and animal or an object toward another things. In this part, you will have to calculate the average face of a face dataset using morphing.
In generating this average face, you will be able to notice dominant traits and shapes in a face set. Furthermore, it is possible to use the shape of an average face to modify a face; in the context of this assignment, you will do it on your face!
1. Calcul du « visage moyen » (80% pour 4105, 60% pour 7105)
1. Computing the "average face" (80% for 4105, 60% for 7105)
Pour calculer le visage moyen d'un ensemble de personnes, il faut
- détecter les visages et identifier les caractéristiques du visage
- calculer la forme du visage moyen
- déformer tous les visages dans cette forme
- calculer la moyenne de toutes ces images.
Cette technique exige un marquage uniforme de tous les visages. Dans ce TP, vous devrez utiliser les photos des étudiants du cours, ainsi que l'ensemble d'images de la base de données d'Utrecth (source). Celle-ci contient 131 images de 69 personnes : 20 femmes et 49 hommes.
To calculate the average face of a set of persons, we must:
- detect faces and identify facial features
- compute the average shape
- warp all faces into that shape
- average the colors together
This requires consistent labeling of all the faces. In this homework, you will have to use the photos from our class, as well as the Utrecht face image dataset (source). This dataset contains 131 images of 69 persons: 20 women and 49 men.
1. Détection des visages et des caractéristiques
1. Face and facial feature detection
Dans l'ensemble d'images mentionné plus haut, vous ne connaissez pas la position des visages et encore moins la position des points caractéristiques de celui-ci. Puisqu'il serait fastidieux de sélectionner manuellement les points de tous les visages comme vous deviez le faire dans la partie A, nous utiliserons un algorithme de détection de points d'intérêts automatique. Pour ce faire, nous vous fournissons un script python qui détecte automatiquement ces points sur un visage.
In the faces dataset mentioned earlier, you do not know the face position, let alone its landmarks. Since it would be impractical to manually select every features of every faces, we will be using an automatic face and face landmarks detector. For this, we provide you with a python script to allow you to get the points on the faces.
Pour utiliser le script python, il faut préalablement installer la libraire dlib
avec les commandes
pip install cmake
pip install dlib
Vous pouvez ensuite utilisez le script de cette façon:
python3 face_landmark_detection.py -d utrecht/ -o output/
L'argument -d
indique le répertoire contenant vos images, et -o
le répertoire où seront enregistrés les fichiers contenant les points d'intérêt.
To use the python script, you must first install the dlib
library with the command
pip install cmake
pip install dlib
You can then use the script this way:
python3 face_landmark_detection.py -d utrecht/ -o output/
The -d
argument is for the directory containing your images, and the -o
argument is for the directory where you want your files containing the keypoints to be stored.
Une image de la base de données d'Utrecht avec le visage et ses caractéristiques détectés automatiquement.
One image from the Utrecht database with the face and facial features automatically detected.
Vous remarquerez (voir figure ci-dessus) que la sortie du détecteur vous donne un rectangle de détection ainsi que 68 points d'intérêts entre les sourcils et le menton. Si un visage n'est pas détecté dans une image, retirez cette image de votre ensemble.
You will notice (see figure above) that detector output is a bounding box as well as 68 features points between the eyebrows and the chin. If a face is not detected in an image, you should remove it from your set.
2. Calculer la forme du visage moyen
2. Average face shape calculation
Le calcul de la forme du visage moyen se fait de la même façon que pour la métamorphose habituelle (partie A du travail). Vous devez calculer la moyenne de la position des points caractéristiques de tous les visages détectés.
The average face shape calculation is done the same way than the normal morphing approach (part A of this assignment). You have to average the position of every feature points of every detected face.
3-4. Déformation et moyennage
3-4. Warping and averaging
Une fois la forme du visage moyen calculé, vous devez déformer chacun des visages détectés vers celle-ci en utilisant votre algorithme de métamorphose de la partie A. Puisque tous les visages ont maintenant la forme du visage moyen, il est possible de directement additionner toutes ces images et d'en calculer la moyenne. Attention, convertissez vos images en « float » avant de calculer la moyenne.
Once the average face shape calculated, you must deform each detected face towards it; use your implementation from part A of this assignment. Since all faces now have the shape of the mean face, we can compute their mean. Beware, convert your images in floating point values before you compute the mean.
Suggestions
- Lors de vos expérimentations, essayez de ne pas répéter inutilement les tâches longues (comme la détection de visage), en sauvegardant les résultats sur le disque. Cela vous permettra de déboguer votre code plus facilement.
- Il est très probable que certains des triangles deviennent dégénérés, et, donc, que vous obteniez des
NaN
(Not a Number) dans votre image morphée. Essayez de trouver une méthode pour détecter et gérer ces cas.
Tips
- While doing this assignment, try not to repeat uselessly long tasks (such as the face detection), by saving these results to disk. This will make debugging your code much easier.
- It is highly likely that some of the triangulated triangles will become degenerate. This will create morphed image containing
NaN
(Not a Number) values. Try to find a way to detect and manage these situations.
Crédits supplémentaires
Bells and Whistles
- (jusqu'à 5%) Calculez deux visages moyens avec la base de données d'Utrecht: l'un avec et l'autre sans sourire. Est-ce que ceux-ci sont similaires à votre visage moyen avec toutes les images?
- (up to 5%) Create two average faces with the Utrecht database: without and without smile. Are the results similar to the one with all the images?
Créez un fichier nommé main_visagemoyen.py
qui exécute cette partie du TP.
Create a file named main_visagemoyen.py
which executes this part of the homework.
Partie 2: Masculinisation et féminisation de votre visage (20%)
Part 2: Masculinizing and feminizing your own face (20%)
Créez un visage moyen pour tous les visages de femmes et un visage moyen pour tous les visages d'hommes dans la base de données d'Utrecht. Ensuite, masculinisez et féminisez-vous en morphant votre visage avec le visage moyen masculin et féminin!
First, you generate the average face for woman faces and the average face for man faces in the Utrecht database. Then, masculinize and feminize yourself by morphing your face with the mean man and woman faces!
Suggestions
- Expérimentez avec les paramètres de distorsion et de niveau de fondu dans le but d'avoir une image intéressante. Le niveau de fondu est surtout utile pour faire apparaître/camoufler les poils faciaux.
Tips
- Experiment with distortion and dissolution parameters in order to generate an interesting image. The dissolution level is especially useful to show/hide facial hair.
Crédits supplémentaires
Bells and Whistles
- (jusqu'à 20%) Utilisez les visages de la base de donnée Utrecht pour calculer l'ACP (Analyse en Composantes Principales) de l'espace des visages. Essayez d'effectuer des caricatures et d'autres transformations dans la nouvelle base.
- (up to 20%) Use the Utrecht data to compute a PCA basis for the face space. Try performing caricatures and other transformations in the new basis.
- (jusqu'à 10%) Fouillez dans votre collection de photo personnelle, et générez une vidéo montrant votre évolution au fil du temps. Vous pouvez utiliser
dlib
pour détecter les points d'intérêts dans vos photos. Ajoutez de la musique à votre vidéo pour un effet encore plus réussi!
- (up to 10%) Dig in your own personal photo collection, and generate a video showing your evolution over time. You can use
dlib
to detect the facial keypoints in your photos. Add music to your video for added effect!
- (jusqu'à 10 points) Animez votre visage! Prenez une vidéo où l'on voit quelqu'un parler, et détectez les points d'intérêts avec
dlib
pour chacune des images du vidéo. Ensuite, déformez votre visage pour qu'il « parle » de la même façon que la personne dans la vidéo originale. Est-ce que l'effet est convaincant?
- (up to 10%) Animate your own face! Take a video where we can see someone talking, and detect facial keypoints with
dlib
for each frame in the video. Then, deform your own face so that it can "talk" as the person in the original video. Is the effect convincing?
Créez un fichier nommé main_editionvisage.py
qui exécute cette partie du TP.
Create a file named main_editionvisage.py
which executes this part of the homework.
Livrables
Deliverables
Incluez les informations suivantes dans votre rapport. Rappel : votre rapport doit présenter vos résultats des deux parties (A et B) de votre projet!
Partie A (50% de la note totale du TP)
- (45% pour 4105, 35% pour 7105) Une séquence vidéo transformant votre visage vers le visage de l'étudiant qui vous suit dans la liste.
- Pour ce résultat, décrivez brièvement votre algorithme, présentez la vidéo, et également une brève discussion sur votre résultat.
- Truc : pour inclure une vidéo dans un rapport, vous pouvez utiliser le tag HTML
video
.
- (50% pour 4105, 40% pour 7105) Pour chacune des trois (3) animations de plus, présentez vos résultats et incluez une brève discussion sur chacune d'entre elles.
- (N%) Pour vos crédits supplémentaires, décrivez tout d'abord votre approche, présentez vos résultats et commentez.
(Le 5% manquant est pour la photo de votre visage (voir section « prérequis » de la partie A)).
Partie B (50% de la note totale du TP)
- (40% pour 4105, 30% pour 7105) Pour les photos des étudiants du cours, affichez:
- La forme du visage moyen (triangulation seulement) obtenue avec les points que vos camarades étudiants ont sélectionnés.
- Le visage moyen obtenu avec les points que vos camarades étudiants ont sélectionnés;
- La forme du visage moyen obtenue avec les points trouvés par le détecteur
dlib
;
- Le visage moyen avec les points trouvés par le détecteur
dlib
;
Commentez : est-ce que cela fonctionne mieux avec les points sélectionnés à la main ou avec le détecteur automatique?
Truc : pour afficher la forme moyenne, utilisez la fonction matplotlib.pyplot.triplot
comme le fait l'exemple dans la documentation de scipy.spatial.Delaunay;
- (40% pour 4105, 30% pour 7105) Pour les photos de la base de données d'Utrecht, affichez:
- La forme du visage moyen obtenue avec les points trouvés par le détecteur
dlib
;
- Le visage moyen obtenu avec les points trouvés par le détecteur
dlib
;
- (10%) Affichez le visage masculin moyen ainsi que la « masculinisation » de votre visage. De plus, affichez un résultat obtenu avec différents paramètres de distorsion et de niveau de fondu. Discutez : est-ce que l'effet est convaincant? Pourquoi?
- (10%) Affichez le visage féminin moyen ainsi que la « féminisation » de votre visage. De plus, affichez un résultat obtenu avec différents paramètres de distorsion et de niveau de fondu. Discutez : est-ce que l'effet est convaincant? Pourquoi?
- (N%) Pour vos crédits supplémentaires, décrivez tout d'abord votre approche, présentez vos résultats et commentez.
Idées pour les discussions
L'objectif des discussions dans vos rapports est que vous nous fassiez part de vos réflexions sur vos résultats. Tentez d'être précis(es) dans vos descriptions. Voici quelques idées :
- Commentez sur la qualité des résultats. Sont-ils à la hauteur de vos attentes? Y a-t-il des régions de l'image où les problèmes sont plus visibles?
- Quand ça marche, commentez tout de même sur ce qui fait que ça marche.
- Si vous avez rencontré des problèmes sur certaines images (ou paires d'images), décrivez ces problèmes et expliquez comment vous avez tenté de les résoudre. Tentez d'expliquer pourquoi ça fonctionne mieux sur certaines images plutôt que d'autres.
- Si vos algorithmes échouent sur certaines images, décrivez les problèmes et expliquez pourquoi ils surviennent selon vous.
- Si vous avez apporté des améliorations, faites une comparaison côte à côte des résultats avant et après votre amélioration.
- Décrivez, le cas échéant, les ajustements que vous avez apportés à l'approche proposée.
Include the following in your report. Reminder : your report must present results from both parts (A and B) of the homework!
Part A (50% of total grade)
- (45% for 4105, 35% for 7105) A video sequence progressively morphing your face towards the following student in the list.
- For this result, briefly describe your algorithm, present your video, and include a discussion on the result.
- Hint: to include a video in your report, see the
video
HTML tag.
- (50% for 4105, 40% for 7105) For each of the three (3) additional animations, show your results and include a brief discussion for each one of them.
- (N%) For your bells and whistles, start by describing your approach, present your results, and comment.
(The missing 5% is for your face photo (see the "prerequisites" section of part A)).
Part B (50% of total grade)
- (40% for 4105, 30% for 7105) For the class photos, show:
- The average face shape (triangulation only) using the points selected by your fellow students;
- The average face using the points selected by your fellow students;
- The average face shape using points detected by the face detector;
- The average face using points detected by the face detector;
Comment: does it work better with the hand selected or the automatically detected points?
Protip : to display the average face shape, use the matplotlib.pyplot.triplot
function, just like it is done in the scipy.spatial.Delaunay documentation;
- (40% for 4105, 30% for 7105) For the Utrecht face database, show:
- The average face shape using points detected by the face detector;
- The average face using points detected by the face detector;
- (10%) Show the average male face and the "masculinization" of your face. Show one or two results with different distortion and dissolution parameters. Discuss: is the result convincing? Why?
- (10%) Show the average female face and the "feminization" of your face. Show one or two results with different distortion and dissolution parameters. Discuss: is the result convincing? Why?
- (N%) For your bells and whistles, start by describing your approach, present your results, and comment.
Ideas for discussions
The main objective is that you share your thoughts on your results with us. No need to write a novel, just try to be precise. Here are some ideas:
- Comment on the quality of the results. Do they live up to your expectations? Are there any regions of the image where the problems are more visible?
- If you have encountered problems on some images, describe describe these problems and explain how you tried to solve them. Try to explain why it works better on some images than others.
- If your algorithms fail on some images, describe the problems and explain why they occur in your opinion.
- If you have tried implementing improvements to a method, show a side by side comparison of your results before and after your improvement.
- Describe, if applicable, the adjustments you have made to the proposed approach.
Remise
Pour la remise de votre travail, créez un fichier tp3b.zip
qui contient:
- Votre rapport en format HTML dans un dossier
tp3b/web
. Vos images doivent être dans un dossier tp3b/web/images
.
- Votre code doit être dans un dossier
tp3b/code
. N'incluez pas les images que vous avez utilisées pour produire vos résultats dans ce dossier dans le but de ne pas alourdir le fichier.
- Votre séquence vidéo doit être dans un dossier
tp3b/video
.
Finalement, veuillez téléverser votre fichier tp3b.zip
sur le portail des cours avant la date limite. La politique des retards mentionnée dans le plan de cours sera appliquée. Pour toutes questions concernant la procédure de remise ou le travail lui-même, contactez-nous sur PAX!
Attention! La taille limite permise sur le portail des cours est de 250MB.
Handing in procedure
For this homework, you must create a tp3b.zip
file. In this file you'll put:
- Your report in an HTML format inside a folder named
tp3b/web/
.Your result images inside a folder named tp3/web/images
.
- Your code should be put inside the folder
tp3/code
. Do not include the images you have used to generate your results inside this folder, as this will likely generate huge files.
- Your video sequence must be in the folder
tp3/video
.
Finally, you should upload this file (tp3.zip
) on the "portail des cours" before the deadline. The late submission policy described in the course plan will be applied. For any question regarding the submission process or the project as such, ask us on PAX!
Be careful! File size limit on the "portail" is 250MB.
Remerciements
Thanks
Merci à Alyosha Efros d'avoir créé le TP original qui a servi d'inspiration pour celui-ci!
Many thanks to Alyosha Efros for creating the assignment which inspired this one!
Retour à la page web du cours.
Back to the class webpage.