Stable Diffusion: differenze tra le versioni

Da Wiki AI.
Nessun oggetto della modifica
 
(17 versioni intermedie di 5 utenti non mostrate)
Riga 1: Riga 1:
Nella sua forma più semplice è un modello [[text-to-image]], dato un [[prompt]] testuale, genera un'immagine corrispondente.
{{Template modello
E' stato finanziato da Stability AI, ed è stato rilasciato nel 2022. Il paper originale è [[High-Resolution Image Synthesis with Latent Diffusion Models (Giugno 2022)]].
|NomeInglese=Stable Diffusion
|AnnoDiCreazione=2022
|VersioneCorrente=SD3 (2023)
|Pubblicazione=High-Resolution Image Synthesis with Latent Diffusion Models
}}
Modello per la generazione di immagini open-source rilasciato da Stability AI, basato sul [[Modello di Diffusione Latente (LDM)|modello di diffusione]] : la prima versione risale al 22 agosto 2022. Diversamente da [[VAE]] e [[Generative Adversarial Networks (GAN)]], che generano le immagini in un solo passaggio, Stable Diffusion genera le immagini iterativamente.
 
Il paper originale è [[High-Resolution Image Synthesis with Latent Diffusion Models (Giugno 2022)]].


== Versioni ==
* Versione 1: immagini 512x512
* Versione 1: immagini 512x512
* Versione 2: immagini 768x768 (09/2022)
* Versione 2: immagini 768x768 (09/2022)
* [https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0 Versione XL (SDXL)]: immagini 1024x1024 (07/2023)
* [https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0 Versione XL (SDXL)]: immagini 1024x1024 (07/2023)
== Principale differenza rispetto agli altri modelli di generazione di immagini ==
Diversamente da [[VAE]] e [[Generative Adversarial Networks (GAN)]], che generano le immagini in un solo passaggio, Stable Diffusion genera le immagini iterativamente.


== Architettura ==
== Architettura ==
Utilizza un tipo di [[Modello Di Diffusione]], anche chiamato [[LDM (Modello di Diffusione Latente)]].
Utilizza un tipo di [[Modello Di Diffusione]], anche chiamato [[LDM (Modello di Diffusione Latente)]].
Durante il processo di codifica, o [[Forward Diffusion]], un [[VAE - Variational Autoencoder]] comprime l'immagine dallo spazio dei pixel a uno spazio latente con meno dimensioni, catturando il significato semantico dell'immagine, da cui il termine [[LDM (Modello di Diffusione Latente]]. Lo spazio latente di Stable Diffusion è di dimensioni 4x64x64 per immagini di dimensioni 512x512, 48 volte più piccolo dello spazio originale dei pixel.
Durante il processo di codifica, o [[Forward Diffusion]], un [[VAE - Variational Autoencoder]] comprime l'immagine dallo spazio dei pixel a uno spazio latente con meno dimensioni, catturando il significato semantico dell'immagine, da cui il termine [[LDM (Modello di Diffusione Latente)]]. Lo spazio latente di Stable Diffusion è di dimensioni 4x64x64 per immagini di dimensioni 512x512, 48 volte più piccolo dello spazio originale dei pixel.


[[File:forward-diffusion.png|500px]]
[[File:forward-diffusion.png|500px]]
Riga 21: Riga 24:
La parte di condizionamento, derivante dal prompt, utilizza la codifica dei token - creta utilizzando il tokenizer [[CLIP]] di [[OpenAI]] in [[embedding]] (dimensione 768 per AUTOMATIC1111), fino a un numero massimo di 75 token. Questi embedding vengono poi utilizzati per "indirizzare" il modello di [[Reverse Diffusion]] verso immagini che contengono ciò che viene richiesto nel prompt.
La parte di condizionamento, derivante dal prompt, utilizza la codifica dei token - creta utilizzando il tokenizer [[CLIP]] di [[OpenAI]] in [[embedding]] (dimensione 768 per AUTOMATIC1111), fino a un numero massimo di 75 token. Questi embedding vengono poi utilizzati per "indirizzare" il modello di [[Reverse Diffusion]] verso immagini che contengono ciò che viene richiesto nel prompt.


== Addestramento ==
Stable Diffusion è quindi un modello di diffusione '''latente'''. Invece di operare nello spazio vettoriale dell'immagine (che per un'immagine 512 x 512 con tre canali colore richiederebbe uno spazio composto da 786,432 dimensioni!), comprime l'immagine rappresentandola in uno spazio latente. Lo spazio latente risulta 48 volte più piccolo e per questo il calcolo è alleggerito e molto più veloce di quello di altri modelli come Imagen di Google e [[Dall-e 3 (2023)]] di [[OpenAI]].
 
L'addestramento, secondo Wikipedia, è stato eseguito utilizzanto [[LAION-5B]].
L'addestramento, secondo Wikipedia, è stato eseguito utilizzanto [[LAION-5B]].


== Dove provarlo ==
=== Tasks di Stable Diffusion ===
 
* [[Txt2img (Stable Diffusion)]]
*Via [[gradio (Stable Diffusion)]][https://www.gradio.app/]
* [[img2img]]
*[[Stable Diffusion WebUI]]
* [[Extras]]
 
== Overview Parametri Globali ==
 
[[File:Overview global.png|800px]]
 
Questi sono i parametri globali di Stable Diffusion che esercitano un impatto generale sulle generazioni indipendentemente dal tool utilizzato. Abbiamo, da sinistra verso destra:
 
*'''Stable Diffusion checkpoint'''
** ''Cos'è'': La selezione del checkpoint stabilisce quale versione del modello di Stable Diffusion viene impiegata per il processo di refining. Di default viene proposto realisticVisionV51_v51VAE.safetensors [15012c538f], specializzato sulla generazione di immagini realistiche, ma è possibile utilizzare una miriade di variazioni diverse del modello. Ne puoi trovare molti su Civit AI [https://civitai.com/]
** ''A cosa corrisponde dell'Architettura'': Consente di selezionare lo stato specifico dei pesi applicati al modello pre-addestrato di Stable Diffusion, risultato di un [[fine-tuning]] finalizzato all'ottenimento di uno stile in particolare.
** ''Come impatta l'Output'': Cambiare il checkpoint cambierà lo stile e, potenzialmente, la qualità delle immagini generate.
 
*'''SD VAE'''
** ''Cos'è'': la [[VAE]] serve in questo caso a migliorare la qualità dell'immagine generata, per esempio attraverso l'apprendimento di una [[rappresentazione latente]] più efficiente dei dati. In sostanza, agisce su come i dati vengono compressi e ricostruiti durante il processo di generazione.
** ''A cosa corrisponde dell'Architettura'':
Nella funzione di caricamento del modello, VAE SD è un argomento che se attivo inizializza il [[ciclo for]] qui sotto:
 
    def load_model_from_config(config, ckpt, verbose=False, vae_sd=None):
        print(f"Loading model from {ckpt}")
        pl_sd = torch.load(ckpt, map_location="cpu")
        msg = None
        if "global_step" in pl_sd:
            msg = f"This is global step {pl_sd['global_step']}. "
        if "model_ema.num_updates" in pl_sd["state_dict"]:
            msg += f"And we got {pl_sd['state_dict']['model_ema.num_updates']} EMA updates."
        global_step = pl_sd.get("global_step", "?")
        sd = pl_sd["state_dict"]
        if vae_sd is not None:
            for k in sd.keys():
                if "first_stage" in k:
                    sd[k] = vae_sd[k[len("first_stage_model."):]]
** ''Come impatta l'Output'': L'impatto dell'attivazione del VAE ("automatic") rispetto alla sua disattivazione ("none") varia a seconda del modello utilizzato, ma in generale si traduce in una migliore nitidezza, coerenza e qualità visiva generale.
 
*'''[[Clip Skip]]([https://github.com/AUTOMATIC1111/stable-diffusion-webui/discussions/5674])'''
** ''Cos'è'': Determina a quanti strati prima dell'ultimo viene interrotta l'elaborazione.
** ''A cosa corrisponde dell'Architettura'': Va a troncare semplicemente il processo generativo.
** ''Come impatta l'Output'': Più è alto il clip skip più la generazione sembra fermarsi a stadi molto primordiali di elaborazione, risultando in una generazione che pur essendo di qualità normale a livello di risoluzione, risulta completamente scollegata dal prompt. Alzare il clip skip può essere utile quando vogliamo generare un'immagine molto generica, la cui realizzazione non necessita che vengano scomodate molte sottocategorie. Ad esempio, se voglio un'immagine semplice di una mucca, senza necessità di particolari dettagli, probabilmente si potrà ottenere un risultato soddisfacente anche senza sfruttare tutti gli strati della rete.
 
* Infine, in basso, troviamo la '''Barra di selezione del [[Tool]]
 
== Tool ==
* [[txt2img]]
* img2img


== Links ==
=== Links ===


=== Papers ===
==== Papers ====
* [[High-Resolution Image Synthesis with Latent Diffusion Models (Giugno 2022)]]: paper originale
* [[High-Resolution Image Synthesis with Latent Diffusion Models (Giugno 2022)]]: paper originale
* [https://arxiv.org/abs/2012.09841 Taming Transformers for High-Resolution Image Synthesis]
* [https://arxiv.org/abs/2012.09841 Taming Transformers for High-Resolution Image Synthesis]


=== Github ===
==== Github ====
* [https://github.com/layerdiffusion/LayerDiffusion Transparent Image Layer Diffusion using Latent Transparency]
* [https://github.com/layerdiffusion/LayerDiffusion Transparent Image Layer Diffusion using Latent Transparency]
* [https://github.com/layerdiffusion/sd-forge-layerdiffusion?tab=readme-ov-file Transparent Image Layer Diffusion using Latent Transparency (WIP extension for SD WebUI)]
* [https://github.com/layerdiffusion/sd-forge-layerdiffusion?tab=readme-ov-file Transparent Image Layer Diffusion using Latent Transparency (WIP extension for SD WebUI)]
Riga 86: Riga 47:
* [https://github.com/CompVis/taming-transformers Taming Transformers for High-Resolution Image Synthesis]
* [https://github.com/CompVis/taming-transformers Taming Transformers for High-Resolution Image Synthesis]


=== Tutorial ===
==== Tutorial ====
* [https://stable-diffusion-art.com/how-stable-diffusion-work/ How Stable Diffusion Work]
* [https://stable-diffusion-art.com/how-stable-diffusion-work/ How Stable Diffusion Work]
* [https://pub.towardsai.net/diffusion-models-vs-gans-vs-vaes-comparison-of-deep-generative-models-67ab93e0d9ae Diffusion Models vs. GANs vs. VAEs: Comparison of Deep Generative Models]
* [https://pub.towardsai.net/diffusion-models-vs-gans-vs-vaes-comparison-of-deep-generative-models-67ab93e0d9ae Diffusion Models vs. GANs vs. VAEs: Comparison of Deep Generative Models]
* [https://www.youtube.com/watch?v=MXmacOUJUaw&t=1s Stable Diffusion Illustrated]
* [https://www.youtube.com/watch?v=MXmacOUJUaw&t=1s Stable Diffusion Illustrated]
[[Category:modello]]
{{#seo:
            |title=Stable Diffusion
            |title_mode=append
            |keywords=intelligenza artificiale, apprendimento automatico, modello di diffusione, generazione di immagini, Stable Diffusion, LDM, VAE, GAN, open source, Stability AI, CLIP, embedding, Txt2img, img2img
            |description=Stable Diffusion è un modello di intelligenza artificiale open-source per la generazione di immagini, rilasciato da Stability AI nel 2022. Basato sul modello di diffusione latente (LDM), genera immagini di alta qualità in modo iterativo, a differenza di VAE e GAN. Questo articolo esplora l'architettura, le varie versioni, i task e i link utili per Stable Diffusion.
            |image=forward-diffusion.png
            }}

Versione attuale delle 16:26, 17 ago 2024

Stable Diffusion
Nome Inglese Stable Diffusion
Sigla
Anno Di Creazione 2022
Versione Corrente SD3 (2023)
URL
Pubblicazione High-Resolution Image Synthesis with Latent Diffusion Models
URL Pubblicazione

Modello per la generazione di immagini open-source rilasciato da Stability AI, basato sul modello di diffusione : la prima versione risale al 22 agosto 2022. Diversamente da VAE e Generative Adversarial Networks (GAN), che generano le immagini in un solo passaggio, Stable Diffusion genera le immagini iterativamente.

Il paper originale è High-Resolution Image Synthesis with Latent Diffusion Models (Giugno 2022).

  • Versione 1: immagini 512x512
  • Versione 2: immagini 768x768 (09/2022)
  • Versione XL (SDXL): immagini 1024x1024 (07/2023)

Architettura

Utilizza un tipo di Modello Di Diffusione, anche chiamato LDM (Modello di Diffusione Latente). Durante il processo di codifica, o Forward Diffusion, un VAE - Variational Autoencoder comprime l'immagine dallo spazio dei pixel a uno spazio latente con meno dimensioni, catturando il significato semantico dell'immagine, da cui il termine LDM (Modello di Diffusione Latente). Lo spazio latente di Stable Diffusion è di dimensioni 4x64x64 per immagini di dimensioni 512x512, 48 volte più piccolo dello spazio originale dei pixel.

In maniera iterativa viene poi aggiunto del rumore gaussiano alle rappresentazioni delle immagini come vettori in questo spazio latente, in step, finchè non diventa rumore bianco. Un tipico numero di iterazioni è 1000. Il processo di Reverse Diffusion rimuove poi il rumore, attraverso l'utilizzo di un modello U-Net a cui si insegna a predire quanto rumore è stato aggiunto ad ogni passo. Infine, la parte Decoder del VAE - Variational Autoencoder viene utilizzata per creare i valori dei pixel dallo spazio latente.

La parte di condizionamento, derivante dal prompt, utilizza la codifica dei token - creta utilizzando il tokenizer CLIP di OpenAI in embedding (dimensione 768 per AUTOMATIC1111), fino a un numero massimo di 75 token. Questi embedding vengono poi utilizzati per "indirizzare" il modello di Reverse Diffusion verso immagini che contengono ciò che viene richiesto nel prompt.

Stable Diffusion è quindi un modello di diffusione latente. Invece di operare nello spazio vettoriale dell'immagine (che per un'immagine 512 x 512 con tre canali colore richiederebbe uno spazio composto da 786,432 dimensioni!), comprime l'immagine rappresentandola in uno spazio latente. Lo spazio latente risulta 48 volte più piccolo e per questo il calcolo è alleggerito e molto più veloce di quello di altri modelli come Imagen di Google e Dall-e 3 (2023) di OpenAI.

L'addestramento, secondo Wikipedia, è stato eseguito utilizzanto LAION-5B.

Tasks di Stable Diffusion

Links

Papers

Github

Tutorial