This commit is contained in:
Laureηt 2023-08-25 15:59:37 +02:00
parent 0e9d747daa
commit 8f5e6d9147
Signed by: Laurent
SSH key fingerprint: SHA256:kZEpW8cMJ54PDeCvOhzreNr4FSh6R13CMGH/POoO8DI

View file

@ -589,7 +589,7 @@ On peut finalement simplifier cette expression via une reparamétrisation:
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}[h!]
\caption{DDPM training}
\caption{\gls{ddpm} training}
\label{alg:ddpm_training}
\begin{algorithmic}[1]
\Require $T \in \mathbb{N}^\star$: number of diffusion steps
@ -608,7 +608,7 @@ Si l'on réeffectue une dérivation de l'\gls{elbo} avec ces nouvelles expressio
Après avoir achevé l'entraînement adéquat de notre modèle, on peut désormais appliquer $p_\theta (\boldsymbol{x}_{t-1} | \boldsymbol{x}_t)$ itérativement pour passer d'un échantillon $x_T$ à sa prédiction $\hat{x}_0$. Dans les faits, le réseau génère des reconstructions qui ressemblent fortement à nos données d'apprentissage, créant ainsi de nouvelles données. Formellement, l'échantillonnage est décrit dans l'algorithme \ref{alg:ddpm_sampling}.
\begin{algorithm}[h!]
\caption{DDPM sampling}
\caption{\gls{ddpm} sampling}
\label{alg:ddpm_sampling}
\begin{algorithmic}[1]
\Require $T \in \mathbb{N}^\star$: number of diffusion steps
@ -708,7 +708,7 @@ Cette approche présente divers avantages:
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!]
\caption{DDPM training with classifier-free guidance}
\caption{\gls{ddpm} training with \gls{cfg}}
\label{alg:classifier-free-guidance}
\begin{algorithmic}[1]
\Require $T \in \mathbb{N}^\star$: number of diffusion steps
@ -728,7 +728,7 @@ Formellement, l'algorithme d'entraînement par \gls{cfg} est décrit dans l'algo
\end{algorithm}
\begin{algorithm}[h!]
\caption{DDPM sampling with classifier-free guidance}
\caption{\gls{ddpm} sampling with \gls{cfg}}
\label{alg:classifier-free-guidance-sampling}
\begin{algorithmic}[1]
\Require $T \in \mathbb{N}^\star$: number of diffusion steps
@ -920,7 +920,7 @@ Une autre architecture largement reconnue dans le domaine du traitement de nuage
\begin{figure}[h!]
\centering
\includegraphics[width=0.8\textwidth]{kpconv-architecture.png}
\caption{Architecture de \gls{kpfcnn} et \gls{kpcnn}, basés sur des \gls{kpconv}.}
\caption{Architecture de \gls{kpfcnn} et \gls{kpcnn}, basés sur des \glspl{kpconv}.}
\label{fig:kpconv_archi}
\end{figure}
@ -966,7 +966,7 @@ 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 \gls{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
@ -975,7 +975,7 @@ Le premier papier ayant utilisé une architecture du type PVCNN++ pour la géné
\label{fig:pvd_results}
\end{figure}
Comme on l'observe sur la figure~\ref{fig:pvd_results}, les générations que produisent PVD sont de très bonne qualité. Contrairement à \gls{kpfcnn}, les générations ne présentent pas de bruits résiduels, la densité des points générés correspond à celle présente dans les données d'entrainement, cependant on remarque quand même quelques points au centre de l'aube, ce qui pourrait impacter la reconstruction d'un maillage. De plus, PVD est un réseau assez lourd, (27,6 millions de paramètres) et nécéssite un entrainement plutot long d'environ 10 heures pour produire de bon résultats.
Comme on l'observe sur la figure~\ref{fig:pvd_results}, les générations que produisent \gls{pvd} sont de très bonne qualité. Contrairement à \gls{kpfcnn}, les générations ne présentent pas de bruits résiduels, la densité des points générés correspond à celle présente dans les données d'entrainement, cependant on remarque quand même quelques points au centre de l'aube, ce qui pourrait impacter la reconstruction d'un maillage. De plus, \gls{pvd} est un réseau assez lourd, (27,6 millions de paramètres) et nécéssite un entrainement plutot long d'environ 10 heures pour produire de bon résultats.
\FloatBarrier
\glsunset{ldm}
@ -984,11 +984,11 @@ Comme on l'observe sur la figure~\ref{fig:pvd_results}, les générations que pr
\begin{figure}[h!]
\centering
\includegraphics[width=0.8\textwidth]{LION.jpg}
\caption{Architecture de LION~\cite{zeng_lion_2022}.}
\caption{Architecture de \gls{lion}~\cite{zeng_lion_2022}.}
\label{fig:lion_archi}
\end{figure}
LION~\cite{zeng_lion_2022} représente l'architecture la plus récente en matière de génération de nuages de points, et constitue une amélioration par rapport à PVD. LION exploite la diffusion latente via un \gls{vae} à deux étages pour comprimer les nuages de points avant d'appliquer le processus de diffusion.
\gls{lion}~\cite{zeng_lion_2022} représente l'architecture la plus récente en matière de génération de nuages de points, et constitue une amélioration par rapport à \gls{pvd}. \gls{lion} exploite la diffusion latente via un \gls{vae} à deux étages pour comprimer les nuages de points avant d'appliquer le processus de diffusion.
Un premier encodeur transforme le nuage de points en un vecteur latent.
Un deuxième encodeur transforme le nuage de points original, en utilisant le vecteur latent comme conditionnement, afin de générer un nuage de points latent.
Ce nuage de points latent est ensuite décodé pour obtenir une reconstruction du nuage de point original.
@ -997,7 +997,7 @@ 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 \gls{lion} sur Rotor37\_1200.}
\label{fig:lion_results}
\end{figure}