Anifusione-SD
TL; DR
Si tratta di un nuovo modello simile a Stable-Diffusion (ottimizzato da SD2) per le immagini degli anime, che supporta la risoluzione 768x768 e, secondo le nostre valutazioni, supera in modo significativo alcuni popolari modelli di anime. I checkpoint sono pubblici ( istruzioni di installazione ), la demo è disponibile da tempo.
- Introduzione
- Background
- Modelli
di diffusione - Diffusione latente
- Diffusione stabile
- Diffusione Waifu
- Diffusione stabile 2 - Il nostro modello: allenamento
- Condizionatore
- Problemi tecnici e ottimizzazioni
- Aggiornamento del set
di allenamento - Allenamento ad alta risoluzione
- Modifiche al campionamento - Risultati
- Confronto con altri modelli di anime
- Discussione
- Riferimenti
- Puntatori
Dopo i miei esperimenti con modelli di diffusione di addestramento da zero, è stato sottolineato da più persone che esiste un gruppo di versioni di diffusione stabile ottimizzate sugli stessi set di dati simili. In particolare:
- Waifu Diffusion : utilizza un sottoinsieme relativamente piccolo di dati e inserisce semplicemente il prompt del tag in CLIP per il condizionamento), senza alcuna modifica del codice alla diffusione stabile originale (questo è un problema IMO). Tuttavia, sembra essere il modello di diffusione anime più popolare al momento. Ha rilasciato il checkpoint per il pubblico, a differenza del modello successivo;
- NovelAI : questo viene fatto da una vera azienda, non da ricercatori/ingegneri indipendenti. Non rilasciano il modello, ma forniscono un'interfaccia a pagamento. Apparentemente, c'è stato anche qualche dramma con il checkpoint e il codice trapelato, da cui sembra che abbiano apportato alcune piccole modifiche all'originale Stable Diffusion;
- Anything-v3 : questo è apparso un po 'più tardi, non ci sono molte informazioni sul modello, ma si sospetta che sia stato messo a punto da WaifuDiffusion (almeno, utilizza trasformazioni di prompt simili prima di inviarlo a CLIP). Produce immagini molto dettagliate e di bell'aspetto, ma non è molto fedele al prompt. Il suo spazio di output è molto piccolo (manca di diversità, tutte le immagini hanno lo stesso stile e sono simili tra loro) e ricorda i modelli GAN pre-diffusione. A differenza degli altri modelli, anche questo non è in grado di generare NSFW, quindi forse è stato ottenuto mettendo a punto un piccolo set di dati di immagini di alta qualità da un singolo artista.
Tuttavia, data l'abbondanza di modelli in quest'area, all'inizio ho deciso di non preoccuparmi di farmi coinvolgere e di lasciare che i progressi facessero il loro corso. Ma ora è stato rilasciato Stable Diffusion 2 e non ci sono ancora progressi visibili nei modelli di anime. Quindi ho deciso di fare un tentativo: in questo post descrivo come ho messo a punto Stable Diffusion 2 con un prompt conditioner personalizzato e mostro i risultati. Ovviamente pubblico anche il modello: dai pochi suggerimenti che ho provato, era migliore dei modelli sopra elencati. Le prossime sezioni si concentrano sui dettagli tecnici, se non sei interessato, puoi saltare direttamente a Risultati .
Sfondo
Per capire cosa sta succedendo e cosa è cambiato, diamo prima una breve panoramica dei modelli esistenti.
Modelli di diffusione
Non entrerò nei dettagli dei modelli di diffusione, ci sono già molte recensioni positive su Internet. Per i nostri scopi, è sufficiente sapere che l'idea è quella di scomporre il processo di generazione dell'immagine in una sequenza di passaggi di “denoising”. Durante l'addestramento, la spina dorsale del modello (in caso di immagini, di solito un file UNet) riceve un'immagine danneggiata e il passaggio di denoising e sta tentando di annullare un singolo passaggio di danneggiamento. Durante l'inferenza, partiamo da un rumore casuale e applichiamo ripetutamente la spina dorsale per "annullare" tutti i passaggi di corruzione immaginari. La matematica esatta dietro questo deve essere precisa. Al momento dell'inferenza, la maggior parte dei moderni modelli di diffusione modifica il processo per ridurre il numero di passaggi di campionamento (questo è stato reso possibile da qualcuno che ha notato che il processo è sospettosamente simile alla risoluzione di un'equazione differenziale stocastica con un metodo numerico e ha applicato un risolutore DE più intelligente invece).
Diffusione latente
Questa è probabilmente l'idea più importante, utilizzata nella maggior parte dei modelli di diffusione aperta. Aziende come Google o OpenAI possono permettersi di addestrare e utilizzare modelli di diffusione nello spazio pixel originale, perché dispongono di molto hardware. Ma per un profano, addestrare (o persino eseguire) UNet in uno spazio di 512x512 pixel è molto costoso. L'idea è di addestrare l'autoencoder che comprime l'immagine dallo spazio originale 512x512x3 a uno spazio latente (in caso di diffusione stabile - 64x64x4). L'autoencoder è addestrato come VAE con regolarizzazione basata su KL, per mantenere lo spazio latente "bello".
Quindi, il modello esegue la diffusione in questo spazio 64x64x4, che è ovviamente molto più efficiente. Lo svantaggio è che il VAE non è perfetto e alcune informazioni vengono perse durante la compressione dell'immagine. Ma in pratica funziona molto bene.
FWIW, sono possibili approcci alternativi, ad esempio Imagen genera un'immagine a bassa dimensione nello spazio dei pixel, e quindi la ingrandisce progressivamente. Tuttavia, questo non è rilevante per il modello che stiamo descrivendo in questo articolo.
Diffusione stabile
Questa è stata più una svolta sociale che tecnica. Il modello era un modello di diffusione latente "vanilla", addestrato su LAION e, a differenza della maggior parte dei precedenti modelli di generazione di immagini, è stato rilasciato al pubblico. Ciò ha reso la tecnologia disponibile a un vasto pubblico che non ha familiarità con il Machine Learning, scatenando molta creatività, discussioni e persone che l'hanno messa a punto su vari set di dati (ad esempio i modelli di anime sopra menzionati).
Una scelta interessante nell'architettura che è molto rilevante per noi è il modo in cui il modello esegue il condizionamento. Di solito i modelli vengono addestrati in entrambe le modalità "incondizionata" ( UNet(corrupted image) ~ image ) e condizionale ( UNet(corrupted image, condition) ~ image ) e durante il campionamento viene utilizzata una guida senza classificatore : invece di utilizzare UNet ( corrupted image , condizione ) durante la generazione delle immagini, utilizza C * UNet ( immagine corrotta, condizione ) — ( C — 1) * UNet ( immagine corrotta ) e Cè significativamente maggiore di 1 (es. 7). Questo non è molto intuitivo, ma migliora notevolmente sia la qualità dell'immagine che la fedeltà immediata delle immagini generate.
Ciò che è rilevante per noi è come si ottiene la condizione . In Stable Diffusion, usano l'ultimo livello nascosto del codificatore di testo del modello CLIP . È congelato, cioè i gradienti non vengono retropropagati ad esso durante l'allenamento. Può essere considerato un modello di codificatore del linguaggio, con alcuni sapori secondari dell'immagine che orientano la comprensione del linguaggio verso la comprensione visiva.
Waifu Diffusione
Questa è una diffusione stabile messa a punto su immagini anime. Sembra che abbiano utilizzato un sottoinsieme di Danbooru2021 (o qualcosa di simile) come set di addestramento. Hanno usato Stable Diffusion così com'è, senza alcuna modifica al codice (hanno comunque messo a punto la parte del decodificatore di VAE, per farlo funzionare leggermente meglio con le immagini degli anime).
Di conseguenza, utilizzano in modo simile CLIP come condizionatore, alimentandolo con una stringa con tag come prompt. Immagino che abbia funzionato abbastanza male, dal momento che preelaborano anche i tag (ad esempio sostituendo i caratteri di sottolineatura con gli spazi). Ma anche con ciò, sembra che la comprensione CLIP del prompt non sia ottimale.
Diffusione stabile 2
Questa è una versione incrementale che ha riqualificato il modello (della stessa dimensione) da zero e ha anche sostituito il condizionatore con OpenCLIP . Ha anche alcune interessanti funzionalità aggiuntive, come img2img basato sulla profondità e un modello a risoluzione più elevata (768x768 pixel).
Il nostro modello: la formazione
L'obiettivo è mettere a punto Stable Diffusion 2 sulle immagini dell'anime, sostituendo l'encoder con un modello personalizzato specializzato per l'insieme di tag come input, al contrario del linguaggio naturale del CLIP. Oltre a un migliore condizionamento, ciò consentirebbe anche la tecnica di aumento rapido di Anifusion , che ha aiutato così tanto la qualità e la diversità lì.
Condizionatore
Usiamo lo stesso approccio di Anifusion: il modello di condizionamento è un trasformatore di dimensioni BERT senza incorporamenti posizionali (per catturare la simmetria dei prompt dei tag: l'ordine dei tag non dovrebbe avere importanza). Sostituiamo semplicemente il condizionatore, mantenendo invariata la parte di attenzione incrociata della spina dorsale di diffusione.
Una domanda importante qui è come inizializzare il trasformatore di pesi. Iniziare dal condizionatore non allenato e dall'UNet addestrato e allenarli insieme può portare il processo di allenamento a distruggere o degradare in modo significativo i pesi dell'UNet. Fortunatamente, non è difficile risolvere questo problema: possiamo bloccare l'UNet ed eseguire l'addestramento solo per la parte del trasformatore per un po' di tempo.
Problemi tecnici e ottimizzazioni
Per rendere efficiente l'addestramento, è importante comprimere la dimensione del batch più elevata possibile nella RAM video (ad esempio perché il costo dell'applicazione della logica di ottimizzazione viene pagato solo una volta per batch). Ci sono fondamentalmente due direzioni qui.
Modifiche alla pipeline
Il codice di addestramento SD canonico esegue il codificatore VAE online, analizzando l'immagine non elaborata e codificandola. Questo è il frutto più basso di cui sbarazzarsi: i pesi VAE consumano VRAM, anche le variabili intermedie dall'applicazione di questo codificatore consumano VRAM, il processo di codifica richiede tempo. In particolare, se eseguiamo più passaggi sui dati, non ha senso pagare il costo della codifica della stessa immagine più volte.
Fortunatamente, questa parte è facile da ottimizzare: dobbiamo solo pre-codificare tutte le immagini nel set di addestramento. Un ulteriore vantaggio è che il training set risultante è molto più piccolo (in termini di dimensioni del disco) rispetto alle immagini originali 512x512 nello spazio dei pixel.
Un altro modo per risparmiare un po' di VRAM è disabilitare EMA. La media mobile esponenziale è un trucco per migliorare leggermente la qualità del modello calcolando (approssimativamente) la media dei pesi da una serie di ultimi checkpoint e non archiviare EMA è un modo semplice per utilizzare meno VRAM senza danneggiare molto il modello risultante.
Cambiamenti di formazione
Un modo popolare per accelerare l'addestramento e risparmiare VRAM è utilizzare una precisione inferiore: invece del solito fp32 (numeri in virgola mobile a 32 bit), utilizzare fp16 o bf16 (variazioni di numeri in virgola mobile a 16 bit) o precisione mista (eseguire alcune operazioni in fp16).
L'ho provato e in effetti aiuta le prestazioni, ma è troppo pericoloso. In particolare, a un certo punto, ho aggiunto "with torch.autocast():" (precisione mista) per attirare l'attenzione, e poi ho perso un bel po' di tempo a capire perché il modello sta lentamente divergendo nel tempo.
Di conseguenza, ho deciso che sarebbe stato più sicuro non applicare ottimizzazioni di questa natura al modello, dato che l'addestramento era già abbastanza efficiente.
Aggiornamento set di allenamento
In Anifusion è stata utilizzata una versione precedente del set di dati Danbooru , quindi ho deciso che è un buon momento per aggiornarlo, estendendo allo stesso tempo la dimensione del set di addestramento e il set di tag supportati nel prompt. Tuttavia, c'erano un paio di complicazioni: (1) la nuova versione del set di dati non era un semplice superset del precedente e (2) ho deciso di farlo mentre il modello era già in fase di addestramento, quindi un po' di lavoro aggiuntivo per trasferire l'esistente il checkpoint era necessario.
Differenze tra set di dati
Questo è un po 'minore, ma dopo aver scaricato i metadati per la nuova versione del set di dati, ho notato che un gruppo di immagini (un paio percento) è scomparso. Anche alcuni tag che prima erano entrati nella top-2.5k sono scomparsi (inclusi alcuni dei più popolari), inoltre, le immagini rimosse corrispondevano ai tag rimossi.
Un'ulteriore ispezione ha rivelato che i tag scomparsi corrispondevano tutti al modello "frangiato NSFW" (alcuni erano così frastagliati che non sapevo nemmeno che esistessero cose del genere...). Era un po 'incoerente, poiché altri tag e immagini simili nella natura erano mantenuti al loro posto. Immagino che il manutentore del set di dati o il sito di hosting dell'immagine di origine lo abbia implementato come un rapido hack per affrontare alcuni problemi di pubbliche relazioni. Ad ogni modo, ho appena preso l'unione di set di dati vecchi e nuovi, ottenendo circa 2 milioni di immagini su cui allenarmi. Inoltre, ho campionato 800.000 immagini con risoluzione ≥ 786x768, per perfezionare successivamente il modello a risoluzione più alta.
Estendere il set di tag
Questa sezione è in realtà un po 'non banale. Nel momento in cui è stato prodotto il nuovo set di dati, il modello è stato addestrato per un bel po' di tempo, con un trasformatore di condizionamento ben convergente, prendendo come input i prompt dai tag top-2.5k. Per la versione più recente, ho deciso di prendere invece i tag top-12k. Come aggiungerli al modello?
Ciò che deve essere aggiornato è la tabella di incorporamento del trasformatore (da 2500x1024 a 12000x1024). Un approccio ingenuo consiste nell'inizializzare in modo casuale i nuovi incorporamenti e addestrare il modello per un po' di tempo con l'UNet congelato, aggiornando solo il trasformatore. Ma questo è (1) dispendioso in termini di tempo e calcolo, (2) noioso. Possiamo inizializzarli meglio?
Diamo un'occhiata a quali informazioni sono a nostra disposizione. Abbiamo già addestrato 2.5k incorporamenti e gli incorporamenti per i nuovi tag dovrebbero essere in qualche modo simili a loro. Ma a quali? Un'idea ingenua è usare gli incorporamenti di tag semanticamente simili. Ma come si ottiene la somiglianza semantica? Il buon vecchio word2vec è molto bravo in questo, quindi possiamo semplicemente prendere i set di tag e addestrare gli incorporamenti di word2vec su di essi. Di seguito è riportata una visualizzazione t-SNE del risultato (i punti scuri corrispondono ai tag NSFW, in modo che sia facile saltarli per le persone che non vogliono guardarli): collegamento interattivo .
Diamo un'occhiata alla stessa visualizzazione per gli incorporamenti addestrati da 2,5k dal trasformatore: collegamento interattivo .
Quindi non è proprio la stessa cosa e si concentra più sull'aspetto visivo che sul semantico. Tuttavia, dovrebbe essere abbastanza vicino, quindi possiamo calcolare gli incorporamenti iniziali per i nuovi tag come segue: prendi i vicini più vicini nello spazio word2vec da quelli top-2.5k e aggrega i loro incorporamenti del trasformatore. In effetti, possiamo anche migliorarlo un po': addestrare un piccolo NN che trasforma word2vec in modo che l'aggregazione del vicino più vicino corrisponda al vero embedding sui primi 2.5k e applicarlo al resto dei tag.
Con questo, otteniamo un'inizializzazione ragionevole per i nuovi incorporamenti, modifichiamo l'ultimo checkpoint e riprendiamo l'addestramento sui nuovi dati così come sono.
Addestramento ad alta risoluzione
Stable Diffusion 2 ne ha una versione che genera immagini di dimensioni 768x768 (ovvero 2,25 volte più grandi di 512x512), che ha alcune proprietà interessanti (ad esempio sembra gestire il disegno delle dita meglio della versione a risoluzione inferiore). Quindi abbiamo deciso di fare lo stesso con il nostro modello. In particolare, abbiamo due fasi della formazione:
- Bassa risoluzione: formazione su immagini 512x512 (spazio latente 64x64x4), con dimensione batch 11, tasso di apprendimento 5e-6, per 1 milione di passi;
- Alta risoluzione: riprendendo dalla fase precedente, addestrati su immagini 768x768 (spazio latente 96x96x4), con batch size 5, learning rate 5e-6, 80k step.
Modifiche al campionamento
In Anifusion , l'aumento del prompt con un modello separato ha migliorato drasticamente i risultati. Intuitivamente, è più facile campionare cose nello spazio dei concetti discreti, in contrasto con lo spazio continuo implicito all'interno del processo di diffusione.
Qui applichiamo la stessa tecnica, riaddestrando il trasformatore di potenziamento rapido sul nuovo set di addestramento. Osserviamo lo stesso effetto: la qualità e la diversità del campione aumentano drasticamente con l'aumento del prompt, specialmente per i prompt brevi.
Risultati
Sembra che il modello 768x768 produca immagini migliori rispetto a quello 512x512, e non solo per la risoluzione: la coerenza complessiva delle immagini e (soprattutto) i dettagli anatomici dei personaggi sono migliori. Tuttavia, sembra che la fedeltà immediata sia leggermente peggiore (non ho però misurazioni adeguate, solo una mia impressione).
Una cosa da notare è che rispetto ad Anifusion, il modello sembra essere più orientato verso immagini NSFW/audaci. Alcuni di essi possono essere attribuiti al rapido aumento, ma anche la parte UNet è responsabile. Non sono sicuro del motivo per cui sta accadendo (le modifiche al set di allenamento erano piuttosto piccole; forse le dimensioni/a partire da Stable Diffusion causano questo?).
Esaminiamo i vari tipi di immagini passo dopo passo.
Ritratti
Questo è il caso d'uso più semplice e i ritratti di anime sono stati generati con successo anche nell'era GAN. Quindi non sorprende che il modello non abbia problemi con questo (alcuni esempi di seguito).
Singolo carattere, tag popolari
Questo è un test più difficile e, come previsto, si possono ottenere immagini scadenti di tanto in tanto (raramente). Una modalità di fallimento comune è una cattiva anatomia: un braccio o una gamba aggiuntivi. E, naturalmente, le dita sono piuttosto impegnative per il modello.
Singolo carattere, tag di coda
Qui stiamo testando i tag meno popolari, in particolare quelli che sono stati aggiunti nelle fasi successive della formazione (vedi sopra per maggiori dettagli). Sembrano funzionare abbastanza bene, anche se non perfetti. Alcuni esempi sono sotto. In generale, sembra che i tag carattere siano più facili per il modello rispetto ai tag concetto.
Interazioni con i personaggi
Finalmente arriviamo a qualcosa di interessante. Original Anifusion non funzionava bene quando i personaggi interagivano. Il nuovo modello è migliore?
Più personaggi in piedi uno accanto all'altro sembrano essere OK:
Anche le azioni semplici in qualche modo funzionano:
Anche le interazioni con gli oggetti vanno più o meno bene:
Tuttavia, se proviamo a specificare interazioni complicate, il più delle volte produce orrore corporeo (non posterò qui queste immagini, perché possono essere inquietanti). Perché sta succedendo? Suppongo che ciò sia dovuto al fatto che i prompt sono solo insiemi di tag e non specificano le interazioni in modo sufficientemente preciso. Ciò che ha fatto sì che i modelli di diffusione producessero buone immagini in primo luogo è stata la guida senza classificatore: enfatizzare eccessivamente i suggerimenti ha migliorato drasticamente la qualità rispetto al campionamento immediato, perché il campionamento di concetti complicati all'interno della diffusione è difficile. Quindi possiamo aspettarci che tutto ciò che è specificato in modo inequivocabile nel prompt verrà generato correttamente, ma le ambiguità verranno risolte in un modo non così piacevole. I suggerimenti in linguaggio naturale possono essere migliori in questo senso.
FWIW, nei commenti al post originale di Anifusion su reddit, Gwern ha suggerito di utilizzare BLIP per generare prompt in linguaggio naturale dalle immagini; In realtà l'ho provato e la qualità dei prompt era estremamente bassa, quindi non è così facile.
Stili
Nell'originale Stable Diffusion, le persone hanno trovato numerosi modi per specificare gli stili nel modello, principalmente aggiungendo i nomi di alcuni artisti. Funziona lo stesso per il modello anime?
Provandolo: funziona molto bene (questo è un vantaggio rispetto a AnythingV3). Di seguito sono riportati esempi in vari stili casuali.
Confronto con altri modelli di anime
Non facciamo un confronto con AnythingV3, in quanto non rispetta realmente il prompt, generando immagini simili praticamente per qualsiasi cosa (come suggerisce il nome). Questo lascia WaifuDiffusion e NovelAI. Abbiamo deciso contro il confronto con NovelAI, in quanto ciò richiederebbe l'utilizzo del checkpoint trapelato, ed è meglio stare alla larga da quel dramma. Questo ci lascia con WaifuDiffusion.
Una cosa da notare è che il confronto su prompt brevi sarebbe troppo ingiusto per WaifuDiffusion: non include l'aumento del prompt (a differenza di Anifusion), producendo risultati molto scarsi su prompt brevi. Quindi facciamo invece due confronti diversi. In uno, campioniamo i set di tag dal set di dati originale, rimuovendo efficacemente il prompt augmentation dalla considerazione e confrontando solo la parte di diffusione. Nel secondo, costruiamo manualmente alcuni prompt di medie dimensioni e valutiamo entrambi i modelli su di essi (questo include l'effetto dell'aumento del prompt).
Set di tag dal set di dati
Campioniamo 97 set di tag dal set di dati (in modo uniforme, filtrando le immagini classificate come "sicure"). Per Anifusion, li preelaboriamo aggiungendo "rating_s, score_perc_100, adjusted_score_perc_100" al prompt. Per WaifuDiffusion, li preelaboriamo sostituendo i caratteri di sottolineatura con gli spazi. In entrambi i casi, utilizziamo il campionamento DDIM con 50 passaggi e una scala di guida senza classificatore 9.
Dopo aver ottenuto alcune valutazioni umane (con i lati capovolti casualmente per il confronto), otteniamo i seguenti risultati rispetto a Waifu:
- L'anifusione è migliore: 30%
- Waifu è meglio: 24%
- Più o meno lo stesso: 46%
Un modello di fallimento che ho notato in Waifu: spesso genera un'immagine secondaria invece dell'immagine completa, troncando la testa del personaggio. Un modello di fallimento di Anifusion è un NSFW non sollecitato (e correlato: cattiva anatomia; per qualche motivo, più l'immagine è vicina al NSFW, peggiore è l'anatomia del modello).
Nota a margine: qui puoi trovare i risultati AnythingV3 per gli stessi prompt. I risultati sembrano buoni, ma si può capire perché sono riluttante a includerlo nei confronti: tutte le immagini sembrano avere esattamente lo stesso stile, gravemente carenti di diversità, il che significa che il modello ha uno spazio di output molto più piccolo.
Quindi, con il campionamento in distribuzione, non è drasticamente migliore. Ma cosa succede se usiamo la versione ad alta risoluzione del modello?
- L'anifusione è migliore: 41%
- Waifu è meglio: 13%
- Più o meno lo stesso: 46%
Si può notare che c'è una quantità non trascurabile di "più o meno lo stesso". La maggior parte di questi esempi sono entrambi i modelli ugualmente buoni, ma ce ne sono alcuni in cui entrambi i modelli sono orribilmente cattivi (in qualche modo sono correlati in questo).
Prompt manuali di medie dimensioni
Utilizziamo la stessa preelaborazione del prompt descritta nella sezione precedente. Prepariamo manualmente 33 prompt di medie dimensioni ragionevoli (ovviamente poiché sono preparati da una singola persona, potrebbero non essere rappresentativi della distribuzione complessiva).
Qui i risultati sono molto diversi:
- L'anifusione è migliore: 73%
- Waifu è meglio: 9%
- Più o meno lo stesso: 18%
Come possiamo vedere, il prompt augmentation fa la differenza. Cosa succede quando usiamo il modello ad alta risoluzione? I risultati sono abbastanza simili ( dati grezzi ):
- L'anifusione è migliore: 73%
- Waifu è meglio: 3%
- Più o meno lo stesso: 24%
Accessibilità per i laici
Un'osservazione interessante è che anche dopo un milione di minibatch di addestramento, il modello continua a migliorare. Non è chiaro se il modello ricordi qualcosa dal checkpoint di diffusione stabile originale dopo così tanti passaggi. Forse il set di dati anime è abbastanza semplice da poter addestrare da zero modelli di diffusione di dimensioni SD su hardware di base, senza l'avvio a caldo dalla SD esistente? Questa è una direzione su cui sarebbe da indagare: se così fosse, dovrebbe diventare più facile provare nuove architetture per i privati, senza la necessità di spendere milioni di dollari in informatica, come accade con la formazione basata su LAION.
Ulteriori miglioramenti della qualità
È interessante vedere fino a che punto è possibile arrivare con il modello attuale, quindi voglio perfezionarlo un po' di più, possibilmente utilizzando l'intero set di dati, piuttosto che il sottoinsieme 2M. Ma sospetto che il fattore limitante sia la qualità del set di dati, non la quantità di messa a punto (ad esempio, per migliorare la qualità del modello, sarebbe necessario alimentare solo immagini di qualità superiore o aggiungere un identificatore speciale al condizionatore che aiuta il modello per distinguere le immagini migliori da quelle peggiori). Per quanto ne so, non ci sono modelli affidabili come questo per gli anime (per le immagini generali, le persone usano il sottoinsieme "estetica" di LAION). Sebbene ci siano alcuni modelli che producono grandi risultati che sembrano diversi da questo modello o WaifuDiffusion (ad esempio il modello anime di Midjorney, che è disponibile solo sotto forma di immagini selezionate da loro), quindi questo potrebbe essere possibile.
È importante notare che la generazione a risoluzione più elevata migliora la qualità in aspetti diversi dalla semplice risoluzione, ad esempio le famigerate "mani AI" migliorano. Mi chiedo se aumentarlo ulteriormente a 1024x1024 produrrebbe ulteriori miglioramenti. Qualcosa da provare può essere l'utilizzo della diffusione in cascata (es. Imagen ) nello spazio latente (es. 64x64 -> 128x128 -> 256x256 nello spazio latente, ottenendo 2048x2048 nello spazio originale).
Usabilità
Una preoccupazione per ciò che sto pubblicando è che si tratta di una prova di concetto. Il codice per il modello è diverso da SD, quindi non è realmente compatibile con la maggior parte degli strumenti (in particolare, la parte del prompt tokenizer). Quindi, anche se questo modello sembra migliore di altri modelli anime disponibili, la facilità d'uso non è eccezionale. Una potenziale soluzione potrebbe essere la comunità (o me, se ho tempo per farlo) integrandolo correttamente con gli strumenti esistenti o rendendolo compatibile con SD a livello di interfaccia.
Riferimenti
- Diffusione stabile 2
- Diffusione latente
- Set di dati Danbooru2021
- Istruzioni per visualizzare l'interfaccia utente web
- Checkpoint modello (huggingface): 512x512 , 768x768 , prompt augmenter
- Repo SD Github adattato per il modello
- Demo 768x768: limitato a "rating: Safe", continuerò a farlo funzionare per un po' di tempo, ma alla fine non lo manterrò

![Che cos'è un elenco collegato, comunque? [Parte 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































