Mal bilder med stabil diffusjon med Amazon SageMaker JumpStart

Mal bilder med stabil diffusjon med Amazon SageMaker JumpStart

I november 2022 har vi annonsert som AWS-kunder kan generere bilder fra tekst med Stabil diffusjon modeller som bruker Amazon SageMaker JumpStart. I dag er vi glade for å introdusere en ny funksjon som gjør det mulig for brukere å male bilder med Stable Diffusion-modeller. Inpainting refererer til prosessen med å erstatte en del av et bilde med et annet bilde basert på en tekstoppfordring. Ved å gi det originale bildet, et maskebilde som skisserer delen som skal erstattes, og en tekstmelding, kan den stabile diffusjonsmodellen produsere et nytt bilde som erstatter det maskerte området med objektet, motivet eller miljøet som er beskrevet i tekstmeldingen.

Du kan bruke inpainting for å gjenopprette forringede bilder eller lage nye bilder med nye motiver eller stiler i visse seksjoner. Innenfor arkitektonisk design kan Stable Diffusion inpainting brukes til å reparere ufullstendige eller skadede områder av byggeskisser, og gi nøyaktig informasjon til byggemannskaper. Ved klinisk MR-avbildning må pasientens hode holdes fast, noe som kan føre til dårlige resultater på grunn av beskjæringsartefakten som forårsaker tap av data eller redusert diagnostisk nøyaktighet. Bildemaling kan effektivt bidra til å redusere disse suboptimale resultatene.

I dette innlegget presenterer vi en omfattende veiledning om distribusjon og kjøring av inferens ved bruk av Stable Diffusion inpainting-modellen på to metoder: gjennom JumpStarts brukergrensesnitt (UI) i Amazon SageMaker Studio, og programmatisk gjennom JumpStart APIer tilgjengelig i SageMaker Python SDK.

Løsningsoversikt

Følgende bilder er eksempler på inpainting. De originale bildene er til venstre, maskebildet er i midten, og det malte bildet som genereres av modellen er til høyre. For det første eksemplet ble modellen utstyrt med det originale bildet, et maskebilde og tekstmeldingen «en hvit katt, blå øyne, iført en genser, liggende i parken», samt den negative oppfordringen «dårlig tegnede føtter. ” For det andre eksemplet var tekstoppfordringen "En kvinnelig modell viser elegant frem en uformell lang kjole med en blanding av rosa og blå nyanser."

Mal bilder med stabil diffusjon med Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.

Å kjøre store modeller som Stable Diffusion krever tilpassede slutningsskript. Du må kjøre ende-til-ende-tester for å sikre at skriptet, modellen og den ønskede forekomsten fungerer effektivt sammen. JumpStart forenkler denne prosessen ved å tilby ferdige skript som har blitt grundig testet. Du kan få tilgang til disse skriptene med ett klikk gjennom Studio UI eller med svært få linjer med kode gjennom JumpStart APIer.

De følgende delene veileder deg gjennom distribusjon av modellen og kjøring av slutninger ved å bruke enten Studio UI eller JumpStart APIer.

Merk at ved å bruke denne modellen godtar du CreativeML Open RAIL++-M-lisens.

Få tilgang til JumpStart gjennom Studio UI

I denne delen illustrerer vi distribusjonen av JumpStart-modeller ved hjelp av Studio-grensesnittet. Den medfølgende videoen demonstrerer å finne den ferdigtrente stabile diffusjonsmalingsmodellen på JumpStart og distribuere den. Modellsiden gir viktige detaljer om modellen og bruken av den. For å utføre slutninger bruker vi instanstypen ml.p3.2xlarge, som leverer den nødvendige GPU-akselerasjonen for slutninger med lav latens til en overkommelig pris. Etter at SageMaker-vertsinstansen er konfigurert, velger du Distribuer. Endepunktet vil være operativt og forberedt til å håndtere konklusjonsforespørsler innen ca. 10 minutter.

JumpStart gir en eksempelnotisbok som kan bidra til å akselerere tiden det tar å kjøre slutninger på det nyopprettede endepunktet. For å få tilgang til notatblokken i Studio, velg Åpne Notebook i Bruk endepunkt fra Studio delen av modellens endepunktside.

Bruk JumpStart programmatisk med SageMaker SDK

Ved å bruke JumpStart-grensesnittet kan du distribuere en forhåndstrent modell interaktivt med bare noen få klikk. Alternativt kan du bruke JumpStart-modeller programmatisk ved å bruke APIer integrert i SageMaker Python SDK.

I denne delen velger vi en passende forhåndsopplært modell i JumpStart, distribuerer denne modellen til et SageMaker-endepunkt og utfører slutninger om det distribuerte endepunktet, alt ved å bruke SageMaker Python SDK. Følgende eksempler inneholder kodebiter. For å få tilgang til hele koden med alle trinnene som er inkludert i denne demonstrasjonen, se Introduksjon til JumpStart-bilderedigering – Stabil diffusjonsmaling eksempel notatbok.

Implementer den forhåndstrente modellen

SageMaker bruker Docker-containere for ulike bygge- og kjøretidsoppgaver. JumpStart bruker SageMaker Deep Learning-beholdere (DLC-er) som er rammespesifikke. Vi henter først eventuelle tilleggspakker, samt skript for å håndtere opplæring og slutninger for den valgte oppgaven. Deretter hentes de forhåndstrente modellartefaktene separat med model_uris, som gir fleksibilitet til plattformen. Dette gjør at flere forhåndstrente modeller kan brukes med et enkelt slutningsskript. Følgende kode illustrerer denne prosessen:

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")

Deretter gir vi disse ressursene til en SageMaker modell forekomst og distribuer et endepunkt:

# 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,
)

Etter at modellen er distribuert, kan vi få sanntidsspådommer fra den!

Input

Inndata er basisbildet, et maskebilde og ledeteksten som beskriver motivet, objektet eller miljøet som skal erstattes i den maskerte delen. Å lage det perfekte maskebildet for effekter i maleriet innebærer flere beste fremgangsmåter. Start med en spesifikk melding, og ikke nøl med å eksperimentere med ulike stabile diffusjonsinnstillinger for å oppnå ønskede resultater. Bruk et maskebilde som ligner bildet du ønsker å male. Denne tilnærmingen hjelper inpainting-algoritmen med å fullføre de manglende delene av bildet, noe som resulterer i et mer naturlig utseende. Bilder av høy kvalitet gir generelt bedre resultater, så sørg for at base- og maskebildene dine er av god kvalitet og ligner hverandre. Velg i tillegg et stort og jevnt maskebilde for å bevare detaljer og minimere gjenstander.

Endepunktet godtar basisbildet og masken som rå RGB-verdier eller et base64-kodet bilde. Inferensbehandleren dekoder bildet basert på content_type:

  • Til content_type = “application/json”, må inngangsnyttelasten være en JSON-ordbok med rå RGB-verdier, tekstmelding og andre valgfrie parametere
  • Til content_type = “application/json;jpeg”, må inngangsnyttelasten være en JSON-ordbok med det base64-kodede bildet, en tekstmelding og andre valgfrie parametere

Produksjon

Endepunktet kan generere to typer utdata: et Base64-kodet RGB-bilde eller en JSON-ordbok over de genererte bildene. Du kan spesifisere hvilket utdataformat du ønsker ved å angi accept topptekst til "application/json" or "application/json;jpeg" for henholdsvis et JPEG-bilde eller base64.

  • Til accept = “application/json”, returnerer endepunktet en JSON-ordbok med RGB-verdier for bildet
  • Til accept = “application/json;jpeg”, returnerer endepunktet en JSON-ordbok med JPEG-bildet som byte kodet med base64.b64-koding

Merk at sending eller mottak av nyttelasten med rå RGB-verdier kan ramme standardgrenser for input-nyttelasten og svarstørrelsen. Derfor anbefaler vi å bruke det base64-kodede bildet etter innstilling content_type = “application/json;jpeg” og godta = "application/json;jpeg".

Følgende kode er et eksempel på en slutningsforespørsel:

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)

Støttede parametere

Stabile diffusjonsmalingsmodeller støtter mange parametere for bildegenerering:

  • bilde – Originalbildet.
  • maske – Et bilde der den mørklagte delen forblir uendret under bildegenerering og den hvite delen erstattes.
  • teksten – En oppfordring til å veilede bildegenereringen. Det kan være en streng eller en liste med strenger.
  • num_inference_steps (valgfritt) – Antall denoise-trinn under bildegenerering. Flere trinn fører til høyere bildekvalitet. Hvis det er spesifisert, må det være et positivt heltall. Merk at flere slutningstrinn vil føre til lengre responstid.
  • veiledningsskala (valgfritt) – En høyere veiledningsskala resulterer i et bilde som er nærmere knyttet til spørsmålet, på bekostning av bildekvaliteten. Hvis det er spesifisert, må det være en flyte. guidance_scale<=1 blir ignorert.
  • negativ_forespørsel (valgfritt) – Dette veileder bildegenereringen mot denne oppfordringen. Hvis det er spesifisert, må det være en streng eller en liste over strenger og brukes med guidance_scale. Dersom guidance_scale er deaktivert, er dette også deaktivert. Dessuten, hvis ledeteksten er en liste over strenger, så negative_prompt må også være en liste over strenger.
  • frø (valgfritt) – Dette fikser den randomiserte tilstanden for reproduserbarhet. Hvis det er spesifisert, må det være et heltall. Når du bruker den samme ledeteksten med samme frø, vil det resulterende bildet alltid være det samme.
  • batch_size (valgfritt) – Antall bilder som skal genereres i en enkelt foroverpassering. Hvis du bruker en mindre forekomst eller genererer mange bilder, reduser batch_size å være et lite tall (1–2). Antall bilder = antall meldinger*num_images_per_prompt.

Begrensninger og skjevheter

Selv om Stable Diffusion har en imponerende ytelse innen maling, lider den av flere begrensninger og skjevheter. Disse inkluderer, men er ikke begrenset til:

  • Modellen genererer kanskje ikke nøyaktige ansikter eller lemmer fordi treningsdataene ikke inneholder tilstrekkelige bilder med disse funksjonene.
  • Modellen ble trent på LAION-5B datasett, som har vokseninnhold og kanskje ikke er egnet for produktbruk uten ytterligere vurderinger.
  • Modellen fungerer kanskje ikke bra med ikke-engelske språk fordi modellen ble trent på engelskspråklig tekst.
  • Modellen kan ikke generere god tekst i bilder.
  • Stabil diffusjonsmaling fungerer vanligvis best med bilder med lavere oppløsning, for eksempel 256×256 eller 512×512 piksler. Når du arbeider med bilder med høy oppløsning (768×768 eller høyere), kan metoden slite med å opprettholde ønsket nivå av kvalitet og detaljer.
  • Selv om bruken av et frø kan bidra til å kontrollere reproduserbarheten, kan stabil diffusjonsmaling fortsatt gi varierte resultater med små endringer i input eller parametere. Dette kan gjøre det utfordrende å finjustere utdataene for spesifikke krav.
  • Metoden kan slite med å generere intrikate teksturer og mønstre, spesielt når de spenner over store områder i bildet eller er avgjørende for å opprettholde den generelle sammenhengen og kvaliteten til det malte området.

For mer informasjon om begrensninger og skjevheter, se Stabil Diffusion Inpainting modellkort.

Malingsløsning med maske generert via en ledetekst

CLIPSeq er en avansert dyplæringsteknikk som utnytter kraften til forhåndstrente CLIP-modeller (Contrastive Language-Image Pretraining) for å generere masker fra inngangsbilder. Denne tilnærmingen gir en effektiv måte å lage masker for oppgaver som bildesegmentering, maling og manipulering. CLIPSeq bruker CLIP til å generere en tekstbeskrivelse av inndatabildet. Tekstbeskrivelsen brukes så til å generere en maske som identifiserer pikslene i bildet som er relevante for tekstbeskrivelsen. Masken kan deretter brukes til å isolere de relevante delene av bildet for videre behandling.

CLIPSeq har flere fordeler i forhold til andre metoder for å generere masker fra inndatabilder. For det første er det en mer effektiv metode, fordi den ikke krever at bildet behandles av en separat bildesegmenteringsalgoritme. For det andre er det mer nøyaktig, fordi det kan generere masker som er mer på linje med tekstbeskrivelsen til bildet. For det tredje er den mer allsidig, fordi du kan bruke den til å generere masker fra en rekke bilder.

CLIPSeq har imidlertid også noen ulemper. For det første kan teknikken ha begrensninger når det gjelder emne, fordi den er avhengig av ferdigtrente CLIP-modeller som kanskje ikke omfatter spesifikke domener eller ekspertiseområder. For det andre kan det være en sensitiv metode, fordi den er utsatt for feil i tekstbeskrivelsen av bildet.

For mer informasjon, se Virtuell motestyling med generativ AI ved hjelp av Amazon SageMaker.

Rydd opp

Når du er ferdig med å kjøre notisboken, sørg for å slette alle ressurser som er opprettet i prosessen for å sikre at faktureringen stoppes. Koden for å rydde opp i endepunktet er tilgjengelig i det tilknyttede bærbare.

konklusjonen

I dette innlegget viste vi hvordan du distribuerer en forhåndstrent stabil diffusjonsmalingsmodell ved hjelp av JumpStart. Vi viste kodebiter i dette innlegget – hele koden med alle trinnene i denne demoen er tilgjengelig i Introduksjon til JumpStart – Forbedre bildekvaliteten veiledet av spørsmål eksempel notatbok. Prøv løsningen på egen hånd og send oss ​​dine kommentarer.

For å lære mer om modellen og hvordan den fungerer, se følgende ressurser:

For å lære mer om JumpStart, sjekk ut følgende innlegg:


Om forfatterne

Mal bilder med stabil diffusjon med Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.Dr. Vivek Madan er en Applied Scientist med Amazon SageMaker JumpStart-teamet. Han fikk sin doktorgrad fra University of Illinois i Urbana-Champaign og var postdoktor ved Georgia Tech. Han er en aktiv forsker innen maskinlæring og algoritmedesign og har publisert artikler på EMNLP-, ICLR-, COLT-, FOCS- og SODA-konferanser.

Mal bilder med stabil diffusjon med Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.Alfred Shen er senior AI/ML-spesialist hos AWS. Han har jobbet i Silicon Valley, og hatt tekniske og lederstillinger i forskjellige sektorer, inkludert helsevesen, finans og høyteknologi. Han er en dedikert anvendt AI/ML-forsker, som konsentrerer seg om CV, NLP og multimodalitet. Arbeidet hans har blitt vist frem i publikasjoner som EMNLP, ICLR og Public Health.

Tidstempel:

Mer fra AWS maskinlæring