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

Update 3 files

- /web/content/am/_index.md
- /web/content/am/TP_AEAnimation_oldTP.md
- /web/content/am/TP_Dance.md
parent 203f5fe6
No related branches found
No related tags found
No related merge requests found
Pipeline #137777 passed
==== Partie (III) Animation et DL ====
==== Partie (IV) Animation et DL ====
Une vidéo courte expliquant quelques principes pour le TP :
......@@ -7,8 +7,8 @@ Une vidéo courte expliquant quelques principes pour le TP :
[Fast Neural Style Transfer for Motion
Data](http://www.ipab.inf.ed.ac.uk/cgvu/cga2017.pdf), Holden etal, 2017.
* [Fast Neural Style Transfer for Motion Data](http://www.ipab.inf.ed.ac.uk/cgvu/cga2017.pdf), Holden etal, 2017.
Le papier qui propose une approche équivalente pour transférer le style
d'une animation vers une autre. Le contenu est le geste et le style est
l'effet donné dans le geste en relation avec l'état émotionnel, la
......@@ -22,27 +22,21 @@ ne prendra que quelques minutes, mais ne fournira un transfert qu'entre
2 animations.
- [Le code de départ est à télécharger
ici.](https://perso.liris.cnrs.fr/alexandre.meyer/teaching/master_charanim/download/StyleTransfer.zip)
<!-- -->
- Il faut installer un peu plus de lib que pour pytorch. Panda3D,
pyglm, etc. sont nécessaires pour la visualisation des animations.
Vous pouvez sûrement pouvoir installer un env avec le fichier .yml
fournit
## Le code
* [Le code de départ est à télécharger ici.](https://perso.liris.cnrs.fr/alexandre.meyer/teaching/master_charanim/download/StyleTransfer.zip)
<!-- -->
Il faut installer un peu plus de lib que pour pytorch. Panda3D, pyglm, etc. sont nécessaires pour la visualisation des animations. Vous pouvez sûrement pouvoir installer un env avec le fichier .yml fournit
```
conda env create -f environment.yml
```
Ou alors un environnement neuf :
```
conda create --name py-deepan python=3.8
conda activate py-deepan
conda install numpy
conda install pillow
conda install pytorch torchvision torchaudio cudatoolkit=11.3 -c pytorch (mais allez voir la page de pytorch)
......@@ -50,60 +44,48 @@ Ou alors un environnement neuf :
pip install panda3d (==1.10.7)
pip install torchsummary
pip install PyGLM
```
* Vous devez installer le code comme un package pour que les 'import' trouve les fichiers :
* Vous devez installer le code comme un package pour que les 'import' trouve les fichiers :
```
cd ....StyleTransfer
pip install -e .
```
* En cas de problème pour trouver les données=le chemin vers data (et seulement en cas de problème). Il faut modifier dans pydeepan/__init__.py la variable tout à la fin après le dernier "else":
* En cas de problème pour trouver les données=le chemin vers data (et seulement en cas de problème). Il faut modifier dans pydeepan/__init__.py la variable tout à la fin après le dernier "else":
```
else:
dir_resources = dir_pydeepan+"/data" # mettez le chemin absolu???
```
- Le programme principal à lancer est
* Le programme principal à lancer est
```
**pydeepan/demo/StyleTransferDemo.py**.
<!-- -->
* 'z' (dés)active l'animation
* 'n' : joue la frame suivante d'une animation
* 'b' : joue la frame précédente d'une animation
* 'p' : passe aux animations suivantes (en restant dans le même dataset)
* 'd' : change de dataset (il y en a deux : StyleTransfer et Emilya)
* 'l' : lance l'optimisation sur les longueurs de membres
* 'e' : passe les animations dans l'auto-encodeur
* 't' : transfert le style d'une animation vers une autre (le code est à compléter)
```
* 'z' (dés)active l'animation
* 'n' : joue la frame suivante d'une animation
* 'b' : joue la frame précédente d'une animation
* 'p' : passe aux animations suivantes (en restant dans le même dataset)
* 'd' : change de dataset (il y en a deux : StyleTransfer et Emilya)
* 'l' : lance l'optimisation sur les longueurs de membres
* 'e' : passe les animations dans l'auto-encodeur
* 't' : transfert le style d'une animation vers une autre (le code est à compléter)
- Une animation est représentée par un tableau de 240 frames x 73
valeurs. Voir le fichier HPAAnimation.py pour une description
détaillée des 73 valeurs. Dans ce TP nous n'utilisons que les
valeurs de 0 à 65 qui représentent les positions 3D de chaque
articulation. Il n'y a pas de notion d'angles dans ce format
d'animations. Déplacer une articulation revient souvent à changer la
longueur d'un membre. Il y a une optimisation (touche 'l' et class
AOSkeletonConstraint.py) qui effectue une descente de gradient
(pytorch) pour "remettre" les longueurs de membre aux valeurs
initiales.
Une animation est représentée par un tableau de 240 frames x 73 valeurs. Voir le fichier HPAAnimation.py pour une descriptions valeurs de 0 à 65 qui représentent les positions 3D de chaque articulation. Il n'y a pas de notion d'angles dans ce format d'animations. Déplacer une articulation revient souvent à changer la longueur d'un membre. Il y a une optimisation (touche 'l' et class AOSkeletonConstraint.py) qui effectue une descente de gradient (pytorch) pour "remettre" les longueurs de membre aux valeurs initiales.
- Remarque : l'autoencoder de ce code est très basique. Il introduit
des tremblements pour certaines animations. Il y a surement moyen de
faire mieux.
Remarque : l'autoencoder de ce code est très basique. Il introduit des tremblements pour certaines animations. Il y a surement moyen de faire mieux.
##### Tester l'auto-encodeur
#### Tester l'auto-encodeur
Ajouter une action liée à la touche 'r' qui "casse" une animation pour
une ou deux articulations (par exemple figer épaule+coude). Puis vous
......@@ -122,70 +104,29 @@ si fort.
##### Interpolation dans l'espace caché (espace latent)
- Faites l'interpolation entre l'animation 1 et l'animation 2 dans
l'espace 3D, ranger le résultat dans l'animation 3.
- Faites l'interpolation entre l'animation 1 et l'animation 2 dans
l'espace latent (l'espace de l'ato-encodeur), ranger le résultat
dans l'animation 4.
<!-- -->
#### Interpolation dans l'espace caché (espace latent)
- Comparez les 2 résultats.
* Faites l'interpolation entre l'animation 1 et l'animation 2 dans l'espace 3D, ranger le résultat dans l'animation 3.
* Faites l'interpolation entre l'animation 1 et l'animation 2 dans l'espace latent (l'espace de l'ato-encodeur), ranger le résultat dans l'animation 4.
* Comparez les 2 résultats.
##### Transfert de style
Comme pour les images, l'objectif est de produire une nouvelle animation
par optimisation de toutes les positions pour toutes les frames. Donc
d'optimiser les 240x73 valeurs. Le code à trou réalisant l'optimisation
pour transférer le style est dans **pydeepan/chara/AOStyleTransfer.py**.
Vous devez compléter les fonctions 'optimize', 'loss' et 'gram'.
Comme pour les images, l'objectif est de produire une nouvelle animation par optimisation de toutes les positions pour toutes les frames. Donc
d'optimiser les 240x73 valeurs. Le code à trou réalisant l'optimisation pour transférer le style est dans **pydeepan/chara/AOStyleTransfer.py**. Vous devez compléter les fonctions 'optimize', 'loss' et 'gram'.
- Essayer déjà de partir d'un tableau/animation random est d'optimiser
pour produire une animation ayant le même code que l'animation
source (sans s'occuper du style). Dans la fonction 'loss', encoder
les deux animations et l'erreur sera la différence au carré des deux
codes. Il faut jouer sur le 'learning rate'. A la fin, vous obtenez
deux animations très différentes mais qui ont le même code. Un
passage dans l'auto-encodeur réduit fortement les différences.
* Essayer déjà de partir d'un tableau/animation random est d'optimiser pour produire une animation ayant le même code que l'animation source (sans s'occuper du style). Dans la fonction 'loss', encoder les deux animations et l'erreur sera la différence au carré des deux codes. Il faut jouer sur le 'learning rate'. A la fin, vous obtenez deux animations très différentes mais qui ont le même code. Un passage dans l'auto-encodeur réduit fortement les différences.
- Ajouter maintenant les infos de style de la 2e animation source dans
la fonction 'loss'.
* Ajouter maintenant les infos de style de la 2e animation source dans la fonction 'loss'.
## Quelques lectures
* [[http://courty.fr/deep-learning-02-etapes-dun-projet-de-deep-learning/|
Une bonne explication de toutes les étapes nécessaire à un apprentissage
sont décrites ici.\]\]
Classification d'images avec PyTorch
* [[https://pytorch.org/tutorials/beginner/blitz/cifar10_tutorial.html|Sur CIFAR pour coder la base]]
Pour aller plus loin :
* [[https://medium.com/@shun.bu/a-diagrammatic-summary-of-the-deep-learning-architectures-for-computer-vision-applications-cd1ec193d8dc|A diagrammatic summary of the deep learning architectures for computer vision applications ]]
* Un article de recherche : [[https://arxiv.org/abs/1409.1556|Very Deep Convolutional Networks for Large-Scale Image Recognition]]
Reconnaissance de caractères
* [[https://towardsdatascience.com/tutorial-alphabet-recognition-deeplearning-opencv-97e697b8fb86|Un tutoriel décrivant les étapes pour la reconnaissance de caractères]].
* [[https://github.com/gaurav0651/emnist/blob/master/train_emnist.ipynb|Un exemple de code PyTorch de reconnaissance de caractères]].
# Partie (IV) Synthèse d'une image de posture d'une personne guidée par un squelette
# Partie (III) Synthèse d'une image de posture d'une personne guidée par un squelette
** CE SUJET N'EST PAS TERMINE **
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.
......
......@@ -39,7 +39,7 @@ description: "Partie A. Meyer"
## Les TP
1. [Installation](tp_installation)
2. [Partie Classification](tp_classification) (si vous maitrisez déjà bien la classification et les CNN, passez à la question suivante)
2. [Partie classification](tp_classification) (si vous maitrisez déjà bien la classification et les CNN, passez à la question suivante)
3. [Partie transfert de style entre images](tp_style)
4. [Partie transfert de geste et génération d'images de personne](tp_dance)
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