Feinabstimmung von Text-to-Image Stable Diffusion-Modellen mit Amazon SageMaker JumpStart

Feinabstimmung von Text-to-Image Stable Diffusion-Modellen mit Amazon SageMaker JumpStart

Quellknoten: 1968900

Im November 2022 haben wir angekündigt mit denen AWS-Kunden Bilder aus Text generieren können Stable Diffusion Modelle in Amazon SageMaker-JumpStart. Stable Diffusion ist ein Deep-Learning-Modell, mit dem Sie in nur wenigen Sekunden realistische, hochwertige Bilder und beeindruckende Kunstwerke erstellen können. Obwohl das Erstellen beeindruckender Bilder in Branchen von Kunst bis NFTs und darüber hinaus Verwendung finden kann, erwarten wir heute auch, dass KI personalisierbar ist. Heute kündigen wir an, dass Sie das Bilderzeugungsmodell für Ihren Anwendungsfall personalisieren können, indem Sie es an Ihrem benutzerdefinierten Datensatz anpassen Amazon SageMaker-JumpStart. Dies kann nützlich sein, wenn Sie Kunst, Logos, benutzerdefinierte Designs, NFTs usw. oder lustige Dinge wie das Erstellen benutzerdefinierter KI-Bilder Ihrer Haustiere oder Avatare von sich selbst erstellen.

In diesem Beitrag geben wir einen Überblick darüber, wie Sie das Stable Diffusion-Modell auf zwei Arten optimieren können: programmatisch durch JumpStart-APIs erhältlich in der SageMaker Python-SDK, und die Benutzeroberfläche (UI) von JumpStart in Amazon SageMaker-Studio. Wir diskutieren auch, wie Designentscheidungen getroffen werden können, einschließlich Datensatzqualität, Größe des Trainingsdatensatzes, Auswahl von Hyperparameterwerten und Anwendbarkeit auf mehrere Datensätze. Abschließend besprechen wir die über 80 öffentlich verfügbaren, optimierten Modelle mit verschiedenen Eingabesprachen und -stilen, die kürzlich in JumpStart hinzugefügt wurden.

Stabiles Diffusions- und Transferlernen

Stable Diffusion ist ein Text-to-Image-Modell, mit dem Sie fotorealistische Bilder aus nur einer Texteingabe erstellen können. Ein Diffusionsmodell trainiert, indem es lernt, Rauschen zu entfernen, das einem realen Bild hinzugefügt wurde. Dieser Entrauschungsprozess erzeugt ein realistisches Bild. Diese Modelle können auch Bilder allein aus Text generieren, indem sie den Generierungsprozess auf den Text konditionieren. Beispielsweise ist Stable Diffusion eine latente Diffusion, bei der das Modell lernt, Formen in einem reinen Rauschbild zu erkennen, und diese Formen allmählich in den Fokus rückt, wenn die Formen mit den Wörtern im Eingabetext übereinstimmen. Der Text muss zunächst mithilfe eines Sprachmodells in einen latenten Raum eingebettet werden. Dann werden im latenten Raum mit einer U-Net-Architektur eine Reihe von Rauschhinzufügungs- und Rauschentfernungsoperationen durchgeführt. Schließlich wird die entrauschte Ausgabe in den Pixelraum dekodiert.

Beim maschinellen Lernen (ML) wird die Fähigkeit bezeichnet, das in einer Domäne erlernte Wissen auf eine andere zu übertragen Transferlernen. Sie können Transfer Learning verwenden, um genaue Modelle für Ihre kleineren Datasets zu erstellen, und zwar mit viel geringeren Schulungskosten als beim Training des ursprünglichen Modells. Mit Transfer Learning können Sie das stabile Diffusionsmodell an Ihrem eigenen Datensatz mit nur fünf Bildern optimieren. Auf der linken Seite befinden sich beispielsweise Trainingsbilder eines Hundes namens Doppler, der zur Feinabstimmung des Modells verwendet wurde, in der Mitte und rechts sind Bilder, die vom feinabgestimmten Modell generiert wurden, als es gebeten wurde, Dopplers Bild am Strand vorherzusagen, sowie eine Bleistiftskizze.

Auf der linken Seite sind Bilder eines weißen Stuhls, der zur Feinabstimmung des Modells verwendet wurde, und ein Bild des Stuhls in Rot, das vom feinabgestimmten Modell erzeugt wurde. Auf der rechten Seite sind Bilder einer Ottomane zu sehen, die zur Feinabstimmung des Modells verwendet wurde, und ein Bild einer Katze, die auf einer Ottomane sitzt.

Für die Feinabstimmung großer Modelle wie Stable Diffusion müssen Sie normalerweise Schulungsskripts bereitstellen. Es gibt eine Vielzahl von Problemen, darunter Probleme mit unzureichendem Arbeitsspeicher, Probleme mit der Nutzlastgröße und mehr. Darüber hinaus müssen Sie 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 gründlich getestet wurden. Das JumpStart-Fine-Tuning-Skript für Stable Diffusion-Modelle baut auf dem Fine-Tuning-Skript von auf Traumkabine. Sie können auf diese Skripte mit einem einzigen Klick über die Studio-Benutzeroberfläche oder mit sehr wenigen Codezeilen über die zugreifen JumpStart-APIs.

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

Verwenden Sie JumpStart programmgesteuert mit dem SageMaker SDK

In diesem Abschnitt wird beschrieben, wie Sie das Modell mit dem trainieren und bereitstellen SageMaker Python-SDK. Wir wählen ein geeignetes vortrainiertes Modell in JumpStart aus, trainieren dieses Modell mit einem SageMaker-Trainingsjob und stellen das trainierte Modell auf einem SageMaker-Endpunkt bereit. Darüber hinaus führen wir Rückschlüsse auf dem bereitgestellten Endpunkt aus, wobei alle das SageMaker Python SDK verwenden. Die folgenden Beispiele enthalten Codeausschnitte. Den vollständigen Code mit allen Schritten in dieser Demo finden Sie unter Einführung in JumpStart – Text zu Bild Beispiel Notizbuch.

Trainieren und optimieren Sie das Stable Diffusion-Modell

Jedes Modell wird durch ein Unikat identifiziert model_id. Der folgende Code zeigt, wie ein Stable Diffusion 2.1-Basismodell, das durch gekennzeichnet ist, feinabgestimmt wird model_id model-txt2img-stabilityai-stable-diffusion-v2-1-base auf einem benutzerdefinierten Trainingsdatensatz. Für eine vollständige Liste von model_id Werte und welche Modelle feinabstimmbar sind, finden Sie unter Eingebaute Algorithmen mit vortrainierter Modelltabelle. Für jedes model_id, um einen SageMaker-Schulungsjob über die zu starten Estimator -Klasse des SageMaker Python SDK müssen Sie den Docker-Image-URI, den Trainingsskript-URI und den vortrainierten Modell-URI über die in SageMaker bereitgestellten Hilfsfunktionen abrufen. Der Trainingsskript-URI enthält den gesamten erforderlichen Code für die Datenverarbeitung, das Laden des vorab trainierten Modells, das Modelltraining und das Speichern des trainierten Modells für die Inferenz. Der URI des vortrainierten Modells enthält die Architekturdefinition des vortrainierten Modells und die Modellparameter. Der vortrainierte Modell-URI ist spezifisch für das jeweilige Modell. Die vortrainierten Modell-Tarballs wurden von Hugging Face vorab heruntergeladen und mit der entsprechenden Modellsignatur gespeichert Amazon Simple Storage-Service (Amazon S3)-Buckets, sodass der Trainingsjob in Netzwerkisolation ausgeführt wird. Siehe folgenden Code:

from sagemaker import image_uris, model_uris, script_uris # Currently, not all the stable diffusion models in jumpstart support finetuning. Thus, we manually select a model
# which supports finetuning.
train_model_id, train_model_version, train_scope = ( "model-txt2img-stabilityai-stable-diffusion-v2-1-base", "*", "training",
) # Tested with ml.g4dn.2xlarge (16GB GPU memory) and ml.g5.2xlarge (24GB GPU memory) instances. Other instances may work as well.
# If ml.g5.2xlarge instance type is available, please change the following instance type to speed up training.
training_instance_type = "ml.g4dn.2xlarge" # Retrieve the docker image
train_image_uri = image_uris.retrieve(
region=None,
framework=None, # automatically inferred from model_id
model_id=train_model_id,
model_version=train_model_version,
image_scope=train_scope,
instance_type=training_instance_type,
) # Retrieve the training script. This contains all the necessary files including data processing, model training etc.
train_source_uri = script_uris.retrieve(
model_id=train_model_id, model_version=train_model_version, script_scope=train_scope
) # Retrieve the pre-trained model tarball to further fine-tune
train_model_uri = model_uris.retrieve(
model_id=train_model_id, model_version=train_model_version, model_scope=train_scope
)

Mit diesen modellspezifischen Trainingsartefakten können Sie ein Objekt der erstellen Estimator Klasse:

# Create SageMaker Estimator instance
sd_estimator = Estimator( role=aws_role, image_uri=train_image_uri, source_dir=train_source_uri, model_uri=train_model_uri, entry_point="transfer_learning.py", # Entry-point file in source_dir and present in train_source_uri. instance_count=1, instance_type=training_instance_type, max_run=360000, hyperparameters=hyperparameters, output_path=s3_output_location, base_job_name=training_job_name,
) # Launch a SageMaker Training job by passing s3 path of the training data
sd_estimator.fit({"training": training_dataset_s3_path}, logs=True)

Trainingsdatensatz

Im Folgenden finden Sie Anweisungen zur Formatierung der Trainingsdaten:

  • zufuhr – Ein Verzeichnis mit den Instanzbildern, dataset_info.json, mit folgender Konfiguration:
    • Bilder können im .png-, .jpg- oder .jpeg-Format vorliegen
    • Das dataset_info.json Datei muss das Format haben {'instance_prompt':<<instance_prompt>>}
  • Output – Ein trainiertes Modell, das für Inferenz eingesetzt werden kann

Der S3-Pfad sollte so aussehen s3://bucket_name/input_directory/. Beachten Sie die nachgestellte / erforderlich.

Das Folgende ist ein Beispielformat der Trainingsdaten:

input_directory |---instance_image_1.png |---instance_image_2.png |---instance_image_3.png |---instance_image_4.png |---instance_image_5.png |---dataset_info.json

Anweisungen zum Formatieren der Daten bei Verwendung der vorherigen Aufbewahrung finden Sie im Abschnitt Vorerhaltung in diesem Beitrag.

Wir stellen einen Standarddatensatz von Katzenbildern bereit. Es besteht aus acht Bildern (Instanzbildern, die dem Instanzprompt entsprechen) einer einzelnen Katze ohne Klassenbilder. Es kann von heruntergeladen werden GitHub. Wenn Sie den Standarddatensatz verwenden, versuchen Sie es mit der Eingabeaufforderung „ein Foto einer Riobugger-Katze“, während Sie im Demo-Notebook Rückschlüsse ziehen.

Lizenz: MIT.

Hyperparameter

Als Nächstes müssen Sie möglicherweise die Standardwerte der Trainings-Hyperparameter ändern, um das Lernen für Ihr benutzerdefiniertes Dataset zu übertragen. Sie können ein Python-Wörterbuch dieser Hyperparameter mit ihren Standardwerten abrufen, indem Sie aufrufen hyperparameters.retrieve_default, aktualisieren Sie sie nach Bedarf und übergeben Sie sie dann an die Estimator-Klasse. Siehe folgenden Code:

from sagemaker import hyperparameters
# Retrieve the default hyper-parameters for fine-tuning the model
hyperparameters = hyperparameters.retrieve_default(
model_id=train_model_id, model_version=train_model_version
) # [Optional] Override default hyperparameters with custom values
hyperparameters["max_steps"] = "400"

Die folgenden Hyperparameter werden vom Feinabstimmungsalgorithmus unterstützt:

  • mit_vorheriger_erhaltung – Markierung zum Hinzufügen eines vorherigen Erhaltungsverlusts. Die vorherige Bewahrung ist ein Regularisierer, der eine Überanpassung vermeidet. (Auswahl: [“True”,“False”], Standard: “False”.)
  • num_class_images – Die Mindestklasse von Bildern für den vorherigen Erhaltungsverlust. Wenn with_prior_preservation = True und es sind nicht bereits genügend Bilder in vorhanden class_data_dir, zusätzliche Bilder werden mit abgetastet class_prompt. (Werte: positive ganze Zahl, Standard: 100.)
  • Epochen – Die Anzahl der Durchgänge, die der Feinabstimmungsalgorithmus durch den Trainingsdatensatz führt. (Werte: positive ganze Zahl, Standard: 20.)
  • Max_Schritte – Die Gesamtzahl der durchzuführenden Trainingsschritte. Wenn nicht None, setzt Epochen außer Kraft. (Werte: “None” oder eine ganze Zahl, Standard: “None”.)
  • Chargengröße –: Die Anzahl der Trainingsbeispiele, die abgearbeitet werden, bevor die Modellgewichte aktualisiert werden. Entspricht der Stapelgröße während der Generierung von Klassenbildern, wenn with_prior_preservation = True. (Werte: positive ganze Zahl, Standard: 1.)
  • Lernrate – Die Rate, mit der die Modellgewichtungen aktualisiert werden, nachdem jeder Batch von Trainingsbeispielen durchgearbeitet wurde. (Werte: positive Float, Standard: 2e-06.)
  • prior_loss_weight – Das Gewicht des vorherigen Konservierungsverlusts. (Werte: positive Float, Standard: 1.0.)
  • center_crop – Ob die Bilder zugeschnitten werden sollen, bevor die Größe auf die gewünschte Auflösung geändert wird. (Auswahl: [“True”/“False”], Standard: “False”.)
  • lr_scheduler – Die Art des Lernratenplaners. (Auswahl: ["linear", "cosine", "cosine_with_restarts", "polynomial", "constant", "constant_with_warmup"], Standard: "constant".) Weitere Informationen finden Sie unter Lernratenplaner.
  • adam_weight_decay – Die Gewichtsabnahme, die auf alle Ebenen angewendet werden soll (wenn nicht Null), außer auf alle Vorspannungen und LayerNorm Gewichte ein AdamW Optimierer. (Wert: Float, Standard: 1e-2.)
  • adam_beta1 – Der Beta1-Hyperparameter (exponentielle Zerfallsrate für die First-Moment-Schätzungen) für die AdamW Optimierer. (Wert: Float, Standard: 0.9.)
  • adam_beta2 – Der Beta2-Hyperparameter (exponentielle Zerfallsrate für die First-Moment-Schätzungen) für die AdamW Optimierer. (Wert: Float, Standard: 0.999.)
  • adam_epsilon - Die epsilon Hyperparameter für die AdamW Optimierer. Er wird normalerweise auf einen kleinen Wert gesetzt, um eine Division durch 0 zu vermeiden. (Wert: Float, Standard: 1e-8.)
  • gradient_accumulation_steps – Die Anzahl der zu kumulierenden Aktualisierungsschritte, bevor ein Rückwärts-/Aktualisierungsdurchlauf durchgeführt wird. (Wert: Ganzzahl, Standard: 1.)
  • max_grad_norm – Die maximale Farbverlaufsnorm (für das Beschneiden von Farbverläufen). (Wert: Float, Standard: 1.0.)
  • Samen – Beheben Sie den zufälligen Zustand, um reproduzierbare Ergebnisse im Training zu erzielen. (Wert: Ganzzahl, Standard: 0.)

Stellen Sie das fein trainierte Modell bereit

Nachdem das Modelltraining abgeschlossen ist, können Sie das Modell direkt auf einem dauerhaften Echtzeit-Endpunkt bereitstellen. Wir rufen die erforderlichen Docker-Image-URIs und Skript-URIs ab und stellen das Modell bereit. Siehe folgenden Code:

inference_instance_type = "ml.g4dn.2xlarge" # 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=train_model_id, model_version=train_model_version, instance_type=inference_instance_type,
) # Retrieve the inference script uri. This includes scripts for model loading, inference handling etc.
deploy_source_uri = script_uris.retrieve( model_id=train_model_id, model_version=train_model_version, script_scope="inference"
) # Use the estimator from the previous step to deploy to a SageMaker endpoint
finetuned_predictor = sd_estimator.deploy( initial_instance_count=1, instance_type=inference_instance_type, entry_point="inference.py", # entry point file in source_dir and present in deploy_source_uri image_uri=deploy_image_uri, source_dir=deploy_source_uri, endpoint_name=endpoint_name,
)

Auf der linken Seite befinden sich die Trainingsbilder einer Katze namens Riobugger, die zur Feinabstimmung des Modells verwendet wurden (Standardparameter außer max_steps = 400). In der Mitte und rechts sind die Bilder zu sehen, die das fein abgestimmte Modell generiert, wenn es gebeten wird, das Bild von Riobugger am Strand und eine Bleistiftskizze vorherzusagen.

Weitere Einzelheiten zur Inferenz, einschließlich unterstützter Parameter, Antwortformat usw., finden Sie unter Generieren Sie Bilder aus Text mit dem stabilen Diffusionsmodell auf Amazon SageMaker JumpStart.

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

In diesem Abschnitt zeigen wir, wie Sie JumpStart-Modelle über die Studio-Benutzeroberfläche trainieren und bereitstellen. Das folgende Video zeigt, wie Sie das vortrainierte Stable Diffusion-Modell auf JumpStart finden, trainieren und dann bereitstellen. Die Modellseite enthält wertvolle Informationen über das Modell und seine Verwendung. Wählen Sie nach dem Konfigurieren der SageMaker-Trainingsinstanz Training. Nachdem das Modell trainiert wurde, können Sie das trainierte Modell bereitstellen, indem Sie auswählen Deploy. Nachdem sich der Endpunkt in der Phase „in Betrieb“ befindet, ist er bereit, auf Inferenzanforderungen zu antworten.

Um die Zeit bis zur Inferenz zu verkürzen, stellt JumpStart ein Beispiel-Notebook bereit, das zeigt, wie die Inferenz auf dem neu erstellten Endpunkt ausgeführt wird. Um auf das Notizbuch in Studio zuzugreifen, wählen Sie Notizbuch öffnen der Verwenden Sie Endpoint aus Studio Abschnitt der Modellendpunktseite.

JumpStart stellt auch ein einfaches Notebook bereit, mit dem Sie das stabile Diffusionsmodell feinabstimmen und das resultierende feinabgestimmte Modell bereitstellen können. Sie können es verwenden, um lustige Bilder Ihres Hundes zu erstellen. Um auf das Notizbuch zuzugreifen, suchen Sie in der JumpStart-Suchleiste nach „Generate Fun images of your dog“. Um das Notebook auszuführen, können Sie nur fünf Trainingsbilder verwenden und in den lokalen Studioordner hochladen. Wenn Sie mehr als fünf Bilder haben, können Sie diese ebenfalls hochladen. Notebook lädt die Trainingsbilder in S3 hoch, trainiert das Modell auf Ihrem Datensatz und stellt das resultierende Modell bereit. Das Training kann bis zu 20 Minuten dauern. Sie können die Anzahl der Schritte ändern, um das Training zu beschleunigen. Notebook bietet einige Beispiel-Eingabeaufforderungen, die Sie mit dem bereitgestellten Modell ausprobieren können, aber Sie können jede beliebige Eingabeaufforderung ausprobieren. Sie können das Notizbuch auch anpassen, um Avatare von sich selbst oder Ihren Haustieren zu erstellen. Anstelle Ihres Hundes können Sie beispielsweise im ersten Schritt Bilder Ihrer Katze hochladen und dann die Eingabeaufforderungen von Hunden auf Katzen ändern, und das Modell generiert Bilder Ihrer Katze.

Überlegungen zur Feinabstimmung

Trainingsstabile Diffusionsmodelle neigen schnell zu einer Überanpassung. Um qualitativ hochwertige Bilder zu erhalten, müssen wir eine gute Balance zwischen den verfügbaren Trainings-Hyperparametern wie der Anzahl der Trainingsschritte und der Lernrate finden. In diesem Abschnitt zeigen wir einige experimentelle Ergebnisse und geben Anleitungen zur Einstellung dieser Parameter.

Empfehlungen

Beachten Sie die folgenden Empfehlungen:

  • Beginnen Sie mit einer guten Qualität der Trainingsbilder (4–20). Wenn Sie mit menschlichen Gesichtern trainieren, benötigen Sie möglicherweise mehr Bilder.
  • Trainieren Sie 200–400 Schritte, wenn Sie mit Hunden oder Katzen und anderen nichtmenschlichen Subjekten trainieren. Wenn Sie auf menschlichen Gesichtern trainieren, benötigen Sie möglicherweise mehr Schritte. Wenn es zu einer Überanpassung kommt, verringern Sie die Anzahl der Schritte. Wenn eine unzureichende Anpassung auftritt (das fein abgestimmte Modell kann das Bild des Zielobjekts nicht erzeugen), erhöhen Sie die Anzahl der Schritte.
  • Wenn Sie auf nicht-menschlichen Gesichtern trainieren, können Sie festlegen with_prior_preservation = False weil es die Leistung nicht wesentlich beeinträchtigt. Auf menschliche Gesichter müssen Sie möglicherweise einstellen with_prior_preservation=True.
  • Wenn Einstellung with_prior_preservation=Trueverwenden Sie den Instanztyp ml.g5.2xlarge.
  • Wenn Sie nacheinander zu mehreren Themen trainieren und die Themen sehr ähnlich sind (z. B. alle Hunde), behält das Modell das letzte Thema bei und vergisst die vorherigen Themen. Wenn die Subjekte unterschiedlich sind (z. B. zuerst eine Katze und dann ein Hund), behält das Modell beide Subjekte bei.
  • Wir empfehlen, eine niedrige Lernrate zu verwenden und die Anzahl der Schritte schrittweise zu erhöhen, bis die Ergebnisse zufriedenstellend sind.

Trainingsdatensatz

Die Qualität des feinabgestimmten Modells wird direkt von der Qualität der Trainingsbilder beeinflusst. Daher müssen Sie qualitativ hochwertige Bilder sammeln, um gute Ergebnisse zu erzielen. Verschwommene oder niedrig aufgelöste Bilder wirken sich auf die Qualität des feinabgestimmten Modells aus. Beachten Sie die folgenden zusätzlichen Parameter:

  • Anzahl der Trainingsbilder – Sie können das Modell mit nur vier Trainingsbildern feinabstimmen. Wir haben mit Trainingsdatensätzen mit einer Größe von nur 4 Bildern und bis zu 16 Bildern experimentiert. In beiden Fällen konnte durch Feintuning das Modell an das Motiv angepasst werden.
  • Datensatzformate – Wir haben den Feinabstimmungsalgorithmus an Bildern im Format .png, .jpg und .jpeg getestet. Andere Formate können auch funktionieren.
  • Bildauflösung – Trainingsbilder können eine beliebige Auflösung haben. Der Feinabstimmungsalgorithmus ändert die Größe aller Trainingsbilder, bevor die Feinabstimmung beginnt. Wenn Sie jedoch mehr Kontrolle über das Zuschneiden und Ändern der Größe der Trainingsbilder haben möchten, empfehlen wir, die Größe der Bilder selbst auf die Basisauflösung des Modells (in diesem Beispiel 512 × 512 Pixel) zu ändern.

Versuchseinstellungen

Im Experiment in diesem Beitrag verwenden wir während der Feinabstimmung die Standardwerte der Hyperparameter, sofern nicht anders angegeben. Darüber hinaus verwenden wir einen der vier Datensätze:

  • Hund1-8 – Hund 1 mit 8 Bildern
  • Hund1-16 – Hund 1 mit 16 Bildern
  • Hund2-4 – Hund 2 mit vier Bildern
  • Kat-8 – Katze mit 8 Bildern

Um Unordnung zu vermeiden, zeigen wir in jedem Abschnitt nur ein repräsentatives Bild des Datensatzes zusammen mit dem Datensatznamen. Das vollständige Trainingsset finden Sie in der Rubrik Versuchsdatensätze in diesem Beitrag.

Überanpassung

Stable Diffusion-Modelle neigen bei der Feinabstimmung einiger Bilder zu einer Überanpassung. Daher müssen Sie die Parameter auswählen, z epochs, max_epochs, und Lernrate sorgfältig. In diesem Abschnitt haben wir den Datensatz Dog1-16 verwendet.

Um die Leistung des Modells zu bewerten, bewerten wir das fein abgestimmte Modell für vier Aufgaben:

  • Kann das fein abgestimmte Modell Bilder des Subjekts (Doppler-Hund) in der gleichen Umgebung erzeugen, in der es trainiert wurde?
    • Beobachtung - Ja, kann es. Es ist erwähnenswert, dass die Modellleistung mit der Anzahl der Trainingsschritte zunimmt.
  • Kann das fein abgestimmte Modell Bilder des Subjekts in einer anderen Umgebung erzeugen, als es trainiert wurde? Kann es zum Beispiel Bilder von Doppler an einem Strand erzeugen?
    • Beobachtung - Ja, kann es. Es ist erwähnenswert, dass die Modellleistung bis zu einem bestimmten Punkt mit der Anzahl der Trainingsschritte zunimmt. Wenn das Modell jedoch zu lange trainiert wird, verschlechtert sich die Modellleistung, da das Modell zu einer Überanpassung neigt.
  • Kann das fein abgestimmte Modell Bilder einer Klasse erzeugen, zu der das Trainingsfach gehört? Kann es beispielsweise ein Bild eines generischen Hundes erzeugen?
    • Beobachtung – Wenn wir die Anzahl der Trainingsschritte erhöhen, beginnt das Modell zu overfit. Infolgedessen vergisst es die generische Klasse eines Hundes und produziert nur Bilder, die sich auf das Thema beziehen.
  • Kann das fein abgestimmte Modell Bilder einer Klasse oder eines Fachs generieren, die nicht im Trainingsdatensatz enthalten sind? Kann es zum Beispiel ein Bild einer Katze erzeugen?
    • Beobachtung – Wenn wir die Anzahl der Trainingsschritte erhöhen, beginnt das Modell zu overfit. Daher werden unabhängig von der angegebenen Klasse nur Bilder erstellt, die sich auf das Thema beziehen.

Wir optimieren das Modell für eine andere Anzahl von Schritten (durch Einstellung max_steps Hyperparameter) und für jedes fein abgestimmte Modell generieren wir Bilder für jede der folgenden vier Eingabeaufforderungen (in den folgenden Beispielen von links nach rechts gezeigt):

  • „Ein Foto von einem Doppler-Hund“
  • „Ein Foto von einem Doppler-Hund am Strand“
  • „Ein Foto von einem Hund“
  • „Ein Foto einer Katze“

Die folgenden Bilder stammen von dem mit 50 Schritten trainierten Modell.

Das folgende Modell wurde mit 100 Schritten trainiert.

Wir haben das folgende Modell mit 200 Schritten trainiert.

Die folgenden Bilder stammen von einem Modell, das mit 400 Schritten trainiert wurde.

Schließlich sind die folgenden Bilder das Ergebnis von 800 Schritten.

Trainieren Sie mit mehreren Datensätzen

Während der Feinabstimmung möchten Sie möglicherweise mehrere Motive feinabstimmen und das feinabgestimmte Modell in der Lage sein, Bilder aller Motive zu erzeugen. Leider ist JumpStart derzeit auf Schulungen zu einem einzigen Thema beschränkt. Sie können das Modell nicht für mehrere Themen gleichzeitig optimieren. Darüber hinaus führt die Feinabstimmung des Modells für unterschiedliche Themen nacheinander dazu, dass das Modell das erste Thema vergisst, wenn die Themen ähnlich sind.

Wir betrachten das folgende Experiment in diesem Abschnitt:

  1. Feinabstimmung des Modells für Subjekt A.
  2. Feinabstimmung des resultierenden Modells aus Schritt 1 für Subjekt B.
  3. Generieren Sie Bilder von Subjekt A und Subjekt B mit dem Ausgabemodell aus Schritt 2.

In den folgenden Experimenten beobachten wir Folgendes:

  • Wenn A Hund 1 und B Hund 2 ist, dann ähneln alle in Schritt 3 erzeugten Bilder Hund 2
  • Wenn A Hund 2 und B Hund 1 ist, dann ähneln alle in Schritt 3 erzeugten Bilder Hund 1
  • Wenn A Hund 1 und B Katze ist, dann ähneln Bilder, die mit Hunde-Prompts erzeugt wurden, Hund 1 und Bilder, die mit Katzen-Prompts erzeugt wurden, ähneln Katze

Trainiere mit Hund 1 und dann mit Hund 2

In Schritt 1 verfeinern wir das Modell für 200 Schritte auf acht Bildern von Hund 1. In Schritt 2 verfeinern wir das Modell weiter für 200 Schritte auf vier Bildern von Hund 2.

Das Folgende sind die Bilder, die vom feinabgestimmten Modell am Ende von Schritt 2 für verschiedene Eingabeaufforderungen generiert wurden.

Trainiere mit Hund 2 und dann mit Hund 1

In Schritt 1 verfeinern wir das Modell für 200 Schritte auf vier Bildern von Hund 2. In Schritt 2 verfeinern wir das Modell weiter für 200 Schritte auf acht Bildern von Hund 1.

Das Folgende sind die Bilder, die vom feinabgestimmten Modell am Ende von Schritt 2 mit unterschiedlichen Eingabeaufforderungen generiert wurden.

Trainiere Hunde und Katzen

In Schritt 1 optimieren wir das Modell für 200 Schritte auf acht Bildern einer Katze. Dann verfeinern wir das Modell weiter für 200 Schritte auf acht Bildern von Hund 1.

Das Folgende sind die Bilder, die vom feinabgestimmten Modell am Ende von Schritt 2 generiert wurden. Bilder mit katzenbezogenen Eingabeaufforderungen sehen aus wie die Katze in Schritt 1 der Feinabstimmung, und Bilder mit hundebezogenen Eingabeaufforderungen sehen wie der Hund darin aus Schritt 2 der Feinabstimmung.

Vorkonservierung

Die vorherige Aufbewahrung ist eine Technik, die zusätzliche Bilder derselben Klasse verwendet, die wir zu trainieren versuchen. Wenn die Trainingsdaten beispielsweise aus Bildern eines bestimmten Hundes bestehen, integrieren wir Klassenbilder von generischen Hunden mit vorheriger Aufbewahrung. Es versucht, eine Überanpassung zu vermeiden, indem es Bilder von verschiedenen Hunden zeigt, während es für einen bestimmten Hund trainiert. Ein Tag, der den spezifischen Hund angibt, der in der Instanz-Eingabeaufforderung vorhanden ist, fehlt in der Klassen-Eingabeaufforderung. Beispielsweise kann der Instanz-Prompt „ein Foto einer Riobugger-Katze“ und der Klassen-Prompt „ein Foto einer Katze“ sein. Sie können die vorherige Aufbewahrung aktivieren, indem Sie den Hyperparameter festlegen with_prior_preservation = True. Bei Einstellung with_prior_preservation = True, müssen Sie einschließen class_prompt in dataset_info.json und kann alle Ihnen zur Verfügung stehenden Klassenbilder enthalten. Das Folgende ist das Format des Trainingsdatensatzes bei der Einstellung with_prior_preservation = True:

  • zufuhr – Ein Verzeichnis mit den Instanzbildern, dataset_info.json und (optional) Verzeichnis class_data_dir. Beachte das Folgende:
    • Bilder können in den Formaten .png, .jpg, .jpeg vorliegen.
    • Das dataset_info.json Datei muss das Format haben {'instance_prompt':<<instance_prompt>>,'class_prompt':<<class_prompt>>}.
    • Das class_data_dir Verzeichnis muss Klassenbilder haben. Wenn class_data_dir ist nicht vorhanden oder es sind nicht bereits genügend Bilder in vorhanden class_data_dir, zusätzliche Bilder werden mit abgetastet class_prompt.

Bei Datensätzen wie Katzen und Hunden wirkt sich die vorherige Aufbewahrung nicht wesentlich auf die Leistung des fein abgestimmten Modells aus und kann daher vermieden werden. Beim Training auf Gesichtern ist dies jedoch notwendig. Weitere Informationen finden Sie unter Stalldiffusion mit Dreambooth unter Verwendung von Diffusoren trainieren.

Instanztypen

Die Feinabstimmung von Stable Diffusion-Modellen erfordert eine beschleunigte Berechnung, die von GPU-unterstützten Instanzen bereitgestellt wird. Wir experimentieren mit unserem Feintuning mit den Instanzen ml.g4dn.2xlarge (16 GB CUDA-Speicher, 1 GPU) und ml.g5.2xlarge (24 GB CUDA-Speicher, 1 GPU). Beim Generieren von Klassenbildern ist der Speicherbedarf höher. Daher, wenn Einstellung with_prior_preservation=True, verwenden Sie den Instance-Typ ml.g5.2xlarge, da das Training auf der Instance ml.g4dn.2xlarge auf das CUDA-Problem „Nicht genügend Arbeitsspeicher“ stößt. Das JumpStart-Feinabstimmungsskript verwendet derzeit eine einzelne GPU, und daher führt die Feinabstimmung auf Instanzen mit mehreren GPUs nicht zu einer Leistungssteigerung. Weitere Informationen zu verschiedenen Instanztypen finden Sie unter Amazon EC2-Instanztypen.

Einschränkungen und Voreingenommenheit

Obwohl Stable Diffusion eine beeindruckende Leistung beim Generieren von Bildern aufweist, 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

Weitere Informationen zu Einschränkungen und Verzerrungen finden Sie unter Stable Diffusion v2-1-Basismodellkarte. Diese Einschränkungen für das vorab trainierte Modell können auch auf die feinabgestimmten Modelle übertragen werden.

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. Code zum Bereinigen des Endpunkts wird in der zugehörigen Datei bereitgestellt Einführung in JumpStart – Text zu Bild Beispiel Notizbuch.

Öffentlich verfügbare, optimierte Modelle in JumpStart

Obwohl Stable Diffusion-Modelle von veröffentlicht wurden StabilitätAI eine beeindruckende Leistung haben, haben sie Einschränkungen in Bezug auf die Sprache oder den Bereich, in dem sie trainiert wurden. Beispielsweise wurden Stable Diffusion-Modelle mit englischem Text trainiert, aber Sie müssen möglicherweise Bilder aus nicht-englischem Text generieren. Alternativ wurden Stable Diffusion-Modelle trainiert, um fotorealistische Bilder zu erzeugen, aber Sie müssen möglicherweise animierte oder künstlerische Bilder erzeugen.

JumpStart bietet über 80 öffentlich verfügbare Modelle mit verschiedenen Sprachen und Designs. Diese Modelle sind oft fein abgestimmte Versionen von Stable Diffusion-Modellen, die von StabilityAI veröffentlicht wurden. Wenn Ihr Anwendungsfall mit einem der optimierten Modelle übereinstimmt, müssen Sie kein eigenes Dataset sammeln und optimieren. Sie können eines dieser Modelle einfach über die Studio-Benutzeroberfläche oder mithilfe benutzerfreundlicher JumpStart-APIs bereitstellen. Informationen zum Bereitstellen eines vortrainierten Stable Diffusion-Modells in JumpStart finden Sie unter Generieren Sie Bilder aus Text mit dem stabilen Diffusionsmodell auf Amazon SageMaker JumpStart.

Im Folgenden finden Sie einige Beispiele für Bilder, die von den verschiedenen in JumpStart verfügbaren Modellen generiert wurden.

Beachten Sie, dass diese Modelle nicht mithilfe von JumpStart-Skripts oder DreamBooth-Skripts feinabgestimmt werden. Sie können die vollständige Liste der öffentlich verfügbaren optimierten Modelle mit Beispielansagen von herunterladen hier.

Weitere beispielhaft generierte Bilder von diesen Modellen finden Sie im Abschnitt Open Source Feinabgestimmte Modelle im Anhang.

Zusammenfassung

In diesem Beitrag haben wir gezeigt, wie Sie das Stable Diffusion-Modell für Text-to-Image optimieren und dann mit JumpStart bereitstellen. Darüber hinaus haben wir einige der Überlegungen besprochen, die Sie bei der Feinabstimmung des Modells anstellen sollten, und wie sich dies auf die Leistung des feinabgestimmten Modells auswirken kann. Wir haben auch die über 80 gebrauchsfertigen, fein abgestimmten Modelle besprochen, die in JumpStart verfügbar sind. Wir haben Codeausschnitte in diesem Beitrag gezeigt – den vollständigen Code mit allen Schritten in dieser Demo finden Sie unter Einführung in JumpStart – Text zu Bild Beispiel Notizbuch. Probieren Sie die Lösung selbst aus und senden Sie uns Ihre Kommentare.

Weitere Informationen zum Modell und zur DreamBooth-Feinabstimmung finden Sie in den folgenden Ressourcen:

Um mehr über JumpStart zu erfahren, sehen Sie sich die folgenden Blogbeiträge an:


Über die Autoren

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.

Heiko Hotz ist Senior Solutions Architect for AI & Machine Learning mit besonderem Fokus auf Natural Language Processing (NLP), Large Language Models (LLMs) und generativer KI. Vor dieser Funktion war er Head of Data Science für den EU-Kundendienst von Amazon. Heiko hilft unseren Kunden, auf ihrer KI/ML-Reise auf AWS erfolgreich zu sein, und hat mit Organisationen in vielen Branchen zusammengearbeitet, darunter Versicherungen, Finanzdienstleistungen, Medien und Unterhaltung, Gesundheitswesen, Versorgungsunternehmen und Fertigung. In seiner Freizeit reist Heiko so viel wie möglich.


Anhang: Versuchsdatensätze

Dieser Abschnitt enthält die Datensätze, die in den Experimenten in diesem Beitrag verwendet wurden.

Hund1-8

Hund1-16

Hund2-4

Hund3-8

Anhang: Open Source Feinabgestimmte Modelle

Im Folgenden finden Sie einige Beispiele für Bilder, die von den verschiedenen in JumpStart verfügbaren Modellen generiert wurden. Jedes Bild ist mit einem beschriftet model_id beginnend mit einem Präfix huggingface-txt2img- gefolgt von der Eingabeaufforderung, die zum Generieren des Bildes in der nächsten Zeile verwendet wird.

Zeitstempel:

Mehr von AWS Maschinelles Lernen