Inpaint-Bilder mit Stable Diffusion mit Amazon SageMaker JumpStart

Inpaint-Bilder mit Stable Diffusion mit Amazon SageMaker JumpStart

Im November 2022 haben wir angekündigt mit denen AWS-Kunden Bilder aus Text generieren können Stable Diffusion Modelle verwenden Amazon SageMaker-JumpStart. Wir freuen uns, heute eine neue Funktion vorstellen zu können, mit der Benutzer Bilder mit Stable Diffusion-Modellen übermalen können. Inpainting bezieht sich auf den Prozess des Ersetzens eines Teils eines Bildes durch ein anderes Bild basierend auf einer Textaufforderung. Durch Bereitstellen des Originalbildes, eines Maskenbildes, das den zu ersetzenden Teil umreißt, und einer Textaufforderung kann das Stable Diffusion-Modell ein neues Bild erzeugen, das den maskierten Bereich durch das in der Textaufforderung beschriebene Objekt, Subjekt oder die Umgebung ersetzt.

Sie können Inpainting verwenden, um beschädigte Bilder wiederherzustellen oder neue Bilder mit neuartigen Motiven oder Stilen in bestimmten Abschnitten zu erstellen. Im Bereich des Architekturdesigns kann Stable Diffusion Inpainting angewendet werden, um unvollständige oder beschädigte Bereiche von Bauplänen zu reparieren und präzise Informationen für Bauteams bereitzustellen. Bei der klinischen MRT-Bildgebung muss der Kopf des Patienten fixiert werden, was aufgrund des Beschneidungsartefakts zu unterdurchschnittlichen Ergebnissen führen kann, was zu Datenverlust oder verringerter diagnostischer Genauigkeit führt. Image Inpainting kann effektiv dazu beitragen, diese suboptimalen Ergebnisse zu mildern.

In diesem Beitrag präsentieren wir eine umfassende Anleitung zum Bereitstellen und Ausführen von Inferenz mithilfe des Inpainting-Modells Stable Diffusion auf zwei Arten: über die Benutzeroberfläche (UI) von JumpStart in Amazon SageMaker-Studio, und programmgesteuert durch JumpStart-APIs erhältlich in der SageMaker Python-SDK.

Lösungsüberblick

Die folgenden Bilder sind Beispiele für Inpainting. Die Originalbilder befinden sich auf der linken Seite, das Maskenbild in der Mitte und das vom Modell generierte eingefärbte Bild auf der rechten Seite. Für das erste Beispiel wurde dem Modell das Originalbild, ein Maskenbild und der Textprompt „eine weiße Katze, blaue Augen, trägt einen Pullover, im Park liegend“ sowie der Negativprompt „schlecht gezeichnete Füße“ zur Verfügung gestellt. ” Für das zweite Beispiel lautete die Textaufforderung „Ein weibliches Model präsentiert anmutig ein lässiges langes Kleid mit einer Mischung aus Rosa- und Blautönen.“

Inpaint-Bilder mit stabiler Diffusion mithilfe von Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.

Das Ausführen großer Modelle wie Stable Diffusion erfordert benutzerdefinierte Inferenzskripte. Sie müssen End-to-End-Tests durchführen, um sicherzustellen, dass das Skript, das Modell und die gewünschte Instanz effizient zusammenarbeiten. JumpStart vereinfacht diesen Prozess, indem es gebrauchsfertige Skripts bereitstellt, die umfassend getestet wurden. Sie können auf diese Skripte mit einem Klick über die Studio-Benutzeroberfläche oder mit sehr wenigen Codezeilen über die zugreifen JumpStart-APIs.

Die folgenden Abschnitte führen Sie durch die Bereitstellung des Modells und die Ausführung der Inferenz entweder über die Studio-Benutzeroberfläche oder die JumpStart-APIs.

Beachten Sie, dass Sie durch die Verwendung dieses Modells dem zustimmen CreativeML Open RAIL++-M-Lizenz.

Greifen Sie über die Studio-Benutzeroberfläche auf JumpStart zu

In diesem Abschnitt veranschaulichen wir die Bereitstellung von JumpStart-Modellen mithilfe der Studio-Benutzeroberfläche. Das begleitende Video zeigt, wie das vortrainierte Inpainting-Modell Stable Diffusion auf JumpStart gefunden und bereitgestellt wird. Die Modellseite bietet wesentliche Details über das Modell und seine Verwendung. Um Inferenzen durchzuführen, verwenden wir den Instance-Typ ml.p3.2xlarge, der die erforderliche GPU-Beschleunigung für Inferenzen mit geringer Latenz zu einem erschwinglichen Preis bietet. Nachdem die SageMaker-Hosting-Instanz konfiguriert ist, wählen Sie Deploy. Der Endpunkt ist innerhalb von etwa 10 Minuten betriebsbereit und bereit, Inferenzanforderungen zu verarbeiten.

JumpStart stellt ein Beispiel-Notebook bereit, das dazu beitragen kann, die Zeit zu verkürzen, die zum Ausführen der Inferenz auf dem neu erstellten Endpunkt benötigt wird. Um auf das Notizbuch in Studio zuzugreifen, wählen Sie Notizbuch öffnen der Verwenden Sie Endpoint aus Studio Abschnitt der Modellendpunktseite.

Verwenden Sie JumpStart programmgesteuert mit dem SageMaker SDK

Mithilfe der JumpStart-Benutzeroberfläche können Sie ein vortrainiertes Modell interaktiv mit nur wenigen Klicks bereitstellen. Alternativ können Sie JumpStart-Modelle programmgesteuert verwenden, indem Sie APIs verwenden, die in das SageMaker Python SDK integriert sind.

In diesem Abschnitt wählen wir ein geeignetes vortrainiertes Modell in JumpStart aus, stellen dieses Modell auf einem SageMaker-Endpunkt bereit und führen Rückschlüsse auf dem bereitgestellten Endpunkt durch, alles unter Verwendung des SageMaker Python SDK. Die folgenden Beispiele enthalten Codeausschnitte. Um auf den vollständigen Code mit allen in dieser Demonstration enthaltenen Schritten zuzugreifen, beziehen Sie sich auf die Einführung in die JumpStart-Bildbearbeitung – Stable Diffusion Inpainting Beispiel Notizbuch.

Stellen Sie das vorab trainierte Modell bereit

SageMaker verwendet Docker-Container für verschiedene Build- und Laufzeitaufgaben. JumpStart verwendet die SageMaker Deep Learning-Container (DLCs), die Framework-spezifisch sind. Wir rufen zuerst alle zusätzlichen Pakete sowie Skripte ab, um das Training und die Inferenz für die ausgewählte Aufgabe zu handhaben. Dann werden die vortrainierten Modellartefakte separat mit abgerufen model_uris, was der Plattform Flexibilität verleiht. Dadurch können mehrere vortrainierte Modelle mit einem einzigen Inferenzskript verwendet werden. Der folgende Code veranschaulicht diesen Vorgang:

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

Als Nächstes stellen wir diese Ressourcen a zur Verfügung SageMaker-Modell Instanz und stellen Sie einen Endpunkt bereit:

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

Nachdem das Modell bereitgestellt wurde, können wir daraus Echtzeitvorhersagen erhalten!

zufuhr

Die Eingabe ist das Basisbild, ein Maskenbild und die Aufforderung, die das Subjekt, Objekt oder die Umgebung beschreibt, die in dem ausgeblendeten Teil ersetzt werden soll. Das Erstellen des perfekten Maskenbildes für In-Painting-Effekte erfordert mehrere Best Practices. Beginnen Sie mit einer bestimmten Aufforderung und zögern Sie nicht, mit verschiedenen Stable Diffusion-Einstellungen zu experimentieren, um die gewünschten Ergebnisse zu erzielen. Verwenden Sie ein Maskenbild, das dem Bild, das Sie ausmalen möchten, sehr ähnlich ist. Dieser Ansatz unterstützt den Inpainting-Algorithmus beim Vervollständigen der fehlenden Abschnitte des Bildes, was zu einem natürlicheren Erscheinungsbild führt. Hochwertige Bilder führen im Allgemeinen zu besseren Ergebnissen. Stellen Sie daher sicher, dass Ihre Basis- und Maskenbilder von guter Qualität sind und einander ähneln. Entscheiden Sie sich außerdem für ein großes und glattes Maskenbild, um Details zu erhalten und Artefakte zu minimieren.

Der Endpunkt akzeptiert das Basisbild und die Maske als RGB-Rohwerte oder ein base64-codiertes Bild. Der Inferenzhandler dekodiert das Bild basierend auf content_type:

  • Aussichten für content_type = “application/json”, muss die Eingabenutzlast ein JSON-Wörterbuch mit den rohen RGB-Werten, der Texteingabeaufforderung und anderen optionalen Parametern sein
  • Aussichten für content_type = “application/json;jpeg”, muss die Eingabenutzlast ein JSON-Wörterbuch mit dem base64-codierten Bild, einer Texteingabeaufforderung und anderen optionalen Parametern sein

Output

Der Endpunkt kann zwei Ausgabetypen generieren: ein Base64-codiertes RGB-Bild oder ein JSON-Wörterbuch der generierten Bilder. Sie können das gewünschte Ausgabeformat angeben, indem Sie das einstellen accept Kopfzeile zu "application/json" or "application/json;jpeg" für ein JPEG-Bild bzw. base64.

  • Aussichten für accept = “application/json”, gibt der Endpunkt ein JSON-Wörterbuch mit RGB-Werten für das Bild zurück
  • Aussichten für accept = “application/json;jpeg”, gibt der Endpunkt ein JSON-Wörterbuch mit dem JPEG-Bild als Bytes zurück, die mit base64.b64-Codierung codiert sind

Beachten Sie, dass das Senden oder Empfangen der Nutzlast mit den rohen RGB-Werten die Standardgrenzen für die Eingabenutzlast und die Antwortgröße erreichen kann. Daher empfehlen wir, das base64-codierte Bild per Einstellung zu verwenden content_type = “application/json;jpeg” und accept = „application/json;jpeg“.

Der folgende Code ist ein Beispiel für eine Inferenzanforderung:

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)

Unterstützte Parameter

Stabile Diffusion-Inpainting-Modelle unterstützen viele Parameter für die Bilderzeugung:

  • Image – Das Originalbild.
  • Maske" – Ein Bild, bei dem der geschwärzte Teil während der Bilderzeugung unverändert bleibt und der weiße Teil ersetzt wird.
  • Eingabeaufforderung – Eine Aufforderung zur Führung der Bilderzeugung. Es kann eine Zeichenfolge oder eine Liste von Zeichenfolgen sein.
  • num_inference_steps (optional) – Die Anzahl der Rauschunterdrückungsschritte während der Bilderzeugung. Mehr Schritte führen zu einer höheren Bildqualität. Falls angegeben, muss es sich um eine positive Ganzzahl handeln. Beachten Sie, dass mehr Inferenzschritte zu einer längeren Reaktionszeit führen.
  • guide_scale (optional) – Eine höhere Führungsskala führt zu einem Bild, das näher an der Aufforderung hängt, auf Kosten der Bildqualität. Falls angegeben, muss es sich um einen Float handeln. guidance_scale<=1 wird ignoriert.
  • negative_Eingabeaufforderung (optional) – Dies führt die Bilderzeugung gegen diese Aufforderung. Wenn angegeben, muss es sich um eine Zeichenfolge oder eine Liste von Zeichenfolgen handeln und mit verwendet werden guidance_scale. Wenn guidance_scale deaktiviert ist, ist diese ebenfalls deaktiviert. Wenn es sich bei der Eingabeaufforderung um eine Liste von Zeichenfolgen handelt, wird außerdem die negative_prompt muss auch eine Liste von Zeichenfolgen sein.
  • Samen (optional) – Dies fixiert den randomisierten Zustand für die Reproduzierbarkeit. Falls angegeben, muss es sich um eine ganze Zahl handeln. Wenn Sie denselben Prompt mit demselben Seed verwenden, ist das resultierende Bild immer dasselbe.
  • batch_size (optional) – Die Anzahl der Bilder, die in einem einzigen Vorwärtsdurchlauf generiert werden sollen. Wenn Sie eine kleinere Instanz verwenden oder viele Bilder generieren, reduzieren Sie batch_size eine kleine Zahl sein (1–2). Die Anzahl der Bilder = Anzahl der Eingabeaufforderungen*num_images_per_prompt.

Einschränkungen und Vorurteile

Obwohl Stable Diffusion eine beeindruckende Leistung beim Inpainting hat, leidet es unter mehreren Einschränkungen und Vorurteilen. Dazu gehören unter anderem:

  • Das Modell generiert möglicherweise keine genauen Gesichter oder Gliedmaßen, da die Trainingsdaten nicht genügend Bilder mit diesen Merkmalen enthalten.
  • Das Modell wurde auf dem trainiert LAION-5B-Datensatz, die nicht jugendfreien Inhalt hat und ohne weitere Überlegungen möglicherweise nicht für die Produktnutzung geeignet ist.
  • Das Modell funktioniert möglicherweise nicht gut mit nicht-englischen Sprachen, da das Modell mit englischsprachigem Text trainiert wurde.
  • Das Modell kann keinen guten Text in Bildern generieren.
  • Stable Diffusion Inpainting funktioniert normalerweise am besten mit Bildern mit niedrigeren Auflösungen, wie z. B. 256 × 256 oder 512 × 512 Pixel. Bei der Arbeit mit hochauflösenden Bildern (768 x 768 oder höher) kann es mit der Methode schwierig sein, die gewünschte Qualität und Detailgenauigkeit aufrechtzuerhalten.
  • Obwohl die Verwendung eines Seeds dabei helfen kann, die Reproduzierbarkeit zu kontrollieren, kann Stable Diffusion Inpainting immer noch unterschiedliche Ergebnisse mit geringfügigen Änderungen an der Eingabe oder den Parametern erzeugen. Dies kann die Feinabstimmung der Ausgabe für bestimmte Anforderungen erschweren.
  • Das Verfahren könnte mit der Erzeugung komplizierter Texturen und Muster zu kämpfen haben, insbesondere wenn sie große Bereiche innerhalb des Bildes überspannen oder für die Aufrechterhaltung der Gesamtkohärenz und -qualität des eingemalten Bereichs wesentlich sind.

Weitere Informationen zu Einschränkungen und Verzerrungen finden Sie unter Stable Diffusion Inpainting-Modellkarte.

Inpainting-Lösung mit Maske, die über eine Eingabeaufforderung generiert wird

CLIPSeq ist eine fortschrittliche Deep-Learning-Technik, die die Leistungsfähigkeit vortrainierter CLIP-Modelle (Contrastive Language-Image Pretraining) nutzt, um Masken aus Eingabebildern zu generieren. Dieser Ansatz bietet eine effiziente Möglichkeit, Masken für Aufgaben wie Bildsegmentierung, Inpainting und Manipulation zu erstellen. CLIPSeq verwendet CLIP, um eine Textbeschreibung des Eingabebilds zu generieren. Die Textbeschreibung wird dann verwendet, um eine Maske zu erzeugen, die die Pixel im Bild identifiziert, die für die Textbeschreibung relevant sind. Die Maske kann dann verwendet werden, um die relevanten Teile des Bildes für die weitere Verarbeitung zu isolieren.

CLIPSeq hat mehrere Vorteile gegenüber anderen Methoden zum Generieren von Masken aus Eingabebildern. Erstens ist es eine effizientere Methode, da das Bild nicht durch einen separaten Bildsegmentierungsalgorithmus verarbeitet werden muss. Zweitens ist es genauer, weil es Masken erzeugen kann, die enger an der Textbeschreibung des Bildes ausgerichtet sind. Drittens ist es vielseitiger, da Sie es verwenden können, um Masken aus einer Vielzahl von Bildern zu generieren.

Allerdings hat CLIPSeq auch einige Nachteile. Erstens kann die Technik inhaltliche Einschränkungen aufweisen, da sie auf vortrainierten CLIP-Modellen beruht, die bestimmte Domänen oder Fachgebiete möglicherweise nicht umfassen. Zweitens kann es eine sensible Methode sein, da sie anfällig für Fehler in der Textbeschreibung des Bildes ist.

Weitere Informationen finden Sie unter Virtuelles Modestyling mit generativer KI mit Amazon SageMaker.

Aufräumen

Nachdem Sie das Notebook ausgeführt haben, müssen Sie alle dabei erstellten Ressourcen löschen, um sicherzustellen, dass die Abrechnung gestoppt wird. Der Code zum Bereinigen des Endpunkts ist in der zugehörigen Datei verfügbar Notizbuch.

Zusammenfassung

In diesem Beitrag haben wir gezeigt, wie Sie ein vortrainiertes Stable Diffusion-Inpainting-Modell mit JumpStart bereitstellen. Wir haben Codeausschnitte in diesem Beitrag gezeigt – der vollständige Code mit allen Schritten in dieser Demo ist im verfügbar Einführung in JumpStart – Verbessern Sie die Bildqualität durch Eingabeaufforderung Beispiel Notizbuch. Probieren Sie die Lösung selbst aus und senden Sie uns Ihre Kommentare.

Weitere Informationen zum Modell und seiner Funktionsweise finden Sie in den folgenden Ressourcen:

Weitere Informationen zu JumpStart finden Sie in den folgenden Beiträgen:


Über die Autoren

Inpaint-Bilder mit stabiler Diffusion mithilfe von Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.Vivek Madan ist ein angewandter Wissenschaftler im Amazon SageMaker JumpStart-Team. Er promovierte an der University of Illinois at Urbana-Champaign und war Postdoktorand an der Georgia Tech. Er ist ein aktiver Forscher in den Bereichen maschinelles Lernen und Algorithmendesign und hat Artikel auf Konferenzen von EMNLP, ICLR, COLT, FOCS und SODA veröffentlicht.

Inpaint-Bilder mit stabiler Diffusion mithilfe von Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.Alfred Shen ist Senior AI/ML-Spezialist bei AWS. Er war im Silicon Valley tätig und hatte technische und leitende Positionen in verschiedenen Sektoren wie Gesundheitswesen, Finanzen und Hightech inne. Er ist ein engagierter Forscher für angewandte KI/ML, der sich auf CV, NLP und Multimodalität konzentriert. Seine Arbeit wurde in Publikationen wie EMNLP, ICLR und Public Health vorgestellt.

Zeitstempel:

Mehr von AWS Maschinelles Lernen