avance slides

This commit is contained in:
Laureηt 2023-08-28 16:11:59 +02:00
parent 4068fca608
commit 2a0064b09a
Signed by: Laurent
SSH key fingerprint: SHA256:kZEpW8cMJ54PDeCvOhzreNr4FSh6R13CMGH/POoO8DI

View file

@ -36,6 +36,13 @@ title: Projet de fin d'étude
<!--
Petit sommaire pour cadrer un peu les parties de ma présentation
- Présentation brève de Safran et de mon Stage
- Présentation de mes données
- Présentation de modèles pour traiter le problème
- Résultats de ces modèles
- Vérification de ces modèles
- Conclu
-->
---
@ -50,16 +57,16 @@ Petit sommaire pour cadrer un peu les parties de ma présentation
<a href="https://medialibrary.safran-group.com/" class="absolute bottom-0 font-extralight mb-1 mr-2 right-0 text-xs">Safran Media Library</a>
<!--
Safran grand groupe industriel technologique français.
Principalement aéronautique, mais pas que.
Rapidement, Safran grand groupe industriel technologique français.
Principalement aéronautique, mais pas que, plein d'autre filiales.
Safran génère des revenus principalement grâce à la vente de moteur pour la propulsion d'avion civiles.
à gauche: cfm56 moteur civile le plus vendu au monde, depuis 1978
à droite: m88, moteur militaire, équipe les rafales (Dassault)
Lors de mon stage j'ai fait partie d'une équipe de Safran Tech qui est le département recherche de Safran qui explore de nouveaux procédés pour les nouvelles générations de moteurs (mais pas que).
Lors de mon stage j'ai fait partie d'une équipe de Safran Tech qui est le département recherche de Safran qui explore de nouveaux procédés pour les nouvelles générations de moteurs...
Dans mon cas j'ai donc travaillé sur l'amélioration des aubes, qui sont les pales qu'on peut voir ~ici, celles à l'intérieur, plusieurs étages.
Dans mon cas j'ai donc travaillé sur l'amélioration des aubes, qui sont les pales à l'interieur du moteur qui permettent de comprimer l'air.
-->
---
@ -71,8 +78,24 @@ Dans mon cas j'ai donc travaillé sur l'amélioration des aubes, qui sont les pa
<img src="/assets/rotor37_points.gif" class="m-auto w-full">
</div>
<div class="absolute bottom-0">
29773 nœuds, 59328 triangles et 89100 arêtes.
</div>
<!--
pointcloud car connectivité des maillages trop complexe à prédire, et y'a des techniques pour reconstruire la surface juste à partir des points.
Rotor37_1200, le dataset sur lequel j'ai principalement travaillé.
Il s'agit de 1200 échantillons de déformations d'une des 37 aube du compresseur d'un moteur d'avion, déformations à partir d'une aube nominale.
Sous forme de maillage triangulaire, 30k nœuds, 60k triangles et 90k arêtes.
En chaque nœuds, positions, normales + physqique (température, pression, simu cfd).
\+ pour chaque échantillons, 5 métriques globales.
Maillage, mais connectivité assez "locales" (voisins proches dans l'espace, c'est pas comme un vrai graphe) donc dans la suite des travaux on va souvent utiliser seulement les noeuds. Ça nous arrange en plus, car connectivité des maillages trop complexe à prédire (quadratique), et y'a des techniques pour reconstruire la surface juste à partir des points.
On aurait aussi pu imaginer travailler directement sur la CAO de ces aubes, mais c'est bcp plus complexe, zero littérature et représentation pas uniques.
-->
---
@ -82,7 +105,9 @@ pointcloud car connectivité des maillages trop complexe à prédire, et y'a des
<img src="https://git.fainsin.bzh/ENSEEIHT/projet-fin-etude-rapport/media/branch/master/assets/online_adaptative_sampling_DOE.png" class="m-auto h-100 mt-10"/>
<!--
Les modèles génératifs c'est pas nouveaux, si on souhaite trouver une aube qui respèrecte un certaine critère de performance par exemple, une méthode simple et largement déjà utiliser c'est "l'exploration d'un espace paramètre".
Donc nous ce qu'on veut c'est générer des trucs qui ressemblent à rotor37. pour ça on peut utiliser des modèles génératifs.
Les modèles génératifs c'est pas nouveaux, si on souhaite trouver une aube qui respecte un certaine critère de performance par exemple pour un nouveau moteur, une méthode simple et largement déjà utiliser c'est "l'exploration d'un espace paramètre" (un peu comme un sweep d'hyperparamètres en deep learning).
Si on suppose qu'on a une CAO (construction d'une aube avec des objets primitifs) sous la main paramétrisé (par l'angle d'attaque, hauteur, largueur, ...). On peut échantilloner, passer sous simu, relever les perfs, interpoler, trouver des endroits interessants à explorer, échantilloner de nouveaux paramètres, répéter...
@ -102,9 +127,9 @@ Inconvénient, c'est long, à cause de la simu, et si on veut optimiser un autre
<!--
Solution: balancer des réseaux de neurones là dedans et voir si ça marche. Y'a globalement 4 grosses familles de modèles génératifs (gan, vae, nf, dm).
L'objectif de ces modèles se ressemblent un peu tous. Dans les trois premiers, on veut apprendre à génerer distrib x' qui ressemble très fortement à x. Donc en gros formelement pendant leur entrainement on veut apprendre l'identité, mais particularité dans ces réseaux, par exemple dans vae on passe (généralement) par un goulot d'étranglement qu'on appelle espace latent (z), auquel on peut donner des propriétés interessantes.
L'objectif de ces modèles se ressemblent un peu tous. Dans les trois premiers, on veut apprendre à génerer distrib x' qui ressemble très fortement à x. Donc en gros formelement pendant leur entrainement on veut apprendre l'identité, mais particularité dans ces réseaux, par exemple dans vae on passe (généralement) par un goulot d'étranglement qu'on appelle espace latent (z), auquel on peut donner plusieurs propriétés interessantes.
La famille qui nous interesse le plus ici c'est les modèles de diffusion, le plus récent.
La famille qui nous interesse le plus ici c'est les modèles de diffusion, le plus récent. Le principe c'est de trouver un processus réversible et discret entre notre distribution de données et une autre distribution qu'on connait parfaitement mathématiquement (qu'on sait sampler sans soucis).
-->
---
@ -122,7 +147,7 @@ La famille qui nous interesse le plus ici c'est les modèles de diffusion, le pl
</p>
<!--
Il existe plusieurs méthodes pour faire de la diffusion, la plus simple/connue d'entre elles c'est DDPM. Le principe de cette méthode c'est d'apprendre un mapping réversible entre nos données et une autre distribution parfaitement connue, comme une gaussienne isotropique.
Il existe plusieurs méthodes pour faire de la diffusion, la plus simple/connue d'entre elles c'est DDPM. Le principe de cette méthode c'est d'apprendre un mapping réversible entre nos données et une gaussienne isotropique.
Ce mapping on va l'apprendre par l'intermédiaire d'un réseau débruiteur. Pour ce faire on prend une de nos données (x0), on la bruite (xt), on la donne notre réseau, on récupère la prédiction (eps_theta) de notre réseau, qu'on utilise ensuite pour optimiser le réseau à prédire le bruit que l'on a ajouté (eps).
@ -181,8 +206,9 @@ Le résultat (ici kp-fcnn) est pas mal, mais pas ouffissime car il reste une bon
LDM part du constat que c'est plus efficace de travailler sur les informations latentes des données plutot que directement sur les données. Y'a toute une série de travaux sur la représentivité des réuseaux de neurones qui le prouve.
Pour ça tout ce qu'on fait c'est rajouter (généralement) un VAE en amont du modèle de diffusion pour permettre de passer de nos données à leurs représentation latente et inversement. Comme ces transformations agissent un peu comme une opération de compression (et de decompression) l'apprentissage du modèle de diffusion est plus simple.
La figure de gauche représente la quantité d'information en fonction de l'impact sur la génération, c'est un peu compliqué à expliquer, mais ça ressemble un peu aux modes d'une SVD en fait.
Dans notre cas, puisque la structure des données s'y porte bien (bien régulière, noeuds tous dans le même ordre, ...) on peut utiliser une PCA pour obtenir un espace latent. Ça a l'avantage d'être non paramétrique, mais l'inconvenient d'être spécialisé sur un jeu de données (ce qui n'est pas super grave dans le cadre industriel).
Dans notre cas, puisque la structure des données s'y porte bien (bien régulière, noeuds tous dans le même ordre, ...) on peut se passer d'un VAE et utiliser une PCA pour obtenir un espace latent. Ça a l'avantage d'être non paramétrique, mais l'inconvenient d'être spécialisé sur un jeu de données (ce qui n'est pas super grave dans le cadre industriel).
-->
---
@ -195,9 +221,9 @@ Dans notre cas, puisque la structure des données s'y porte bien (bien réguliè
<a href="https://perceptron.blog/defusing-diffusion/" class="absolute bottom-0 font-extralight mb-1 mr-2 right-0 text-xs">Paweł Pierzchlewicz</a>
<!--
Autre amélioration, jusqu'à présent on est capable de générer des données qui ressemble à une densité de probabilité x. Cependant couramment on veut générer des données qui ressemble à un sous ensemble de données (x,y) avec y la classe de x.
Autre amélioration, jusqu'à présent avec tout ce que j'ai dit, on est capable de générer des données qui ressemble à une certaine densité de probabilité x. Cependant couramment on veut générer des données qui ressemble à un sous ensemble de données (x,y) avec y la classe de x.
Il existe plusieurs méthode pour faire cela, la plus performante d'entre elles étant la cfg. Le principe c'est d'entrainer notre réseau de diffusion conjointement à la prédiction non conditionnée et conditionnée. Lors de l'échantillonage faire une interpolation linéaire entre une prédiction non condtionnée et conditonnée pour guider la génération.
Il existe plusieurs méthode pour faire cela, la plus performante d'entre elles étant la cfg. Le principe c'est d'entrainer notre réseau de diffusion conjointement à la prédiction non conditionnée et conditionnée. Jusque là rien de spécial, mais lors de l'échantillonage ça nous permet de faire une interpolation linéaire entre une prédiction non condtionnée et conditonnée pour guider la génération.
-->
---
@ -209,6 +235,12 @@ Il existe plusieurs méthode pour faire cela, la plus performante d'entre elles
<img src="/assets/result_points.gif" class="m-auto w-full">
</div>
<!--
Et donc si on applique nos diffusion latente via une PCA et un conditionnement par cfg, on obtient ceci. Un nuage de point de très bonne qualité, et en bonus grâce à la pca, on peut appliquer la connectivité de l'aube nominale à notre génération pour obtenir une surface (pas besoin de méthode de reconstruction).
Problème, on est incapable de voir visuellement la différence entre une aube conditionné avec efficacité à 2 et une aube efficacité à 10. Une solution ça serait de passer nos générateurs dans le simu, mais trop long. Donc on va utiliser des modèles de regression.
-->
---
## Gaussian Process (GP)
@ -222,6 +254,12 @@ Il existe plusieurs méthode pour faire cela, la plus performante d'entre elles
<a href="https://distill.pub/2019/visual-exploration-gaussian-processes/" class="absolute bottom-0 font-extralight mb-1 mr-2 right-0 text-xs">Distill</a>
<!--
Donc on pourrait très bien entrainer un réseau de neurones pour faire la regression entre nos nuage de points (ou leur représentation latente, modes pca) et le critère de performances. Mais on a un peu la flemme, donc on peut utiliser des méthodes non paramétriques, telles que les GP.
Les GP c'est des méthodes à noyau probibilitiques. On a entre autre l'avantage d'avoir des intervals de confiances (diagramme saucisse) et aussi l'avantage que plus on met de données dans le modèles, plus celui-ci est précis (mathématiquement, pas juste comme en deep learning, où c'est un peu empirique).
-->
---
## Vérification par Gaussian Process (GP)
@ -231,7 +269,13 @@ Il existe plusieurs méthode pour faire cela, la plus performante d'entre elles
<img src="/assets/gp_q2.png" class="m-auto w-full">
</div>
<!-- q2 = r2 = Coefficient de détermination -->
<!--
Donc on peut utiliser des GPs.
Ces deux figures c'est juste pour illustrer que la précision du GP varie proportionnelement aux nombre de modes PCA que l'on utilise. Donc on voit ici qu'une 30 de modes PCA suffisent, et ça on le détermine en calculant de coefficient de détermination entre les prédictions du GP et ce qu'il devrait prédire (sur des données de test). On observe qu'on prédit bien en gros y=x donc, le GP est capable de trouver une relation entre les modes PCA et les performances.
q2 = r2 = Coefficient de détermination
-->
---
@ -242,6 +286,14 @@ Il existe plusieurs méthode pour faire cela, la plus performante d'entre elles
<img src="/assets/gp_efficiency.gif" class="m-auto w-full">
</div>
<!--
Maintenant si on rajoute en orange nos données générés on va pouvoir observer si celle-ci sont là ou elles devraient êtres.
Figure du haut, on conditionne selon out_massflow, on le fait varier entre -2 et 2 (visible dans le titre) et si on regarde la distribution des prédictions on observe que ça suit bien le conditonnement.
Figure du bas, on fait pareil pour l'isentropic_efficiency, mais entre -3 et 3. Une fois de plus c'est bien, même dans les zones où y'a pas beaucoup de points (aux extremités).
-->
---
## Vérification par Gaussian Process (GP)
@ -251,6 +303,14 @@ Il existe plusieurs méthode pour faire cela, la plus performante d'entre elles
<img src="/assets/gp_double.gif" class="m-auto w-full">
</div>
<!--
Encore d'autres figures
La figure du haut montre comment on peut régler le conditionnement, on peut faire varier la guidance gamma, et donc on observe la distribution se concentrer progressivement.
Figure du bas, on conditionne sur deux trucs en même temps, ça marche plutot bien.
-->
---
## Conclusion
@ -265,7 +325,26 @@ Il existe plusieurs méthode pour faire cela, la plus performante d'entre elles
### Axes d'amélioration
- Vérifier le conditonnement par simulation CFD
- Remplacer la PCA par une méthode paramétrique
- Travailler directement sur les CAOs
</div>
---
## GraphVAE
<div class="flex items-center w-full bg-black">
<img src="/assets/graphvae_surface.gif" class="m-auto w-full">
<img src="/assets/graphvae_points.gif" class="m-auto w-full">
</div>
---
## PVD
<div class="flex items-center w-full bg-black">
<img src="/assets/pvd_points.gif" class="m-auto h-100">
</div>