Dieses Projekt zeigt, wie ein stabiles Diffusionsmodell in Ihrem eigenen Datensatz feinstimmen kann.
Hinweis: Dieses Skript ist experimentell. Das Skript findet das gesamte Modell gut ab und oft übertroffen das Modell und stößt auf Probleme wie katastrophales Vergessen. Es wird empfohlen, verschiedene Hyperparamter auszuprobieren, um das beste Ergebnis in Ihrem Datensatz zu erzielen.
Stellen Sie vor dem Ausführen der Skripte sicher, dass die Trainingsabhängigkeiten der Bibliothek (wie Pytorch und? Transformers) installieren:
git clone https://github.com/huggingface/diffusers
cd diffusers
pip install .Dann rennen
cd ..
pip install -r requirements.txtUnd initialisieren Sie eine Umgebung mit: Beschleunigung mit:
accelerate config Dann sollten Sie das vorgezogene stabile Diffusionsmodell mit model_download.py herunterladen:
python model_download.py --repo_id runwayml/stable-diffusion-v1-5
# If you cannot connect to huggingface, you should use the following command:
python model_download.py --repo_id runwayml/stable-diffusion-v1-5 --mirrorUm ein stabiles Diffusionsmodell in Ihrem eigenen Datensatz zu optimieren, müssen Sie Ihren Datensatz im folgenden Format vorbereiten:
Erstellen Sie zunächst das dataset -Verzeichnis im Root -Verzeichnis, und Sie sollten drei Unterverzeichnisse jpg , hint und train erstellen. Im jpg -Verzeichnis sollten Sie alle Zielbilder in Ihren Datensatz einfügen. Im hint sollten Sie alle Quellbilder (Bedingungsbilder) in Ihren Datensatz einfügen. Im train sollten Sie eine metadata.jsonl einstellen. Die metadata.jsonl sollte im folgenden Format sein:
{ "jpg" : " ./dataset/jpg/<name_of_target_image_1> " , "txt" : " <prompt_1> " , "hint" : " ./dataset/hint/<name_of_source_image_1> " }
{ "jpg" : " ./dataset/jpg/<name_of_target_image_2> " , "txt" : " <prompt_2> " , "hint" : " ./dataset/hint/<name_of_source_image_1> " }
… Hier ist die Struktur des dataset :
dataset
├── hint
│ ├── a.png
│ ├── b.png
│ └── c.png
├── jpg
│ ├── a.png
│ ├── b.png
│ └── c.png
└── train
└── metadata.jsonl In metadata.jsonl -Datei:
{ "jpg" : " ./dataset/jpg/a.png " , "txt" : " a " , "hint" : " ./dataset/hint/a.png " }
{ "jpg" : " ./dataset/jpg/b.png " , "txt" : " b " , "hint" : " ./dataset/hint/b.png " }
{ "jpg" : " ./dataset/jpg/c.png " , "txt" : " c " , "hint" : " ./dataset/hint/c.png " }Um das Lora -Modell zu trainieren, rennen Sie:
./train_lora.sh Sie können einige Hyperparameter in der Datei run_lora.sh ändern. Sie können beispielsweise ändern --num_train_epochs , um die Anzahl der Trainings -Epochen zu ändern.
Rennen Sie: Um das Steuerungsmodell zu trainieren:
./train_controlnet.sh Sie können einige Hyperparameter in der Datei run_controlnet.sh ändern. Sie können beispielsweise ändern --num_train_epochs , um die Anzahl der Trainings -Epochen zu ändern.
Um ControlNet und Lora gleichzeitig zu trainieren, laufen Sie:
./train_controlnet_and_lora.shBeachten Sie, dass Sie das Ausgabeverzeichnis des CONTROLNET- und LORA -Modells ändern sollten, um Ihr eigenes Training zu starten.
Einfach rennen:
./train_lora.sh && ./train_controlnet.sh && ./train_controlnet_and_lora.sh Sie erhalten alle Modelle im controlnet-lora-output Verzeichnis.
Sie können den Pfad des Modells und das Bedingungsbild in inference.py -Datei ändern. Dann rennen:
python inference.py Und Sie erhalten output.png im Stammverzeichnis.
Dieses Projekt basiert auf Diffusoren und Beispielen.