moar stuff

This commit is contained in:
Laureηt 2023-08-24 16:18:29 +02:00
parent 52dc6b9de6
commit 0e9d747daa
Signed by: Laurent
SSH key fingerprint: SHA256:kZEpW8cMJ54PDeCvOhzreNr4FSh6R13CMGH/POoO8DI
2 changed files with 22 additions and 19 deletions

View file

@ -135,6 +135,7 @@
\newacronym{vdm}{VDM}{Variational Diffusion Model}
\newacronym{ldm}{LDM}{Latent Diffusion Model}
\newacronym{cfg}{CFG}{Classifier-Free Guidance}
\newacronym{cg}{CG}{Classifier Guidance}
\newacronym{ddpm}{DDPM}{Denoising Diffusion Probabilistic Model}
\newacronym{t2i}{T2I}{Text to Image}
@ -150,6 +151,8 @@
\newacronym{kpcnn}{KP-CNN}{Kernel Point Convolutional Neural Network}
\newacronym{pvconv}{PVConv}{Point Voxel Convolution}
\newacronym{spvconv}{SPVConv}{Sparse Point Voxel Convolution}
\newacronym{pvd}{PVD}{Point Voxel Diffusion}
\newacronym{lion}{LION}{Latent Point Diffusion Model}
\newacronym{cao}{CAO}{Conception Assistée par Ordinateur}
\newacronym{edp}{EDP}{Équation aux Dérivées Partielles}
@ -391,7 +394,7 @@ Soit $X$ et $Y$ deux nuages de points tels que $|X| = |Y|$, et $\phi: X \to Y$ u
\begin{equation}
d_{\text{EMD}}(X, Y) = \min_{ \phi: X \to Y } \sum_{x \in X} \| x - \phi(x) \|_2
\end{equation}
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.
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}
\subsection{\acrfull*{jsd}}
@ -401,7 +404,7 @@ Soit $S_g$ un ensemble de nuages de points générés et $S_r$ un ensemble de nu
\text{JSD}(S_g, S_r) = \frac12 D_{\text{KL}}(S_g \| M) + \frac12 D_{\text{KL}}(S_r \| M), \quad M = \frac12 (S_g + S_r)
\end{equation}
La divergence de Jensen-Shannon est une mesure de la similarité entre deux distributions de probabilité. Elle est calculée comme la moyenne des \glspl{kld} entre chaque distribution et la moyenne de ces distributions. Contrairement à la \gls{kld}, la \gls{jsd} est symétrique et bornée entre 0 et 1.
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.
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}
\subsection{\acrfull*{cov}}
@ -669,7 +672,7 @@ On identifie alors:
\begin{figure}[h!]
\centering
\includegraphics[width=0.8\textwidth]{classifier-guidance.png}
\caption{Gradients de $f_\phi (y | \boldsymbol{x}_t)$ de la Classifier Guidance.}
\caption{Gradients de $f_\phi (y | \boldsymbol{x}_t)$ de la \gls{cg}.}
\vspace*{-11pt}
\caption*{Source: \href{https://perceptron.blog/defusing-diffusion/}{Perceptron.blog, 2023}.}
\label{fig:classifier_guidance}
@ -690,7 +693,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{Gradients conditionnés et non conditionnés via la Classifier-Free Guidance.}
\caption{Gradients conditionnés et non conditionnés via la \gls{cfg}.}
\vspace*{-11pt}
\caption*{Source: \href{https://perceptron.blog/defusing-diffusion/}{Perceptron.blog, 2023}.}
\label{fig:classifier_free_guidance}
@ -777,11 +780,11 @@ Les modèles auto-régressifs sont des méthodes de génération de séquences q
Les \glspl{nerf}~\cite{mildenhall_nerf_2020} représentent une autre famille de modèles génératifs qui ont gagné en popularité récemment. Ces modèles ont la capacité de générer des rendus 3D hautement réalistes à partir de données d'entraînement en utilisant des réseaux de neurones. Contrairement aux approches traditionnelles de rendu 3D basées sur des maillages, les \glspl{nerf} exploitent des représentations continues et implicites des scènes en décrivant les propriétés radiométriques et géométriques en chaque point de l'espace 3D.
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.
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é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.
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.
\FloatBarrier
\chapter{Déroulement du stage}
@ -874,7 +877,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 de GraphVAE sur Rotor37\_1200.}
\label{fig:graphvar_results}
\end{figure}
@ -893,7 +896,7 @@ 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 ê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{Présentation de PointNet}
@ -912,15 +915,15 @@ Par la suite, une avancée significative du modèle PointNet a conduit à l'éme
\FloatBarrier
\subsection{Présentation des \acrfullpl*{kpconv}}
Une autre architecture largement reconnue dans le domaine du traitement de nuages de points, présentant des similitudes avec PointNet++, est nommée \gls{kpconv}~\cite{thomas_kpconv_2019}. Cette architecture utilise un échantillonnage basé sur une grille de voxels et des opérations d'agrégation via des \glspl{kpconv}, qui sont des convolutions sur boules. Les auteurs de \gls{kpconv} proposent deux architectures, \gls{kpconv} permettant de traiter des problèmes de classification, et \gls{kpfcnn} permettant de traiter des problèmes de segmentation. Ces deux architectures sont illustrées sur la figure~\ref{fig:kpconv_archi}.
\begin{figure}[h!]
\centering
\includegraphics[width=0.8\textwidth]{kpconv-architecture.png}
\caption{Architecture de \gls{kpfcnn} et \gls{kpcnn}, basés sur des \glspl{kpconv}.}
\caption{Architecture de \gls{kpfcnn} et \gls{kpcnn}, basés sur des \gls{kpconv}.}
\label{fig:kpconv_archi}
\end{figure}
Une autre architecture largement reconnue dans le domaine du traitement de nuages de points, présentant des similitudes avec PointNet++, est nommée \gls{kpconv}~\cite{thomas_kpconv_2019}. Cette architecture utilise un échantillonnage basé sur une grille de voxels et des opérations d'agrégation via des \glspl{kpconv}, qui sont des convolutions sur boules. Les auteurs de \gls{kpconv} proposent deux architectures, \gls{kpconv} permettant de traiter des problèmes de classification, et \gls{kpfcnn} permettant de traiter des problèmes de segmentation. Ces deux architectures sont illustrées sur la figure~\ref{fig:kpconv_archi}.
\FloatBarrier
\subsection{Test de \gls{kpfcnn}}
@ -948,18 +951,18 @@ Autre point négatif, le decodeur de \gls{kpfcnn} étant composé de \glspl{mlp}
\label{fig:pvconv_archi}
\end{figure}
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.
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++. 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}
\subsection{Test de \acrfull*{pvd}}
\begin{figure}[h!]
\centering
\includegraphics[width=0.8\textwidth]{pvd-architecture.png}
\caption{Architecture de PVD.}
\caption{Architecture de \gls{pvd}.}
\label{fig:pvd_archi}
\end{figure}
@ -968,7 +971,7 @@ Le premier papier ayant utilisé une architecture du type PVCNN++ pour la géné
\begin{figure}[h!]
\centering
\includegraphics[width=0.45\textwidth]{pvd_sample_front.png}\includegraphics[width=0.45\textwidth]{pvd_sample_inside.png}
\caption{Résultats de PVD sur Rotor37\_1200.}
\caption{Résultats de \gls{pvd} sur Rotor37\_1200.}
\label{fig:pvd_results}
\end{figure}
@ -976,7 +979,7 @@ Comme on l'observe sur la figure~\ref{fig:pvd_results}, les générations que pr
\FloatBarrier
\glsunset{ldm}
\subsection{Test de LION}
\subsection{Test de \acrfull*{lion}}
\begin{figure}[h!]
\centering
@ -1008,7 +1011,7 @@ Nous avons décidé d'adopter une approche reposant sur la réduction de dimensi
\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 \gls{pca}. Gauche: Rotor37\_1200. Droite: Rotor37\_11000.}
\label{fig:pca_cumsum}
\end{figure}
@ -1084,7 +1087,7 @@ Ainsi si l'on entraine un \gls{gp} sur des couples (nuage de points, critère de
\label{fig:gp_efficiency_1_pca}
\end{figure}
La figure~\ref{fig:gp_train_30_pca} illustre la validation du modèle de processus gaussien (\gls{gp}) en utilisant des données de test. En traçant la prédiction du \gls{gp} par rapport aux valeurs réelles, on observe une relation linéaire avec une pente de 1. Cette observation est confirmée numériquement par la proximité de $Q^2$ à 1. Ces résultats indiquent que le \gls{gp} est capable de prédire les indicateurs de performance des aubes, en se basant sur leurs modes \gls{pca}.
La figure~\ref{fig:gp_train_30_pca} illustre la validation du \gls{gp} en utilisant des données de test. En traçant la prédiction du \gls{gp} par rapport aux valeurs réelles, on observe une relation linéaire avec une pente de 1. Cette observation est confirmée numériquement par la proximité de $Q^2$ à 1. Ces résultats indiquent que le \gls{gp} est capable de prédire les indicateurs de performance des aubes, en se basant sur leurs modes \gls{pca}.
De manière complémentaire, il est intéressant de noter que les distributions de in\_massflow, out\_massflow et compression\_rate présentent une grande similitude. Cette similarité est attendu, étant donné la forte corrélation physique entre ces trois critères. Un schéma similaire se manifeste entre les distributions de isentropic\_efficiency et polyentropic\_efficiency.

View file

@ -57,5 +57,5 @@
title = {arrow: Integration to 'Apache' 'Arrow'},
author = {Neal Richardson and Ian Cook and Nic Crane and Dewey Dunnington and Romain François and Jonathan Keane and Dragoș Moldovan-Grünfeld and Jeroen Ooms and {Apache Arrow}},
year = {2023},
note = {https://github.com/apache/arrow/, https://arrow.apache.org/docs/r/}
url = {https://github.com/apache/arrow/}
}