premières modifs de xavier

This commit is contained in:
Laureηt 2023-08-24 11:14:54 +02:00
parent 3cadd350ca
commit 6383c0d83c
Signed by: Laurent
SSH key fingerprint: SHA256:kZEpW8cMJ54PDeCvOhzreNr4FSh6R13CMGH/POoO8DI
2 changed files with 83 additions and 67 deletions

View file

@ -138,15 +138,15 @@
\newacronym{t2i}{T2I}{Text to Image}
\newacronym{arm}{ARM}{Auto-Regressive Model}
\newacronym{nerf}{NeRF}{Neural Radiance Fields}
\newacronym{nerf}{NeRF}{Neural Radiance Field}
\newacronym{gp}{GP}{Gaussian Process}
\newacronym{go}{Go}{Gigaoctet}
\newacronym{kpconv}{KPConv}{Kernel Point Convolution}
\newacronym{pvconv}{PVConv}{Point Voxel Convolutions}
\newacronym{spvconv}{SPVConv}{Sparse Point Voxel Convolutions}
\newacronym{pvconv}{PVConv}{Point Voxel Convolution}
\newacronym{spvconv}{SPVConv}{Sparse Point Voxel Convolution}
\newacronym{cao}{CAO}{Conception Assistée par Ordinateur}
@ -181,7 +181,7 @@
\chapter*{Remerciements}
\addcontentsline{toc}{chapter}{Remerciements}
Je tiens à remercier Xavier Roynard, Michel Alessandro Bucci et Brian Staber, mes tuteurs de stage, ainsi que les équipes de Safran pour leur accueil et leur accompagnement tout au long de ce stage.
Je tiens à remercier Xavier Roynard, Michele Alessandro Bucci et Brian Staber, mes tuteurs de stage, ainsi que les équipes de Safran pour leur accueil et leur accompagnement tout au long de ce stage.
J'aimerais également remercier l'ensemble de mes professeurs de l'\gls{n7}, pour m'avoir permis d'acquérir les connaissances nécessaires à la réalisation de ce projet.
@ -265,7 +265,7 @@ Il est possible d'identifier des cycles itératifs comprenant les phases de rech
Le CFM56, dont le développement s'est achevé en 1978, détient toujours le record du moteur civil le plus vendu au monde. Les ventes de ce moteur continuent à soutenir l'activité de Safran jusqu'à ce jour. En parallèle, le moteur LEAP, annoncé en 2008, a été mis sur le marché en 2014. Il équipe la nouvelle génération d'avions tels que les Boeing 737 Max et les Airbus A320 neo. Pour maintenir l'expertise technique malgré les fluctuations entre les cycles de développement et de production, Safran a créé Safran Tech en 2015. Cette entité prépare d'ores et déjà les technologies qui seront utilisées entre 2025 et 2030.
Safran Tech représente le centre de Recherche et Technologie de l'Innovation au sein du groupe. Son fonctionnement diffère du modèle commercial classique puisqu'il n'est pas axé sur un marché spécifique. Il abrite une équipe d'environ 500 chercheurs et ingénieurs qui se répartissent dans divers pôles, tels que ``Modélisation \& Simulation", ``Matériaux \& Procédés", ``Énergie \& Propulsion", ``Systèmes Électriques et Électroniques", ainsi que ``Technologies des Capteurs \& Applications". Sa mission principale est de stimuler l'innovation sur des problématiques ayant un impact sur l'ensemble des filiales du groupe.
Safran Tech représente le centre de Recherche et Technologie de l'Innovation au sein du groupe. Son fonctionnement diffère du modèle commercial classique puisqu'il n'est pas axé sur un marché spécifique. Il abrite une équipe d'environ 500 chercheurs et ingénieurs qui se répartissent dans divers pôles, tels que ``Matériaux \& Procédés", ``Énergie \& Propulsion", ``Systèmes Électriques et Électroniques", ainsi que ``Sciences et Technologies du Numérique". Sa mission principale est de stimuler l'innovation sur des problématiques ayant un impact sur l'ensemble des filiales du groupe.
Les équipes de recherche au sein de Safran Tech ne sont pas directement soumises aux contraintes imposées par d'importants projets industriels. Par conséquent, elles ont la liberté de mener des projets de recherche tout en collaborant avec des laboratoires externes tels que l'ONERA, le Centre des Matériaux des Mines, ainsi que les équipes d'autres entreprises. Cette structure permet à Safran Tech de rester agile dans ses activités de recherche et de développement, en explorant des solutions novatrices sans les contraintes de projets industriels spécifiques.
@ -283,7 +283,7 @@ Les équipes de recherche au sein de Safran Tech ne sont pas directement soumise
Dans le domaine industriel, les codes de simulation numérique sont désormais un outil indispensable pour la conception de systèmes complexes, en particulier pour les modules de réacteurs d'avions ou d'hélicoptères.
De telles simulations sont par exemple utilisées pour évaluer les performances aérodynamiques d'un composant tel qu'une aube de turbine. En partant d'une géométrie de nominale, dans la phase d'optimisation, la pièce est progressivement modifiée afin d'optimiser certaines quantités d'intérêt.
De telles simulations sont par exemple utilisées pour évaluer les performances aérodynamiques d'un composant tel qu'une aube de turbine. En partant d'une géométrie nominale, dans la phase d'optimisation, la pièce est progressivement modifiée afin d'optimiser certaines quantités d'intérêt.
Malheureusement, ce processus de conception itératif présente deux limites:
\begin{itemize}
@ -316,13 +316,13 @@ L'étude vise tout d'abord à étudier la bibliographie disponible d'un côté s
Ce chapitre présente les différents concepts et méthodes nécessaires à la compréhension du travail réalisé durant ce stage.
Dans le cadre de cette étude, nous nous intéressons à la génération de géométries d'aubes de turbines. Ces géométries font parties d'une modalitées de données peu commune, les maillages (qui sont un type de graphes) ou les nuages de points. Ces modalités sont relativement peu étudiée dans la littérature de l'apprentissage automatique comparé aux modalités plus classique comme les images, le texte ou encore l'audio. En effet, ces données sont non structurées et il est donc nécessaire d'utiliser des méthodes spécifiques pour les traiter.
Dans le cadre de cette étude, nous nous intéressons à la génération de géométries d'aubes de turbines. Ces géométries font parties d'une modalité de données peu commune, les maillages (qui sont un type de graphes) ou les nuages de points. Ces modalités sont relativement peu étudiée dans la littérature de l'apprentissage automatique comparé aux modalités plus classique comme les images, le texte ou encore l'audio. En effet, ces données sont non structurées et il est donc nécessaire d'utiliser des méthodes spécifiques pour les traiter.
Il reste pertinent de noter que les méthodes présentées dans ce chapitre sont récentes et que la littérature évolue très rapidement. De plus, les méthodes existantes sont très nombreuses et il est impossible de toutes les présenter. Nous avons donc choisi de présenter les méthodes les plus pertinentes pour permettre une bonne compréhension globale du travail réalisé durant ce stage.
\FloatBarrier
\glsunset{gnn}
\section{\acrfull{gnn}}
\section{\acrfull*{gnn}}
Les graphes sont des structures de données qui permettent de représenter des relations entre des entités. Un graphe est défini par un ensemble de nœuds et un ensemble d'arêtes. Les arêtes représentent des relations entre les nœuds. Ces relations peuvent être de différents types, comme des relations de parenté, de proximité ou encore de similarité. Les graphes peuvent être dirigés ou non. Dans le cas d'un graphe dirigé, les arêtes sont orientées et représentent une relation unidirectionnelle. Dans le cas d'un graphe non dirigé, les arêtes ne sont pas orientées et représentent une relation bidirectionnelle. Les graphes peuvent être pondérés ou non. Dans le cas d'un graphe pondéré, les arêtes sont associées à une valeur qui représente l'intensité de la relation entre les nœuds.
@ -357,7 +357,7 @@ Il existe plusieurs sous familles de modèles génératifs, chacune basées sur
\FloatBarrier
\glsunset{gan}
\subsection{\acrfull{gan}}
\subsection{\acrfull*{gan}}
\begin{figure}[h!]
\centering
@ -368,13 +368,13 @@ Il existe plusieurs sous familles de modèles génératifs, chacune basées sur
\label{fig:gan-architecture}
\end{figure}
Les \glspl{gan}~\cite{goodfellow_generative_2014} sont la famille de modèles génératifs la plus renommée et également la plus ancienne. Ces modèles reposent sur un principe compétitif impliquant deux réseaux de neurones. Le premier réseau, connu sous le nom de générateur, a pour objectif de produire de nouvelles données. Le deuxième réseau, appelé discriminateur, est chargé de distinguer les données générées par le générateur des données réelles. Le générateur est entraîné à tromper le discriminateur tandis que le discriminateur est entraîné à identifier les données générées par rapport aux données réelles. Cette compétition entre les deux réseaux permet de former le générateur à générer des données de plus en plus réalistes. Ce type d'apprentissage est auto-supervisé, car il ne nécessite pas l'utilisation d'annotations sur les données pour entraîner le modèle.
Les \glspl{gan}~\cite{goodfellow_generative_2014} sont la famille de modèles génératifs la plus renommée et également la plus ancienne. Ces modèles reposent sur un principe compétitif impliquant deux réseaux de neurones, visibles sur la figure~\ref{fig:gan-architecture}. Le premier réseau, connu sous le nom de générateur, a pour objectif de produire de nouvelles données. Le deuxième réseau, appelé discriminateur, est chargé de distinguer les données générées par le générateur des données réelles. Le générateur est entraîné à tromper le discriminateur tandis que le discriminateur est entraîné à identifier les données générées par rapport aux données réelles. Cette compétition entre les deux réseaux permet de former le générateur à générer des données de plus en plus réalistes. Ce type d'apprentissage est auto-supervisé, car il ne nécessite pas l'utilisation d'annotations sur les données pour entraîner le modèle.
Mathématiquement, on peut poser le problème d'optimisation suivant:
\begin{equation}
\min_\text{G} \max_\text{D} L(\text{D}, \text{G}) = \mathbb{E}_{x \sim p(\boldsymbol{x})} [ \log \text{D}(x) ] + \mathbb{E}_{z \sim p(\boldsymbol{z})} [ \log (1 - \text{D}(G(z))) ]
\end{equation}
Les \glspl{gan} ont su démontrer leur efficacité pour générer des images réalistes. Cependant, ces modèles sont très difficiles à entraîner~\cite{arjovsky_towards_2017}. Les \glspl{gan} sont par exemple suceptibles à de nombreux problèmes~\cite{zhao_bias_2018}, tel que le problème de \textit{mode collapse}, où le générateur génère toujours la même image, mais aussi le problème de \textit{non convergence}, où le générateur et/ou le discriminateur ont une fonction de cout instable et ne convergent ainsi pas vers un équilibre de Nash, ou encore au problème de \textit{vanishing gradient}, où le discriminateur devient trop efficace et empêche le générateur d'apprendre.
Les \glspl{gan} ont su démontrer leur efficacité pour générer des images réalistes. Cependant, ces modèles sont très difficiles à entraîner~\cite{arjovsky_towards_2017}. Les \glspl{gan} sont par exemple sujets à de nombreux problèmes~\cite{zhao_bias_2018}, tel que le problème de \textit{mode collapse}, où le générateur génère toujours la même image, mais aussi le problème de \textit{non convergence}, où le générateur et/ou le discriminateur ont une fonction de cout instable et ne convergent ainsi pas vers un équilibre de Nash, ou encore au problème de \textit{vanishing gradient}, où le discriminateur devient trop efficace et empêche le générateur d'apprendre.
Au fil des années, de nombreuses améliorations~\cite{salimans_improved_2016}, variations (WGAN~\cite{arjovsky_wasserstein_2017}, etc.) et cas d'applications (CycleGAN~\cite{zhu_unpaired_2020}, SGAN~\cite{odena_semi-supervised_2016}, SRGAN~\cite{ledig_photo-realistic_2017}, DragGAN~\cite{pan_drag_2023}, etc.) ont été proposées, mais ces modèles restent complexes à entraîner et à évaluer. De plus, ces modèles sont très sensibles aux hyperparamètres et nécessitent une grande quantité de données pour être efficaces.
@ -382,7 +382,7 @@ Face à ces inconvénients, et puisque nous ne possédons pas de grandes quantit
\FloatBarrier
\glsunset{vae}
\subsection{\acrfull{vae}}
\subsection{\acrfull*{vae}}
\begin{figure}[h]
\centering
@ -396,7 +396,7 @@ Face à ces inconvénients, et puisque nous ne possédons pas de grandes quantit
Les \glspl{vae}~\cite{kingma_auto-encoding_2022,kipf_variational_2016,doersch_tutorial_2021} constituent une autre famille de modèles génératifs, également bien connue comme les \glspl{gan} et relativement tout aussi anciens. Ces modèles reposent sur l'entraînement simultané de deux réseaux de neurones: un encodeur et un décodeur. L'objectif de l'encodeur est de transformer les données d'entrée en une distribution de probabilité, tandis que le décodeur génère de nouvelles données à partir de cette distribution. Comme pour les \glspl{gan}, ces modèles visent à estimer une distribution de données qui se rapproche le plus possible de la distribution des données d'entraînement, c'est-à-dire qu'ils apprennent à reproduire fidèlement les données d'origine.
La particularité inhérente aux \glspl{vae} réside dans l'espace latent intermédiaire situé entre l'encodeur et le décodeur.
La recherche sur l'interprétabilité des réseaux de neurones et leur visualisations~\cite{olah2017feature} établissent que les espaces latents permettent d'extraire les informations sous-jacentes (non directement perceptibles) des données d'entrée. Travailler sur ces informations s'avère avantageux car elles décrivent plus simplement et précisement les données d'entrée.
La recherche sur l'interprétabilité des réseaux de neurones et leur visualisations~\cite{olah2017feature} établissent que les espaces latents permettent d'extraire les informations sous-jacentes (non directement perceptibles) des données d'entrée. Travailler sur ces informations s'avère avantageux car elles décrivent plus simplement les données d'entrée.
De même, chez les \glspl{vae} la dimension de cette espace latent est configurée par l'architecture du réseau et peut être réduite à volonté. L'encodeur et le décodeur peuvent ainsi être conceptualisés comme des opérateurs de compression et de décompression.
Mathématiquement, on peut modéliser ces variables latentes et nos données d'entrée par une distribution jointe $p(\boldsymbol{x}, \boldsymbol{z})$. Les approches génératives ont pour but de trouver un modèle maximisant la vraissemblance de nos données d'entrée $p(\boldsymbol{x})$.
@ -415,7 +415,7 @@ Ainsi, puisque la \gls{kld} est toujours positive et car $\log p(\boldsymbol{x})
\mathbb{E}_{ q_\phi( \boldsymbol{z} | \boldsymbol{x} ) } \left[ \log \frac{ p(\boldsymbol{x}, \boldsymbol{z}) } { q_\phi(\boldsymbol{z}|\boldsymbol{x}) }\right] = \underbrace{ \mathbb{E}_{ q_\phi( \boldsymbol{z} | \boldsymbol{x} ) } [ \log p_\theta(\boldsymbol{x}|\boldsymbol{z}) ]}_{\text{reconstruction term}} - \underbrace{ D_{\text{KL}}(q_\phi(\boldsymbol{z}|\boldsymbol{x}) \ \| \ p(\boldsymbol{z})) }_{\text{prior matching term}}
\end{equation}
Une fois convergence atteinte, l'intéret de cet espace latent, lorsqu'il est accompagné de sont decodeur, est qu'il permet de générer de nouvelles données, par example en échantillonant $z = \mu + \sigma \odot \epsilon$, ou bien en interpolant entre deux points latents, ou encore en modifiant légèrement un point spécifique de cet espace. Avoir la possibilité de générer de nouvelles données semblables aux données d'origine se révèle extrêmement utile dans le domaine de l'ingénierie, offrant ainsi des possibilités de création et de conception de nouvelles données basées sur des modèles existants.
Une fois la convergence atteinte, l'intéret de cet espace latent, lorsqu'il est accompagné de sont decodeur, est qu'il permet de générer de nouvelles données, par example en échantillonant $z = \mu + \sigma \odot \epsilon$, ou bien en interpolant entre deux points latents, ou encore en modifiant légèrement un point spécifique de cet espace.
Tout comme les \glspl{gan}, de nombreuses améliorations (β-VAE~\cite{burgess_understanding_2018,higgins_beta-vae_2022,alemi_deep_2019}, f-VAE~\cite{su_f-vaes_2018}) et variations (SetVAE~\cite{kim_setvae_2021}, AutoDecoder~\cite{shah_auto-decoding_2020}, GraphVAE~\cite{simonovsky_graphvae_2018}) ont été proposées pour les \glspl{vae}. Ces modèles sont plus faciles à entraîner que les \glspl{gan} et présentent une plus grande stabilité. Cependant, les \glspl{vae} ont tendance à générer des données floues et peu réalistes~\cite{yacoby_failure_2021}, et en général produisent des résultats de moins bonne qualité que les \glspl{gan}, en particulier pour des résolutions élevées.
@ -423,7 +423,7 @@ Tout comme les \glspl{gan}, de nombreuses améliorations (β-VAE~\cite{burgess_u
\FloatBarrier
\glsunset{nf}
\subsection{\acrfull{nf}}
\subsection{\acrfull*{nf}}
\begin{figure}[h!]
\centering
@ -442,7 +442,7 @@ Les transformations inversibles utilisées dans les \glspl{nf} sont souvent para
Dans la littérature, ces réseaux sont assez peu appliqués aux types de données qui nous intéressent, à l'exception notable de PointFlow~\cite{yang_pointflow_2019} qui aura posé certaines bases pour évaluer les réseaux génératifs de nuages de points. Comme par exemple la démocratisation des distances et métriques suivantes:
\glsunset{kld}
\subsubsection{\acrfull{kld}}
\subsubsection{\acrfull*{kld}}
Soit deux distributions de probabilités discrètes $P$ et $Q$ sur un ensemble $X$.
\begin{equation}
@ -451,7 +451,7 @@ Soit deux distributions de probabilités discrètes $P$ et $Q$ sur un ensemble $
La Divergence de Kullback-Leibler est une mesure de la dissimilarité entre deux distributions de probabilité. Elle évalue la quantité d'information perdue lorsque l'on tente d'approximer une distribution par une autre. La \gls{kld} n'est pas une distance, elle ne satisfait pas la propriété de symétrie ($D_{\text{KL}}(P\|Q) \neq D_{\text{KL}}(Q\|P)$) ni l'inégalité triangulaire ($D_{\text{KL}}(P\|R) \not\leq D_{\text{KL}}(P\|Q) + D_{\text{KL}}(Q\|R)$).
\glsunset{hd}
\subsubsection{\acrfull{hd}}
\subsubsection{\acrfull*{hd}}
Soit $X$ et $Y$ deux nuages de points.
\begin{equation}
@ -460,7 +460,7 @@ Soit $X$ et $Y$ deux nuages de points.
La distance de Hausdorff est une mesure quantitative utilisée pour évaluer la similarité ou la dissimilarité entre deux ensembles de points dans un espace métrique. Elle calcule la plus grande distance d'un point d'un ensemble à son point le plus proche dans l'autre ensemble. En d'autres termes, elle capture la plus grande distance entre les ensembles, ce qui en fait un outil utile pour comparer des formes, des structures ou des distributions de points.
\glsunset{cd}
\subsubsection{\acrfull{cd}}
\subsubsection{\acrfull*{cd}}
Soit $X$ et $Y$ deux nuages de points.
\begin{equation}
@ -469,7 +469,7 @@ Soit $X$ et $Y$ deux nuages de points.
La distance de Chamfer est une mesure de similarité entre deux ensembles de points dans un espace métrique. Elle évalue la proximité entre les points des ensembles en calculant la somme des distances entre chaque point d'un ensemble et son point le plus proche dans l'autre ensemble.
\glsunset{emd}
\subsubsection{\acrfull{emd}}
\subsubsection{\acrfull*{emd}}
Soit $X$ et $Y$ deux nuages de points tels que $|X| = |Y|$, et $\phi: X \to Y$ une bijection.
\begin{equation}
@ -478,7 +478,7 @@ Soit $X$ et $Y$ deux nuages de points tels que $|X| = |Y|$, et $\phi: X \to Y$ u
La distance du transport optimal, également appelée distance du "Earth Mover", est une mesure de similarité entre deux distributions de masse dans un espace métrique. Elle évalue le coût minimum nécessaire pour déplacer une distribution de masse en une autre en respectant certaines contraintes de déplacement. Cette distance est couramment utilisée pour comparer des distributions de données, telles que des histogrammes, des vecteurs de caractéristiques ou des nuages de points, en prenant en compte non seulement les distances entre les éléments correspondants, mais aussi les coûts associés à leur déplacement.
\glsunset{jsd}
\subsubsection{\acrfull{jsd}}
\subsubsection{\acrfull*{jsd}}
Soit $S_g$ un ensemble de nuages de points générés et $S_r$ un ensemble de nuages de points de référence.
\begin{equation}
@ -488,7 +488,7 @@ La divergence de Jensen-Shannon est une mesure de la similarité entre deux dist
Cependant, la \gls{jsd} utilise la distribution globale des nuages de points et non la distribution des nuages de points individuellements. Ainsi, un modèle qui produit toujours une "forme moyenne" peut obtenir un score \gls{jsd} parfait sans apprendre de distributions significatives.
\glsunset{cov}
\subsubsection{\acrfull{cov}}
\subsubsection{\acrfull*{cov}}
Soit $S_g$ un ensemble de nuages de points générés, $S_r$ un ensemble de nuages de points de référence et $D$ une distance entre nuages de points.
\begin{equation}
@ -499,7 +499,7 @@ La couverture permet de quantifier la diversité des générations mais est sens
Ainsi, des nuages de points générés de faible qualité mais diversifiés peuvent obtenir des scores de couverture élevés.
\glsunset{mmd}
\subsubsection{\acrfull{mmd}}
\subsubsection{\acrfull*{mmd}}
Soit $S_g$ un ensemble de nuages de points générés, $S_r$ un ensemble de nuages de points de référence et $D$ une distance entre nuages de points.
\begin{equation}
@ -509,7 +509,7 @@ La distance de correspondance minimale, est une mesure qui évalue la différenc
Cependant, la \gls{mmd} est en réalité très peu sensible aux nuages de points de qualité médiocre dans $S_g$, étant donné leur faible probabilité d'être appariés avec des nuages de points réels dans $S_r$. Dans un cas extrême, on pourrait envisager que $S_g$ soit composé principalement de nuages de points de très mauvaise qualité, ainsi que de nuages de point pratiquement identiques à ceux de $S_r$. Dans ce cas, on obtiendrait un score de raisonnablement élevé.
\glsunset{1-nna}
\subsubsection{\acrfull{1-nna}}
\subsubsection{\acrfull*{1-nna}}
Soit $S_g$ un ensemble de nuages de points générés, $S_r$ un ensemble de nuages de points de référence, $N_X$ les voisins les plus proches de $X$ dans $S_{-X} = S_r \cup S_g - \{X\}$, $N_Y$ les voisins les plus proches de $Y$ dans $S_{-Y} = S_r \cup S_g - \{Y\}$ et $\mathbb{1}$ la fonction indicatrice.
\begin{equation}
@ -521,7 +521,7 @@ En supposant que $S_g$ et $S_r$ soient échantillonnés à partir de la même di
\FloatBarrier
\glsunset{vdm}
\subsection{\acrfull{vdm}}
\subsection{\acrfull*{vdm}}
\begin{figure}[h!]
\centering
@ -543,7 +543,7 @@ Dans leur architecture, les \glspl{vdm} peuvent être vus comme une chaine de Ma
\item Les paramètres de l'encodeur varient au cours du temps de sorte que la distribution latente à l'étape finale $T$ soit une gaussienne standard.
\end{itemize}
On note $q$ les ``encodeurs" et $p$ les ``décodeurs" des \glspl{vae} de la chaine de Markov, $x_0 \sim \boldsymbol{x}_0$ un échantillon de notre distribution de données, $x_T \sim \boldsymbol{x}_T$ un échantillon d'une gaussienne isotropique, et $x_t \sim \boldsymbol{x}_t$ tout échantillon intermédiaire, avec $t$ le temps de diffusion, $T$ le temps final de diffusion. On désigne également les transitions de $x_t$ à $x_{t+1}$ comme le``forward process", et les transition de $x_t$ à $x_{t-1}$ comme le ``reverse process".
On note $q$ les ``encodeurs" et $p$ les ``décodeurs" des \glspl{vae} de la chaine de Markov, $x_0 \sim \boldsymbol{x}_0$ un échantillon de notre distribution de données, $x_T \sim \boldsymbol{x}_T$ un échantillon d'une gaussienne isotropique, et $x_t \sim \boldsymbol{x}_t$ tout échantillon intermédiaire, avec $t$ le temps de diffusion, $T$ le temps final de diffusion. On désigne également les transitions de $x_t$ à $x_{t+1}$ comme le ``forward process", et les transition de $x_t$ à $x_{t-1}$ comme le ``reverse process".
D'après les contraintes précédentes, on peut écrire pour le forward process:
\begin{equation}
@ -611,7 +611,7 @@ Il est possible de démontrer théoriquement~\cite{luo_understanding_2022} l'éq
\FloatBarrier
\glsunset{ldm}
\subsubsection{\acrfull{ldm}}
\subsubsection{\acrfull*{ldm}}
\begin{figure}[h!]
\centering
@ -629,7 +629,7 @@ Les \glspl{vae} sont fréquemment employés à cet effet. L'entrainement des \gl
\FloatBarrier
\subsubsection{Conditionnement \& Guidance}
Jusqu'à présent, les modèles génératifs ont démontré leur capacité à générer des données conformes à une distribution de données apprise. Cependant, il est fréquemment nécessaire d'échantillonner une sous-distribution spécifique de nos données. À cette fin, il est possible de conditionner le modèle en utilisant une seconde donnée d'entrée (i.e. des embeddings), tel qu'une image, un scalaire, un audio, ou du texte, à l'instar des modèles de type \gls{t2i} tels que DALL·E 2 ou Stable Diffusion.
Jusqu'à présent, les modèles génératifs ont démontré leur capacité à générer des données conformes à une distribution de données apprise. Cependant, il est fréquemment nécessaire d'échantillonner une sous-distribution spécifique de nos données. À cette fin, il est possible de conditionner le modèle en utilisant une seconde donnée d'entrée, tel qu'une image, un scalaire, un audio, ou du texte, à l'instar des modèles de type \gls{t2i} tels que DALL·E 2 ou Stable Diffusion.
Deux méthodes existent actuellement pour permettre à des modèles de diffusion de générer des données conditionnées.
@ -654,7 +654,7 @@ On identifie alors:
\begin{figure}[h!]
\centering
\includegraphics[width=0.8\textwidth]{classifier-guidance.png}
\caption{Gradients du classficateur de la Classifier Guidance.}
\caption{Gradients du classificateur de la Classifier Guidance.}
\vspace*{-11pt}
\caption*{Source: \href{https://perceptron.blog/defusing-diffusion/}{Perceptron.blog, 2023}.}
\label{fig:classifier_guidance}
@ -677,7 +677,7 @@ On en déduit de \ref{eq:cfg_lerp}, que la distribution conditionnelle est une i
\begin{figure}[h!]
\centering
\includegraphics[width=0.8\textwidth]{classifier-free-guidance.png}
\caption{Conditionnement par Classifier-free Guidance.}
\caption{Gradients conditionnés et non conditionnés via la Classifier-Free Guidance.}
\vspace*{-11pt}
\caption*{Source: \href{https://perceptron.blog/defusing-diffusion/}{Perceptron.blog, 2023}.}
\label{fig:classifier_free_guidance}
@ -742,7 +742,7 @@ Dans notre cas d'application, nous pouvons conditionner sur les scalaires repré
\FloatBarrier
\glsunset{arm}
\subsection{\acrfull{arm}}
\subsection{\acrfull*{arm}}
\begin{figure}[h!]
\centering
@ -759,7 +759,7 @@ Les modèles auto-régressifs sont des méthodes de génération de séquences q
\FloatBarrier
\glsunset{nerf}
\subsection{\acrfull{nerf}}
\subsection{\acrfull*{nerf}}
\begin{figure}[h!]
\centering
@ -774,7 +774,7 @@ Les \glspl{nerf}~\cite{mildenhall_nerf_2020} représentent une autre famille de
Le principe des \glspl{nerf} est de modéliser une fonction de densité de rayon (ou "ray density function") qui caractérise l'intéraction de la lumière avec les objets de la scène. Cette fonction est ensuite utilisée pour estimer la couleur et la profondeur des rayons traversant la scène, permettant ainsi de générer des images photoréalistes.
Les \glspl{nerf} sont donc une alternative aux méthodes traditionnelles de reconstructions de scènes par résolution du problème inverse 3D. Cependant ces modèles peuvent aussi être utilisé conjointement avec d'autres réseau pour permettre d'obtenir des réseaux génératifs~\cite{nichol_point-e_2022,takikawa_neural_2021,nam_3d-ldm_2022}.
Les \glspl{nerf} sont donc une alternative aux méthodes traditionnelles de reconstructions de scènes par résolution du problème inverse 3D. Cependant ces modèles peuvent aussi être utilisé conjointement avec d'autres réseaux pour permettre d'obtenir des réseaux génératifs~\cite{nichol_point-e_2022,takikawa_neural_2021,nam_3d-ldm_2022}.
Dans notre cas, notre jeu de données n'est pas adapté à l'application des \glspl{nerf}, car cela nécessiterait un processus de prétraitement complexe de notre ensemble de données (comprenant la conversion de nos maillages/scènes en images via un moteur de rendu) ainsi qu'un post-traitement conséquent de nos résultats (utilisation du "marching cube" pour passer d'une représentation implicite à un maillage). Par conséquent, nous ne choisirons pas d'adopter cette approche. De plus, dans le contexte industriel, les outils destinés à la manipulation d'objets implicites ne sont pas encore suffisamment avancés pour être déployés en production.
@ -782,8 +782,8 @@ Dans notre cas, notre jeu de données n'est pas adapté à l'application des \gl
\chapter{Déroulement du stage}
Ce chapitre présente un aperçu détaillé du déroulement de mon stage de 6 mois (Du 21 Mars 2023 au 21 Septembre 2023) au sein de Safran.
Tout au long de cette période, j'ai travaillé en tant que Stagiaire Ingénieur de Recherche en Machine Learning au sein du département Safran Tech, dans la sous-équipe \gls{flex} de l'équipe \gls{mads} dans le département \gls{dst}, dont le but est de développer des outils de simulation et de modélisation pour les besoins de Safran.
J'ai été encadré par Xavier Roynard, Michel Alessandro Bucci et Brian Staber.
Tout au long de cette période, j'ai travaillé en tant que Stagiaire Ingénieur de Recherche en Machine Learning au sein du département Safran Tech, dans l'équipe \gls{flex} de l'unité de recherche \gls{mads} dans le département \gls{dst}, dont le but est de développer des outils de simulation et de modélisation pour les besoins de Safran.
J'ai été encadré par Xavier Roynard, Michele Alessandro Bucci et Brian Staber.
Je décrirai dans les prochaines sections les différentes étapes de mon stage, les tâches qui m'ont été confiées ainsi que les projets auxquels j'ai contribué.
@ -803,7 +803,7 @@ Au cours de cette période, j'ai également eu des discussions régulières avec
En parallèle de ma lecture de la littérature, j'ai entamé l'exploration des données fournies par Safran. J'ai acquis une compréhension des différents formats de données spécifiques utilisés par l'entreprise pour stocker les résultats des simulations numériques de mécaniques des fluides. De plus, j'ai appris à manipuler ces données en utilisant des outils tels que Paraview~\cite{ParaView}.
Le principal ensemble de données sur lequel j'ai travaillé pendant mon stage s'appelle Rotor37\_1200. Il s'agit d'un ensemble de données de simulation \gls{cfd} d'une des 37 pales d'une turbine d'un moteur d'avion. Cet ensemble de données contient 1200 échantillons, qui ont été créé via un processus d'optimisation consistant en l'exploration de paramètres en quête de la maximisation d'un critère de performance.
Le principal ensemble de données sur lequel j'ai travaillé pendant mon stage s'appelle Rotor37\_1200~\cite{mouriaux_nasa_2021}. Il s'agit d'un ensemble de données de simulation \gls{cfd} d'une des 37 aubes du compresseur d'un moteur d'avion. Cet ensemble de données contient 1200 échantillons, qui ont été créé via un processus d'optimisation consistant en l'exploration de paramètres en quête de la maximisation d'un critère de performance, visible sur la figure~\ref{fig:process-rotor37-1200}.
\begin{figure}[h!]
\centering
@ -819,7 +819,7 @@ Le principal ensemble de données sur lequel j'ai travaillé pendant mon stage s
\label{fig:example-rotor37-1200}
\end{figure}
Chaque aube du jeu de données est une déformation d'une aube nominale. Ainsi tous les maillages possèdent le même nombre de points et la même connectivité. Pour donner un ordre de grandeur, chaque maillage est constitué de 29773 points, 59328 triangles et 89100 arêtes.
Chaque aube du jeu de données est une déformation d'une aube nominale. Ainsi tous les maillages possèdent le même nombre de nœuds et la même connectivité. Pour donner un ordre de grandeur, chaque maillage est constitué de 29773 nœuds, 59328 triangles et 89100 arêtes.
Chaque échantillon est constitué de deux fichiers distincts. Le premier est un fichier au format .vtk qui contient le maillage de l'aube, comprenant les positions 3D, les normales et la connectivité de chaque point du maillage. Ce fichier .vtk inclut également les champs physiques associés à chaque point, tels que la température, la pression, etc. Le second fichier est un fichier .csv contenant des métadonnées globales spécifiques à l'échantillon, telles que les entrées et les sorties de la simulation \gls{cfd}. L'ensemble de ces fichiers pèsent environ 60 \gls{go} et sont stockés dans un dossier spécifique read-only sur le cluster de calcul de Safran.
@ -844,7 +844,7 @@ En complément de Rotor37\_1200, j'ai également effectué des travaux sur un en
\FloatBarrier
\section{Description de l'environnement de travail}
L'équipe de mes tuteurs est basée à Châteaufort, sur le plateau de Saclay, où se trouve le site de l'entreprise. J'ai réussi à trouver un logement dans le nord de Palaiseau, à environ 40 minutes de trajet en bus. En moyenne, le nombre d'employés présents sur le site s'élève à environ 500 personnes.
L'équipe de mes tuteurs est basée à Châteaufort, sur le plateau de Saclay, où se trouve le site de l'entreprise. J'ai réussi à trouver un logement dans le nord de Palaiseau, à environ 40 minutes de trajet en bus. En moyenne, le nombre d'employés présents sur le site s'élève à environ 1200 personnes.
Les locaux de l'entreprise se présentent sous la forme de vastes openspaces, partagés par un maximum d'une dizaine de personnes. Ils sont séparés par de grandes baies vitrées et répartis dans 3 bâtiments sur plusieurs étages. Les bureaux sont spacieux équipés d'au moins un grand écran, d'un clavier et d'une souris. Nous disposons également de salles de réunion, de salles de détente et d'une salle de sport.
@ -876,7 +876,7 @@ Nous avons ensuite étendu ces expérimentations à des architectures spécifiqu
\begin{figure}[h!]
\centering
{\Huge \calligra Fuck Rosetta}
\caption{Résultats d'un GraphVAE sur rotor37\_1200.}
\caption{Résultats d'un GraphVAE sur Rotor37\_1200.}
\label{fig:graphvar_results}
\end{figure}
@ -884,7 +884,7 @@ En effet, dans le contexte des graphes, les opérations de "upsampling" n'existe
Une première solution simple consistait en l'utilisation de une ou plusieurs couches denses (\glspl{mlp}) pour convertir le vecteur latent en un couple de matrices décrivant les positions et la connectivité des noeuds. Cependant, cette approche posait problème en raison de la taille des graphes que nous manipulions. En effet, avec des graphes de $n=3.10^4$ nœuds, cela impliquait une matrice de connectivité de taille $n^2 = 9.10^8$, ce qui faisait aisaiment exploser la complexité lorsque nous utilisions des couches denses.
Pour donner un ordre de grandeur, si l'on utilisai un espace latent de taille $8$, rien que pour prédire les positions 3D des points dans notre maillage (sans prendre en compte la connectivité), l'utilisation d'une seule couche dense impliquait déjà $8 \times 3.10^4 \times 3 = 7,2.10^6$ paramètres. Prédire la connectivité était tout simplement impossible, car il aurait fallu une couche dense avec plus de $8 \times (3.10^4)^2 = 7,2.10^9$ paramètres, ce qui dépassait largement les capacités de calcul de nos ressources GPU.
Pour donner un ordre de grandeur, si l'on utilisait un espace latent de taille $8$, rien que pour prédire les positions 3D des points dans notre maillage (sans prendre en compte la connectivité), l'utilisation d'une seule couche dense impliquait déjà $8 \times 3.10^4 \times 3 = 7,2.10^6$ paramètres. Prédire la connectivité était tout simplement impossible, car il aurait fallu une couche dense avec plus de $8 \times (3.10^4)^2 = 7,2.10^9$ paramètres, ce qui dépassait largement les capacités de calcul de nos ressources GPU.
Une seconde solution consitait à utiliser une architecture plus intelligente, telle que Graph U-Net~\cite{gao_graph_2019}. Cette approche permettait d'éviter l'utilisation de couches denses dans le décodeur grâce à des connexions résiduelles (skip connections). Cependant, ce faisant l'information ne passait pas entièrement par l'espace latent entre le décodeur et l'encodeur. Par conséquent, il était impossible de créer un modèle génératif complet avec cette architecture, puisqu'une partie de l'information pour générer des échantillons était compris dans les skip connections.
@ -895,21 +895,21 @@ Une seconde solution consitait à utiliser une architecture plus intelligente, t
\label{fig:graphunet_archi}
\end{figure}
Face aux difficultés rencontrées avec les réseaux basés sur les VAE et les limitations de l'architecture Graph U-Net, nous avons pris la décision de mettre de côté ces approches. Et plus largement puisque la connectivité de nos graphes est "locale" (les noeuds des nos maillages sont connectés à leurs voisins proches dans l'espace), nous avons décidé de nous orienter vers des approches basées uniquement sur les positions des noeuds. En effet, la connectivité d'un nuage de points peut facilement être retrouvé via diverses techniques~\cite{peng_shape_2021,sulzer_deep_2022,andrade-loarca_poissonnet_2023}.
Face aux difficultés rencontrées avec les réseaux basés sur les VAE et les limitations de l'architecture Graph U-Net, nous avons pris la décision de mettre de côté ces approches. Et plus largement puisque la connectivité de nos graphes est "locale" (les noeuds des nos maillages sont connectés à leurs voisins proches dans l'espace), nous avons décidé de nous orienter vers des approches basées uniquement sur les positions des noeuds. En effet, la connectivité d'un nuage de points peut être retrouvé via diverses techniques~\cite{peng_shape_2021,sulzer_deep_2022,andrade-loarca_poissonnet_2023}.
\FloatBarrier
\subsection{Test de PointFlow}
L'approche la plus connue pour utilise des \glspl{nf} sur des nuages de points est PointFlow~\cite{yang_pointflow_2019}. Adapter l'implémentation originale afin d'y intégrer l'utilisation de Rotor37\_1200 s'est avéré être une tâche aisée, entraînant des résultats supérieurs à ceux obtenus par GraphVAE, bien que sans être exceptionnels. La structure du code s'est cependant révélée relativement difficile à manipuler pour toute autre tâche plus complexe (comme souvent avec du code académique).
L'approche la plus connue pour utiliser des \glspl{nf} sur des nuages de points est PointFlow~\cite{yang_pointflow_2019}. Adapter l'implémentation originale afin d'y intégrer l'utilisation de Rotor37\_1200 s'est avéré être une tâche aisée, entraînant des résultats supérieurs à ceux obtenus par GraphVAE, bien que sans être exceptionnels. La structure du code s'est cependant révélée relativement difficile à manipuler pour toute autre tâche plus complexe (comme souvent avec du code académique).
\begin{figure}[h!]
\centering
{\Huge \calligra Fuck Rosetta}
\caption{Résultats de PointFlow sur rotor37\_1200.}
\caption{Résultats de PointFlow sur Rotor37\_1200.}
\label{fig:pointflow_results}
\end{figure}
PointFlow a néanmoins apporté une contribution significative à la création d'un dataset de référence pour la génération de nuages de points, qui est actuellement exploité par de multiples articles de recherche. Ce jeu de données repose sur ShapeNet~\cite{shapenet2015}, un ensemble de données dédiée à une variété d'objets en trois dimensions (tels que des avions, des chaises, des voitures, etc.), modifié par Furthest Point Sampling pour contenir uniquement 2048 points par nuages.
PointFlow a néanmoins apporté une contribution significative à la création d'un dataset de référence ShapeNet15K pour la génération de nuages de points, qui est actuellement exploité par de multiples articles de recherche. ShapeNet15K repose sur ShapeNet~\cite{shapenet2015}, un ensemble de données dédiée à une variété d'objets en trois dimensions (tels que des avions, des chaises, des voitures, etc.), modifié par Furthest Point Sampling pour contenir uniquement 2048 points par nuages.
De plus, PointFlow a joué un rôle essentiel dans l'implémentation de différentes métriques et distances en CUDA, telles que la \gls{cd}, l'\gls{emd}, et bien d'autres.
\begin{figure}[h!]
@ -921,8 +921,6 @@ De plus, PointFlow a joué un rôle essentiel dans l'implémentation de différe
Il existe cependant de nombreux autres datasets 3D, tels que ModelNet\cite{wu_3d_2015}, KITTI~\cite{liao_kitti-360_2022}, S3DIS~\cite{armeni_cvpr16} ou encore le récent Objaverse~\cite{deitke_objaverse_2022} et sa version XL~\cite{deitke_objaverse-xl_2023}.
% TODO: parler de rotor37\_1200\_mmd2048
\FloatBarrier
\subsection{Présentation de PointNet}
@ -938,7 +936,7 @@ Par la suite, une avancée significative du modèle PointNet a conduit à l'éme
\end{figure}
\FloatBarrier
\subsection{Présentation des \glspl{kpconv}}
\subsection{Présentation des \acrfullpl*{kpconv}}
\begin{figure}[h!]
\centering
@ -957,7 +955,7 @@ Dans notre situation, nous avons la possibilité d'opter pour le réseau KP-FCNN
\begin{figure}[h!]
\centering
\includegraphics[width=0.8\textwidth]{kpfcnn-results.png}
\caption{Résultats de KP-FCNN sur rotor37\_1200.}
\caption{Résultats de KP-FCNN sur Rotor37\_1200.}
\label{fig:kpfcnn_results}
\end{figure}
@ -967,7 +965,7 @@ Autre point négatif, le decodeur de KP-FCNN étant composé de \glspl{mlp}, il
% TODO verif le nb de params
\FloatBarrier
\subsection{Présentation des \glspl{pvconv}}
\subsection{Présentation des \acrfullpl*{pvconv}}
\begin{figure}[h!]
\centering
@ -978,8 +976,8 @@ Autre point négatif, le decodeur de KP-FCNN étant composé de \glspl{mlp}, il
Une seconde alternative aux opérations de convolutions et d'aggregation de PointNet++ sont les \glspl{pvconv}~\cite{liu_point-voxel_2019}. Les \glspl{pvconv} proposent d'utiliser des voxels afin de retomber sur des structures régulières, permettant ainsi d'effectuer efficacement des convolutions classiques en 3D. Par conséquent, une \gls{pvconv} est composée de deux branches distinctes. La première branche, appelée "coarse-grained", transforme les points en voxels, applique des convolutions, puis reconvertit les voxels en points à l'aide d'une interpolation trilinéaire. La seconde branche, nommée "fine-grained", est constituée de shared \glspl{mlp}. Ces deux branches sont ensuite combinées par sommation.
Par conséquent, PVCNN peut être considéré comme l'équivalent de PointNet, tandis que PVCNN++ correspond à PointNet++. Cpendant, ces deux réseau basés sur de \glspl{pvconv} se distinguent par le maintien d'un nombre constant de points dans chaque couche du réseau. Les benchmarks démontrent que PVCNN++ est au moins autant performant que PointNet++, tout en surpassant nettement ce dernier en termes d'efficacité globale. Cependant, il est important de noter que l'implémentation de PVCNN++ est assez complexe et nécessite l'utilisation de plusieurs modules CUDA (les opérations de voxelization et de dévoxelization étant impossible à écrire en PyTorch classique).
Une version légèrement améliorée de gls{pvconv}, appelée gls{spvconv}, a également été développée en utilisant des opérations de convolution éparses. En effet, on observe empiriquement que les grilles de voxels sont fréquemment remplies en moyenne à hauteur de 60\%. Cependant, ces améliorations nécessitent l'utilisation de code CUDA très ésotérique.
Par conséquent, PVCNN peut être considéré comme l'équivalent de PointNet, tandis que PVCNN++ correspond à PointNet++. Cependant, ces deux réseaux basés sur des \glspl{pvconv} se distinguent par le maintien d'un nombre constant de points dans chaque couche du réseau. Les benchmarks démontrent que PVCNN++ est au moins aussi performant que PointNet++, tout en surpassant nettement ce dernier en termes d'efficacité globale. Cependant, il est important de noter que l'implémentation de PVCNN++ est assez complexe et nécessite l'utilisation de plusieurs modules CUDA (les opérations de voxelization et de dévoxelization étant impossible à écrire en PyTorch classique).
Une version légèrement améliorée de \gls{pvconv}, appelée \gls{spvconv}, a également été développée en utilisant des opérations de convolution éparses. En effet, on observe empiriquement que les grilles de voxels sont fréquemment remplies en moyenne à hauteur de 60\%. Cependant, ces améliorations nécessitent l'utilisation de code CUDA très ésotérique.
\FloatBarrier
\subsection{Test de PVD}
@ -991,12 +989,12 @@ Une version légèrement améliorée de gls{pvconv}, appelée gls{spvconv}, a é
\label{fig:pvd_archi}
\end{figure}
Le premier papier ayant utilisé une architecture du type PVCNN++ pour la générations de nuages de point est PVD~\cite{zhou_3d_2021}. Ce réseau utilise \gls{ddpm} et travaille directement sur le nuage de points. Si l'on récupère l'implémentation des auteurs et que l'on la modifie pour utiliser rotor37\_1200 on obtient de très bon résultat. Cependant, une bonne partie de la codebase étant basé sur celle de PVCNN++ et de PointFlow, celle-ci est tout aussi difficile à modifier.
Le premier papier ayant utilisé une architecture du type PVCNN++ pour la générations de nuages de point est PVD~\cite{zhou_3d_2021}. Ce réseau utilise \gls{ddpm} et travaille directement sur le nuage de points. Si l'on récupère l'implémentation des auteurs et que l'on la modifie pour utiliser Rotor37\_1200 on obtient de très bon résultat. Cependant, une bonne partie de la codebase étant basé sur celle de PVCNN++ et de PointFlow, celle-ci est tout aussi difficile à modifier.
\begin{figure}[h!]
\centering
\includegraphics[width=0.8\textwidth]{pvd-results.png}
\caption{Résultats de PVD sur rotor37\_1200.}
\caption{Résultats de PVD sur Rotor37\_1200.}
\label{fig:pvd_results}
\end{figure}
@ -1022,27 +1020,27 @@ Le processus de diffusion a lieu à la fois sur le vecteur latent et sur le nuag
\begin{figure}[h!]
\centering
{\Huge \calligra Fuck Rosetta}
\caption{Résultats de LION sur rotor37\_1200.}
\caption{Résultats de LION sur Rotor37\_1200.}
\label{fig:lion_results}
\end{figure}
\FloatBarrier
\subsection{Synthèse des méthodes}
Les résultats antérieurs démontrent la faisabilité de la résolution de notre problématique. Cependant, la plupart des approches précédentes se concentrent sur la génération non conditionnée ou utilisent des one-hot vectors pour le conditionnement sur des classes discrètes. Étant donné notre objectif est conditionner à l'aide de vecteurs scalaires, et étant donné que les implémentations précédemment présentées s'avèrent complexes à manipuler, nous avons pris la décision de développer notre propre mise en œuvre. En outre, il convient de noter que les modèles précédemment proposés sont souvent caractérisés par un nombre élevé de paramètres, ce qui s'avère excessif pour notre problématique, laquelle demeure comparativement plus simple.
Les résultats antérieurs démontrent la faisabilité de la résolution de notre problématique. Cependant, la plupart des approches précédentes se concentrent sur la génération non conditionnée ou utilisent des one-hot vectors pour le conditionnement sur des classes discrètes. Étant donné que notre objectif est de conditionner à l'aide de vecteurs scalaires, et étant donné que les implémentations précédemment présentées s'avèrent complexes à manipuler, nous avons pris la décision de développer notre propre mise en œuvre. En outre, il convient de noter que les modèles précédemment proposés sont souvent caractérisés par un nombre élevé de paramètres, ce qui s'avère excessif pour notre problématique, laquelle demeure comparativement plus simple.
Nous avons décidé d'adopter une approche reposant sur la réduction de dimension, via les \gls{ldm}. Pour ce faire, il était crucial de choisir un modèle capable de transformer ou de réduire nos données d'entrée. Dans cette optique, nous avons opté pour une première étape de réduction par \gls{pca}. Il convient d'ailleurs de souligner que cette approche présente l'avantage d'être non paramétrique, éliminant ainsi la nécessité d'un processus d'optimisation.
\begin{figure}[h!]
\centering
\includegraphics[width=0.5\textwidth]{pca_cumsum_1200.png}\includegraphics[width=0.5\textwidth]{pca_cumsum_11000.png}
\caption{Somme cumulative des modes de la PCA. Gauche: rotor37\_1200. Droite: rotor37\_11000.}
\caption{Somme cumulative des modes de la PCA. Gauche: Rotor37\_1200. Droite: Rotor37\_11000.}
\label{fig:pca_cumsum}
\end{figure}
À partir de la Figure \ref{fig:pca_cumsum}, nous pouvons déduire qu'environ 30 modes sont nécessaires pour représenter approximativement 90\% de l'information présente dans le jeu de données rotor37\_1200. Cependant, il est à noter que cette compression s'avère moins efficace pour le jeu de données rotor37\_11000, ce qui est attendu étant donné que les données présentent moins de similarités. Afin de résoudre les problèmes de compression associés au jeu de données rotor37\_11000, nous avons exploré la possibilité de remplacer la méthode \gls{pca} par une \gls{pod}. Malgré une meilleure capacité de compression obtenue par la \gls{pod}, cette approche s'est révélée plus coûteuse en termes de calcul et moins adaptée aux autres techniques que nous prévoyons d'utiliser. En conséquence, pour le moment, nous avons décidé de maintenir l'utilisation de la \gls{pca} pour l'encodeur et de la ``\gls{pca} inverse'' pour le decodeur de notre \gls{ldm}.
À partir de la Figure \ref{fig:pca_cumsum}, nous pouvons déduire qu'environ 30 modes sont nécessaires pour représenter approximativement 99\% de l'information présente dans le jeu de données Rotor37\_1200. Cependant, il est à noter que cette compression s'avère moins efficace pour le jeu de données Rotor37\_11000, ce qui est attendu étant donné que les données présentent moins de similarités. Afin de résoudre les problèmes de compression associés au jeu de données Rotor37\_11000, nous avons exploré la possibilité de remplacer la méthode \gls{pca} par une \gls{pod}. Malgré une meilleure capacité de compression obtenue par la \gls{pod}, cette approche s'est révélée plus coûteuse en termes de calcul et moins adaptée aux autres techniques que nous prévoyons d'utiliser. En conséquence, pour le moment, nous avons décidé de maintenir l'utilisation de la \gls{pca} pour l'encodeur et de la ``\gls{pca} inverse'' pour le decodeur de notre \gls{ldm}.
Dans le cas de rotor37\_1200, cela signifie que nous passons de 30000 points, chacun comportant à la fois leurs coordonnées spatiales et leurs normales (soit un total de 30000x6 scalaires), à un vecteur de taille 30.
Dans le cas de Rotor37\_1200, cela signifie que nous passons de 30000 points, chacun comportant à la fois leurs coordonnées spatiales et leurs normales (soit un total de 30000x6 scalaires), à un vecteur de taille 30.
Ce vecteur étant petit, nous pouvons donc utiliser un simple \gls{mlp} pour prédire le bruit dans le processus de diffusion. De plus, pour conditionner ce réseau en fonction de l'étape temporelle de la diffusion, nous pouvons simplement additionner les embeddings de pas de temps à chaque couche du réseau.
Le réseau résultant contient à peine plus de 10000 paramètres, ce qui est considérablement inférieur aux autres modèles précédemment présentés.
Par conséquent, ce réseau est très facile à manipuler et à entraîner, mais il présente l'inconvénient d'être spécialisé sur le jeu de données utilisé pour construire la \gls{pca}.
@ -1050,11 +1048,11 @@ Cependant, dans le contexte industriel, cet inconvénient est moins préoccupant
\FloatBarrier
\glsunset{cfg}
\subsection{Conditionnement par \acrfull{cfg}}
\subsection{Conditionnement par \acrfull*{cfg}}
Pour conditionner notre processus de diffusion, nous avons opté pour l'utilisation de la \gls{cfg}, avec une probabilité de $p_\text{uncond}$ pour le dropout des embeddings. Pour intégrer les embeddings de conditionnement dans notre réseau, nous avons suivi une approche similaire à celle utilisée pour les embeddings de pas de temps. Les modifications apportées modifient très peu la surface de coût du réseau, et nous sommes désormais en mesure de générer des aubes tant non conditionnées que conditionnées, en fonction d'un vecteur scalaire de performances. Les résultats visuels des générations demeurent satisfaisants. Toutefois, il est difficile de déterminer visuellement si les aubes conditionnées générées respectent effectivement les critères de conditionnement qui leur sont assignés.
La figure \ref{fig:pca_ldm_results} montre les résultats d'un \gls{ldm} \gls{pca} sur rotor37\_1200:
La figure \ref{fig:pca_ldm_results} montre les résultats d'un \gls{ldm} \gls{pca} sur Rotor37\_1200:
\begin{itemize}
\item Blanc: génération non conditionnée
\item Rouge: génération conditionnée, isentropic\_effiency=1, $\gamma=7$
@ -1066,13 +1064,13 @@ On observe qu'à mesure que le facteur de guidage $\gamma$ augmente, certaines p
\begin{figure}[h!]
\centering
\includegraphics[width=0.8\textwidth]{ldm-pca-guidance.png}
\caption{Résultats d'un \gls{ldm} \gls{pca} sur rotor37\_1200, pour plusieurs valeurs de $\gamma$.}
\caption{Résultats d'un \gls{ldm} \gls{pca} sur Rotor37\_1200, pour plusieurs valeurs de $\gamma$.}
\label{fig:pca_ldm_results}
\end{figure}
\FloatBarrier
\glsunset{gp}
\subsection{Vérification par \acrfull{gp}}
\subsection{Vérification par \acrfull*{gp}}
Dans cette optique, il devient impératif de mettre en place un moyen de vérification des propriétés physiques des aubes générées et de les comparer aux critères de conditionnement. Bien que l'approche la plus simple consisterait à soumettre nos générations à un simulateur \gls{cfd}, cette méthode s'avère inenvisageable en raison de sa lenteur.
@ -1087,21 +1085,21 @@ Une solution viable consiste à entraîner un modèle de régression capable d'
\label{fig:gp_regression}
\end{figure}
Les \glspl{gp} sont des modèles probabilistes non paramétriques qui trouvent leur application dans des tâches de régression, de classification ou de prédiction. Ils sont particulièrement adaptés aux tâches de régression, car ils sont capables de fournir des estimations de l'incertitude associée à leurs prédictions. Cette mesure d'incertitude se révèle particulièrement précieuse pour la vérification de nos aubes générées, car elle permet d'évaluer la validité de nos générations en fournissant une estimation de la fiabilité de ces dernières.
Les \glspl{gp} sont des modèles probabilistes non paramétriques qui trouvent leur application dans des tâches de régression ou de classification. Ils sont particulièrement adaptés aux tâches de régression, car ils sont capables de fournir des estimations de l'incertitude associée à leurs prédictions. Cette mesure d'incertitude se révèle particulièrement précieuse pour la vérification de nos aubes générées, car elle permet d'évaluer la validité de nos générations en fournissant une estimation de la fiabilité de ces dernières.
Ainsi si l'on entrainer un \gls{gp} sur des couples (nuage de points, critère de performance), on peut ensuite utiliser ce \gls{gp} pour vérifier si nos nuages de points générés sont corrects. En effet, si l'on génère un nuage de points, et que l'on obtient un critère de performance très différent de celui attendu, alors on peut en déduire que notre génération est incorrecte.
Ainsi si l'on entraine un \gls{gp} sur des couples (nuage de points, critère de performance), on peut ensuite utiliser ce \gls{gp} pour vérifier si nos nuages de points générés sont corrects. En effet, si l'on génère un nuage de points, et que l'on obtient un critère de performance très différent de celui attendu, alors on peut en déduire que notre génération est incorrecte.
\begin{figure}[h!]
\centering
\includegraphics[width=1\textwidth]{gp_train_30_pca.png}
\caption{Entrainement d'un \gls{gp} sur 30 modes PCA de rotor37\_1200.}
\caption{Entrainement d'un \gls{gp} sur 30 modes PCA de Rotor37\_1200.}
\label{fig:gp_train_30_pca}
\end{figure}
% \begin{figure}[h!]
% \centering
% \includegraphics[width=1\textwidth]{gp_train_32_pod.png}
% \caption{Entrainement d'un \gls{gp} sur 32 modes POD de rotor37\_1200}
% \caption{Entrainement d'un \gls{gp} sur 32 modes POD de Rotor37\_1200}
% \end{figure}
\begin{figure}[h!]

View file

@ -1245,7 +1245,7 @@ Publisher: Multidisciplinary Digital Publishing Institute},
month = jul,
year = {2023},
note = {arXiv:2307.05663 [cs]},
keywords = {Computer Science - Artificial Intelligence, Computer Science - Computer Vision and Pattern Recognition},
keywords = {Computer Science - Computer Vision and Pattern Recognition, Computer Science - Artificial Intelligence},
file = {arXiv Fulltext PDF:/home/laurent/Zotero/storage/3CPCAZDV/Deitke et al. - 2023 - Objaverse-XL A Universe of 10M+ 3D Objects.pdf:application/pdf;arXiv.org Snapshot:/home/laurent/Zotero/storage/JTXUJPK5/2307.html:text/html},
}
@ -1261,6 +1261,24 @@ Publisher: Multidisciplinary Digital Publishing Institute},
month = dec,
year = {2022},
note = {arXiv:2212.08051 [cs]},
keywords = {Computer Science - Artificial Intelligence, Computer Science - Computer Vision and Pattern Recognition, Computer Science - Graphics, Computer Science - Robotics},
keywords = {Computer Science - Computer Vision and Pattern Recognition, Computer Science - Graphics, Computer Science - Artificial Intelligence, Computer Science - Robotics},
file = {arXiv Fulltext PDF:/home/laurent/Zotero/storage/3C3TW2HB/Deitke et al. - 2022 - Objaverse A Universe of Annotated 3D Objects.pdf:application/pdf;arXiv.org Snapshot:/home/laurent/Zotero/storage/Q9MANWHX/2212.html:text/html},
}
@incollection{mouriaux_nasa_2021,
address = {Cham},
series = {Notes on {Numerical} {Fluid} {Mechanics} and {Multidisciplinary} {Design}},
title = {{NASA} {Rotor} 37},
isbn = {978-3-030-62048-6},
url = {https://doi.org/10.1007/978-3-030-62048-6_20},
abstract = {The NASA Rotor 37 is an isolated transonic axial compressor rotor. This case was initially included in a wider research program to cover a range of design parameters typical of high pressure compressor inlet stage of aircraft engines. Most numerical studies fail at predicting with accuracy the overall performance, e.g., the adiabatic efficiency and the losses distribution downstream of the blade. This case presents indeed several phenomena which are challenging to capture: laminar-to-turbulent transition on the blade, interaction of the boundary layer with the shock, secondary and tip-leakage flows. If LES appears a more adequate tool than RANS to predict such inherently unsteady phenomena, it remains delicate, especially because wall modeling is required. This section presents results obtained by Safran and UniBG of WMLES using the Discontinuous Galerkin approach.},
language = {en},
urldate = {2023-08-24},
booktitle = {{TILDA}: {Towards} {Industrial} {LES}/{DNS} in {Aeronautics}: {Paving} the {Way} for {Future} {Accurate} {CFD} - {Results} of the {H2020} {Research} {Project} {TILDA}, {Funded} by the {European} {Union}, 2015 -2018},
publisher = {Springer International Publishing},
author = {Mouriaux, S. and Bassi, F. and Colombo, A. and Ghidoni, A.},
editor = {Hirsch, Charles and Hillewaert, Koen and Hartmann, Ralf and Couaillier, Vincent and Boussuge, Jean-Francois and Chalot, Frederic and Bosniakov, Sergey and Haase, Werner},
year = {2021},
doi = {10.1007/978-3-030-62048-6_20},
pages = {533--544},
}