chef's kiss

This commit is contained in:
Laureηt 2023-08-29 15:20:56 +02:00
parent bec9e7ab0f
commit 2d2cdabdf6
Signed by: Laurent
SSH key fingerprint: SHA256:kZEpW8cMJ54PDeCvOhzreNr4FSh6R13CMGH/POoO8DI

View file

@ -156,6 +156,7 @@
\newacronym{cao}{CAO}{Conception Assistée par Ordinateur}
\newacronym{edp}{EDP}{Équation aux Dérivées Partielles}
\newacronym{rl}{RL}{Reinforcement Learning}
% \newglossary{symbols}{sym}{sbl}{Notations mathématiques et symboles}
@ -190,6 +191,8 @@
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.
Je tiens à remercier ma famille pour le soutien qu'elle m'a apporté tout au long de mon stage et plus généralement dans ma vie.
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.
}
@ -238,6 +241,8 @@ Dans le secteur des moteurs destinés aux avions civils, militaires et hélicopt
\item En ce qui concerne les roues et les freins: Collins Aerospace, Honeywell (États-Unis) et Meggitt (Royaume-Uni).
\item Pour les nacelles: Collins Aerospace et Spirit AeroSystems (États-Unis).
\end{itemize}
\smallskip
Dans les domaines de la défense et de l'avionique, le principal concurrent est le groupe français Thales.
Par ailleurs, Safran s'est également investi dans le développement de drones tactiques, tels que le Sagem Sperwer et le Patroller. Dans ce secteur, les principaux concurrents de Safran incluent AAI Corp (États-Unis), IAI (Israël) et Thales.
@ -266,6 +271,15 @@ Safran est une société anonyme, côté au CAC 40 depuis 2011, l'État Françai
\caption{Gauche: Structure du capital au S1 2023. Droite: Répartition du chiffre d'affaires au S1 2023.}
\end{figure}
\begin{figure}[h!]
\centering
\includegraphics[height=6.2cm]{SAF2012_0009786-1.jpg} \includegraphics[height=6.2cm]{SAF2013_0105143-1.jpg}
\caption{Gauche: CFM56-7B. Droite: M88.}
\vspace*{-11pt}
\caption*{Copyright \href{https://medialibrary.safran-group.com/}{Eric Drouin / Philippe Stroppa / Safran}.}
\label{fig:moteurs}
\end{figure}
Il est possible d'identifier des cycles itératifs comprenant les phases de recherche, de production et de vente, avec une focalisation sur le développement des moteurs. Une fois que la phase de recherche aboutit à la conception du moteur, celui-ci entre en production. À ce stade, l'entreprise se concentre sur l'amélioration des processus de production et leur mise à l'échelle. Les ventes génèrent des revenus pour l'entreprise, qui sont ensuite réinvestis dans le développement du moteur suivant.
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.
@ -274,7 +288,7 @@ Safran Tech représente le centre de Recherche et Technologie de l'Innovation au
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.
\newpage
\section{Contexte du stage}
\begin{figure}[h!]
\centering
@ -284,8 +298,6 @@ Les équipes de recherche au sein de Safran Tech ne sont pas directement soumise
\caption*{Copyright \href{https://medialibrary.safran-group.com/Photos/media/179440}{Cyril Abad / CAPA Pictures / Safran}.}
\end{figure}
\section{Contexte du stage}
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 nominale, dans la phase d'optimisation, la pièce est progressivement modifiée afin d'optimiser certaines quantités d'intérêt.
@ -327,6 +339,7 @@ Dans le cadre de cette étude, nous nous intéressons à la génération de géo
\item Les protocoles de \gls{cao}, bien qu'efficaces pour la représentation géométrique, présentent des défis liés à la propriété des formats et aux différentes manières de représenter une même géométrie. Ceci peut être vu dans des logiciels tels que Catia, où diverses représentations de \gls{cao} peuvent coexister pour une géométrie donnée, rendant complexe la création d'un processus inverse.
\end{itemize}
\smallskip
Les maillages sont un domaine relativement peu exploré dans la littérature de l'apprentissage automatique, et cette exploration est encore plus limitée pour les représentations par \gls{cao}, en comparaison avec les modalités plus classiques telles que les images, le texte ou encore l'audio. La complexité découle en partie du caractère non structuré de ces données. En conséquence, il est nécessaire d'utiliser des méthodes spécifiques pour traiter ces données.
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.
@ -374,7 +387,7 @@ La Divergence de Kullback-Leibler est une mesure de la dissimilarité entre deux
Soit $X$ et $Y$ deux nuages de points.
\begin{equation}
d_\text{H}(X, Y) = \max \left\{ \sup_{x \in X} \inf_{y \in Y} d(x,y), \sup_{y \in Y} \inf_{x \in X} d(x, y) \right\}
d_\text{HD}(X, Y) = \max \left\{ \sup_{x \in X} \inf_{y \in Y} d(x,y), \sup_{y \in Y} \inf_{x \in X} d(x, y) \right\}
\end{equation}
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.
@ -559,6 +572,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}
\smallskip
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:
@ -702,6 +716,8 @@ Cette approche présente divers avantages:
\item L'entraînement n'est pas excessivement plus complexe; on utilise un entraînement conjoint, car il est extrêmement simple à mettre en œuvre et n'alourdit pas le processus d'entraînement. Ainsi, on procède à un entraînement conditionnel tout en omettant parfois les embeddings de classe afin de réaliser conjointement un entraînement non conditionnel.
\item Les données telles que le texte se prêtent difficilement à une classification en classes, et cette approche permet l'utilisation de vecteurs scalaires pour le conditionnement.
\end{itemize}
\smallskip
Formellement, l'algorithme d'entraînement par \gls{cfg} est décrit dans l'algorithme \ref{alg:classifier-free-guidance}, l'agorithme d'échantillonnage est décrit dans l'algorithme \ref{alg:classifier-free-guidance-sampling}.
\begin{algorithm}[h!]
@ -807,7 +823,7 @@ Au cours de cette période, j'ai également eu des discussions régulières avec
\FloatBarrier
\section{Prise en main des données}
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}.
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 \gls{cfd}. 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~\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}.
@ -847,7 +863,7 @@ En complément de Rotor37\_1200, j'ai également effectué des travaux sur un en
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.
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.
Chaque employé dispose d'une station de travail sous la forme d'un ordinateur portable, connecté à un dock sur le bureau. Afin de réaliser des calculs intensifs, nous avons la possibilité de nous connecter au cluster de calcul local, appelé Rosetta, utilisant le système slurm. Ce cluster est composé d'environ 3000 cœurs CPU, 50 GPU et dispose de plusieurs téraoctets de RAM et de stockage disque. Pour le développement de nos projets, nous exploitons la forge interne de Safran, qui est une plateforme GitLab dédiée.
En outre, chaque employé a accès à la suite professionnelle Office 365, qui facilite la gestion des documents et des e-mails. Pour communiquer, pour les visioconférences nous utilisons principalement Microsoft Teams, qui permet de passer des appels audio et vidéo, de partager son écran et de discuter par écrit, pour les échanges rapides nous utilisons la messagerie instantanée chiffrée de bout en bout Citadel.
@ -956,7 +972,7 @@ Autre point négatif, le decodeur de \gls{kpfcnn} étant composé de \glspl{mlp}
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, visibles sur la figure~\ref{fig:pvconv_archi}. 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++. 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, cete amélioration nécessite l'utilisation de code CUDA très ésotérique.
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, cette amélioration nécessite l'utilisation de code CUDA très ésotérique.
\FloatBarrier
\subsection{Test de \acrfull*{pvd}}
@ -1012,7 +1028,7 @@ Nous avons décidé d'adopter une approche reposant sur la réduction de dimensi
\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 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}.
À partir de la Figure \ref{fig:pca_cumsum}, nous pouvons déduire qu'environ 30 modes \gls{pca} 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.
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.
@ -1040,7 +1056,7 @@ Cependant, dans le contexte industriel, cet inconvénient est moins préoccupant
\glsunset{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é $p_\text{uncond}$ de 10\%. 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 metriques physiques. 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.
Pour conditionner notre processus de diffusion, nous avons opté pour l'utilisation de la \gls{cfg}, avec une probabilité $p_\text{uncond}$ de 10\%. 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 métriques physiques. 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:
\begin{itemize}
@ -1049,6 +1065,8 @@ La figure \ref{fig:pca_ldm_results} montre les résultats d'un \gls{ldm} \gls{pc
\item Jaune: génération conditionnée, isentropic\_effiency=1, $\gamma=14$
\item Bleu: génération conditionnée, isentropic\_effiency=1, $\gamma=25$
\end{itemize}
\smallskip
On observe qu'à mesure que le facteur de guidage $\gamma$ augmente, certaines parties de l'aube subissent une déformation plus prononcée. À des fins d'illustration, il est important de noter que les valeurs de $\gamma$ utilisées ici sont considérablement élevées. En pratique, toutefois, $\gamma$ ne dépasse pas généralement la valeur de 5, et demeure en moyenne autour de 2.
\begin{figure}[h!]
@ -1077,7 +1095,7 @@ Une solution viable consiste à entraîner un modèle de régression capable d'
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 entraine un \gls{gp} sur des couples de nuage de points avec leur critère de performance associé, 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 nuages de points avec leur critères de performance associés, 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
@ -1115,7 +1133,9 @@ Sur le plan personnel, cette recherche m'a offert une occasion précieuse d'appr
Enfin, ce travail de recherche a également mis en lumière l'importance de la collaboration entre les domaines techniques et académiques. Mes échanges et discussions avec les ingénieurs, les experts du domaine industriel et certains auteurs de papiers ont joué un rôle essentiel dans l'orientation de ma recherche et dans la validation des résultats.
En perspective d'amélioration, il serait pertinent d'explorer des méthodes visant à réduire la taille des maillages utilisés dans les simulations numériques, tout en maintenant leur précision. Cette approche pourrait éventuellement conduire à l'obtention de modèles plus compacts et plus rapides à entraîner, tout en préservant une représentation précise des propriétés physiques des aubes. Par ailleurs, il serait également intéressant d'explorer la possibilité d'appliquer ces techniques de génération directement aux \glspl{cao}, sans passer par les étapes intermédiaires des maillages ou des nuages de points. Cette démarche pourrait simplifier le processus de conception en générant directement des modèles \gls{cao} conditionnés selon les spécifications requises.
En perspective d'amélioration, il serait pertinent d'explorer des méthodes visant à réduire la taille des maillages utilisés dans les simulations numériques, tout en maintenant leur précision. Cette approche pourrait éventuellement conduire à l'obtention de modèles plus compacts et plus rapides à entraîner, tout en préservant une représentation précise des propriétés physiques des aubes.
Par ailleurs, il serait également intéressant d'explorer la possibilité d'appliquer ces techniques de génération directement aux \glspl{cao}, sans passer par les étapes intermédiaires des maillages ou des nuages de points. Cette démarche pourrait simplifier le processus de conception en générant directement des modèles \gls{cao} conditionnés selon les spécifications requises.
Enfin, il serait aussi pertinent d'essayer des méthodes par \gls{rl} sur ce problème, car ces méthodes ont souvent de très bonne capacités de généralisation.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%