\documentclass[ 11pt, a4paper, twoside, openany ]{book} % Packages \usepackage{fontspec} \usepackage{libertinus-otf} \usepackage[a4paper, hmargin=2cm, vmargin=3cm]{geometry} \usepackage{graphicx} \usepackage{microtype} \usepackage{amsmath} \usepackage[numbers]{natbib} \usepackage[french]{babel} \usepackage{glossaries} \usepackage{nomencl} \usepackage{caption} % pdfx loads both hyperref and xcolor internally % \usepackage{hyperref} % \usepackage{xcolor} \usepackage[a-3u]{pdfx} % We use \hypersetup to pass options to hyperref \hypersetup{ colorlinks = true, breaklinks = true, } % paragraph settings \setlength{\parindent}{0cm} \setlength{\parskip}{7pt}% % assets path \graphicspath{{../assets/}} % header and footer settings \usepackage{lastpage} \usepackage{fancyhdr} \pagestyle{fancy} \renewcommand{\headrulewidth}{0pt} \fancyhf{} \cfoot{} \rfoot{\hypersetup{hidelinks}\thepage/\pageref{LastPage}} \title{ \huge \textbf{Rapport de Projet de Fin d'Études} } \author{ Laurent Fainsin \\ {\tt laurent@fainsin.bzh} } \date{ \vspace{10.5cm} Département Sciences du Numérique \\ Troisième année \\ 2022 — 2023 } \newacronym{ssa}{Safran S.A.}{Safran Société Anonyme} \newacronym{n7}{ENSEEIHT}{École nationale supérieure d'électrotechnique, d'électronique, d'informatique, d'hydraulique et des télécommunications} \newacronym{pfe}{PFE}{Projet de Fin d'Études} \newacronym{gnn}{GNN}{Graph Neural Networks} \newacronym{cnn}{CNN}{Convolutional Neural Network} \newacronym{arm}{ARM}{Auto-Regressive Model} \newacronym{nf}{NF}{Normalizing Flows} \newacronym{ldm}{LDM}{Latent Diffusion Models} \newacronym{ddpm}{DDPM}{Denoising Diffusion Probabilistic Models} \newacronym{vae}{VAE}{Variational Auto-Encoder} \newacronym{gan}{GAN}{Generative Adversarial Network} \newacronym{nerf}{NeRF}{Neural Radiance Fields} \newacronym{ml}{ML}{Machine Learning} \newacronym{dl}{DL}{Deep Learning} \newacronym{ai}{AI}{Artificial Intelligence} \newacronym{pca}{PCA}{Principal Component Analysis} \newacronym{pde}{PDE}{Partial Differential Equation} \newacronym{cfd}{CFD}{Computational Fluid Dynamics} \newacronym{ann}{ANN}{Artificial Neural Network} \newacronym{mlp}{MLP}{Multi-Layer Perceptron} \newacronym{relu}{ReLU}{Rectified Linear Unit} \newacronym{mse}{MSE}{Mean Squared Error} \newacronym{mae}{MAE}{Mean Absolute Error} \newacronym{rmse}{RMSE}{Root Mean Squared Error} \newacronym{mape}{MAPE}{Mean Absolute Percentage Error} \makenoidxglossaries % \nomenclature{DDPM}{test} % \makenomenclature \begin{document} \frontmatter \vbox{ \centering \includegraphics[width=5cm]{inp_n7.jpg} \hspace{1cm} \includegraphics[width=5cm]{safran_logo.png} \vspace{2cm} \maketitle } { \thispagestyle{empty} \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 \gls{ssa} 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. \clearpage { \hypersetup{hidelinks} \addcontentsline{toc}{chapter}{Table des matières} \tableofcontents } \clearpage { \hypersetup{hidelinks} \addcontentsline{toc}{chapter}{Table des figures} \listoffigures } \clearpage { \hypersetup{hidelinks} \addcontentsline{toc}{chapter}{Glossaire} \printnoidxglossaries } % { % \hypersetup{hidelinks} % \addcontentsline{toc}{chapter}{Nomenclature} % \printnomenclature % } % \listoftables % \addcontentsline{toc}{chapter}{Liste des tableaux} \mainmatter %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \chapter{Introduction} \begin{figure}[h] \centering \includegraphics[width=16cm]{aube.jpg} \caption{Aubes du moteur Leap-1A} \end{figure} 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. Malheureusement, ce processus de conception itératif présente deux limites: \begin{itemize} \item Le coût de calcul d'une simulation numérique de type \gls{cfd} est lourd, plusieurs heures sont nécessaires pour un unique calcul. \item Le nombre de degrés de liberté pour la géométrie d'un profil complexe discrétisée avec un maillage non structuré est important, ce qui rend impossible l'exploration complète de l'espace de recherche de la solution optimale. \end{itemize} \smallskip Les approches d'optimisation assistées par surfaces de réponse permettent de répondre partiellement à ces difficultés. Cependant cette stratégie admet deux limitations intrinsèques: \begin{itemize} \item Elles nécessitent un long de travail de paramétrisation. \item Elles souffrent grandement du fléau de la dimension, i.e. la taille des problèmes considérés est généralement limitée. \end{itemize} \smallskip En particulier, une représentation latente parcimonieuse de la géométrie faciliterait l'exploration de l'espace de recherche et l'utilisation de métamodèles classiques pour la prédiction des quantités d'intérêt. Récemment, les modèles génératifs profonds comme les \gls{vae} ou les \gls{gan} ont été appliqués avec succès à des données structurées (typiquement des images). Ceux-ci permettent de construire un espace latent représentatif d'un jeu de données donné et de générer de nouveaux échantillons qui partagent des caractéristiques importantes du jeu de données d'entraînement. Cependant, dans le cas de la simulation numérique, les données prennent souvent la forme de graphes en raison de l'utilisation de maillages pour représenter les surfaces pièces à concevoir. Dans le contexte d'une application industrielle, il est donc crucial d'adapter les modèles susmentionnés afin de pouvoir utiliser des données non structurées en entrée. Les \gls{gnn} permettent de traiter des données non structurées telles que des maillages ou des nuages de points. Différentes solutions pour ont été proposées dans la littérature pour réaliser des convolutions et agrégations sur graphes ou nuages de points. Cependant, peu d'entre elles conviennent à l'application des réseaux sur graphes sur des données générées par des simulations numériques. Le but de ce stage est d'évaluer le potentiel de ces nouvelles méthodes sur des jeux de données réalisés en internes et représentatifs pour \gls{ssa}. Et éventuellement de proposer des améliorations spécifiques aux maillages utilisés en simulations numériques. L'étude vise tout d'abord à étudier la bibliographie disponible d'un côté sur les modèles génératifs et d'un autre sur les réseaux convolutionnels sur graphes. L'objectif est, dans une première phase, de faire un benchmark des différentes solutions de modèles génératifs sur graphe de type \gls{vae} et \gls{gan} afin de créer une représentation latente des géométries d'aubes 3D. Pour cela un dataset avec quelques milliers d'échantillons d'aubes 3D et leurs performances aérodynamique est disponible à \gls{ssa}. Le modèle résultant sera ensuite testé pour générer de nouvelles géométries et pour prédire les quantités d'intérêt par le biais de métamodèles classiques. Enfin, si l'avancement sur les premières tâches le permet, d'autres modèles génératifs peuvent être considérés comme le \gls{nf} ou les \gls{ldm}. \chapter{État de l'art} 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. 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 présentées ici 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. \cite{peng_shape_2021} \cite{sulzer_deep_2022} \glsreset{gnn} \section{\gls{gnn}} \subsection{Définition} 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. Les graphes permettent par exemple de représenter de manière intuitive des réseaux de communication, des réseaux sociaux, des molécules ou encore des maillages. Les graphes sont donc une modalité de données très commune dans le domaine de l'ingénierie. \begin{figure}[h] \centering \includegraphics[width=14cm]{example-graphs.jpg} \caption{Exemple de graphes} \vspace*{-11pt} \caption*{Source: \href{https://blogs.nvidia.com/blog/2022/10/24/what-are-graph-neural-networks/}{NVIDIA, 2022}} \label{fig:graph_example} \end{figure} De manière plus générale, les graphes peuvent être vu comme une généralisation des données structurées comme les images ou les séries temporelles. En effet, les graphes peuvent être vus comme des données structurées où les relations entre les entités sont définies par la position des entités dans l'espace ou dans le temps. Les graphes peuvent donc être utilisés pour représenter des données structurées, mais aussi des données non structurées comme des maillages ou des nuages de points. Les \gls{gnn} sont une famille de modèles qui permettent de traiter ce type de structures. Ces modèles sont basés sur des opérations de convolution et d'agrégation, similairement aux opérations de convolution et de pooling utilisées dans les réseaux de neurones classiques pour les données structurées comme les images. Des examples d'application de ces réseaux sont la classification de documents, la détection de fraude, la génération de molécules ou des systèmes de recommandation. \cite{velickovic_graph_2018} \cite{gao_graph_2019} \cite{brody_how_2022} \cite{kipf_semi-supervised_2017} \cite{qi_pointnet_2017} \cite{qi_pointnet_2017-1} \section{Modèles génératifs} Les modèles génératifs sont une famille de modèles qui permettent de générer de nouvelles données d'une distribution de données au préalablement apprise. Ces modèles sont très utilisés dans le domaine de l'apprentissage automatique pour générer des images, du texte ou encore de la musique. Ces modèles sont encore relativement peu utilisés dans le domaine de l'ingénierie pour générer des pièces industrielles. Il existe plusieurs sous familles de modèles génératifs, chacune basées sur des principes différents, possédant ainsi des avantages et des inconvénients. Il est donc important de bien comprendre les différences entre ces modèles pour pouvoir choisir le modèle le plus adapté à la problématique. \begin{figure} \centering \includegraphics[width=14cm]{generative-overview.png} \caption{Principales familles de modèles génératifs} \vspace*{-11pt} \caption*{Source: \href{https://lilianweng.github.io/posts/2021-07-11-diffusion-models/}{Lilian Weng, 2021}} \label{fig:generative_models} \end{figure} \cite{faez_deep_2020} \cite{guo_systematic_2022} \cite{zhu_survey_2022} \glsreset{vae} \subsection{\gls{vae}} \cite{burgess_understanding_2018} \cite{simonovsky_graphvae_2018} \cite{kingma_auto-encoding_2022} \cite{kipf_variational_2016} \cite{alemi_deep_2019} \cite{shah_auto-decoding_2020} \cite{doersch_tutorial_2021} \cite{yacoby_failure_2021} \cite{kim_setvae_2021} \cite{salha-galvan_contributions_2022} \cite{higgins_beta-vae_2022} \glsreset{gan} \subsection{\gls{gan}} \cite{goodfellow_generative_2014} \cite{salimans_improved_2016} \cite{arjovsky_towards_2017} \cite{arjovsky_wasserstein_2017} \glsreset{arm} \subsection{\gls{arm}} \cite{nash_polygen_2020} \cite{liao_efficient_2020} \glsreset{nf} \subsection{\gls{nf}} \cite{su_f-vaes_2018} \cite{yang_pointflow_2019} \glsreset{ldm} \subsection{\gls{ldm}} \cite{song_generative_2020} \cite{thomas_kpconv_2019} \cite{tang_searching_2020} \cite{liu_point-voxel_2019} \cite{zhou_3d_2021} \cite{nguyen_point-set_2021} \cite{zeng_lion_2022} \cite{nichol_point-e_2022} \glsreset{nerf} \subsection{\gls{nerf}} \cite{takikawa_neural_2021} \cite{nam_3d-ldm_2022} \chapter{Déroulement du stage} \section{Lecture de la littérature} \section{Prise en main des données} \section{Test de l'état de l'art} \section{Réimplementation de l'état de l'art} \section{Struggle, send help pls} \chapter{Conclusion} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \appendix %% ajouter les annexes ici \backmatter \nocite{*} \addcontentsline{toc}{chapter}{Bibliographie} \bibliography{zotero} \bibliographystyle{plainnat} \end{document}