@Drest esce fuori con domande importanti: “che roba sono checkpoint, LoRA, VAE?”.
Provo a dare una risposta per il mio livello di comprensione della cosa.
Mi perdonerà chi veramente ci ha capito qualcosa; Drest, se vuoi la risposta scrolla fino in fondo ma personalmente non penso sia facile capire il tutto senza leggere ogni parte
Partiamo dal comincio: cosa è un diffusion model?
Alla base è un modello generativo (=che “crea” cose) progettato per creare dati che assomiglino a ciò su cui è stato trainato.
La preparazione del modello è divisa in due processi: il primo è la trasformazione di un’immagine in rumore (=un’immagine senza senso di colori sparpagliati), mentre il secondo è il tentativo di ricostruire l’immagine originale usando il rumore come punto di partenza. Al risultato del secondo processo poi si assegna un punteggio - quanto è riuscito a ricostruire l’immagine di partenza? Tanto, poco? Si registrano metadati riguardo all’immagine di partenza, sequela di operazioni e punteggio e si passa ad un altro tentativo.
Questo è quel che costituisce il training del model - come ricostruire un’immagine a partire da rumore, stimare quanto rumore ci sia in un’immagine (=quanti cicli di “pulizia” l’algoritmo stimi servano per tornare da rumore all’immagine originaria), e i weight associati alle operazioni matematiche che trasformano le immagini intermedie, passo dopo passo.
Storicamente, questi modelli, rispetto ad altri tipi, avevano il problema di essere molto lenti; questo, fino a quando è stata scoperta la tecnica della latent phase.
"Latent"?
La cosiddetta latent phase è dove si approssima il set di dati di cui sopra (immagini, metadati, operazioni, weight) ad un set di dimensione inferiore, con tecniche di compressione. Quel che ne deriva è il cosiddetto latent space, una rappresentazione compressa e matematicamente interagibile di un’immagine.
Nella latent phase si fanno operazioni matematiche sull’immagine, entrambe le cose rappresentate da latent space (=vorrei farla breve anche qui, quindi “una forma alternativa per immagini ed operazioni che possano interagire più facilmente, in termini matematici” ? Qualcosa del genere).
Ma è una compressione, non si perdono dati?
Tecnicamente sì. Ma la maggior parte delle immagini non è random, si tratta di un soggetto su uno sfondo. Tecnicamente si perdono informazioni ma nella maggior parte dei casi ci sono degli elementi di ripetizione talmente universali che, ecco, si può prendere una scorciatoia e non perdere molto.
Cosa ha di speciale Stable Diffusion? Punto uno: CLIP
Che introduce la capacità di interpretare un prompt testuale.
Non la sto a complicare troppo ma in sostanza SD usa un algoritmo di OpenAI, CLIP, che è in grado di creare un latent space di cui sopra (=la trasformazione di dati non strettamente matematici in dati matematici) a partire da testo. L’algoritmo farebbe anche cose più complesse ma la parte utile qua è che crea un insieme di informazioni da far interagire col resto dei dati del training.
In sostanza fa da ponte e permette di usare testo per selezionare una versione approssimata quanto basta per non perdere dati dell’insieme di metadati-operazioni-punteggi.
Cosa ha di speciale Stable Diffusion? Punto due: Variational AutoEncoder (VAE)
Un VAE è una rete neurale (=un’altra categoria di algoritmi che fa esplorazione di possibilità matematiche a partire da un set di funzioni ed insiemi numerici) che facilita la conversione da/a latent space, a/da immagini (=cioè, proprio in pixel!).
Anche qui, provo a farla semplice: nel caso specifico di Stable Diffuzion, il VAE si ficca dopo la produzione del latent space finale, cercando di fare una decompressione mirata ad ottenere specifici risultati ed esaltare certi bias.
Questa è la fase di ritorno dell’approssimazione menzionata prima!
Quindi, in sostanza il VAE, a partire da un dato approssimato, prova ad aggiungere informazioni che siano in linea con un ulteriore training. Chessò, “ai bordi dell’immagine metto SEMPRE il layout di una carta di Magic” potrebbe essere un VAE molto molto grezzo.
Perché tutto questo casino?
Perché gli algoritmi di diffusione sono molto lenti, e la scoperta che questi livelli di approssimazione in realtà non perdono dati utili al processo è stata una roba rivoluzionaria.
Conclusione
Quindi, dicevamo.
Abbiamo un sistema che converte testo in dati matematici; abbiamo un sistema che cerca di predire quanta “roba random” (disturbo) ci sia in un’immagine; abbiamo un sistema di decompressione di immagini che può aggiungere dettagli mirati. Come funziona il tutto?
- Viene creato, pescando dal model, un latent space completamente casuale (a partire da un seed)- una secchiata di dati che rappresentano un’operazione di quelle tracciate e documentate;
- Il predittore di rumore stima quanto rumore ci sia;
- Il rumore stimato viene “tolto” matematicamente dal latent space (l’ho detto prima, è roba su cui si possono fare operazioni matematiche);
- Si ripetono i passi 2-3 N volte (e questo è il numero di iterazioni);
- Il VAE applica le sue correzioni nel decomprimere il latent space in immagine.
Ma avevi detto che avresti menzionato Checkpoint, LoRA e VAE?
Beh, sì, ok, leviamo VAE dalla lista che quello dovrebbe essere più o meno chiaro.
“Checkpoint” è un dump dello stato interno di un model; in pratica, stabilito che le scelte che ha preso il model per fare un certo output sono valide, si possono mettere da parte e riutilizzarle, o reinserirle nel model come “operazioni più gradite delle altre”.
Qua servirebbe spiegare cosa sia un weight in una rete neurale ma in sostanza è “quanto” un elemento di operazione della rete viene chiamato in causa per applicare una trasformazione ai dati in ingresso.
In sostanza se uno scarica ed usa un checkpoint model, sta usando una variante selezionata di quello specifico model con weight ritoccati perché con essi ha prodotto un risultato desiderato.
Un LoRA model è una finezza ulteriore su questo concetto: quanto a Stable Diffusion diciamo di volere “un uomo con gli occhi blu”, non tira fuori un uomo con una maglietta blu. Questo è perché associa “occhi” a “blu” e fa una ricerca di qualsiasi risultato possa ricordare contenuti che abbiano entrambi gli elementi ma non esclusivamente tali elementi. Questo tipo di mode modifica quanto i due elementi interagiscono: voglio che “uomo con occhi blu” mi tiri fuori più frequentemente possibile immagini in cui ci siano, sì gli occhi blu, ma poi anche un cielo o un mare dello stesso colore, in modo da creare il contrasto occhi ↔ silouhette ↔ paesaggio? Ok, mi serve un LoRA che inizi a costruire un’associazione tra colore degli occhi e panorama.
In sostanza è un model che applica correzioni molto piccole al checkpoint model di partenza.
Ecco perché mettere a caso un model, un LoRA ed un VAE produce risultati che non hanno senso!
DISCLAIMERONE FINALE: se ho capito male e scritto cazzate correggetemi che cancello e correggo.