Inpaint-afbeeldingen met stabiele diffusie met behulp van Amazon SageMaker JumpStart

Inpaint-afbeeldingen met stabiele diffusie met behulp van Amazon SageMaker JumpStart

In november 2022 hebben wij aangekondigd waarmee AWS-klanten afbeeldingen uit tekst kunnen genereren Stabiele diffusie modellen met behulp van Amazon SageMaker JumpStart. Vandaag introduceren we met veel plezier een nieuwe functie waarmee gebruikers afbeeldingen kunnen inkleuren met Stable Diffusion-modellen. Inpainting verwijst naar het proces waarbij een deel van een afbeelding wordt vervangen door een andere afbeelding op basis van een tekstuele prompt. Door de oorspronkelijke afbeelding, een maskerafbeelding die het te vervangen deel schetst en een tekstuele prompt te leveren, kan het stabiele diffusiemodel een nieuwe afbeelding produceren die het gemaskeerde gebied vervangt door het object, onderwerp of de omgeving die in de tekstuele prompt wordt beschreven.

U kunt inpainting gebruiken om verslechterde afbeeldingen te herstellen of nieuwe afbeeldingen te maken met nieuwe onderwerpen of stijlen in bepaalde secties. Binnen het domein van architectonisch ontwerp kan Stable Diffusion inpainting worden toegepast om onvolledige of beschadigde delen van bouwtekeningen te repareren, waardoor bouwploegen nauwkeurige informatie krijgen. In het geval van klinische MRI-beeldvorming moet het hoofd van de patiรซnt worden vastgehouden, wat kan leiden tot ondermaatse resultaten vanwege het bijsnijdingsartefact dat gegevensverlies of verminderde diagnostische nauwkeurigheid veroorzaakt. Image inpainting kan effectief helpen om deze suboptimale resultaten te verminderen.

In dit bericht presenteren we een uitgebreide gids over het implementeren en uitvoeren van inferentie met behulp van het Stable Diffusion inpainting-model op twee manieren: via de gebruikersinterface (UI) van JumpStart in Amazon SageMaker Studio, en programmatisch door JumpStart-API's beschikbaar in de SageMaker Python-SDK.

Overzicht oplossingen

De volgende afbeeldingen zijn voorbeelden van inpainting. De originele afbeeldingen bevinden zich aan de linkerkant, de maskerafbeelding bevindt zich in het midden en de ingeschilderde afbeelding die door het model is gegenereerd, bevindt zich aan de rechterkant. Voor het eerste voorbeeld kreeg het model de originele afbeelding, een maskerafbeelding en de tekstuele prompt 'een witte kat, blauwe ogen, gekleed in een trui, liggend in het park', evenals de negatieve prompt 'slecht getekende voeten. โ€ Voor het tweede voorbeeld was de tekstuele prompt: "Een vrouwelijk model toont gracieus een casual lange jurk met een mix van roze en blauwe tinten,"

Inpaint-afbeeldingen met stabiele diffusie met behulp van Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.

Het uitvoeren van grote modellen zoals Stable Diffusion vereist aangepaste inferentiescripts. U moet end-to-end-tests uitvoeren om ervoor te zorgen dat het script, het model en de gewenste instantie efficiรซnt samenwerken. JumpStart vereenvoudigt dit proces door kant-en-klare scripts aan te bieden die robuust zijn getest. Je hebt toegang tot deze scripts met รฉรฉn klik via de gebruikersinterface van Studio of met heel weinig regels code via de JumpStart-API's.

In de volgende secties wordt u begeleid bij het implementeren van het model en het uitvoeren van inferentie met behulp van de Studio-gebruikersinterface of de JumpStart-API's.

Merk op dat door dit model te gebruiken, u akkoord gaat met de CreativeML Open RAIL++-M-licentie.

Toegang tot JumpStart via de Studio UI

In deze sectie illustreren we de implementatie van JumpStart-modellen met behulp van de gebruikersinterface van Studio. De bijgevoegde video demonstreert het vinden van het vooraf getrainde Stable Diffusion inpainting-model op JumpStart en het implementeren ervan. De modelpagina biedt essentiรซle details over het model en het gebruik ervan. Om gevolgtrekkingen uit te voeren, gebruiken we het instantietype ml.p3.2xlarge, dat de vereiste GPU-versnelling levert voor gevolgtrekkingen met lage latentie tegen een betaalbare prijs. Nadat de SageMaker-hostinginstantie is geconfigureerd, kiest u Implementeren. Het eindpunt is operationeel en klaar om deductieverzoeken binnen ongeveer 10 minuten af โ€‹โ€‹te handelen.

JumpStart biedt een voorbeeldnotitieboekje dat kan helpen de tijd te versnellen die nodig is om gevolgtrekkingen uit te voeren op het nieuw gemaakte eindpunt. Kies voor toegang tot het notitieboek in Studio Notitieblok openen in de Eindpunt van Studio gebruiken gedeelte van de modeleindpuntpagina.

Gebruik JumpStart programmatisch met de SageMaker SDK

Door gebruik te maken van de JumpStart-gebruikersinterface kunt u met slechts een paar klikken een vooraf getraind model interactief implementeren. Als alternatief kunt u JumpStart-modellen programmatisch gebruiken door API's te gebruiken die zijn geรฏntegreerd in de SageMaker Python SDK.

In deze sectie kiezen we een geschikt vooraf getraind model in JumpStart, implementeren we dit model op een SageMaker-eindpunt en voeren we gevolgtrekkingen uit op het geรฏmplementeerde eindpunt, allemaal met behulp van de SageMaker Python SDK. De volgende voorbeelden bevatten codefragmenten. Om toegang te krijgen tot de volledige code met alle stappen in deze demonstratie, raadpleegt u de Inleiding tot JumpStart Beeldbewerking โ€“ Stabiele diffusie Inpainting voorbeeld notitieboekje.

Het vooraf getrainde model implementeren

SageMaker gebruikt Docker-containers voor verschillende build- en runtime-taken. JumpStart maakt gebruik van de SageMaker Deep Learning-containers (DLC's) die framework-specifiek zijn. We halen eerst eventuele aanvullende pakketten op, evenals scripts om training en inferentie voor de geselecteerde taak af te handelen. Vervolgens worden de vooraf getrainde modelartefacten afzonderlijk opgehaald model_uris, wat het platform flexibiliteit biedt. Hierdoor kunnen meerdere vooraf getrainde modellen worden gebruikt met รฉรฉn inferentiescript. De volgende code illustreert dit 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")

Vervolgens verstrekken we die middelen aan a SageMaker-model instantie en implementeer een eindpunt:

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

Nadat het model is geรฏmplementeerd, kunnen we er realtime voorspellingen uit halen!

Invoer

De invoer is de basisafbeelding, een maskerafbeelding en de prompt die het onderwerp, object of de omgeving beschrijft die moet worden vervangen in het gemaskeerde gedeelte. Het creรซren van de perfecte maskerafbeelding voor in-painting-effecten omvat verschillende best practices. Begin met een specifieke prompt en aarzel niet om te experimenteren met verschillende instellingen voor stabiele diffusie om de gewenste resultaten te bereiken. Gebruik een maskerafbeelding die sterk lijkt op de afbeelding die u wilt schilderen. Deze benadering helpt het inpainting-algoritme bij het voltooien van de ontbrekende delen van de afbeelding, wat resulteert in een natuurlijker uiterlijk. Afbeeldingen van hoge kwaliteit leveren over het algemeen betere resultaten op, dus zorg ervoor dat uw basis- en maskerafbeeldingen van goede kwaliteit zijn en op elkaar lijken. Kies daarnaast voor een grote en vloeiende maskerafbeelding om details te behouden en artefacten te minimaliseren.

Het eindpunt accepteert de basisafbeelding en het masker als onbewerkte RGB-waarden of een in base64 gecodeerde afbeelding. De inferentiehandler decodeert de afbeelding op basis van content_type:

  • Voor content_type = โ€œapplication/jsonโ€, moet de invoerpayload een JSON-woordenboek zijn met de onbewerkte RGB-waarden, tekstuele prompt en andere optionele parameters
  • Voor content_type = โ€œapplication/json;jpegโ€, moet de invoerpayload een JSON-woordenboek zijn met de base64-gecodeerde afbeelding, een tekstuele prompt en andere optionele parameters

uitgang

Het eindpunt kan twee soorten uitvoer genereren: een Base64-gecodeerde RGB-afbeelding of een JSON-woordenboek van de gegenereerde afbeeldingen. U kunt aangeven welk uitvoerformaat u wilt door de accept kop naar "application/json" or "application/json;jpeg" voor respectievelijk een JPEG-afbeelding of base64.

  • Voor accept = โ€œapplication/jsonโ€, retourneert het eindpunt een JSON-woordenboek met RGB-waarden voor de afbeelding
  • Voor accept = โ€œapplication/json;jpegโ€, retourneert het eindpunt een JSON-woordenboek met de JPEG-afbeelding als bytes gecodeerd met base64.b64-codering

Houd er rekening mee dat het verzenden of ontvangen van de payload met de onbewerkte RGB-waarden mogelijk de standaardlimieten voor de invoerpayload en de responsgrootte bereikt. Daarom raden we aan om de base64-gecodeerde afbeelding per instelling te gebruiken content_type = โ€œapplication/json;jpegโ€ en accepteer = "application/json;jpeg".

De volgende code is een voorbeeld van een gevolgtrekkingsverzoek:

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)

Ondersteunde parameters

Stabiele diffusie in-schilderijmodellen ondersteunen veel parameters voor het genereren van afbeeldingen:

  • beeld โ€“ De originele afbeelding.
  • maskeren โ€“ Een beeld waarbij het zwarte gedeelte ongewijzigd blijft tijdens het genereren van het beeld en het witte gedeelte wordt vervangen.
  • prompt - Een prompt om het genereren van afbeeldingen te begeleiden. Dit kan een tekenreeks of een lijst met tekenreeksen zijn.
  • num_inference_steps (optioneel) โ€“ Het aantal stappen voor het verwijderen van ruis tijdens het genereren van afbeeldingen. Meer stappen leiden tot een afbeelding van hogere kwaliteit. Indien gespecificeerd, moet het een positief geheel getal zijn. Merk op dat meer inferentiestappen zullen leiden tot een langere responstijd.
  • guidance_scale (optioneel) โ€“ Een hogere begeleidingsschaal resulteert in een beeld dat nauwer verwant is aan de prompt, ten koste van de beeldkwaliteit. Indien gespecificeerd, moet het een float zijn. guidance_scale<=1 wordt genegeerd.
  • negatieve_prompt (optioneel) - Dit leidt het genereren van afbeeldingen tegen deze prompt. Indien opgegeven, moet het een tekenreeks of een lijst met tekenreeksen zijn en worden gebruikt met guidance_scale. Indien guidance_scale is uitgeschakeld, is dit ook uitgeschakeld. Bovendien, als de prompt een lijst met tekenreeksen is, dan is de negative_prompt moet ook een lijst met tekenreeksen zijn.
  • zaad (optioneel) โ€“ Hiermee wordt de gerandomiseerde toestand voor reproduceerbaarheid hersteld. Indien gespecificeerd, moet het een geheel getal zijn. Telkens wanneer u dezelfde prompt met dezelfde seed gebruikt, is de resulterende afbeelding altijd hetzelfde.
  • batch_size (optioneel) - Het aantal afbeeldingen dat moet worden gegenereerd in een enkele voorwaartse beweging. Als u een kleinere instantie gebruikt of veel afbeeldingen genereert, reduceer dan batch_size een klein getal zijn (1โ€“2). Het aantal afbeeldingen = aantal prompts*num_images_per_prompt.

Beperkingen en vooroordelen

Hoewel Stable Diffusion indrukwekkende prestaties levert bij het schilderen, heeft het te kampen met verschillende beperkingen en vooroordelen. Deze omvatten, maar zijn niet beperkt tot:

  • Het model genereert mogelijk geen nauwkeurige gezichten of ledematen omdat de trainingsgegevens niet voldoende afbeeldingen met deze functies bevatten.
  • Het model is getraind op de LAION-5B-gegevensset, die inhoud voor volwassenen bevat en mogelijk niet geschikt is voor productgebruik zonder verdere overwegingen.
  • Het model werkt mogelijk niet goed met niet-Engelse talen omdat het model is getraind op Engelstalige tekst.
  • Het model kan geen goede tekst in afbeeldingen genereren.
  • Stabiele diffusie in schilderen werkt meestal het beste met afbeeldingen met een lagere resolutie, zoals 256ร—256 of 512ร—512 pixels. Bij het werken met afbeeldingen met een hoge resolutie (768 ร— 768 of hoger), kan de methode moeite hebben om het gewenste niveau van kwaliteit en detail te behouden.
  • Hoewel het gebruik van een seed de reproduceerbaarheid kan helpen beheersen, kan Stabiele diffusie bij het schilderen nog steeds gevarieerde resultaten opleveren met kleine wijzigingen in de invoer of parameters. Dit kan het een uitdaging maken om de uitvoer af te stemmen op specifieke vereisten.
  • De methode kan moeite hebben met het genereren van ingewikkelde texturen en patronen, vooral wanneer ze grote gebieden binnen het beeld beslaan of essentieel zijn voor het behoud van de algehele samenhang en kwaliteit van het ingeschilderde gebied.

Voor meer informatie over beperkingen en vooringenomenheid, zie de Stabiele diffusie Inpainting modelkaart.

Inpainting-oplossing met masker gegenereerd via een prompt

CLIPSeq is een geavanceerde deep learning-techniek die gebruikmaakt van de kracht van vooraf getrainde CLIP-modellen (Contrastive Language-Image Pretraining) om maskers te genereren op basis van invoerbeelden. Deze aanpak biedt een efficiรซnte manier om maskers te maken voor taken zoals beeldsegmentatie, inpainting en manipulatie. CLIPSeq gebruikt CLIP om een โ€‹โ€‹tekstbeschrijving van de invoerafbeelding te genereren. De tekstbeschrijving wordt vervolgens gebruikt om een โ€‹โ€‹masker te genereren dat de pixels in de afbeelding identificeert die relevant zijn voor de tekstbeschrijving. Het masker kan vervolgens worden gebruikt om de relevante delen van de afbeelding te isoleren voor verdere verwerking.

CLIPSeq heeft verschillende voordelen ten opzichte van andere methoden voor het genereren van maskers op basis van invoerafbeeldingen. Ten eerste is het een efficiรซntere methode, omdat de afbeelding niet hoeft te worden verwerkt door een afzonderlijk algoritme voor beeldsegmentatie. Ten tweede is het nauwkeuriger, omdat het maskers kan genereren die beter aansluiten bij de tekstbeschrijving van de afbeelding. Ten derde is het veelzijdiger, omdat je het kunt gebruiken om maskers te genereren op basis van een grote verscheidenheid aan afbeeldingen.

CLIPSeq heeft echter ook enkele nadelen. Ten eerste kan de techniek beperkingen hebben wat betreft het onderwerp, omdat deze berust op vooraf getrainde CLIP-modellen die mogelijk geen specifieke domeinen of expertisegebieden omvatten. Ten tweede kan het een gevoelige methode zijn, omdat het vatbaar is voor fouten in de tekstbeschrijving van de afbeelding.

Raadpleeg voor meer informatie Virtuele mode-styling met generatieve AI met behulp van Amazon SageMaker.

Opruimen

Nadat u klaar bent met het uitvoeren van de notebook, moet u ervoor zorgen dat u alle bronnen verwijdert die tijdens het proces zijn gemaakt om ervoor te zorgen dat de facturering wordt gestopt. De code om het eindpunt op te schonen is beschikbaar in het bijbehorende notitieboekje.

Conclusie

In dit bericht hebben we laten zien hoe u een vooraf getraind stabiel diffusie-inpainting-model kunt implementeren met behulp van JumpStart. We hebben in dit bericht codefragmenten getoond - de volledige code met alle stappen in deze demo is beschikbaar in de Inleiding tot JumpStart โ€“ Verbeter de beeldkwaliteit op aanwijzing voorbeeld notitieboekje. Probeer de oplossing zelf uit en stuur ons uw opmerkingen.

Raadpleeg de volgende bronnen voor meer informatie over het model en hoe het werkt:

Bekijk de volgende berichten voor meer informatie over JumpStart:


Over de auteurs

Inpaint-afbeeldingen met stabiele diffusie met behulp van Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.Dr Vivek Madan is een Applied Scientist bij het Amazon SageMaker JumpStart-team. Hij promoveerde aan de Universiteit van Illinois in Urbana-Champaign en was een postdoctoraal onderzoeker bij Georgia Tech. Hij is een actief onderzoeker op het gebied van machine learning en algoritmeontwerp en heeft artikelen gepubliceerd op EMNLP-, ICLR-, COLT-, FOCS- en SODA-conferenties.

Inpaint-afbeeldingen met stabiele diffusie met behulp van Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.Alfred Schen is een Senior AI/ML-specialist bij AWS. Hij heeft in Silicon Valley gewerkt en bekleedde technische en leidinggevende functies in diverse sectoren, waaronder de gezondheidszorg, financiรซn en hightech. Hij is een toegewijde toegepaste AI/ML-onderzoeker, die zich concentreert op CV, NLP en multimodaliteit. Zijn werk is tentoongesteld in publicaties zoals EMNLP, ICLR en Public Health.

Tijdstempel:

Meer van AWS-machine learning