Diffusion Models
I modelli di diffusione generano immagini, video e audio imparando a invertire gradualmente un processo di aggiunta del rumore, passo dopo passo, dal rumore puro a un nuovo campione.
I modelli di diffusione sono modelli di IA generativa che creano dati imparando a invertire un processo graduale di aggiunta del rumore. Durante l'addestramento, le immagini e altri dati vengono alterati con rumore gaussiano in molti piccoli passaggi, e una rete neurale impara a prevedere il rumore a ogni passaggio. Per generare un campione, il modello parte da puro rumore casuale e lo rimuove passo dopo passo finché non emerge un nuovo risultato. Jascha Sohl-Dickstein e i suoi colleghi hanno proposto questo approccio nel 2015 in Deep Unsupervised Learning using Nonequilibrium Thermodynamics, mentre Jonathan Ho, Ajay Jain e Pieter Abbeel lo hanno reso competitivo nel 2020 con Denoising Diffusion Probabilistic Models (DDPM), che ha stabilito un FID all'avanguardia pari a 3,17 su CIFAR-10. Nel 2021 i ricercatori di OpenAI hanno dimostrato che i modelli di diffusione superavano le GAN nella sintesi di immagini su ImageNet; oggi i modelli di diffusione e i relativi metodi di flow matching alimentano i sistemi di generazione di immagini da testo come Stable Diffusion, i generatori di video, gli editor di immagini e i modelli scientifici.
Come funzionano i modelli di diffusione#
Il processo diretto è fisso, non appreso. Aggiunge una piccola quantità di rumore gaussiano a ciascuno dei T passaggi; DDPM usa T = 1.000, con una varianza del rumore che aumenta linearmente da 0.0001 a 0.02 per passaggio. Poiché la somma di rumori gaussiani è ancora gaussiana, un'immagine di addestramento può passare direttamente a qualsiasi passaggio t tramite una formula chiusa, xt = sqrt(alpha_bar_t) * x0 + sqrt(1 - alpha_bar_t) * noise, dove alpha_bar_t è il prodotto di 1 - beta sui primi t passaggi. Durante l'addestramento si selezionano ripetutamente un'immagine, un passaggio casuale e nuovo rumore, si crea xt e si insegna alla rete a prevedere quel rumore mediante l'errore quadratico medio, l'obiettivo semplificato di DDPM. Questo codice applica il processo diretto a una foto usando la pianificazione di DDPM:
import urllib.request
import numpy as np
import torch
from PIL import Image
# DDPM's linear schedule: 1,000 steps whose noise variance rises from 0.0001 to 0.02
betas = torch.linspace(1e-4, 0.02, 1000)
alpha_bar = torch.cumprod(1 - betas, dim=0)
# Load a photo and scale its pixels to [-1, 1]
image = Image.open(urllib.request.urlopen("https://ultralytics.com/images/bus.jpg")).convert("RGB").resize((256, 256))
x0 = torch.tensor(np.array(image), dtype=torch.float32).permute(2, 0, 1) / 127.5 - 1
# Jump straight to step t in closed form: x_t = sqrt(alpha_bar) * x0 + sqrt(1 - alpha_bar) * noise
frames = []
for t in (0, 99, 299, 599, 999):
xt = alpha_bar[t].sqrt() * x0 + (1 - alpha_bar[t]).sqrt() * torch.randn_like(x0)
frames.append(((xt.clamp(-1, 1) + 1) * 127.5).byte().permute(1, 2, 0).numpy())
print(f"step {t + 1}: image weight {alpha_bar[t].sqrt():.3f}, noise weight {(1 - alpha_bar[t]).sqrt():.3f}")
Image.fromarray(np.hstack(frames)).save("forward_diffusion.jpg")Il peso dell'immagine scende da 1.000 al passaggio 1 a 0.947 al passaggio 100, 0.630 al passaggio 300, 0.161 al passaggio 600 e 0.006 al passaggio 1.000, mentre il peso del rumore sale a 1.000. L'immagine salvata forward_diffusion.jpg mostra l'autobus nitido, poi sgranato, poi indistinto e infine scomparso.
La generazione esegue il processo al contrario. Parte da puro rumore gaussiano e, a ogni passaggio, la rete prevede il rumore nel campione corrente, un risolutore ne rimuove una parte e il risultato leggermente più pulito alimenta il passaggio successivo. Un prompt testuale o un'etichetta di classe entra nella rete come condizione, spesso tramite attenzione incrociata. Il condizionamento senza classificatore, introdotto da Jonathan Ho e Tim Salimans, addestra una rete sia con la condizione sia senza e, al momento del campionamento, estrapola dalla previsione incondizionata verso quella condizionata; un fattore di guida più elevato, come il valore predefinito di 7,5 nelle pipeline di Stable Diffusion 1.x, segue più da vicino il prompt a scapito della diversità.
Velocizzare il campionamento#
Il campionamento DDPM richiede 1.000 valutazioni della rete per immagine, quindi gran parte dei progressi del settore si è concentrata sulla riduzione di questo numero:
- Sampler migliori: DDIM riutilizza un DDPM addestrato con un sampler deterministico e produce campioni di alta qualità da 10 a 50 volte più velocemente in tempo reale. I successivi risolutori ODE riducono la generazione tipica a circa 20–50 passaggi.
- Diffusione latente: un modello di diffusione latente applica il denoising a una rappresentazione compressa da un autoencoder, anziché ai pixel. L'autoencoder di Stable Diffusion trasforma un'immagine 512×512×3 in un latente 64×64×4, con 48 volte meno valori.
- Distillazione: i modelli di consistenza imparano a trasformare direttamente qualsiasi campione rumoroso in uno pulito, consentendo la generazione in un solo passaggio; i modelli di consistenza latente applicano la stessa idea a Stable Diffusion con 2–4 passaggi.
- Percorsi più lineari: il flow matching e il flow rettificato addestrano lungo percorsi rettilinei dal rumore ai dati, che i risolutori possono seguire in meno passaggi.
La rete di denoising è passata dalla U-Net convoluzionale di DDPM e Stable Diffusion 1.x al Transformer di diffusione (DiT) usato dalla maggior parte degli attuali generatori di immagini e video.
Modelli di diffusione e altri modelli generativi#
- Reti generative avversarie (GANs): una GAN genera un campione con un solo passaggio in avanti, ma l'addestramento avversario tra generatore e discriminatore è soggetto a instabilità e collasso delle modalità, in cui il generatore copre solo una parte dei dati. L'addestramento dei modelli di diffusione si basa su una regressione stabile e copre più completamente la distribuzione dei dati, ma richiede numerosi passaggi di campionamento.
- Autoencoder variazionali (VAEs): un VAE decodifica un vettore latente in un campione con un solo passaggio e tende a produrre campioni più sfocati. I modelli di diffusione latente usano un autoencoder di tipo VAE solo per comprimere le immagini e affidano la generazione al modello di diffusione.
- Modelli autoregressivi: i modelli linguistici e quelli visivi autoregressivi generano un token o una scala alla volta, condizionandosi su ciò che li precede. Un modello di diffusione perfeziona in parallelo ogni parte del campione a ogni passaggio, e i modelli linguistici di diffusione applicano lo stesso denoising al testo.
Applicazioni nel mondo reale#
- Generazione e modifica di immagini: i modelli di generazione di immagini da testo creano immagini a partire da prompt, il riempimento delle immagini rigenera una regione mascherata adattandola alle aree circostanti, ControlNet vincola la disposizione usando mappe di bordi, profondità o posa, e i modelli di diffusione per l'upscaling applicano la super-risoluzione.
- Generazione di video: i modelli di generazione di video applicano il denoising a latenti compressi che comprendono molti fotogrammi contemporaneamente, così ogni fotogramma viene generato insieme a quelli vicini.
- Dati sintetici per l'addestramento: le immagini generate colmano le lacune nei dataset di visione, ad esempio per difetti rari, condizioni meteorologiche insolite o punti di vista poco comuni. In un dataset sulla Ultralytics Platform, l'azione Generate Similar Images crea da 1 a 16 nuove immagini per batch, ispirate a un'immagine esistente; quelle che scegli di conservare vengono aggiunte al dataset senza etichette, pronte per l'annotazione.
- Robotica: le policy di diffusione generano sequenze di azioni robotiche applicando il denoising, condizionate dalle immagini delle fotocamere.
- Scienza: AlphaFold 3 prevede le strutture di complessi di proteine, acidi nucleici e piccole molecole usando un modulo di diffusione che applica il denoising alle coordinate grezze degli atomi, sostituendo il modulo strutturale di AlphaFold 2.










