Utilizza Stable Diffusion XL con Amazon SageMaker JumpStart in Amazon SageMaker Studio

Usa Stable Diffusion XL con SageMaker JumpStart in SageMaker Studio di Amazon

Oggi siamo entusiasti di annunciare che Stable Diffusion XL 1.0 (SDXL 1.0) è disponibile per i clienti tramite Amazon SageMaker JumpStart. SDXL 1.0 è il modello di generazione di immagini più recente di Stability AI. Le novità di SDXL 1.0 includono la generazione di immagini native a 1024 pixel in una varietà di rapporti di aspetto. È progettato per un uso professionale e calibrato per immagini fotorealistiche ad alta risoluzione. SDXL 1.0 offre una varietà di stili artistici predefiniti pronti all’uso in casi di marketing, design e generazione di immagini in diversi settori. Puoi facilmente provare questi modelli e usarli con SageMaker JumpStart, un hub di apprendimento automatico (ML) che fornisce accesso ad algoritmi, modelli e soluzioni di ML in modo da poter iniziare rapidamente con l’ML.

In questo post, spiegheremo come utilizzare i modelli SDXL 1.0 tramite SageMaker JumpStart.

Cos’è Stable Diffusion XL 1.0 (SDXL 1.0)

SDXL 1.0 è l’evoluzione di Stable Diffusion e la prossima frontiera per l’IA generativa per immagini. SDXL è in grado di generare immagini sorprendenti con concetti complessi in vari stili artistici, inclusa la fotorealismo, a livelli di qualità che superano i migliori modelli di immagini disponibili oggi. Come la serie originale Stable Diffusion, SDXL è altamente personalizzabile (in termini di parametri) e può essere implementato su istanze di Amazon SageMaker.

L’immagine seguente di un leone è stata generata utilizzando SDXL 1.0 utilizzando un semplice prompt, che esploreremo in seguito in questo post.

Il modello SDXL 1.0 include i seguenti punti salienti:

  • Libertà di espressione – Fotorealismo di prim’ordine, nonché capacità di generare arte di alta qualità in praticamente qualsiasi stile artistico. Immagini distinte vengono create senza alcuna sensazione particolare che sia impartita dal modello, garantendo assoluta libertà di stile.
  • Intelligenza artistica – Migliore capacità di generare concetti che sono notoriamente difficili da rappresentare per i modelli di immagini, come mani e testo, o oggetti e persone disposti nello spazio (ad esempio, una scatola rossa sopra una scatola blu).
  • Prompting più semplice – A differenza di altri modelli generativi di immagini, SDXL richiede solo poche parole per creare immagini complesse, dettagliate ed esteticamente piacevoli. Non è più necessario utilizzare paragrafi di qualificatori.
  • Più accurato – Il prompting in SDXL non è solo semplice, ma più fedele all’intenzione dei prompt. Il migliorato modello CLIP di SDXL comprende il testo in modo così efficace che concetti come “La piazza rossa” sono intesi come diversi da “una piazza rossa”. Questa precisione consente di fare molto di più per ottenere l’immagine perfetta direttamente dal testo, anche prima di utilizzare le funzionalità più avanzate o il raffinamento che Stable Diffusion è famoso per.

Cos’è SageMaker JumpStart

Con SageMaker JumpStart, i professionisti di ML possono scegliere tra una vasta selezione di modelli all’avanguardia per casi d’uso come la scrittura di contenuti, la generazione di immagini, la generazione di codice, la risposta a domande, la scrittura di copie, la riassunzione, la classificazione, il recupero di informazioni e altro ancora. I professionisti di ML possono implementare modelli di base su istanze SageMaker dedicate da un ambiente isolato di rete e personalizzare i modelli utilizzando SageMaker per l’addestramento e l’implementazione dei modelli. Il modello SDXL è disponibile oggi in Amazon SageMaker Studio e, al momento della scrittura, è disponibile nelle regioni us-east-1, us-east-2, us-west-2, eu-west-1, ap-northeast-1 e ap-southeast-2.

Panoramica della soluzione

In questo post, mostreremo come implementare SDXL 1.0 su SageMaker e usarlo per generare immagini utilizzando prompt sia da testo a immagine che da immagine a immagine.

SageMaker Studio è un ambiente di sviluppo integrato (IDE) basato sul web per l’apprendimento automatico che consente di creare, addestrare, debuggare, implementare e monitorare i modelli di apprendimento automatico. Per ulteriori dettagli su come iniziare e configurare SageMaker Studio, consulta Amazon SageMaker Studio.

Una volta che sei nell’interfaccia utente di SageMaker Studio, accedi a SageMaker JumpStart e cerca Stable Diffusion XL. Scegli la scheda del modello SDXL 1.0, che aprirà un notebook di esempio. Ciò significa che sarai responsabile solo dei costi di calcolo. Non ci sono costi associati al modello. SDXL 1.0 a peso chiuso offre script e container ottimizzati per SageMaker con tempi di inferenza più veloci e può essere eseguito su istanze più piccole rispetto a SDXL 1.0 a peso aperto. Il notebook di esempio ti guiderà attraverso i passaggi, ma discuteremo anche come scoprire e distribuire il modello più avanti in questo post.

Nelle sezioni seguenti mostriamo come puoi utilizzare SDXL 1.0 per creare immagini fotorealistiche con prompt più brevi e generare testo all’interno delle immagini. Stable Diffusion XL 1.0 offre una composizione immagine migliorata e la generazione di volti con visualizzazioni mozzafiato ed estetica realistica.

Parametri di Stable Diffusion XL 1.0

I seguenti sono i parametri utilizzati da SXDL 1.0:

  • cfg_scale – Quanto rigidamente il processo di diffusione si attiene al testo del prompt.
  • altezza e larghezza – L’altezza e la larghezza dell’immagine in pixel.
  • steps – Il numero di passi di diffusione da eseguire.
  • seed – Seed del rumore casuale. Se viene fornito un seed, l’immagine generata risultante sarà deterministica.
  • sampler – Quale campionatore utilizzare per il processo di diffusione per denostrare la nostra generazione.
  • text_prompts – Un array di prompt di testo da utilizzare per la generazione.
  • weight – Fornisce a ciascun prompt un peso specifico

Per ulteriori informazioni, fare riferimento alla documentazione di Stability AI sul testo per l’immagine.

Il seguente codice è un esempio dei dati di input forniti con il prompt:

{
  "cfg_scale": 7,
  "height": 1024,
  "width": 1024,
  "steps": 50,
  "seed": 42,
  "sampler": "K_DPMPP_2M",
  "text_prompts": [
    {
      "text": "Una fotografia di una pizza fresca con basilico e pomodori, da un forno tradizionale",
      "weight": 1
    }
  ]
}

Tutti gli esempi in questo post si basano sul notebook di esempio per Stability Diffusion XL 1.0, che si trova nel repository GitHub di Stability AI.

Genera immagini utilizzando SDXL 1.0

Negli esempi seguenti, ci concentriamo sulle capacità dei modelli di Stability Diffusion XL 1.0, tra cui una fotorealismo superiore, una composizione immagine migliorata e la capacità di generare volti realistici. Esploriamo anche l’estetica visiva significativamente migliorata, che si traduce in output visivamente accattivanti. Inoltre, dimostriamo l’utilizzo di prompt più brevi, che consentono la creazione di immagini descrittive con maggiore facilità. Infine, illustriamo come il testo nelle immagini sia ora più leggibile, arricchendo ulteriormente la qualità complessiva del contenuto generato.

Il seguente esempio mostra come utilizzare un prompt semplice per ottenere immagini dettagliate. Utilizzando solo poche parole nel prompt, è stato in grado di creare un’immagine complessa, dettagliata ed esteticamente piacevole che assomiglia al prompt fornito.

text = "fotografia di latte art di un gatto"

output = deployed_model.predict(GenerationRequest(text_prompts=[TextPrompt(text=text)],
                                            seed=5,
                                            height=640,
                                            width=1536,
                                            sampler="DDIM",
                                             ))
decode_and_show(output)

Successivamente, mostriamo l’utilizzo del parametro di input style_preset, che è disponibile solo su SDXL 1.0. Passando un parametro style_preset si guida il modello di generazione di immagini verso uno stile particolare.

Alcuni dei parametri di style_preset disponibili sono enhance, anime, photographic, digital-art, comic-book, fantasy-art, line-art, analog-film, neon-punk, isometric, low-poly, origami, modeling-compound, cinematic, 3d-mode, pixel-art e tile-texture. Questa lista di stili preset è soggetta a modifiche; fare riferimento all’ultima versione e alla documentazione per gli aggiornamenti.

Per questo esempio, utilizziamo un prompt per generare una teiera con uno style_preset di origami. Il modello è stato in grado di generare un’immagine di alta qualità nello stile artistico fornito.

output = deployed_model.predict(GenerationRequest(text_prompts=[TextPrompt(text="teiera")],
                                            style_preset="origami",
                                            seed = 3,
                                            height = 1024,
                                            width = 1024
                                             ))

Proviamo altri stili predefiniti con prompt diversi. Il prossimo esempio mostra uno stile predefinito per la generazione di ritratti utilizzando style_preset="fotografico" con il prompt “ritratto di un leone vecchio e stanco in posa reale”.

text = "ritratto di un leone vecchio e stanco in posa reale"

output = deployed_model.predict(GenerationRequest(text_prompts=[TextPrompt(text=text)],
                                            style_preset="fotografico",
                                            seed=111,
                                            height=640,
                                            width=1536,
                                             ))

Proviamo ora lo stesso prompt (“ritratto di un leone vecchio e stanco in posa reale”) con modeling-compound come stile predefinito. L’immagine generata è un’immagine distinta realizzata senza avere alcuna sensazione particolare che venga impartita dal modello, garantendo assoluta libertà di stile.

Multi-prompting con SDXL 1.0

Come abbiamo visto, una delle basi fondamentali del modello è la capacità di generare immagini attraverso il prompting. SDXL 1.0 supporta il multi-prompting. Con il multi-prompting, è possibile mescolare concetti assegnando a ciascun prompt un peso specifico. Come puoi vedere nell’immagine generata seguente, ha uno sfondo giungla con un’erba verde alta e luminosa. Questa immagine è stata generata utilizzando i seguenti prompt. Puoi confrontarla con un singolo prompt dal nostro esempio precedente.

text1 = "ritratto di un leone vecchio e stanco in posa reale"
text2 = "giungla con un'erba verde alta e luminosa"

output = deployed_model.predict(GenerationRequest(
                                            text_prompts=[TextPrompt(text=text1),
                                                          TextPrompt(text=text2, weight=0.7)],
                                            style_preset="fotografico",
                                            seed=111,
                                            height=640,
                                            width=1536,
                                             ))

Immagini generate con consapevolezza spaziale e prompt negativi

Successivamente, esamineremo il design di un poster con un prompt dettagliato. Come abbiamo visto in precedenza, il multi-prompting ti consente di combinare concetti per creare risultati nuovi e unici.

In questo esempio, il prompt è molto dettagliato in termini di posizione del soggetto, aspetto, aspettative e contesto. Il modello sta anche cercando di evitare immagini che abbiano distorsioni o siano mal renderizzate con l’aiuto di un prompt negativo. L’immagine generata mostra oggetti e soggetti disposti in modo spaziale.

text = “Un grazioso gatto bianco e soffice sta in piedi sulle zampe posteriori, guardando curiosamente in uno specchio dorato ornato. Ma nel riflesso, il gatto non vede se stesso, ma un possente leone. Lo specchio è illuminato da una luce soffusa su uno sfondo bianco puro.”

text = "Un grazioso gatto bianco e soffice sta in piedi sulle zampe posteriori, guardando curiosamente in uno specchio dorato ornato. Ma nel riflesso, il gatto non vede se stesso, ma un possente leone. Lo specchio è illuminato da una luce soffusa su uno sfondo bianco puro."

negative_prompts = ['caratteristiche distorte del gatto', 'caratteristiche distorte del leone', 'cattiva resa']

output = deployed_model.predict(GenerationRequest(
                                            text_prompts=[TextPrompt(text=text)],
                                            style_preset="migliora",
                                            seed=43,
                                            height=640,
                                            width=1536,
                                            steps=100,
                                            cfg_scale=7,
                                            negative_prompts=negative_prompts
                                             ))

Proviamo un altro esempio, in cui manteniamo lo stesso input negativo ma cambiamo l’input dettagliato e lo stile preimpostato. Come puoi vedere, l’immagine generata non solo dispone gli oggetti nello spazio, ma cambia anche gli stili preimpostati prestano attenzione ai dettagli come lo specchio dorato ornato e il riflesso del soggetto.

testo = "Un grazioso gatto bianco e soffice si alza sulle zampe posteriori, guardando curiosamente in uno specchio dorato ornato. Nel riflesso il gatto si vede."

input_negativo = ['caratteristiche distorte del gatto', 'caratteristiche distorte del leone', 'render povero']

output = deployed_model.predict(GenerationRequest(
                                            text_prompts=[TextPrompt(text=testo)],
                                            style_preset="neon-punk",
                                            seed=4343434,
                                            altezza=640,
                                            larghezza=1536,
                                            passaggi=150,
                                            cfg_scale=7,
                                            input_negativo=input_negativo
                                             ))

Generazione di volti con SDXL 1.0

In questo esempio, mostriamo come SDXL 1.0 crea una composizione di immagini migliorata e la generazione di volti con caratteristiche realistiche come mani e dita. L’immagine generata è di una figura umana creata dall’IA con le mani chiaramente alzate. Nota i dettagli delle dita e della posa. Un’immagine generata dall’IA come questa altrimenti sarebbe stata amorfa.

testo = "Foto di un vecchio con le mani alzate, posa reale."

output = deployed_model.predict(GenerationRequest(
                                            text_prompts=[TextPrompt(text=testo)],
                                            style_preset="fotografico",
                                            seed=11111,
                                            altezza=640,
                                            larghezza=1536,
                                            passaggi=100,
                                            cfg_scale=7,
                                             ))

Generazione di testo utilizzando SDXL 1.0

SDXL è ottimizzato per flussi di lavoro di progettazione di immagini complesse che includono la generazione di testo all’interno delle immagini. Questo esempio mostra questa capacità. Osserva quanto sia chiara la generazione di testo utilizzando SDXL e notate lo stile preimpostato cinematografico.

testo = "Scrivi la seguente parola: Sogno"

output = deployed_model.predict(GenerationRequest(text_prompts=[TextPrompt(text=testo)],
                                            style_preset="cinematografico",
                                            seed=15,
                                            altezza=640,
                                            larghezza=1536,
                                            campionatore="DDIM",
                                            passaggi=32,
                                             ))

Scopri SDXL 1.0 da SageMaker JumpStart

SageMaker JumpStart ti consente di accedere, personalizzare e integrare modelli di base per i tuoi cicli di vita di ML. Alcuni modelli sono modelli a peso aperto che ti consentono di accedere e modificare i pesi e gli script del modello, mentre altri sono modelli a peso chiuso che non ti consentono di accedervi per proteggere la proprietà intellettuale dei fornitori di modelli. I modelli a peso chiuso richiedono di sottoscrivere il modello dalla pagina dei dettagli del modello del Marketplace di AWS, e SDXL 1.0 è un modello a peso chiuso in questo momento. In questa sezione, vedremo come scoprire, sottoscrivere e distribuire un modello a peso chiuso da SageMaker Studio.

Puoi accedere a SageMaker JumpStart scegliendo JumpStart sotto Soluzioni predefinite e automatizzate nella pagina Home di SageMaker Studio.

Dalla pagina principale di SageMaker JumpStart, puoi cercare soluzioni, modelli, notebook e altre risorse. Lo screenshot seguente mostra un esempio della pagina principale con soluzioni e modelli di base elencati.

Ogni modello ha una scheda di modello, come mostrato nello screenshot seguente, che contiene il nome del modello, se è adattabile o meno, il nome del provider e una breve descrizione sul modello. Puoi trovare il modello Stable Diffusion XL 1.0 nel carousel Modello di base: Generazione di immagini o cercarlo nella casella di ricerca.

Puoi scegliere Stable Diffusion XL 1.0 per aprire un notebook di esempio che ti guida su come utilizzare il modello SDXL 1.0. Il notebook di esempio si apre in modalità di sola lettura; devi scegliere Importa notebook per eseguirlo.

Dopo aver importato il notebook, devi selezionare l’ambiente del notebook appropriato (immagine, kernel, tipo di istanza, ecc.) prima di eseguire il codice.

Deploy SDXL 1.0 da SageMaker JumpStart

In questa sezione, ti guideremo su come abbonarti e distribuire il modello.

  1. Apri la pagina di elenco dei modelli in AWS Marketplace utilizzando il link disponibile dal notebook di esempio in SageMaker JumpStart.
  2. Sulla pagina di elenco di AWS Marketplace, scegli Continua a iscriverti.

Se non hai le autorizzazioni necessarie per visualizzare o sottoscrivere il modello, contatta l’amministratore AWS o il punto di contatto per gli acquisti. Molte aziende possono limitare le autorizzazioni di AWS Marketplace per controllare le azioni che qualcuno può eseguire nel portale di gestione di AWS Marketplace.

  1. Scegli Continua a iscriverti.
  2. Nella pagina Iscriviti a questo software, consulta i dettagli di prezzo e l’accordo di licenza per l’utente finale (EULA). Se sei d’accordo, scegli Accetta l’offerta.
  3. Scegli Continua a configurazione per iniziare a configurare il tuo modello.
  4. Scegli una regione supportata.

Vedrai visualizzato un ARN del prodotto. Questo è l’ARN del pacchetto del modello che devi specificare durante la creazione di un modello distribuibile usando Boto3.

  1. Copia l’ARN corrispondente alla tua regione e specifica lo stesso nell’istruzione della cella del notebook.

Le informazioni sull’ARN possono essere già disponibili nel notebook di esempio.

  1. Ora sei pronto per iniziare a seguire l’esempio nel notebook.

Puoi anche continuare da AWS Marketplace, ma ti consigliamo di seguire l’esempio nel notebook di SageMaker Studio per capire meglio come funziona il deployment.

Pulizia

Quando hai finito di lavorare, puoi eliminare l’endpoint per rilasciare le istanze di Amazon Elastic Compute Cloud (Amazon EC2) associate ad esso e interrompere la fatturazione.

Ottieni la lista dei tuoi endpoint di SageMaker utilizzando AWS CLI come segue:

!aws sagemaker list-endpoints

Poi elimina gli endpoint:

deployed_model.sagemaker_session.delete_endpoint(endpoint_name)

Conclusioni

In questo post, ti abbiamo mostrato come iniziare con il nuovo modello SDXL 1.0 in SageMaker Studio. Con questo modello, puoi sfruttare le diverse funzionalità offerte da SDXL per creare immagini realistiche. Poiché i modelli di base sono pre-addestrati, possono anche contribuire a ridurre i costi di formazione e infrastruttura e consentire la personalizzazione per il tuo caso d’uso.

Risorse

  • SageMaker JumpStart
  • JumpStart Foundation Models
  • Pagina del prodotto SageMaker JumpStart
  • Catalogo dei modelli SageMaker JumpStart