Website-Suche

Training eines LoRA-Modells für Stable Diffusion XL


Einführung

Vor ein paar Wochen haben wir über die Veröffentlichung des neuesten Stable Diffusion-Modells der Forscher von Stability AI berichtet. Dieses Modell verfügt über ein verbessertes VAE-Design, eine erweiterte Architektur, ein verbessertes Text-Bild-Latentverständnis und eine verdoppelte Basisauflösung. Diese Fähigkeiten, zusammen mit der anhaltenden Exzellenz bei der Abdeckung einer Vielzahl unterschiedlicher Stile, Formen und Funktionen, haben es Stable Diffusion XL (SDXL) in den letzten Monaten ermöglicht, reibungslos zum bevorzugten Modell für die Text-zu-Bild-Synthese überzugehen .

Daher besteht eine wachsende Nachfrage nach der Möglichkeit, viele der gleichen Funktionen und Upgrades zu nutzen, die auch für die 1.x- und 2.x-Versionen des Modells verfügbar sind, die im letzten Jahr veröffentlicht wurden. Diese Ergänzungen zur Grundfunktionalität des Modells, wie LoRA-Modellierung, ControlNet, EBsynth und andere beliebte Erweiterungen für die Automatic1111-Web-Benutzeroberfläche, haben es Stable Diffusion ermöglicht, die Aufmerksamkeit einer größeren Welt auf sich zu ziehen, und Benutzer sind bereit, dieselben Funktionen mit Stable zu nutzen Diffusion XL.

In diesem Artikel behandeln wir die Verwendung des praktischen Workflows, der für das Fast Stable Diffusion-Projekt erstellt wurde, um ein trainiertes LoRA-Modell mit einem beliebigen Stil oder Thema zu erstellen. Wir werden diesen Prozess Schritt für Schritt durchgehen, indem wir Beispielfotos des Gesichts des Autors dieses Artikels verwenden, um das Modell zu trainieren, und dann zeigen, wie es sowohl in der Stable Diffusion Web UI von AUTOMATIC1111 als auch in der ComfyUI verwendet wird.

Voraussetzungen

  • Hardwareanforderungen:

    • Eine kompatible GPU mit ausreichend VRAM (mindestens 16 GB empfohlen).
    • Ausreichender System-RAM (32 GB oder mehr).
  • Softwareanforderungen:

    • Python (Version 3.7 oder höher).
    • Deep-Learning-Bibliotheken wie PyTorch und Transformers.
    • LoRA-Bibliothek (z. B. PEFT) zur Implementierung einer Low-Rank-Anpassung.
  • Datenvorbereitung:

    • Ein für die gewünschte Diffusionsaufgabe geeigneter Datensatz, korrekt formatiert.
    • Datenvorverarbeitungstools zum Bereinigen und Organisieren des Datensatzes.
  • Vertrautheit:

    • Grundlegendes Verständnis von Deep-Learning- und Modelltrainingskonzepten.
    • Erfahrung mit Python-Programmierung und Befehlszeilenschnittstellen.

LoRA-Modelle (Low-Rank Adaptation).

LoRA steht für Low-Rank Adaptation. Diese Modelle ermöglichen die Verwendung kleinerer angehängter Modelle zur Feinabstimmung von Diffusionsmodellen. Kurz gesagt, das LoRA-Trainingsmodell erleichtert das Training von Stable Diffusion (sowie vielen anderen Modellen wie LLaMA und anderen GPT-Modellen) für verschiedene Konzepte, wie zum Beispiel Charaktere oder einen bestimmten Stil. Diese trainierten Modelle können dann exportiert und von anderen in ihren eigenen Generationen verwendet werden.

Wir verwenden LoRAs mit Stable Diffusion, um kostengünstige Modelle zu trainieren, die das gewünschte Thema oder den gewünschten Stil erfassen, und können dann mit dem vollständigen Stable Diffusion-Modell verwendet werden, um besser mit dieser Entität zu arbeiten.

Schnelle stabile Diffusion

Das vom Github-Benutzer TheLastBen geleitete und erstellte Fast Stable Diffusion-Projekt ist eine der besten aktuellen Möglichkeiten, über eine Schnittstelle auf die Stable Diffusion-Modelle zuzugreifen, die das Erlebnis für Benutzer aller Erfahrungsstufen maximiert. Die Fast Stable Diffusion-Implementierungen dieser Benutzeroberflächen ermöglichen es uns, unsere Hardware zu maximieren, um für jedes von uns synthetisierte Bild optimal verkürzte Generierungszeiten zu erzielen.

Derzeit unterstützt Fast Stable Diffusion sowohl die AUTOMATIC1111-Web-Benutzeroberfläche als auch die ComfyUI. Weitere Informationen zu den einzelnen Anbietern finden Sie über die oben genannten Links, um auf die jeweiligen Originalwebseiten zuzugreifen.

Demo

Während wir das letzte Mal eine benutzerdefinierte Gradio-Schnittstelle für das Modell erstellen mussten, haben wir das Glück, dass die Entwicklergemeinschaft viele der besten Tools und Schnittstellen für Stable Diffusion für uns in Stable Diffusion XL gebracht hat. In dieser Demo zeigen wir zunächst, wie man eine stabile Diffusion mithilfe eines Jupyter-Notebooks einrichtet. Dieser Prozess wurde von TheLastBen für uns in einem Ipython-Notebook automatisiert, sodass das Modell selbst automatisch in den Cache heruntergeladen wird. Dieser Cache wird nicht auf das Speicherlimit angerechnet. Machen Sie sich also keine Sorgen über die Downloadgröße. Als Nächstes besprechen wir einige Best Practices für die Aufnahme/Auswahl von Bildern für ein bestimmtes Thema oder einen bestimmten Stil. Anschließend zeigen wir, wie man den Trainingsprozess für die LoRA richtig beschriftet. Zum Abschluss zeigen wir einige Beispielfotos, die wir mit einem LoRA-Modell gemacht haben, das auf dem eigenen Gesicht des Autors trainiert wurde.

Aufstellen

Sobald Ihr Notebook hochgefahren ist, führen Sie einfach die ersten beiden Codezellen aus, um die Paketabhängigkeiten zu installieren und das SD XL-Basismodell herunterzuladen.

# Install the dependencies

force_reinstall= False
Set to true only if you want to install the dependencies again.

#--------------------
with open('/dev/null', 'w') as devnull:import requests, os, time, importlib;open('/notebooks/sdxllorapps.py', 'wb').write(requests.get('https://huggingface.co/datasets/TheLastBen/PPS/raw/main/Scripts/sdxllorapps.py').content);os.chdir('/notebooks');import sdxllorapps;importlib.reload(sdxllorapps);from sdxllorapps import *;Deps(force_reinstall)

Diese erste Zelle installiert eigentlich alles. Möglicherweise stellen Sie auch fest, dass ein Ordner mit dem Titel Latest_Notebooks erstellt wird. Hier können wir kontinuierlich auf aktualisierte Versionen der im PPS-Repo enthaltenen Notebooks zugreifen. Die nächste Zelle lädt die Modellprüfpunkte von HuggingFace herunter.

# Run the cell to download the model

#-------------
MODEL_NAMExl=dls_xl("", "", "")

Sobald dies abgeschlossen ist, können wir mit dem komplexeren Teil dieses Tutorials beginnen.

Bildauswahl und Beschriftung

Die Auswahl der Bilder für ein LoRA-Modell (oder Textual Inversion Embedding) ist äußerst wichtig. Um es kurz zu machen: Die Bilder, die wir für das Training auswählen, werden tiefgreifende Auswirkungen auf unsere endgültigen Bildausgaben haben. Beim Training eines funktionierenden LoRA-Modells ist es von entscheidender Bedeutung, Bilder auszuwählen, die tatsächlich die gewünschten Motiv-/Stilmerkmale in verschiedenen Einstellungen, Beleuchtungen und Winkeln enthalten. Diese Vielfalt verleiht unserem LoRA die erforderliche Flexibilität, die unseren Ergebnissen die gewünschte Vielseitigkeit und Vielfalt verleiht, die wir von einem LoRA erwarten.

An diesem Punkt werden wir in diesem Tutorial zeigen, wie wir einen SD XL LoRA auf unserem eigenen Gesicht trainieren. Viele der Punkte, die wir zur Auswahl der besten Fotos ansprechen, werden sich auch auf eine stilistische LoRA auswirken, also machen Sie sich keine Sorgen, wenn das das Ziel ist.

Lassen Sie uns zunächst eine kurze Liste aller Merkmale erstellen, nach denen wir im Bilddatensatz für eine Stable Diffusion LoRA suchen:

  • Einzelnes Thema oder Stil: Die Sache wird viel schwieriger, wenn in den Trainingsbildern mehrere Entitäten vorhanden sind. Konzentrieren Sie sich auf ein einzelnes Thema, das auf unterschiedliche Weise dargestellt wird, um die besten Ergebnisse zu erzielen
  • Verschiedene Blickwinkel: Es ist wichtig, dass das Motiv in den eingegebenen Trainingsbildern aus verschiedenen Blickwinkeln dargestellt wird. Dadurch wird sichergestellt, dass die LoRA nicht in Bezug auf eine einzelne Perspektive des Themas funktional übertrainiert wird. Dies schränkt die endgültige Flexibilität des Modells massiv ein
  • Einstellungen: Wenn sich das Motiv immer in der gleichen Umgebung befindet, d. h. Hintergründe, Kleidung usw., werden diese Merkmale in die LoRA-Ergebnisse übernommen. Seien Sie vorsichtig bei Datensätzen, die aus Bildern bestehen, die alle in einer einzigen Sitzung aufgenommen wurden. Alternativ scheint ein völlig leerer Hintergrund fast genauso gut zu funktionieren, um sie zu variieren
  • Beleuchtung: Die unwichtigste Eigenschaft, die es zu beachten gilt, obwohl sie immer noch relevant ist. Erwägen Sie die Verwendung unterschiedlicher Beleuchtungsarten für Ihre verschiedenen Bilder. Dadurch wird es einfacher, Ihr Motiv an verschiedenen Stellen in den generierten Bildern zu platzieren

In diesem Sinne. Machen wir schnell ein paar Bilder. Wir werden einfach ein paar Selfies vor einer leeren Wand machen. Nehmen wir als Beispiel 5. Unten können wir einen Blick auf diejenigen werfen, die wir für diese Demo verwenden.

Dies sind die Bilder, die wir verwendet haben. Wie deutlich zu erkennen ist, handelt es sich lediglich um einfache Selfies. Wir haben den Kopf jeweils in einem etwas anderen Winkel gedreht, um sicherzustellen, dass das Modell das Gesicht des Motivs vollständig sehen kann. Wir empfehlen, mit einem kleinen Datensatz wie diesem zu beginnen und dabei das Gesicht/den Körper des Probanden in ähnlichen Positionen zu verwenden.

Remove_existing_instance_images= True
Set to False to keep the existing instance images if any.


IMAGES_FOLDER_OPTIONAL= ""
If you prefer to specify directly the folder of the pictures instead of uploading, this will add the pictures to the existing (if any) instance images. Leave EMPTY to upload.


Smart_crop_images= True
Automatically crop your input images.


Crop_size = 1024
1024 is the native resolution
Check out this example for naming : https://i.imgur.com/d2lD3rz.jpeg


#-----------------
uplder(Remove_existing_instance_images, Smart_crop_images, Crop_size, IMAGES_FOLDER_OPTIONAL, INSTANCE_DIR, CAPTIONS_DIR)

Hier ist der Codeausschnitt, der unsere Einstellungen für die hochzuladenden Bilder enthält. Diese sind für jede Sitzung einzigartig und können durch Ausführen der allerletzten Codezelle gelöscht werden. Werfen wir einen Blick auf den Untertitelungsprozess.

In der nächsten Zelle ist die manuelle Untertitelcode-GUI für uns eingerichtet. Hier können wir unsere Bilder nacheinander mit den entsprechenden Bildunterschriften versehen. Wir empfehlen, jede Überschrift so beschreibend wie möglich zu gestalten, um die Wirksamkeit des Schulungsprozesses zu verbessern. Wenn dies aufgrund eines großen Datensatzes zu mühsam ist, können wir die Registerkarte „Training“ der Stable Diffusion Web-Benutzeroberfläche verwenden, um automatisch entsprechende Beschriftungen in Textdateien für jedes Bild zu generieren. Wir können dann den Pfad dorthin in der Codezelle festlegen und diese manuelle Beschriftung ganz überspringen.

Sobald dies alles erledigt ist, können wir mit dem Training beginnen.

Training des LoRA-Modells

Resume_Training= False
If you're not satisfied with the result, Set to True, run again the cell and it will continue training the current model.


Training_Epochs= 50
Epoch = Number of steps/images.

Learning_Rate= "3e-6"
keep it between 1e-6 and 6e-6


External_Captions= False
Load the captions from a text file for each instance image.


LoRA_Dim = 128
Dimension of the LoRa model, between 64 and 128 is good enough.


Resolution= 1024
1024 is the native resolution.


Save_VRAM = False
Use as low as 9.7GB VRAM with Dim = 64, but slightly slower training.

#-----------------
dbtrainxl(Resume_Training, Training_Epochs, Learning_Rate, LoRA_Dim, False, Resolution, MODEL_NAMExl, SESSION_DIR, INSTANCE_DIR, CAPTIONS_DIR, External_Captions, INSTANCE_NAME, Session_Name, OUTPUT_DIR, 0.03, Save_VRAM)

Hier haben wir die Codezelle zum Ausführen des LoRA-Trainings. Hier sind einige bestimmte Variablen definiert, die wir ändern können, um den Trainingsprozess zu beeinflussen. Erstens: Wenn wir das Training ausführen und es nicht wie gewünscht funktioniert, können wir das Training mithilfe der Variablen Resume_Training fortsetzen. Als nächstes können wir mit der Anzahl der Training_Epochs erweitern, wie oft der Trainingsprozess insgesamt jedes einzelne Bild betrachtet. Wir können die Lernrate nach Bedarf anpassen, um das Lernen über längere oder kürzere Schulungsprozesse hinweg innerhalb bestimmter Grenzen zu verbessern. Ändern Sie schließlich LoRA_Dim auf 128 und stellen Sie sicher, dass die Variable Save_VRAM der Schlüssel zum Wechsel zu True ist. Andernfalls wird es schwierig sein, dies auf der kostenlosen GPU auszuführen.

Sobald wir unsere Einstellungen ausgewählt haben, können wir die Zelle ausführen. Anschließend wird der Modellprüfpunkt automatisch an den richtigen Stellen für die ComfyUI- oder AUTOMATIC1111-Web-UI gespeichert.

Nachdem wir nun die Schulung abgeschlossen haben, können wir entweder zur ComfyUI oder zur Stable Diffusion Web-Benutzeroberfläche springen, um unsere LoRA auszuführen. Dadurch wird es einfacher, das Modell zu testen und unser Trainingsverfahren zu iterieren.

Ausführen des LoRA-Modells mit Stable Diffusion XL

Nachdem wir nun die Schulung abgeschlossen haben, können wir entweder zur ComfyUI oder zur Stable Diffusion Web-Benutzeroberfläche springen, um unsere LoRA auszuführen. Dadurch wird es einfacher, das Modell zu testen und unser Trainingsverfahren zu iterieren.

User = ""

Password= ""
Add credentials to your Gradio interface (optional).


Download_SDXL_Model= True


#-----------------
configf=test(MDLPTH, User, Password, Download_SDXL_Model)
!python /notebooks/sd/stable-diffusion-webui/webui.py $configf

Für dieses Beispiel verwenden wir die Benutzeroberfläche AUTOMATIC1111. Scrollen Sie also nach unten zur vorletzten Codezelle und führen Sie sie aus. Dadurch wird die Web-Benutzeroberfläche automatisch für uns eingerichtet und ein gemeinsam nutzbarer Link erstellt, über den wir von jedem Webbrowser aus auf die Web-Benutzeroberfläche zugreifen können. Klicken Sie auf den Link und öffnen Sie die Web-Benutzeroberfläche.

Von hier aus können wir auf das kleine rot-schwarze Symbol mit einem gelben Kreis unter der Schaltfläche „Generieren“ klicken, um das LoRA-Dropdown-Menü zu öffnen, und die Registerkarte „LoRA“ auswählen. Wählen Sie dann unsere neu trainierte LoRA aus („Beispielsitzung“, wenn der Sitzungsname unverändert blieb). Geben Sie dann eine Testaufforderung mit der LoRA am Ende ein. Hier sind einige Beispielfotos, die wir mit der Aufforderung „Ein Zauberer mit buntem Gewand und Stab, Ein rothaariger Mann mit Sommersprossen, verkleidet als Merlin Lora:Beispielsitzung:.6“ gemacht haben.

Wie wir sehen können, bleiben die Kernmerkmale des ursprünglichen Subjekts in diesem neuen Kontext, der durch das SD-Modell bereitgestellt wird, erhalten. Probieren Sie viele verschiedene Trainingsthemen und anschließende Aufforderungen aus, um die besten Ergebnisse zu erzielen!

Abschließende Gedanken

Das Stable Diffusion XL-Modell ist vielversprechend. Dieses Projekt, das es uns ermöglicht, LoRA-Modelle auf SD XL zu trainieren, geht dieses Versprechen noch weiter und zeigt, wie SD XL problemlos in der Lage ist, die 1,5-Modelle als De-facto-Methode für die Bilddiffusionsmodellierung zu ersetzen.

Verwandte Artikel: