Stable Diffusion è un modello di deep-learning che genera immagini a partire da un input testuale o da un'altra immagine. Per svolgere questo compito, la sua rete neurale è stata "addestrata" a rimuovere rumore dalle immagini. A partire da un seed, un numero naturale, viene prodotta un'immagine casuale iniziale, che verrà poi processata togliendo il rumore, come se sotto di esso ci sia l'immagine desiderata. Ogni generazione avviene in modo deterministico, l'unico fattore che determina la casualità degli output è il seed, che di default viene ogni volta randomizzato.
Di seguito alcuni esempi di immagini generate a partire da un testo, detto prompt, scelto da noi. Sono state eseguite diverse generazioni text-to-image, fino ad ottenere il seed che portava al risultato migliore:
Esempio 1
Prompt: portrait of a young man, brown eyes, brown hair, happy, professional photograph, studio lighting
Esempio 2
Prompt: old-style black steam train running on two parallel well-formed tracks during a sunny day, cinematic, professional photograph, highliy detailed
Processi image-to-image
Con Stable Diffusion è possibile effettuare processi image-to-image, che prendono in input un'immagine e ne restituiscono una nuova. Questi processi sono inpainting, outpainting, e upscaling.
- Inpainting
La tecnica dell'inpainting consiste nel ridisegnare una parte dell'immagine individuata da una maschera. Nell'esempio seguente è stato dato come input l'immagine iniziale, la maschera, e una descrizione dell'output che si vuole ottenere:
- Prompt: portrait of a young man, brown eyes, brown hair, happy, green screen, professional photograph, studio lighting
- Negative prompt: beard, woman, muscles
Immagine di partenza
Maschera di inpainting
Immagine risultante
- Outpainting
Per outpainting si intende la generazione delle parti che sono "fuori" dall'immagine, oltre i bordi: come se la IA cercasse di immaginare cosa ci potrebbe essere sotto, sopra, a destra o a sinistra dell'immagine data. I risultati del processi di outpainting possono sembrare poco soddisfacenti, in questo caso occorre veramente provare molte volte per trovare il seed migliore. In più, l'outpainting funziona bene se l'immagine di input è stata generata da Stable Diffusion tramite un processo text-to-image, ma non funziona altrettanto bene se si parte da una foto reale.
Immagine di partenza
Dopo il primo outpainting
Dopo il secondo outpainting
Dopo il terzo outpainting
- Upscaling
Essendo stato addestrato con immagini 512x512, Stable Diffusion fornisce i migliori risultati con output di quella dimensione, la quale al giorno d'oggi risulta essere troppo limitante. Per ovviare a questo problema, viene messa a disposizione la funzione di upscaling, effettuabile mediante l'utilizzo di diversi modelli, ognuno dei quali è specializzato per certe tipologie di immagini. In questo esempio è stato utilizzato il modello "4x-UltraSharp".
Immagine generata (512x512)
Immagine dopo l'upscaling (1024x1024)
Stable Diffusion WebUI
Per effettuare le generazioni abbiamo utilizzato Stable Diffusion WebUI, la quale mette a disposizione un web server e un'interfaccia grafica molto completa. Una volta installata in locale (con un hardware adeguatamente potente) si può iniziare subito a generare.
È il sistema più comodo, facile e popolare per utilizzare Stable Diffusion.