Måla bilder med stabil diffusion med Amazon SageMaker JumpStart

Måla bilder med stabil diffusion med Amazon SageMaker JumpStart

I november 2022, vi meddelade som AWS-kunder kan generera bilder från text med Stabil diffusion modeller som använder Amazon SageMaker JumpStart. Idag är vi glada över att introducera en ny funktion som gör det möjligt för användare att måla bilder med stabila diffusionsmodeller. Inpainting hänvisar till processen att ersätta en del av en bild med en annan bild baserat på en textuppmaning. Genom att tillhandahålla originalbilden, en maskbild som beskriver den del som ska ersättas och en textuppmaning, kan den stabila diffusionsmodellen producera en ny bild som ersätter det maskerade området med objektet, ämnet eller miljön som beskrivs i textuppmaningen.

Du kan använda inpainting för att återställa försämrade bilder eller skapa nya bilder med nya ämnen eller stilar i vissa avsnitt. Inom området för arkitektonisk design kan Stable Diffusion inpainting användas för att reparera ofullständiga eller skadade områden av byggnadsritningar, vilket ger exakt information till byggpersonal. Vid klinisk MR-undersökning måste patientens huvud hållas fast, vilket kan leda till undermåliga resultat på grund av att beskärningsartefakten orsakar dataförlust eller minskad diagnostisk noggrannhet. Bildinmålning kan effektivt hjälpa till att mildra dessa suboptimala resultat.

I det här inlägget presenterar vi en omfattande guide för att distribuera och köra inferens med hjälp av inpaintingmodellen Stable Diffusion på två sätt: genom JumpStarts användargränssnitt (UI) i Amazon SageMaker Studio, och programmatiskt igenom JumpStart API:er tillgängligt i SageMaker Python SDK.

Lösningsöversikt

Följande bilder är exempel på målning. Originalbilderna är till vänster, maskbilden är i mitten och den målade bilden som genereras av modellen är till höger. För det första exemplet försågs modellen med originalbilden, en maskbild och textuppmaningen "en vit katt, blå ögon, klädd i en tröja, liggande i parken", samt den negativa uppmaningen "dåligt dragna fötter. ” För det andra exemplet var textuppmaningen "En kvinnlig modell visar graciöst upp en ledig lång klänning med en blandning av rosa och blå nyanser."

Måla bilder med stabil spridning med Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.

Att köra stora modeller som Stable Diffusion kräver anpassade slutledningsskript. Du måste köra end-to-end-tester för att se till att skriptet, modellen och den önskade instansen fungerar effektivt tillsammans. JumpStart förenklar denna process genom att tillhandahålla färdiga skript som har testats ordentligt. Du kan komma åt dessa skript med ett klick genom Studio UI eller med väldigt få rader kod genom JumpStart API:er.

Följande avsnitt guidar dig genom att distribuera modellen och köra slutledning med antingen Studio UI eller JumpStart API:er.

Observera att genom att använda denna modell godkänner du CreativeML Open RAIL++-M-licens.

Få åtkomst till JumpStart via Studio UI

I det här avsnittet illustrerar vi distributionen av JumpStart-modeller med Studio UI. Den medföljande videon visar hur man lokaliserar den förtränade stabila diffusionsinmålningsmodellen på JumpStart och använder den. Modellsidan ger viktig information om modellen och dess användning. För att utföra slutledning använder vi instanstypen ml.p3.2xlarge, som levererar den nödvändiga GPU-accelerationen för slutledning med låg latens till ett överkomligt pris. När SageMaker-värdinstansen har konfigurerats väljer du Distribuera. Slutpunkten kommer att vara operativ och förberedd för att hantera slutledningsförfrågningar inom cirka 10 minuter.

JumpStart tillhandahåller en exempelanteckningsbok som kan hjälpa till att påskynda tiden det tar att köra slutledning om den nyskapade slutpunkten. För att komma åt anteckningsboken i Studio, välj Öppna Notebook i Använd Endpoint från Studio avsnittet på modellens slutpunktssida.

Använd JumpStart programmatiskt med SageMaker SDK

Genom att använda JumpStart-gränssnittet kan du distribuera en förtränad modell interaktivt med bara några få klick. Alternativt kan du använda JumpStart-modeller programmatiskt genom att använda API:er integrerade i SageMaker Python SDK.

I det här avsnittet väljer vi en lämplig förtränad modell i JumpStart, distribuerar den här modellen till en SageMaker-slutpunkt och gör slutsatser om den distribuerade slutpunkten, allt med SageMaker Python SDK. Följande exempel innehåller kodavsnitt. För att komma åt hela koden med alla steg som ingår i denna demonstration, se Introduktion till JumpStart-bildredigering – Stable Diffusion Inpainting exempel anteckningsbok.

Implementera den förtränade modellen

SageMaker använder Docker-behållare för olika bygg- och körningsuppgifter. JumpStart använder SageMaker Deep Learning Containers (DLC) som är ramspecifika. Vi hämtar först eventuella ytterligare paket, samt skript för att hantera utbildning och slutledning för den valda uppgiften. Sedan hämtas de förtränade modellartefakterna separat med model_uris, vilket ger flexibilitet till plattformen. Detta gör att flera förtränade modeller kan användas med ett enda slutledningsskript. Följande kod illustrerar denna process:

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

Därefter tillhandahåller vi dessa resurser till en SageMaker modell instans och distribuera en 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 att modellen har distribuerats kan vi få förutsägelser i realtid från den!

Ingång

Indata är basbilden, en maskbild och uppmaningen som beskriver motivet, objektet eller miljön som ska ersättas i den maskerade delen. Att skapa den perfekta maskbilden för effekter i målningen innebär flera bästa metoder. Börja med en specifik uppmaning och tveka inte att experimentera med olika stabila diffusionsinställningar för att uppnå önskade resultat. Använd en maskbild som liknar bilden du vill måla. Detta tillvägagångssätt hjälper inpainting-algoritmen att komplettera de saknade delarna av bilden, vilket resulterar i ett mer naturligt utseende. Högkvalitativa bilder ger generellt bättre resultat, så se till att dina bas- och maskbilder är av god kvalitet och liknar varandra. Välj dessutom en stor och jämn maskbild för att bevara detaljer och minimera artefakter.

Slutpunkten accepterar basbilden och masken som råa RGB-värden eller en base64-kodad bild. Slutledningshanteraren avkodar bilden baserat på content_type:

  • För content_type = “application/json”, måste den inmatade nyttolasten vara en JSON-ordbok med rå RGB-värden, textprompt och andra valfria parametrar
  • För content_type = “application/json;jpeg”, måste den inmatade nyttolasten vara en JSON-ordbok med den base64-kodade bilden, en textprompt och andra valfria parametrar

Produktion

Slutpunkten kan generera två typer av utdata: en Base64-kodad RGB-bild eller en JSON-ordbok över de genererade bilderna. Du kan ange vilket utdataformat du vill ha genom att ställa in accept rubrik till "application/json" or "application/json;jpeg" för en JPEG-bild respektive base64.

  • För accept = “application/json”, returnerar slutpunkten en JSON-ordbok med RGB-värden för bilden
  • För accept = “application/json;jpeg”, returnerar slutpunkten en JSON-ordlista med JPEG-bilden som byte kodad med base64.b64-kodning

Observera att att skicka eller ta emot nyttolasten med de råa RGB-värdena kan träffa standardgränser för indatanyttolasten och svarsstorleken. Därför rekommenderar vi att du använder den base64-kodade bilden genom inställning content_type = “application/json;jpeg” och acceptera = "application/json;jpeg".

Följande kod är ett exempel på begäran om slutledning:

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)

Parametrar som stöds

Stable Diffusion inpainting-modeller stöder många parametrar för bildgenerering:

  • bild – Originalbilden.
  • mask – En bild där den mörklagda delen förblir oförändrad under bildgenereringen och den vita delen ersätts.
  • snabb – En uppmaning för att vägleda bildgenereringen. Det kan vara en sträng eller en lista med strängar.
  • num_inference_steps (valfritt) – Antalet nedtoningssteg under bildgenerering. Fler steg leder till högre bildkvalitet. Om det anges måste det vara ett positivt heltal. Observera att fler slutledningssteg kommer att leda till en längre svarstid.
  • vägledningsskala (valfritt) – En högre vägledningsskala resulterar i en bild som är mer relaterad till uppmaningen, på bekostnad av bildkvaliteten. Om det anges måste det vara en flöte. guidance_scale<=1 ignoreras.
  • negativ_prompt (valfritt) – Detta styr bildgenereringen mot denna uppmaning. Om det anges måste det vara en sträng eller en lista med strängar och användas med guidance_scale. Om guidance_scale är inaktiverat, är detta också inaktiverat. Dessutom, om prompten är en lista med strängar, då negative_prompt måste också vara en lista med strängar.
  • frö (valfritt) – Detta fixar det randomiserade tillståndet för reproducerbarhet. Om det anges måste det vara ett heltal. När du använder samma prompt med samma frö kommer den resulterande bilden alltid att vara densamma.
  • batch_size (valfritt) – Antalet bilder som ska genereras i en enda framåtpassning. Om du använder en mindre instans eller genererar många bilder, minska batch_size vara ett litet tal (1–2). Antal bilder = antal uppmaningar*num_images_per_prompt.

Begränsningar och fördomar

Även om Stable Diffusion har imponerande prestanda inom målning, lider den av flera begränsningar och fördomar. Dessa inkluderar men är inte begränsade till:

  • Modellen kanske inte genererar exakta ansikten eller lemmar eftersom träningsdatan inte innehåller tillräckligt med bilder med dessa funktioner.
  • Modellen utbildades på LAION-5B dataset, som har vuxet innehåll och kanske inte är lämplig för produktanvändning utan ytterligare överväganden.
  • Modellen kanske inte fungerar bra med icke-engelska språk eftersom modellen tränades på engelskspråkig text.
  • Modellen kan inte generera bra text i bilder.
  • Stabil diffusionsmålning fungerar vanligtvis bäst med bilder med lägre upplösningar, som 256×256 eller 512×512 pixlar. När man arbetar med högupplösta bilder (768×768 eller högre), kan metoden kämpa för att bibehålla önskad kvalitet och detaljnivå.
  • Även om användningen av ett frö kan hjälpa till att kontrollera reproducerbarheten, kan stabil diffusionsmålning fortfarande ge varierande resultat med små förändringar av indata eller parametrar. Detta kan göra det utmanande att finjustera utdata för specifika krav.
  • Metoden kan kämpa med att generera intrikata strukturer och mönster, särskilt när de sträcker sig över stora områden i bilden eller är nödvändiga för att upprätthålla den övergripande koherensen och kvaliteten i det målade området.

För mer information om begränsningar och fördomar, se Stabil Diffusion Inpainting modellkort.

Inmålningslösning med mask genererad via en prompt

CLIPSeq är en avancerad teknik för djupinlärning som använder kraften i förtränade CLIP-modeller (Contrastive Language-Image Pretraining) för att generera masker från inmatade bilder. Detta tillvägagångssätt ger ett effektivt sätt att skapa masker för uppgifter som bildsegmentering, målning och manipulation. CLIPSeq använder CLIP för att skapa en textbeskrivning av inmatningsbilden. Textbeskrivningen används sedan för att generera en mask som identifierar de pixlar i bilden som är relevanta för textbeskrivningen. Masken kan sedan användas för att isolera relevanta delar av bilden för vidare bearbetning.

CLIPSeq har flera fördelar jämfört med andra metoder för att generera masker från ingångsbilder. För det första är det en mer effektiv metod, eftersom den inte kräver att bilden bearbetas av en separat bildsegmenteringsalgoritm. För det andra är det mer exakt, eftersom det kan generera masker som är mer anpassade till textbeskrivningen av bilden. För det tredje är det mer mångsidigt, eftersom du kan använda det för att skapa masker från en mängd olika bilder.

CLIPSeq har dock också vissa nackdelar. För det första kan tekniken ha begränsningar när det gäller ämne, eftersom den bygger på förutbildade CLIP-modeller som kanske inte omfattar specifika domäner eller expertområden. För det andra kan det vara en känslig metod, eftersom den är känslig för fel i textbeskrivningen av bilden.

Mer information finns i Virtuell modestyling med generativ AI med Amazon SageMaker.

Städa upp

När du är klar med att köra anteckningsboken, se till att ta bort alla resurser som skapats i processen för att säkerställa att faktureringen stoppas. Koden för att rensa slutpunkten är tillgänglig i den tillhörande anteckningsbok.

Slutsats

I det här inlägget visade vi hur man distribuerar en förtränad modell för stabil diffusionsmålning med JumpStart. Vi visade kodsnuttar i det här inlägget – hela koden med alla steg i den här demon finns i Introduktion till JumpStart – Förbättra bildkvaliteten med hjälp av uppmaning exempel anteckningsbok. Prova lösningen på egen hand och skicka oss dina kommentarer.

För att lära dig mer om modellen och hur den fungerar, se följande resurser:

För att lära dig mer om JumpStart, kolla in följande inlägg:


Om författarna

Måla bilder med stabil spridning med Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.Dr. Vivek Madan är en tillämpad forskare med Amazon SageMaker JumpStart-teamet. Han tog sin doktorsexamen från University of Illinois i Urbana-Champaign och var postdoktor vid Georgia Tech. Han är en aktiv forskare inom maskininlärning och algoritmdesign och har publicerat artiklar på EMNLP-, ICLR-, COLT-, FOCS- och SODA-konferenser.

Måla bilder med stabil spridning med Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.Alfred Shen är senior AI/ML-specialist på AWS. Han har arbetat i Silicon Valley och innehaft tekniska och ledande befattningar inom olika sektorer inklusive hälsovård, finans och högteknologi. Han är en hängiven tillämpad AI/ML-forskare, med fokus på CV, NLP och multimodalitet. Hans arbete har visats i publikationer som EMNLP, ICLR och Public Health.

Tidsstämpel:

Mer från AWS maskininlärning