Modèles de diffusion
Plan
• Début modèles génératifs
• GANs
• Unet
• Modèles de diffusion
Premières tentatives
• Deep Dream
• Utilisation d’un réseau de neurones entrainé sur imagenet pour exagérer
certaines images
• Original • 10 Iterations • 50 Iterations
Generative Adversarial Networks
• GAN (avec un discriminateur et un générateur)
Générateur
Discriminateur
Génération d’image
Et si nous voulions créer une image à partir d'une autre image ?
Comment pourrions-nous faire cela ?
• Connectez la sortie du discriminateur directement au générateur.
• Cela créerait un autoencodeur d'image. Le discriminateur devient
l'encodeur et le générateur devient le décodeur.
Architecture Unet
Architecture Unet
• Le U-Net a une architecture spéciale pour un autoencodeur d'images.
• Après chaque convolution, nous aurons une Feature Map.
• Du côté de l'encodeur, nous prendrons chaque Feature Map après la
chaque bloque et o n en crée une copie.
• Du côté du décodeur, nous empilerons chaque copie avec la Feature
Map correspondante.
• Ces Feature Map empilées seront des entrées dans une couche de
convolution transposée.
Architecture Unet
• Les connexions au milieu s’appellent les « Skip connections »
• Elles sont importantes pour :
• Préservation des Informations Spatiales : éviter toutes perte causer par le
pooling lors dans la partie encoder
• Capture des Détails : Obtenir plus de détails grace aux couches présentes
dans la partie encodeur,
• Amélioration du Flux de Gradients : Eviter le vanishing gradient
• Garder des informations contextuelles des couches profondes afin de
pouvoir générer de meilleurs images
Convolution transposé
• Convolution transposé avec padding 0 et stride 1
Qu’est-ce qu’un modèle de diffusion
• Génère des images à partir de bruit
• Contrairement au GANs qui utilisent un discriminateur et un
générateur pour faire un jeu minmax
• Les modèles de diffusion sont eux aussi des modèles génératifs
• Ils peuvent générer des images très claires et réalistes
• Ils sont utilisés actuellement dans le text to image
• Il utilisent des U-Nets
Origines en Thermodynamique
Green food coloring dissolving in a glass of water
Origines en Thermodynamique
t = 25 t = 75 t = 150
Processus
Deux étapes:
• Forward Diffusion :
Créer des timestep et ajouter du bruit à une image petit à petit pendant
chaque timestep jusqu’à obtenir une image totalement bruité au dernier
timestep
• Reverse diffusion :
On entraine un réseau de neurones (U-net) afin qu’il puisse détecter le
bruit dans une image bruitée
Forward Diffusion
• Pour générer le bruit, chaque canal de couleur pour chaque pixel aura
une valeur aléatoire sélectionnée par une distribution normale.
Forward Diffusion
Forward Diffusion
t=0 t=1 t=2 t=3 t=4 t=5 t=6 t=7 t=8 t=9 t = 10
1 𝑥−𝜇 2
1 −2 𝜎
𝑁 x; μ, 𝜎 2 = 𝑒
𝜎 2𝜋
Forward Diffusion
𝑞 𝐱1 ȁ𝐱 0 𝑞 𝐱 2 ȁ𝐱1 𝑞 𝐱 3 ȁ𝐱 2 𝑞 𝐱 4 ȁ𝐱 3 𝑞 𝐱 5 ȁ𝐱 4 𝑞 𝐱 6 ȁ𝐱 5 𝑞 𝐱 7 ȁ𝐱 6 𝑞 𝐱 8 ȁ𝐱 7 𝑞 𝐱 9 ȁ𝐱 8 𝑞 𝐱10 ȁ𝐱 9
t=0 t=1 t=2 t=3 t=4 t=5 t=6 t=7 t=8 t=9 t = 10
𝛽 = 0.0001, 0.0023, 0.0045, 0.0067, … , 0.0200
t=0 t=1 t=3 t=4 t = 10
𝑇 = 10 Total number of timesteps
𝛼 = 1−𝛽 Convenient shorthand
Forward diffusion
t=0 t=1 t=2 t=3 t=4 t=5 t=6 t=7 t=8 t=9 t = 10
𝑞 𝐱 𝑡 𝐱 𝑡−1 = 𝑁(𝐱 𝑡 ; 1 − 𝛽𝑡 ⋅ 𝐱 𝑡−1 , 𝛽𝑡 ⋅ 𝐈)
Code: Step 1:
noise = torch.randn_like(x_t) • Generate noise from a standard
x_t = [Link](1 - B[t]) * x_t + normal distribution
[Link](B[t]) * noise • Multiply result by 𝛽𝑡
Step 2:
• Multiply image at previous step by
1 − 𝛽𝑡
• Add it to the result from step 1
Reverse diffusion
• Maintenant qu’on peut générer des images bruités, comment on fait
pour débruité une image ?
• Tous simplement en enlevant le bruit détecté par le U-Net de l’image
• Lors de l’inférence (modèle déjà entrainé):
• On doit commencé par une image totalement bruité (bruit) (et donc dernier
timestep)
• Le bruit prédit par le modèle est celui du timestep courant
• On enlève le bruit de l’image et on se retrouve au timestep t-1
• On continue ainsi jusqu’à arrivé à t0 qui est l’image générée
Entrainement du modèle de diffusion
Pour entrainer un modèle de diffusion:
• On prend une image réelle
• On sélectionne un timestep (t)
• On calcule le bruit au timestep (t) et on l’applique à l’image
• On obtient une image bruitée
• On donne au U_net l’image bruitée + le timestep en entrée
• On donne au U_net le bruit au timestep (t) en sortie
Entrainement du modèle de diffusion
Training Data
Noisy image at time 𝑡 Noise added at time 𝑡
𝑞 𝐱 𝑡 𝐱 0 = 𝑁(𝐱 𝑡 ; 𝛼ത𝑡 ⋅ 𝐱 0 , 1 − 𝛼ത𝑡 ⋅ 𝐈) “Skip ahead” function
𝑡=
𝑡=5 𝑡 = 25
100
Entrainement du modèle de diffusion
• On calcule l’erreur entre le bruit prédit par le Unet et le bruit réel
• On utilise la MSE
• On fait la backpropagation
Entrainement du modèle de diffusion