quelques reformulations

This commit is contained in:
Laureηt 2023-08-23 15:48:09 +02:00
parent 71b29e6642
commit 385d2a7c39
Signed by: Laurent
SSH key fingerprint: SHA256:kZEpW8cMJ54PDeCvOhzreNr4FSh6R13CMGH/POoO8DI
4 changed files with 56 additions and 42 deletions

BIN
assets/ae-architecture.png (Stored with Git LFS)

Binary file not shown.

BIN
assets/generative-overview.png (Stored with Git LFS)

Binary file not shown.

BIN
assets/safran_logo.svg (Stored with Git LFS)

Binary file not shown.

View file

@ -233,7 +233,7 @@ 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}
Dans les domaines de la défense et de l'avionique, le principal adversaire est le groupe français Thales.
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.
@ -353,16 +353,7 @@ Les applications les plus courantes de ces réseaux incluent la classification~\
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. Plusieurs études ont déjà été réalisées pour comparer ces modèles, nous nous baserons donc partiellement sur ces études~\cite{faez_deep_2020,guo_systematic_2022,zhu_survey_2022} pour présenter les modèles les plus pertinents pour notre problématique.
% \begin{figure}[h!]
% \centering
% \includegraphics[width=0.8\textwidth]{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}
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. Plusieurs études~\cite{faez_deep_2020,guo_systematic_2022,zhu_survey_2022} ont déjà été réalisées pour comparer ces modèles, nous nous baserons donc partiellement sur celles-ci pour présenter les modèles les plus pertinents pour notre problématique.
\FloatBarrier
\glsunset{gan}
@ -377,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} sont la famille de modèles génératifs la plus renommée et également la plus ancienne~\cite{goodfellow_generative_2014}. 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. 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ème~\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 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.
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.
@ -402,7 +393,7 @@ Face à ces inconvénients, et puisque nous ne possédons pas de grandes quantit
\label{fig:vae-architecture}
\end{figure}
Les \glspl{vae} constituent une autre famille de modèles génératifs, également bien connue comme les \glspl{gan} et relativement tout aussi anciens~\cite{kingma_auto-encoding_2022,kipf_variational_2016,doersch_tutorial_2021}. 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.
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.
@ -445,7 +436,7 @@ Tout comme les \glspl{gan}, de nombreuses améliorations (β-VAE~\cite{burgess_u
% on est capable de calculer exactement le log likelyhood, et donc de train direct dessus, contrairement aux VAE où on train sur l'ELBO ou les GANS où y'a pas du tout de log likelyhood, jsute un minmnax game
Les \glspl{nf} sont une autre classe de modèles génératifs qui ont gagné en popularité ces dernières années~\cite{kobyzev_normalizing_2021}, puisque ces méthodes proposent de travailler directement sur les densités de probabilité, contrairement aux \glspl{vae} et \glspl{gan}. Ces modèles se basent sur des transformations inversibles (bijectives), continues et différentiables. Ces transformations sont appliquées à une distribution de base, généralement une distribution simple comme une gaussienne isotropique, pour obtenir une distribution plus complexe et plus proche de la distribution des données réelles.
Les \glspl{nf}~\cite{kobyzev_normalizing_2021} sont une autre classe de modèles génératifs qui ont gagné en popularité ces dernières années, puisque ces méthodes proposent de travailler directement sur les densités de probabilité, contrairement aux \glspl{vae} et \glspl{gan}. Ces modèles se basent sur des transformations inversibles, bijectives, continues et différentiables. Ces transformations sont appliquées à une distribution de base, généralement une distribution simple comme une gaussienne isotropique, pour obtenir une distribution plus complexe et plus proche de la distribution des données réelles.
Les transformations inversibles utilisées dans les \glspl{nf} sont souvent paramétrisées par des réseaux de neurones, ce qui permet d'apprendre des fonctions non linéaires complexes. En utilisant plusieurs transformations en séquence, on peut construire des modèles génératifs flexibles capables de capturer des distributions complexes.
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:
@ -541,7 +532,7 @@ En supposant que $S_g$ et $S_r$ soient échantillonnés à partir de la même di
\label{fig:vdm-architecture}
\end{figure}
Les \glspl{vdm} sont la famille de réseaux générateurs la plus récente et aussi la plus performante~\cite{dhariwal_diffusion_2021}. La manière la plus simple de décrire ces modèles est de les considérer comme une mélange des \glspl{vae} et des \glspl{nf}. En effet, le principe des \glspl{vdm} est de trouver un processus basé sur des transformation stochastiques, discrètes et réversible entre notre distribution de données et distribution totalement différente, mais que l'on connait de préférence parfaitement mathématiquement.
Les \glspl{vdm} sont la famille de réseaux générateurs la plus récente et aussi la plus performante~\cite{dhariwal_diffusion_2021}. La manière la plus simple de décrire ces modèles est de les considérer comme une mélange des \glspl{vae} et des \glspl{nf}. En effet, le principe des \glspl{vdm} est de trouver un processus basé sur des transformation stochastiques, discrètes et réversible entre notre distribution de données et une distribution totalement différente, mais que l'on connait de préférence parfaitement mathématiquement.
Plusieurs catégories de modèles sont disponibles pour aborder le problème de la diffusion, parmi lesquelles émerge la plus reconnue, à savoir les \glspl{ddpm}~\cite{ho_denoising_2020}. Cette approche vise à identifier une correspondance entre les données observées et une distribution gaussienne standard. Ce processus est appris au moyen d'un modèle paramétrique (i.e. un réseau de neurones).
@ -552,15 +543,15 @@ 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 normale 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}
q(\boldsymbol{x}_t | \boldsymbol{x}_{t-1}) = \mathcal{N} ( \boldsymbol{x}_t; \sqrt{\alpha_t} \boldsymbol{x}_0, (1 - \alpha_t) \mathbf{I} )
q(\boldsymbol{x}_t | \boldsymbol{x}_{t-1}) = \mathcal{N} ( \boldsymbol{x}_t; \sqrt{\alpha_t} \boldsymbol{x}_0, (1 - \alpha_t) \mathbf{I} ) \label{eq:ddpm_forward}
\end{equation}
avec $\alpha_t \in [0, 1]$ qui évolue en $t$ selon une suite fixée ou apprenable (i.e. via un réseau de neurones).
avec $\alpha_t \in [0, 1]$ qui évolue en $t$ selon une suite décroissante fixée ou apprenable (i.e. via un réseau de neurones).
Cependant puisque toutes ces opérations sont linéaires et gaussiennes, si l'on souhaite obtenir $x_t$ à partir de $x_0$, au lieu d'appliquer $t$ fois cette relation, on peut simplifier comme suit:
Cependant puisque toutes ces opérations sont linéaires et gaussiennes, si l'on souhaite obtenir $x_t$ à partir de $x_0$, au lieu d'appliquer $t$ fois la relation \ref{eq:ddpm_forward}, on peut simplifier comme suit:
\begin{equation}
q(\boldsymbol{x}_t | \boldsymbol{x}_0) = \mathcal{N} ( \boldsymbol{x}_t; \sqrt{\overline\alpha_t} \boldsymbol{x}_0, (1 - \overline\alpha_t) \mathbf{I} ), \quad \overline\alpha_t = \prod_{t=1}^t \alpha_t
\end{equation}
@ -577,7 +568,7 @@ On peut finalement simplifier cette expression via une reparamétrisation:
\begin{equation}
\boldsymbol{x}_0 = \frac{ \boldsymbol{x}_T - \sqrt{1 - \overline{\alpha}_t} \epsilon_0 } { \sqrt{\overline{\alpha}_t} } \implies \mu_q (\boldsymbol{x}_t, \boldsymbol{x}_0) = \frac{ 1 } { \sqrt{\alpha} } \boldsymbol{x}_t - \frac{ 1 - \alpha_t } { \sqrt{ 1 - \overline{\alpha}_t } \sqrt{\alpha_t} } \epsilon_0
\end{equation}
Si l'on réeffectue une dérivation de l'\gls{elbo} avec ces nouvelles expressions, on en conclut qu'il suffit de trouver une approximation $\epsilon_\theta (\boldsymbol{x}_t, t) \approx \epsilon_0$. En pratique on utilise un réseau de neurones que l'on entraine à minimiser $|\| \epsilon_0 - \epsilon_\theta (\boldsymbol{x}_t, t) \|_2^2$. Une fois cette approximation trouvée, on peut facilement remonter à $p_\theta (\boldsymbol{x}_{t-1} | \boldsymbol{x}_t)$. Formellement, l'entrainement de ce réseau de neurones est décrit dans l'algorithme \ref{alg:ddpm_training}.
Si l'on réeffectue une dérivation de l'\gls{elbo} avec ces nouvelles expressions, on en conclut qu'il suffit de trouver une approximation $\epsilon_\theta (\boldsymbol{x}_t, t) \approx \epsilon_0$. En pratique on utilise un réseau de neurones que l'on entraine à minimiser $\| \epsilon_0 - \epsilon_\theta (\boldsymbol{x}_t, t) \|_2^2$. Une fois cette approximation trouvée, on peut facilement remonter à $p_\theta (\boldsymbol{x}_{t-1} | \boldsymbol{x}_t)$. Formellement, l'entrainement de ce réseau de neurones est décrit dans l'algorithme \ref{alg:ddpm_training}.
\begin{algorithm}
\caption{DDPM training}
@ -644,21 +635,26 @@ Deux méthodes existent actuellement pour permettre à des modèles de diffusion
% TODO: vérifier les citations, pas sur que ça corresponde
La première méthode est appelée Classifier Guidance~\cite{dhariwal_diffusion_2021} et repose sur l'entrainement d'un classificateur annexe $f_\phi(y | x_t)$ entrainé sur des données bruitées $x_t$ ainsi que leur classes associées $y$. Le logarithme du gradient de ce classifier est ensuite utilisé pour guider le modèle de diffusion. Ainsi selon la formulation du score matching on obtient:
La première méthode est appelée Classifier Guidance~\cite{dhariwal_diffusion_2021} et repose sur l'entrainement d'un classificateur annexe $f_\phi(y | x_t)$ entrainé sur des données bruitées $x_t$ ainsi que leur classes associées $y$. Le logarithme du gradient de ce classificateur par rapport à $x_t$ est ensuite utilisé pour guider le modèle de diffusion à générer des données de classe $y$. Ainsi selon la formulation du score matching on obtient:
\begin{align}
\nabla_{\boldsymbol{x}_t} \log p (\boldsymbol{x}_t | y) & = \nabla_{\boldsymbol{x}_t} \log p \left( \frac{ p(\boldsymbol{x}_t) p(y | \boldsymbol{x}_t) }{ p(y) } \right) \\
& = \underbrace{ \nabla_{\boldsymbol{x}_t} \log p (\boldsymbol{x}_t) }_{\text{unconditional score}} + \underbrace{ \nabla_{\boldsymbol{x}_t} \log q (y | \boldsymbol{x}_t) }_{\text{adversarial gradient}} \label{eq:165}
\end{align}
Si l'on remplace $q( y | \boldsymbol{x}_t )$ par $f_\phi ( y | \boldsymbol{x}_t )$ et que l'on introduit un facteur de guidage $\gamma \in \mathbb{R}$, on obtient:
\begin{align}
\nabla_{\boldsymbol{x}_t} \log p (\boldsymbol{x}_t | y) & \approx \nabla_{\boldsymbol{x}_t} \log q (\boldsymbol{x}_t) + \gamma \nabla_{\boldsymbol{x}_t} \log f_\phi (y | \boldsymbol{x}_t) \label{eq:166} \\
& = - \frac{1}{ \sqrt{1 - \overline{\alpha}_t} }\epsilon_\theta(\boldsymbol{x}_t, t) + \gamma \nabla_{\boldsymbol{x}_t} \log f_\phi (y | \boldsymbol{x}_t)
\nabla_{\boldsymbol{x}_t} \log p (\boldsymbol{x}_t | y) & \approx \nabla_{\boldsymbol{x}_t} \log q (\boldsymbol{x}_t) + \gamma \nabla_{\boldsymbol{x}_t} \log f_\phi (y | \boldsymbol{x}_t) \label{eq:166} \\
& = - \frac{1}{ \sqrt{1 - \overline{\alpha}_t} } \epsilon_\theta(\boldsymbol{x}_t, t) + \gamma \nabla_{\boldsymbol{x}_t} \log f_\phi (y | \boldsymbol{x}_t) \\
& = - \frac{1}{ \sqrt{1 - \overline{\alpha}_t} } \left[ \epsilon_\theta(\boldsymbol{x}_t, t) - \gamma \sqrt{1 - \overline{\alpha}_t} \nabla_{\boldsymbol{x}_t} \log f_\phi (y | \boldsymbol{x}_t) \right]
\end{align}
On identifie alors:
\begin{equation}
\epsilon_\theta(\boldsymbol{x}_t, t, c) = \epsilon_\theta(\boldsymbol{x}_t, t) - \gamma \sqrt{1 - \overline{\alpha}_t} \nabla_{\boldsymbol{x}_t} \log f_\phi (y | \boldsymbol{x}_t)
\end{equation}
\begin{figure}[h!]
\centering
\includegraphics[width=0.8\textwidth]{classifier-guidance.png}
\caption{Conditionnement par Classifier Guidance.}
\caption{Gradients du classficateur de la Classifier Guidance.}
\vspace*{-11pt}
\caption*{Source: \href{https://perceptron.blog/defusing-diffusion/}{Perceptron.blog, 2023}.}
\label{fig:classifier_guidance}
@ -672,10 +668,12 @@ La seconde méthode est appelée Classifer-Free Guidance~\cite{ho_classifier-fre
\end{equation}
En subsituant l'équation \ref{eq:166} dans l'équation \ref{eq:rearange}, on obtient:
\begin{align}
\nabla_{\boldsymbol{x}_t} \log p (\boldsymbol{x}_t | y) & = \nabla_{\boldsymbol{x}_t} \log p (\boldsymbol{x}_t) + \gamma ( \nabla_{\boldsymbol{x}_t} \log p(\boldsymbol{x}_t | y) - \nabla_{\boldsymbol{x}_t} \log p(\boldsymbol{x}_t) ) \\
& = \underbrace{ \gamma \nabla_{\boldsymbol{x}_t} \log p(\boldsymbol{x}_t | y) }_{\text{conditional score}} + \underbrace{ (1 - \gamma) \nabla_{\boldsymbol{x}_t} \log p(\boldsymbol{x}_t) }_{\text{unconditional score}}
\nabla_{\boldsymbol{x}_t} \log p (\boldsymbol{x}_t | y) & = \nabla_{\boldsymbol{x}_t} \log p (\boldsymbol{x}_t) + \gamma ( \nabla_{\boldsymbol{x}_t} \log p(\boldsymbol{x}_t | y) - \nabla_{\boldsymbol{x}_t} \log p(\boldsymbol{x}_t) ) \\
& = \underbrace{ \gamma \nabla_{\boldsymbol{x}_t} \log p(\boldsymbol{x}_t | y) }_{\text{conditional score}} + \underbrace{ (1 - \gamma) \nabla_{\boldsymbol{x}_t} \log p(\boldsymbol{x}_t) }_{\text{unconditional score}} \label{eq:cfg_lerp}
\end{align}
On en déduit de \ref{eq:cfg_lerp}, que la distribution conditionnelle est une interpolation linéaire entre la distribution conditionnelle et non conditionnelle. Ainsi, en utilisant un facteur de guidage $\gamma$, on peut contrôler la contribution de la distribution conditionnelle dans la distribution finale. Si $\gamma = 0$, alors la distribution conditionnelle est ignorée, et si $\gamma = 1$, alors la distribution conditionnelle est utilisée.
\begin{figure}[h!]
\centering
\includegraphics[width=0.8\textwidth]{classifier-free-guidance.png}
@ -685,7 +683,13 @@ En subsituant l'équation \ref{eq:166} dans l'équation \ref{eq:rearange}, on ob
\label{fig:classifier_free_guidance}
\end{figure}
Cette approche présente divers avantages. Premièrement, elle s'appuie sur un unique réseau de neurones, contrairement à la méthode guidée par classificateur qui en utilise deux. Deuxièmement, l'entraînement ne devient pas significativement plus complexe; on procède de la même manière qu'auparavant, en ajoutant simplement les embeddings de classe et en parfois excluant aléatoirement ces embeddings (selon une loi uniforme) pour apprendre en conditionnement non contraint. Troisièmement, 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. Formellement, l'algorithme d'entraînement par \gls{cfg} est décrit dans l'algorithme \ref{alg:classifier-free-guidance}.
Cette approche présente divers avantages:
\begin{itemize}
\item Elle s'appuie sur un unique réseau de neurones, contrairement à la méthode guidée par classificateur qui en utilise deux.
\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}
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}
\caption{DDPM training with classifier-free guidance}
@ -707,6 +711,27 @@ Cette approche présente divers avantages. Premièrement, elle s'appuie sur un u
\end{algorithmic}
\end{algorithm}
\begin{algorithm}
\caption{DDPM sampling with classifier-free guidance}
\label{alg:classifier-free-guidance-sampling}
\begin{algorithmic}[1]
\Require $T \in \mathbb{N}^\star$: number of diffusion steps
\Require $\gamma \in \mathbb{R}$: guidance factor
\Require $\boldsymbol{c}$: embeddings distribution to be learned
\Require $\alpha_t$: variance schedule
\Require $\epsilon_\theta$: trained neural network
\State $x_T \sim \mathcal{N}(0, \mathbf{I})$
\For{$t=T, ..., 1$}
\State $\epsilon_\theta = \gamma \epsilon_\theta(x_t, t, c) + (1 - \gamma) \epsilon_\theta(x_t, t, \varnothing)$
\State $\displaystyle \mu_t = \frac{ 1 } { \sqrt{\alpha} } \boldsymbol{x}_t - \frac{ 1 - \alpha_t } { \sqrt{ 1 - \overline{\alpha}_t } \sqrt{\alpha_t} } \epsilon_\theta$
\State $\displaystyle \sigma_t = \sqrt{ \frac{ (1 - \alpha_t)(1 - \overline{\alpha}_{t-1}) } { 1 - \overline{\alpha}_t } }$
\State $\epsilon \sim \mathcal{N}(0, \mathbf{I})\ \text{if}\ t > 1, \text{else}\ \epsilon = 0$
\State $x_{t-1} = \mu_t + \sigma_t \epsilon$
\EndFor
\State \Return $x_0$
\end{algorithmic}
\end{algorithm}
Dans notre cas d'application, nous pouvons conditionner sur les scalaires représentant les performances de nos maillages.
% https://liorsinai.github.io/coding/2023/01/04/denoising-diffusion-3-guidance.html#guided-diffusion
@ -745,15 +770,13 @@ Les modèles auto-régressifs sont des méthodes de génération de séquences q
\label{fig:nerf-architecture}
\end{figure}
Les \glspl{nerf} représentent une autre famille de modèles génératifs qui ont gagné en popularité récemment~\cite{mildenhall_nerf_2020}. 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.
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.
L'un des aspects fascinants des \glspl{nerf} réside dans leur capacité à apprendre des scènes complexes et à générer des rendus à partir d'un nombre limité de vues ou de données d'entraînement. Grâce à leur architecture neuronale et à leur capacité à modéliser la distribution des couleurs et des formes, les \glspl{nerf} sont en mesure de synthétiser des scènes réalistes même à partir de quelques images.
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}.
Dans notre cas, étant donné que 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 (utilisation du "marching cube" pour passer dd'une représentation implicite à un maillage) de nos résultats. 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}
@ -807,7 +830,7 @@ Cet ensemble de données peut être séparé en deux sous-ensembles : un ensembl
Afin de simplifier le chargement des données, j'ai choisi d'utiliser la bibliothèque HuggingFace Datasets~\cite{lhoest-etal-2021-datasets}. Cette bibliothèque se distingue par son utilisation innovante de la technologie Apache Arrow~\cite{arrow} pour stocker les données de manière tabulaire en colonnes, permettant des lectures sans copie (zero copy reads) ainsi que des opérations de mapping efficaces prenant en charge le multi-threading. Grâce à une approche de chargement paresseux (lazy loading), elle évite les problèmes de mémoire et assure la reproductibilité en sauvegardant en cache les transformations intermédiaires des données.
En complément de Rotor37\_1200, j'ai également travaillé sur un ensemble de données plus grand appelé Rotor37\_11000, qui contient 11000 échantillons. Cet ensemble de données a été créé via le même processus d'optimisation que Rotor37\_1200, cepandant les déformations qu'il contient sont d'un ordre de grandeur plus élevé.
En complément de Rotor37\_1200, j'ai également effectué des travaux sur un ensemble de données plus étendu, baptisé Rotor37\_11000, qui comprend 11000 échantillons. La création de cet ensemble de données a suivi le même processus d'optimisation que celui de Rotor37\_1200, selon la même aube nominale. Cependant, il est important de noter que les déformations présentes dans Rotor37\_11000 sont d'un ordre de grandeur supérieur.
\begin{figure}[h!]
\centering