Mal billeder med stabil diffusion ved hjælp af Amazon SageMaker JumpStart

Mal billeder med stabil diffusion ved hjælp af Amazon SageMaker JumpStart

I november 2022 har vi annoncerede som AWS-kunder kan generere billeder fra tekst med Stabil diffusion modeller, der bruger Amazon SageMaker JumpStart. I dag er vi glade for at introducere en ny funktion, der gør det muligt for brugere at male billeder med stabile diffusionsmodeller. Inpainting refererer til processen med at erstatte en del af et billede med et andet billede baseret på en tekstuel prompt. Ved at levere det originale billede, et maskebillede, der skitserer den del, der skal erstattes, og en tekstprompt, kan stabil diffusionsmodellen producere et nyt billede, der erstatter det maskerede område med objektet, emnet eller miljøet, der er beskrevet i tekstprompten.

Du kan bruge inpainting til at gendanne forringede billeder eller skabe nye billeder med nye motiver eller stilarter i visse sektioner. Inden for området for arkitektonisk design kan stabil diffusion-inpainting anvendes til at reparere ufuldstændige eller beskadigede områder af bygningstegninger, hvilket giver præcise oplysninger til byggepersonalet. I tilfælde af klinisk MR-billeddannelse skal patientens hoved holdes fast, hvilket kan føre til subpar resultater på grund af beskæringsartefakten, der forårsager datatab eller reduceret diagnostisk nøjagtighed. Billedindmaling kan effektivt hjælpe med at afbøde disse suboptimale resultater.

I dette indlæg præsenterer vi en omfattende vejledning om implementering og afvikling af inferens ved hjælp af stabil diffusions-inpainting-modellen på to metoder: gennem JumpStarts brugergrænseflade (UI) i Amazon SageMaker Studio, og programmæssigt igennem JumpStart API'er tilgængelig i SageMaker Python SDK.

Løsningsoversigt

Følgende billeder er eksempler på indmaling. De originale billeder er til venstre, maskebilledet er i midten, og det indmalede billede, der genereres af modellen, er til højre. For det første eksempel var modellen forsynet med det originale billede, et maskebillede og den tekstuelle prompt "en hvid kat, blå øjne, iført en sweater, liggende i parken", samt den negative prompt "dårligt tegnede fødder. ” For det andet eksempel var den tekstmæssige prompt "En kvindelig model fremviser elegant en afslappet lang kjole med en blanding af lyserøde og blå nuancer."

Mal billeder med stabil diffusion ved hjælp af Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Lodret søgning. Ai.

At køre store modeller som Stable Diffusion kræver brugerdefinerede inferensscripts. Du skal køre ende-til-ende-tests for at sikre, at scriptet, modellen og den ønskede instans fungerer effektivt sammen. JumpStart forenkler denne proces ved at levere klar-til-brug scripts, der er blevet grundigt testet. Du kan få adgang til disse scripts med et enkelt klik gennem Studio UI eller med meget få linjer kode gennem JumpStart API'er.

De følgende afsnit guider dig gennem implementering af modellen og kørsel af inferens ved hjælp af enten Studio UI eller JumpStart API'erne.

Bemærk, at ved at bruge denne model, accepterer du CreativeML Open RAIL++-M-licens.

Få adgang til JumpStart gennem Studio UI

I dette afsnit illustrerer vi implementeringen af ​​JumpStart-modeller ved hjælp af Studio UI. Den medfølgende video demonstrerer lokalisering af den præ-trænede stabile diffusions-inpainting-model på JumpStart og implementering af den. Modelsiden giver vigtige detaljer om modellen og dens brug. For at udføre slutninger anvender vi ml.p3.2xlarge-instanstypen, som leverer den nødvendige GPU-acceleration til slutning med lav latens til en overkommelig pris. Når SageMaker-hostingforekomsten er konfigureret, skal du vælge Implementer. Slutpunktet vil være operationelt og forberedt til at håndtere anmodninger om konklusioner inden for cirka 10 minutter.

JumpStart giver en eksempelnotesbog, der kan hjælpe med at fremskynde den tid, det tager at køre inferens på det nyoprettede slutpunkt. For at få adgang til notesbogen i Studio skal du vælge Åbn Notesbog i Brug Endpoint fra Studio sektionen af ​​modellens slutpunktside.

Brug JumpStart programmatisk med SageMaker SDK

Ved at bruge JumpStart-brugergrænsefladen kan du implementere en forudtrænet model interaktivt med kun et par klik. Alternativt kan du anvende JumpStart-modeller programmatisk ved at bruge API'er integreret i SageMaker Python SDK.

I dette afsnit vælger vi en passende præ-trænet model i JumpStart, implementerer denne model til et SageMaker-slutpunkt og udfører slutninger om det implementerede slutpunkt, alt sammen ved hjælp af SageMaker Python SDK. Følgende eksempler indeholder kodestykker. For at få adgang til den komplette kode med alle de trin, der er inkluderet i denne demonstration, henvises til Introduktion til JumpStart Billedredigering – Stable Diffusion Inpainting eksempel notesbog.

Implementer den fortrænede model

SageMaker bruger Docker-containere til forskellige bygge- og runtime-opgaver. JumpStart bruger SageMaker Deep Learning Containere (DLC'er), der er rammespecifikke. Vi henter først eventuelle yderligere pakker, samt scripts til at håndtere træning og slutninger til den valgte opgave. Derefter hentes de fortrænede modelartefakter separat med model_uris, hvilket giver fleksibilitet til platformen. Dette gør det muligt at bruge flere præ-trænede modeller med et enkelt inferensscript. Følgende kode illustrerer denne proces:

model_id, model_version = "model-inpainting-stabilityai-stable-diffusion-2-inpainting-fp16", "*"
# Retrieve the inference docker container uri
deploy_image_uri = image_uris.retrieve( region=None, framework=None, # automatically inferred from model_id image_scope="inference", model_id=model_id, model_version=model_version, instance_type=inference_instance_type,
)
# Retrieve the inference script uri
deploy_source_uri = script_uris.retrieve(model_id=model_id, model_version=model_version, script_scope="inference") base_model_uri = model_uris.retrieve(model_id=model_id, model_version=model_version, model_scope="inference")

Dernæst leverer vi disse ressourcer til en SageMaker model instans og implementer et slutpunkt:

# Create the SageMaker model instance
# Create the SageMaker model instance
model = Model( image_uri=deploy_image_uri, source_dir=deploy_source_uri, model_data=base_model_uri, entry_point="inference.py", # entry point file in source_dir and present in deploy_source_uri role=aws_role, predictor_cls=Predictor, name=endpoint_name,
) # deploy the Model - note that we need to pass the Predictor class when we deploy the model through the Model class,
# in order to run inference through the SageMaker API
base_model_predictor = model.deploy( initial_instance_count=1, instance_type=inference_instance_type, predictor_cls=Predictor, endpoint_name=endpoint_name,
)

Efter at modellen er implementeret, kan vi opnå forudsigelser i realtid fra den!

Input

Inputtet er basisbilledet, et maskebillede og prompten, der beskriver emnet, objektet eller miljøet, der skal erstattes i den maskerede del. At skabe det perfekte maskebillede til effekter i maleriet involverer adskillige bedste praksisser. Start med en specifik prompt, og tøv ikke med at eksperimentere med forskellige stabile diffusionsindstillinger for at opnå de ønskede resultater. Brug et maskebillede, der ligner det billede, du sigter efter at male. Denne tilgang hjælper indmalingsalgoritmen med at færdiggøre de manglende dele af billedet, hvilket resulterer i et mere naturligt udseende. Billeder i høj kvalitet giver generelt bedre resultater, så sørg for, at dine basis- og maskebilleder er af god kvalitet og ligner hinanden. Derudover skal du vælge et stort og glat maskebillede for at bevare detaljer og minimere artefakter.

Slutpunktet accepterer basisbilledet og masken som rå RGB-værdier eller et base64-kodet billede. Inferenshandleren afkoder billedet baseret på content_type:

  • Til content_type = “application/json”, skal inputnyttelasten være en JSON-ordbog med de rå RGB-værdier, tekstprompt og andre valgfrie parametre
  • Til content_type = “application/json;jpeg”, skal inputnyttelasten være en JSON-ordbog med det base64-kodede billede, en tekstprompt og andre valgfrie parametre

Produktion

Slutpunktet kan generere to typer output: et Base64-kodet RGB-billede eller en JSON-ordbog over de genererede billeder. Du kan angive hvilket outputformat du ønsker ved at indstille accept overskrift til "application/json" or "application/json;jpeg" for henholdsvis et JPEG-billede eller base64.

  • Til accept = “application/json”, returnerer endepunktet en JSON-ordbog med RGB-værdier for billedet
  • Til accept = “application/json;jpeg”, returnerer endepunktet en JSON-ordbog med JPEG-billedet som bytes kodet med base64.b64-kodning

Bemærk, at afsendelse eller modtagelse af nyttelasten med de rå RGB-værdier kan ramme standardgrænser for input-nyttelasten og svarstørrelsen. Derfor anbefaler vi at bruge det base64-kodede billede ved indstilling content_type = “application/json;jpeg” og accepter = "application/json;jpeg".

Følgende kode er et eksempel på en slutningsanmodning:

content_type = "application/json;jpeg" with open(input_img_file_name, "rb") as f: input_img_image_bytes = f.read()
with open(input_img_mask_file_name, "rb") as f: input_img_mask_image_bytes = f.read() encoded_input_image = base64.b64encode(bytearray(input_img_image_bytes)).decode()
encoded_mask = base64.b64encode(bytearray(input_img_mask_image_bytes)).decode() payload = { "prompt": "a white cat, blue eyes, wearing a sweater, lying in park", "image": encoded_input_image, "mask_image": encoded_mask, "num_inference_steps": 50, "guidance_scale": 7.5, "seed": 0, "negative_prompt": "poorly drawn feet",
} accept = "application/json;jpeg" def query(model_predictor, payload, content_type, accept): """Query the model predictor.""" query_response = model_predictor.predict( payload, { "ContentType": content_type, "Accept": accept, }, ) return query_response query_response = query(model_predictor, json.dumps(payload).encode("utf-8"), content_type, accept)
generated_images = parse_response(query_response)

Understøttede parametre

Modeller til stabil diffusion af maling understøtter mange parametre til billedgenerering:

  • billede – Det originale billede.
  • maske – Et billede, hvor den mørklagte del forbliver uændret under billedgenerering, og den hvide del udskiftes.
  • prompt – En opfordring til at guide billedgenereringen. Det kan være en streng eller en liste over strenge.
  • num_inference_steps (valgfrit) – Antallet af dæmpningstrin under billedgenerering. Flere trin fører til bedre billedkvalitet. Hvis det er angivet, skal det være et positivt heltal. Bemærk, at flere slutningstrin vil føre til en længere svartid.
  • guidance_scale (valgfrit) – En højere vejledningsskala resulterer i et billede, der er tættere relateret til prompten, på bekostning af billedkvaliteten. Hvis det er angivet, skal det være en flyder. guidance_scale<=1 ignoreres.
  • negativ_prompt (valgfrit) – Dette guider billedgenereringen mod denne prompt. Hvis det er angivet, skal det være en streng eller en liste over strenge og bruges sammen med guidance_scale. hvis guidance_scale er deaktiveret, er dette også deaktiveret. Desuden, hvis prompten er en liste over strenge, så negative_prompt skal også være en liste over strenge.
  • frø (valgfrit) – Dette fikserer den randomiserede tilstand for reproducerbarhed. Hvis det er angivet, skal det være et heltal. Når du bruger den samme prompt med det samme frø, vil det resulterende billede altid være det samme.
  • batch_size (valgfrit) – Antallet af billeder, der skal genereres i et enkelt fremadgående pass. Hvis du bruger en mindre forekomst eller genererer mange billeder, skal du reducere batch_size at være et lille tal (1-2). Antallet af billeder = antal prompter*num_images_per_prompt.

Begrænsninger og skævheder

Selvom Stable Diffusion har en imponerende ydeevne inden for maling, lider den af ​​flere begrænsninger og skævheder. Disse omfatter, men er ikke begrænset til:

  • Modellen genererer muligvis ikke nøjagtige ansigter eller lemmer, fordi træningsdataene ikke indeholder tilstrækkelige billeder med disse funktioner.
  • Modellen blev trænet på LAION-5B datasæt, som har voksenindhold og muligvis ikke er egnet til produktbrug uden yderligere overvejelser.
  • Modellen fungerer muligvis ikke godt med ikke-engelske sprog, fordi modellen er trænet i engelsksproget tekst.
  • Modellen kan ikke generere god tekst i billeder.
  • Stable Diffusion inpainting fungerer typisk bedst med billeder med lavere opløsninger, såsom 256×256 eller 512×512 pixels. Når du arbejder med billeder i høj opløsning (768×768 eller højere), kan det være svært for metoden at opretholde det ønskede niveau af kvalitet og detaljer.
  • Selvom brugen af ​​et frø kan hjælpe med at kontrollere reproducerbarheden, kan stabil diffusion inpainting stadig producere varierede resultater med små ændringer af input eller parametre. Dette kan gøre det udfordrende at finjustere outputtet til specifikke krav.
  • Metoden kan have svært ved at generere indviklede teksturer og mønstre, især når de spænder over store områder i billedet eller er essentielle for at opretholde den overordnede sammenhæng og kvalitet af det malede område.

For mere information om begrænsninger og bias, se Stabil Diffusion Inpainting modelkort.

Indmalingsløsning med maske genereret via en prompt

CLIPSeq er en avanceret dyb læringsteknik, der udnytter kraften i forudtrænede CLIP-modeller (Contrastive Language-Image Pretraining) til at generere masker fra inputbilleder. Denne tilgang giver en effektiv måde at skabe masker til opgaver som billedsegmentering, indmaling og manipulation. CLIPSeq bruger CLIP til at generere en tekstbeskrivelse af inputbilledet. Tekstbeskrivelsen bruges derefter til at generere en maske, der identificerer de pixels i billedet, der er relevante for tekstbeskrivelsen. Masken kan derefter bruges til at isolere de relevante dele af billedet til videre bearbejdning.

CLIPSeq har flere fordele i forhold til andre metoder til at generere masker fra inputbilleder. For det første er det en mere effektiv metode, fordi den ikke kræver, at billedet skal behandles af en separat billedsegmenteringsalgoritme. For det andet er det mere nøjagtigt, fordi det kan generere masker, der er tættere på linje med tekstbeskrivelsen af ​​billedet. For det tredje er det mere alsidigt, fordi du kan bruge det til at generere masker fra en lang række billeder.

CLIPSeq har dog også nogle ulemper. For det første kan teknikken have begrænsninger med hensyn til emnet, fordi den er afhængig af forudtrænede CLIP-modeller, som muligvis ikke omfatter specifikke domæner eller ekspertiseområder. For det andet kan det være en følsom metode, fordi den er modtagelig for fejl i tekstbeskrivelsen af ​​billedet.

For mere information henvises til Virtuel modestyling med generativ AI ved hjælp af Amazon SageMaker.

Ryd op

Når du er færdig med at køre notesbogen, skal du sørge for at slette alle ressourcer oprettet i processen for at sikre, at faktureringen stoppes. Koden til at rydde op i slutpunktet er tilgængelig i det tilknyttede notesbog.

Konklusion

I dette indlæg viste vi, hvordan man implementerer en præ-trænet stabil diffusions-inpainting-model ved hjælp af JumpStart. Vi viste kodestykker i dette indlæg - den fulde kode med alle trinene i denne demo er tilgængelig i Introduktion til JumpStart – Forbedre billedkvaliteten styret af prompt eksempel notesbog. Prøv løsningen på egen hånd og send os dine kommentarer.

Se følgende ressourcer for at lære mere om modellen, og hvordan den fungerer:

For at lære mere om JumpStart, tjek følgende indlæg:


Om forfatterne

Mal billeder med stabil diffusion ved hjælp af Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Lodret søgning. Ai.Dr. Vivek Madan er en anvendt videnskabsmand hos Amazon SageMaker JumpStart-teamet. Han fik sin ph.d. fra University of Illinois i Urbana-Champaign og var postdoktor ved Georgia Tech. Han er en aktiv forsker i maskinlæring og algoritmedesign og har publiceret artikler i EMNLP, ICLR, COLT, FOCS og SODA konferencer.

Mal billeder med stabil diffusion ved hjælp af Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Lodret søgning. Ai.Alfred Shen er Senior AI/ML Specialist hos AWS. Han har arbejdet i Silicon Valley og haft tekniske og ledelsesmæssige stillinger i forskellige sektorer, herunder sundhedspleje, finans og højteknologi. Han er en dedikeret anvendt AI/ML-forsker, der koncentrerer sig om CV, NLP og multimodalitet. Hans arbejde er blevet fremvist i publikationer som EMNLP, ICLR og Public Health.

Tidsstempel:

Mere fra AWS maskinindlæring