L'intelligenza artificiale generativa è sempre più preponderante nelle nostre vite, e se siete artisti o vi appassionate alla creazione di immagini a partire da testo, sicuramente vi sarà capitato di incontrare Stable Diffusion.
A differenza dei popolari Midjourney e DALL-E, però, il modello di IA può essere scaricato sul proprio dispositivo. Ma cos'è e come funziona Stable Diffusion? Andiamo a scoprirlo e capire come usarlo, oltre a ricordarvi le nostre guide sui soprannominati Midjourney e DALL-E.
Indice
Cos'è Stable Diffusion AI
I modelli di intelligenza artificiale generativa ci consentono di generare nuovi dati simili a quelli che hanno visto durante la loro fase di apprendimento, e quelli che generano immagini sono in grado di "comprendere" un vostro input di testo, chiamato prompt, per creare o modificare, beh, immagini.
Non tutti i modelli sono uguali, però, e usano algoritmi e pesi (i pesi sono parametri all'interno di una rete neurale che trasformano i dati di input all'interno dei livelli nascosti della rete) differenti.
Stable Diffusion, utilizzato principalmente per generare immagini o per modificare immagini esistenti tramite tecniche di inpainting o outpainting, è stato sviluppato una collaborazione tra gruppo CompVis dell'Università Ludwig Maximilian di Monaco (Germania), che ne ha inventato l'architettura base, la start-up Stability AI, che lo ha finanziato e LAION. Il modello è stato rilasciato nel 2022 con licenza Creative ML OpenRAIL-M, il che significa che può essere utilizzato sia per scopi commerciali che non commerciali.
Ma in cosa differisce da modelli come DALL-E di OpenAI o Midjourney? Innanzi tutto, Stable Diffusion è open source, il suo codice e i suoi pesi sono stati rilasciati pubblicamente, mentre i modelli sopra nominati sono proprietari. Inoltre, mentre questi due modelli sono accessibili sopo da Web, Stable Diffusion può essere scaricato su un computer mediamente potente, a patto che sia dotato di una GPU con almeno 8 GB di VRAM.
Ma questa non è l'unica differenza con gli altri modelli, in quanto anche l'algoritmo alla base del modello è molto diverso.
Andiamo a scoprire in che modo.
Come funziona Stable Diffusion
L'intelligenza artificiale può generare immagini in diversi modi, ma Stable Diffusion utilizza una tecnica nota come modello di diffusione latente (LDM, Latent Diffusion Model).
Stable Diffusion appartiene infatti a una classe di modelli di deep learning (approfondimento profondo) chiamati modelli di diffusione perché caratterizzati da una matematica assomiglia molto alla diffusione in fisica. Pensate a una goccia d'inchiostro che cade in un bicchiere d'acqua: si diffonde e dopo pochi minuti si distribuisce in modo casuale. Mettiamo che alleniamo un modello su immagini di cani o gatti: il modello prende un'immagine, per esempio di un gatto o di un cane, e aggiunge rumore in passi successivi, finché non si capisce più cosa rappresenti questa immagine. Questa è la diffusione in avanti.
La cosa incredibile è che questo processo si può invertire: da un'immagine rumorosa si può recuperare l'immagine del gatto (o del cane). Questo processo si chiama diffusione inversa e avviene seguendo gli stessi passi temporali della diffusione in avanti.
Questo processo, che in Stable Diffusion è chiamato predittore del rumore (noise predictor), avviene grazie a una rete neurale convoluzionale completamente connessa chiamata U-net, molto usata nel campo del machine e del deep learning e addestrata a stimare la quantità di rumore sull'immagine.
In pratica durante l'allenamento si prendono delle immagini (per esempio di cani o gatti), si aggiunge del rumore a passi successivi (tempi) e si insegna al predittore del rumore quanto rumore è stato aggiunto calibrando i suoi pesi e mostrandogli il risultato corretto.
U-Net è chiamato così perché la sua architettura ricorda la lettera U e si distingue per la sua capacità di prendere un'immagine e trovare una rappresentazione a bassa dimensione di quell'immagine riducendo il campionamento (ovvero trovando gli attributi importanti), e riportare l'immagine alla prima dimensione aumentando il campionamento. Capiremo successivamente l'importanza di questo concetto.
Alla fine, mostrando un'immagine, il predittore del rumore saprà dire quanto rumore è stato aggiunto, il che significa che se diamo al predittore del rumore un'immagine con rumore completamente casuale, questo sarà in grado di ottenere da essa un'immagine di un gatto (o di un cane).
Questo processo si chiama generazione incondizionata, perché non siamo in grado di decidere se verrà fuori un gatto o un cane.
Più in dettaglio, la rimozione del rumore, cioè la transizione dal passo temporale arbitrario t al passo temporale t-1, dove t numero è il numero compreso tra T0 (l'immagine senza il rumore) e il numero finale TMAX (rumore totale) avviene in nel seguente modo: l'input è l'immagine nel passo temporale t, e in quel passo temporale c'è un rumore specifico sull'immagine. Utilizzando la rete neurale U-Net, è possibile prevedere una quantità totale di rumore, quindi una parte del rumore totale viene rimossa dall'immagine nel passo temporale t. In questo modo si ottiene l'immagine nel passo temporale t-1 dove c'è meno rumore.
A livello matematico, ha molto più senso eseguire questo metodo un numero T di volte piuttosto che cercare di rimuovere l'intero rumore. Ripetendo questo metodo, il rumore verrà gradualmente rimosso e otterremo un'immagine molto più "pulita".
Ci siamo quasi, perché nella nostra descrizione manca la parola "latente". Ovvero, Stable Diffusion e un modello di diffusione latente. Lo spazio latente è una rappresentazione di dati compressi che avviene codificando le informazioni utilizzando bit più piccoli rispetto alla rappresentazione originale. In pratica possiamo rappresentare un vettore a 20 dimensioni usandone uno a 10 dimensioni. Questo comporta una riduzione dei dati, ma ci permette di conservare solo le informazioni più importanti.
Perché diciamo questo? Perché il processo di diffusione è molto esigente dal punto di vista computazionale. Se pensate infatti a un'immagine da 512x512 pixel con tre canali colore, avrete un vettore composto da 786.432 dimensioni. Per un'immagine.
Se DALL-E utilizza spazi di questo tipo, a livello di pixel (con trucchi per fare i calcoli in modo più veloce), è solo grazie ai suoi server. Ma se dovete utilizzare la GPU del vostro computer, potreste impiegarci anni. È qui che entrano in gioco gli spazi latenti, che sono 48 volte più piccoli dello spazio dei pixel.
Per addestrare il modello si utilizza una tecnica chiamata codificatore automatico variazionale (VAE, variational autoencoder), composta da due elementi, un codificatore e un decodifificatore.
In pratica si addestra il modello a classificare le immagini utilizzando reti neurali convoluzionali: il codificatore apprende come comprimere un'immagine in una rappresentazione dimensionale inferiore nello spazio latente, mentre decodificatore ripristina l'immagine dallo spazio latente. Durante l'addestramento, invece di generare un'immagine rumorosa, si genera un tensore casuale nello spazio latente (rumore latente), che corrompe la rappresentazione dell'immagine nello spazio latente. Questo è molto veloce, perché lo spazio latente è piccolo, e il VAE lo può fare perché un'immagine, anche ad elevata dimensionalità, è in realtà composta da relativamente poche informazioni fondamentali. Per esempio un gatto ha quattro zampe e una coda, un volto ha due occhi, un naso e una bocca, con una specifica relazione. E così via.
La risoluzione dell'immagine si riflette nella dimensione del tensore dell'immagine latente.
Lo spazio latente di Stable Diffusion è 4x64x64, ma solo per immagini 512×512, mentre per immagini verticali 768×512 è 4x96x64. Per immagini a risoluzione più elevata, si usa un upscaler AI.
Ora possiamo aggiungere il concetto di predittore del rumore allo spazio latente per la diffusione inversa. Se generiamo una matrice casuale di spazio latente, il predittore del rumore stima il rumore, lo sottrae dalla matrice latente e ripete il passaggio fino a specifici passaggi di campionamento. A questo punto il decodificatore del VAE converte la matrice latente nell'immagine finale.
Ma quando Stable Diffusion genera un'immagine, lo fa a partire da un testo. Questo è chiamato condizionamento, in quanto si agisce sul predittore del rumore per darci quello che vogliamo a partire dal rumore.
Ogni parola di un testo viene convertita in un numero chiamato token da un programma chiamato Tokenizer CLIP, sviluppato da OpenAI e utilizzato anche in DALL-E 2. Ogni token viene quindi convertito in un vettore di 768 valori chiamato embedding, e gli embedding vengono elaborati dal trasformatore di testo e sono pronti per essere dati a predittore di rumore.
Questo processo in pratica consente di far comprendere ai computer le parole, grazie all'allenamento ricevuto, e visto che può riconoscere solo parole che ha già visto, "romperà" le parole sconosciute in parole più piccole per comprenderle. Ecco perché non è sempre vero che una parola significa un token, e Stable Diffusion può utilizzare fino a 75 token in un prompt, il che non significa quindi necessariamente 75 parole.
Dopo essere passati dal trasformatore di testo, l'input passa diverse volte attraverso il predittore di rumore attraverso la rete U-Net. Questo consente di associare le parole del prompt, per esempio se scrivo "un uomo con i capelli rossi", Stable Diffusion associa rossi con capelli (questo processo si chiama self-attention) e sa già come condizionare la diffusione inversa verso immagini con capelli rossi (questo processo si chiama cross-attention). È qui che il testo incontra l'immagine.
Quindi, quando diamo un prompt al nostro modello, questo crea un'immagine tutto rumore, ovvero tensore casuale nello spazio latente, che potete controllare impostando il seme (seed) del generatore di numeri casuali in modo da ottenere sempre lo stesso valore.
Il predittore di rumore U-Net prende l'immagine latente e il prompt di testo come input e prevede il rumore, anche nello spazio latente (un tensore 4x64x64), poi sottrae il rumore latente dall'immagine latente. Questa diventa la nuova immagine latente. Questo passaggio viene ripetuto un verto numero di volte, per esempio 20, e a questo punto il decodificatore del VAE riconverte l'immagine latente nello spazio dei pixel.
Ma questa non è l'unica applicazione. Utilizzando il prompt testuale, si possono aggiungere nuovi elementi a un'immagine già esistente. Questa tecnica si chiama image-to-image e funziona codificando un'immagine di input nello spazio latente. Poi vi si aggiunge del rumore e il predittore di rumore U-Net prende l'immagine latente e il prompt di testo come input per prevedere il rumore nello spazio latente (un tensore 4x64x64).
A questo punto sottrae il rumore latente dall'immagine latente, che diventa la nuova immagine latente. Si ripete il passaggio diverse volte e infine il decodificatore di VAE riconverte l'immagine latente nello spazio dei pixel.
Per esempio, dando il prompt "uno Snoopy che si fa un selfie davanti al Colosseo" (a Snoopy taking a selfie in front of the colosseum), dà questo risultato.
Altre applicazioni sono l'inpainting, che è un caso particolare di image-to-image e aggiunge il rumore in modo simile alla riduzione del rumore per dipingere parti dell'immagine, e la depth-to-image, che consente di generare immagini successive con ulteriore condizionamento utilizzando una mappa di profondità.
Il modello è piuttosto cambiato nel tempo e mentre scriviamo Stable Diffusion è arrivato alla versione 2.1. Le differenze sono diverse, ma una delle principali è che la versione 1 usa CLIP ViT-L/14 di Open AI mentre la prima usa OpenClip, un modello molto più grande e in grado di migliorare la qualità dell'immagine. Inoltre, anche se i modelli CLIP di Open AI sono open source, i dati di allenamento no e OpenClip consente di utilizzare trasparenza.
Ci sono differenze piuttosto marcate tra le due versioni, soprattutto quando si inseriscono nomi di artisti per ricreare uno stile, ora molto più difficile con v2. Questo è dovuto ai diversi dati su cui sono stati allenati i modelli CLIP.
Detto questo, il modello ha diversi problemi in alcuni scenari, in quanto le versioni iniziali sono state allenate su un set di dati costituito da immagini con risoluzione 512 × 512, e anche se ora con la versione 2 si possono generare nativamente immagini 768 x 768 la qualità delle immagini generate si degrada notevolmente quando le specifiche dell'utente si discostano dalla risoluzione prevista. Inoltre il modello presenta problemi con gli arti, soprattutto le dita, una questione aperta anche in altri modelli e che Midjourney ha risolto solo con la versione 5.
Una delle caratteristiche di Stable Diffusion è però la possibilità, per chi lo scarica sul computer, di poter scegliere il modello che si adatta meglio alle proprie esigenze, e persino di addestrarlo per crearsi un modello personalizzato.
L'utilizzo di un modello addestrato su immagini reali, per esempio, produrrà risultati realistici, mentre un modello addestrato sulle illustrazioni ad acquerello vi permetterà di ottenere immagini create con quello stile.
Vediamo ora come provare Stable Diffusion.
Come usare Stable Diffusion
Come abbiamo anticipato nel primo paragrafo, Stable Diffusion può essere installato sul computer e utilizzato in locale grazie alla bassa potenza richiesta dalla sua architettura. Ma questo non è l'unico modo per utilizzarlo. Scopriamo insieme quelli disponibili.
Demo
Il modo più semplice per provare Stable Diffusion è utilizzare la demo disponibile su sito Hugging face, una comunità di appassionati di IA che fornisce l'accesso gratuito all'ultima versione del modello Stable Diffusion (ver 2.1). Questo è il modo più semplice ma anche più limitato, infatti potete solo inserire un prompt e un prompt negativo, per indirizzare meglio il modello.
Lo strumento impiega in media un minuto per generare un'immagine, anche perché sarete in una lista di attesa con altri utenti.
Tutto quello che dovete fare è andare sulla pagina della demo, nella voce Enter your prompt inserire un testo che volete trasformare in immagine, se volete inserire un testo negativo in Enter a negative prompt, che indirizzi meglio l'IA, e cliccate su Generate Image.
Un prompt deve contenere un soggetto, quello che volete presentare nell'immagine, un mezzo o uno stile per rappresentarlo, un nome di artista e dettagli per rendere l'immagine come desiderate.
Esempi di prompt negativi sono brutto, deformato, di bassa qualità e così via. Scrivete in inglese, però. Dopo aver generato le immagini, potete scaricarle sul computer cliccandoci sopra con il tasto destro del mouse e selezionando Salva immagine. Se per qualche motivo volete utilizzare Stable Diffusion v1, potete farlo cliccando in alto sul link corrispondente.
Online
Un altro modo per usare Stable Diffusion online è usare DreamStudio,uno strumento online creato da Stability AI, il team responsabile di Stable Diffusion.
DreamStudio fornisce l'accesso all'ultima versione dei modelli Stable Diffusion ed è molto più veloce di Hugging Face in quanto può generare un'immagine in meno di 15 secondi con le impostazioni predefinite.
Ma il vantaggio di DreamStudio è il fatto di poter utilizzare molte più opzioni per personalizzare l'output. Potete infatti cambiare il numero di step, il seed, la "forza" del prompt, il formato dell'output, i modelli e impostare uno stile.
Di contro, DreamStudio non è gratis ma offre una prova gratuita ai suoi utenti. All'inizio, avrete 100 crediti che potete utilizzare per generare immagini, che vi permetteranno di generare da 100 a 500 immagini a seconda delle vostre impostazioni. Potete acquistare 1000 crediti per 10 dollari.
Per usarlo, recatevi a questo indirizzo e cliccate su Get Started. Acconsentite ai termini di servizio mettendo la spunta alla casella e cliccando su Accept, e poi dovete creare un account, se volete utilizzando i vostri account Google o Discord.
A questo punto potrete iniziare a creare. A sinistra avrete il prompt e il prompt negativo, sopra di essi Enhance, che determina lo stile (quindi il modello di Stable Diffusion), e sotto la possibilità di caricare un'immagine.
Sotto ancora, ci sono le impostazioni e cliccando su Advanced avrete la possibilità di giocare con una serie di opzioni, tra cui il seed. Ogni singola immagine generata da Stable Diffusion ha un attributo univoco chiamato seed (seme), che proprio come quello delle piante consente di far crescere piante della stessa specie. Il seme è la rappresentazione di una particolare immagine, ed è anche la chiave principale dell'immagine. In genere non avete bisogno di toccarlo in quanto è un numero generato casualmente, ma usando lo stesso seed e cambiando una parola potete creare diverse immagini cambiando solo un aspetto, per esempio, la stessa immagine fatta da artisti diversi, o un'espressione di un volto.
Quando siete pronti, cliccate su Dream e Stable Diffusion creerà la vostra immagine.
WebUI
Se volete invece scaricare Stable Diffusion sul computer, potete utilizzare WebUI, una web app open source gratuita compatibile con Mac, Windows e Linux e che vi dà accesso ai modelli Stable Diffusion. WebUI è basata sulla libreria Gradio per Stable Diffusion e consente di accedere a impostazioni avanzate come la scelta di un metodo di campionamento o il ripristino dei volti (particolarmente utile se generate volti umani utilizzando Stable Diffusion).
Pur essendo così potente, ha anche alcuni aspetti negativi, in quanto dovrete installare strumenti come Python, git e utilizzare gli strumenti di riga di comando per alcune operazioni. Quindi dovrete perderci dietro un po' di tempo, e anche l'interfaccia non è particolarmente intuitiva, in quanto parte dal presupposto che conosciate le impostazioni del modello Stable Diffusion.
Download app
Un altro software che potete usare per installare Stable Diffusion sul computer è DiffusionBee
, un programma open source gratuito per Mac molto facile da installare e usare. DiffusionBee ha un'interfaccia semplice e vi offre indicazioni per utilizzare funzionalità avanzate.
Lo svantaggio di questa app è che utilizza il vecchio modello Stable Diffusion (ver 1.5.1) invece del 2.1 e che è solo per Mac. Inoltre consuma molte risorse hardware: sono necessari almeno 16 GB di RAM per creare un'immagine velocemente e non dover attendere più di un minuto.
Se volete invece installare Stable Diffusion sul vostro dispositivo mobile, potete utilizzare alcune app. Nessuna di queste è ufficiale, quindi potrebbero contenere pubblicità o chiedervi dei soldi per usarle.
Draw Things è un'app per iOS e gratuita che potete usare per generare app in pochi secondi.
AI Dreamer è un'app per iOS che richiede di pagare per accedere a Stable Diffusion tramite un sistema a crediti, ma ve ne regala 50. In meno di tre secondi avete un'immagine.