Skip to content
Snippets Groups Projects
Commit a2430c3a authored by Alexandre MEYER's avatar Alexandre MEYER
Browse files

Update 2 files

- /web/content/am/TP_Classification.md
- /web/content/am/TP_Dance.md
parent a4007746
No related branches found
No related tags found
No related merge requests found
Pipeline #137849 passed
...@@ -30,7 +30,7 @@ courbes ensembles forme un 'A' et non un 'S'. L’utilisation de plusieurs couch ...@@ -30,7 +30,7 @@ courbes ensembles forme un 'A' et non un 'S'. L’utilisation de plusieurs couch
![Image alt](../images/dl_layer.png) ![Image alt](../images/dl_layer.png)
[Voir une explication plus détaillé sur Wikipedia par exemple.](https://fr.wikipedia.org/wiki/R%C3%A9seau_de_neurones_artificiels) Voir une explication plus détaillé dans le cours ou éventuellement sur internet, [la page Wikipedia par exemple.](https://fr.wikipedia.org/wiki/R%C3%A9seau_de_neurones_artificiels)
Dans un 1er temps, allez jouer avec ["Playground classifier"](https://playground.tensorflow.org/) pour comprendre le principe de la classification de points avec un réseau de neurones profond. Dans un 1er temps, allez jouer avec ["Playground classifier"](https://playground.tensorflow.org/) pour comprendre le principe de la classification de points avec un réseau de neurones profond.
......
...@@ -6,7 +6,9 @@ ...@@ -6,7 +6,9 @@
Ce TP vise à implémenter avec PyTorch le transfert de mouvement d'une vidéo source vers une personne cible, en suivant un papier de XX etal présenté à ICCV 2019 : [Everybody Dance Now](https://openaccess.thecvf.com/content_ICCV_2019/papers/Chan_Everybody_Dance_Now_ICCV_2019_paper.pdf). Cette approche a été choisie pour faire une introduction au GAN, mais le sujet passe d'abord par une approche qui recherche la donnée la plus proche pour comprendre le passage entre les données et la généralisation qu'offrent les réseaux. Ce TP vise à implémenter avec PyTorch le transfert de mouvement d'une vidéo source vers une personne cible, en suivant un papier de Chan∗ etal présenté à ICCV 2019 : [Everybody Dance Now](https://openaccess.thecvf.com/content_ICCV_2019/papers/Chan_Everybody_Dance_Now_ICCV_2019_paper.pdf). Cette approche a été choisie pour faire une introduction au GAN, mais le sujet passe par diverses étapes. Pour comprendre le principe, le TP propose une approche qui recherche la donnée la plus proche dans le jeu de données initial (pas de réseau). Puis un réseau simple qui génére une image de la personne à partir du tableau des points d'un squelette de la personne. Et pour finir un réseau prenant en entrée une image "baton" de la personne, qui est "booster" par un discrimineur à la façon des GAN.
Le papier propose différents points pour améliorer la continuité temporelle et les visages, que nous ne regarderons pas.
## Principe ## Principe
...@@ -21,7 +23,18 @@ Le modèle de machine learning doit apprendre à partir des images de la vidéo ...@@ -21,7 +23,18 @@ Le modèle de machine learning doit apprendre à partir des images de la vidéo
## Le code de départ ## Le code de départ
Dans la classe `VideoSkeleton` le cœur du problème est la fonction [Téléchargez l'archive du code initial ici]()
Il faut installer les classiques (numpy, pytorch), mais aussi OpenCV (cv2) et mediapipe.
Les différents fichiers sont les suivants.
* `VideoReader`: des fonctions de bases pour lire une vidéo et récupérer les images (utilise cv2).
* `Vec3` : des points 3D, basé sur un tableau numpy.
* `Skeleton`: une class qui stocke les positions 3D d'un squelette. Il y a 33 articulations (joints) donnés par mediapipe donc 99 floats en tout. Il est possible de passer en mode réduit (`reduced=True` en paramètre de différentes fonctions pour n'avoir que 13 articulations en 2D, donc 26 floats.
* `VideoSkeleton`: une classe qui associe un squelette à chaque image d'une vidéo. Le squelette est stocké en mémoire, mais l'image de la vidéo est représenté par le nom du fichier de l'image (stocker toutes les images d'une vidéo prendrait trop de mémoire si la vidéo est longue). Cette classe découpe une vidéo en images sauvée sur le disque.
* `GenNearest`, `GenVanilla` et `GenGan`: les 3 générateurs d'images à écrire.
* `DanceDemo` : classe pricipale qui exécute une démo de la dance. L'animation/posture de `self.source` est appliquée au personnage défini par `self.target` en utilisant `self.gen`.
Dans les classes `GenXXX` le cœur du problème est la fonction
``` def generator(self, ske): ``` ``` def generator(self, ske): ```
qui renvoie l'image de la personne cible avec comme posture le squelette `ske` recu en paramètre. qui renvoie l'image de la personne cible avec comme posture le squelette `ske` recu en paramètre.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment