Generazione immagini ML based a casa - "We have Midjourney at home", letteralmente

Immagino che nel model che sto usando non ci sia alcuna minima associazione tra “burning” ed un’immagine di qualcosa in fiamme.

Ora provo lo stesso con Stable Diffusion 2.1.
edit:

Nope

non è così strano però, se parti cercando di interpretare come funzioni il text to image.
anche solo per economia di tag non è che puoi mettere ogni singola parola che ti sembri attinente ad un’immagine.

è una parola di uso comune però, mi sembra strano

proverò su automatic1111

@char Attento che dreamshaper per funzionare bene ha bisogno delle textual inversion BadDream, FastNegativeV2.

Badream → BadDream + UnrealisticDream (Negative Embeddings) - BadDream v1.0 | Stable Diffusion Embedding | Civitai
Fastnegative → Fast Negative Embedding (+ FastNegativeV2) - v2 | Stable Diffusion Embedding | Civitai

Utilizzare o meno le textual inversion corrette produce dei risultati totalmente diversi.

@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?

  1. 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;
  2. Il predittore di rumore stima quanto rumore ci sia;
  3. Il rumore stimato viene “tolto” matematicamente dal latent space (l’ho detto prima, è roba su cui si possono fare operazioni matematiche);
  4. Si ripetono i passi 2-3 N volte (e questo è il numero di iterazioni);
  5. 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.

5 Likes

prometto che mi metto a leggere

sto provando l’estensone Roop che è insighface ( noto tool per il faceswap ) per sd-webui ed effettivamente i risultati sono ottimi l’alternativa sarebbe stata il dreambooth che è piuttosto laborioso da usare, tra selezione delle immagini, tempo di training ecc.

ho passato nell’img2img l’immagine generata poco sopra swappandola con il volto di Eva Green il risultato è questo

Quindi in definitiva cosa hai usato? Quick recap please

Poi: il files VMFP che NDO.ai crea vanno lasciati o bisogna cancellarli? Son botte da svariati giga l’uno eh

L’estensione si chiama Roop appare in un menù a tendina sotto a quello della ControlNet quando e installata correttamente, la trovate nella lista dell’estensioni della stable-diffusion-webui di Automatic1111 solo che non basta installarla da lì e preme su apply per vederla funzionare, bisogna aprire il link e seguire le istruzioni riguardo i componenti da installare.

Attualmente mi fuziona alla perfezione anche se da qualche warning in fase di caricamento mi sa che è dovuto al fatto che l’autore non la sta sviluppando da più da agosto ed è stata ripresa da un altro dev ed ora si chiama Reactor

Se non avete installato Roop potete direttamente installare Reactor

Bisogna andare in Extension > install from url ed incollare questo link https://github.com/Gourieff/sd-webui-reactor

Occhio che bisogna avere VS C++ Build Tools C++ ( è quasi 8gb :argh: ) perché compila una python wheel apposta.

P.S.

riguardo ai file scaricati, spesso le estensioni installano altri modelli trainati apposta e certe volte quando non lo fanno bisogna andare su hugging face a cercarli e scaricali manualmente :asd:

se li cancelli la prossima volta che usi quelle combinazioni di modello vae lora, ti deve ri-fare “i calcoli” - se li lasci la, li ricarica e parte con la generazione.

vedi tu come preferisci.

1 Like

Thanks.

Niente, sfanculo NOD.ai e provo Stable Diffusion, anche se sto gia bestemmiando sul Python

ti sconsiglio di usare conda, per la Webui di Automatic1111 serve python 3.10.6 conta la versione, con questa vai sul sicuro.

ma nod.ai usa stable diffusion :thinking:

Alloro ho capito malissimo… Avevo installato nod.ai per i cazzi suoi in una directory differente…

Vabbeh, meglio cosi’

mmm

nod.ai (shark ai) è una gui per usare stable diffusion.

funziona anche via linea di comando, ma il modello è sempre stable diffusion. puoi caricare modelli checkpoint, vae e lora alternativi scaricandoli da civitai e huggingface e li piazzi nelle cartelle di nod.ai sotto models e sotto lora e vae

poi nella gui selezioni cosa vuoi usare e shark ai si crea quei file vmfb per poi generare cose

tra l’altro, se hai AMD automatic1111 fa cagare.

Ehm, delle mille mila cosa che ti chiede di installare, quale? Non ne ho trovata una che sia solo “C++ Build Tools”

Se ha AMD cambia tutto di recente c’è la versione apposita nota come Olive con onnx e directML che da un bel boost e le fa rivaleggiare con Nvidia.

Ma ste cose vanno dette prima :asd:

Per Olive, visto ma ancora non messo in pratica.
La soluzione iper plug and play per AMD è SHARK (clic sulla sezione software nel primo post)

Pensa che gira pure su NVIDIA e sembra dia un boost anche lì, l’ho installato con successo ma sembra che i modelli che usiamo normalmente non vadano e vanno convertiti o qualcosa del genere e non ho indagato più di tanto.

P.S.

ho ridato un occhiata ed effettivamente richiede che i modelli siano ricompilati per ONNX e da l’opzione di scaricare la 1.5 all’occorrenza.

Infatti ho AMD, credo che passero a nVidia alla svelta sul mini atx, piu’ che altro per rimettere la 6800 dentro l’eGpu.

Grazie delle dritte, vado a farmi un ripasso di quello che avete gia’ scritto, se ho domande chiedo :approved:

ho provato ad installare il modello “v2-1_768-nonema-pruned.ckpt” in automatic1111 ed ottengo lo stesso risultato, senza modificare il testo
deve esserci qualcosa di diverso in shark

SD 1.5

SD 2.1