Dieses Repository enthält Schulungs-, Generierungs- und Hilfsskripte für Stable Diffusion.
Der Änderungsverlauf wird an das Ende der Seite verschoben. 更新履歴はページ末尾に移しました.
Lesen Sie hier die README-Datei
Die Entwicklungsversion befindet sich im dev
-Zweig. Bitte überprüfen Sie den Entwicklungszweig auf die neuesten Änderungen.
Die Unterstützung von FLUX.1 und SD3/SD3.5 erfolgt im sd3
-Zweig. Wenn Sie sie trainieren möchten, verwenden Sie bitte den SD3-Zweig.
Für eine einfachere Verwendung (GUI- und PowerShell-Skripte usw.) besuchen Sie bitte das von bmaltais verwaltete Repository. Danke an @bmaltais!
Dieses Repository enthält die Skripte für:
Die Datei enthält keine Anforderungen für PyTorch. Da die Version von PyTorch von der Umgebung abhängt, ist sie nicht in der Datei enthalten. Bitte installieren Sie zuerst PyTorch entsprechend der Umgebung. Siehe Installationsanweisungen unten.
Die Skripte werden mit Pytorch 2.1.2 getestet. 2.0.1 und 1.12.1 sind nicht getestet, sollten aber funktionieren.
Die meisten Dokumente sind auf Japanisch verfasst.
Die englische Übersetzung von darkstorm2150 finden Sie hier. Danke an Darkstorm2150!
Python 3.10.6 und Git:
Gewähren Sie uneingeschränkten Skriptzugriff auf Powershell, damit venv funktionieren kann:
Set-ExecutionPolicy Unrestricted
ein und antworten Sie mit AÖffnen Sie ein normales Powershell-Terminal und geben Sie Folgendes ein:
git clone https: // github.com / kohya - ss / sd - scripts.git
cd sd - scripts
python - m venv venv
.venvScriptsactivate
pip install torch == 2.1 . 2 torchvision == 0.16 . 2 -- index - url https: // download.pytorch.org / whl / cu118
pip install -- upgrade - r requirements.txt
pip install xformers == 0.0 . 23. post1 -- index - url https: // download.pytorch.org / whl / cu118
accelerate config
Wenn python -m venv
nur python
anzeigt, ändern Sie python
in py
.
Hinweis: Jetzt sind bitsandbytes==0.43.0
, prodigyopt==1.0
und lion-pytorch==0.0.6
in der Datei „requirements.txt“ enthalten. Wenn Sie eine andere Version verwenden möchten, installieren Sie diese bitte manuell.
Diese Installation ist für CUDA 11.8. Wenn Sie eine andere Version von CUDA verwenden, installieren Sie bitte die entsprechende Version von PyTorch und xformers. Wenn Sie beispielsweise CUDA 12 verwenden, installieren Sie bitte pip install torch==2.1.2 torchvision==0.16.2 --index-url https://download.pytorch.org/whl/cu121
und pip install xformers==0.0.23.post1 --index-url https://download.pytorch.org/whl/cu121
.
Antworten zur Beschleunigung der Konfiguration:
- This machine
- No distributed training
- NO
- NO
- NO
- all
- fp16
Wenn Sie bf16 verwenden möchten, beantworten Sie bitte die letzte Frage mit bf16
.
Hinweis: Einige Benutzer berichten, dass im Training ValueError: fp16 mixed precision requires a GPU
aufgetreten ist. Beantworten Sie in diesem Fall die 6. Frage mit 0
: What GPU(s) (by id) should be used for training on this machine as a comma-separated list? [all]:
(Es wird eine einzelne GPU mit der ID 0
verwendet.)
Wenn eine neue Version herauskommt, können Sie Ihr Repo mit dem folgenden Befehl aktualisieren:
cd sd - scripts
git pull
.venvScriptsactivate
pip install -- use-pep517 -- upgrade - r requirements.txt
Sobald die Befehle erfolgreich ausgeführt wurden, sollten Sie bereit sein, die neue Version zu verwenden.
Wenn Sie PyTorch aktualisieren möchten, können Sie es mit dem Befehl pip install
im Abschnitt „Windows-Installation“ aktualisieren. xformers
muss auch aktualisiert werden, wenn PyTorch aktualisiert wird.
Die Implementierung für LoRA basiert auf dem Repo von cloneofsimo. Vielen Dank für die tolle Arbeit!
Die LoRA-Erweiterung auf Conv2d 3x3 wurde ursprünglich von cloneofsimo veröffentlicht und ihre Wirksamkeit wurde auf der LoCon von KohakuBlueleaf demonstriert. Vielen Dank, KohakuBlueleaf!
Der Großteil der Skripte ist unter ASL 2.0 lizenziert (einschließlich Codes von Diffusers, cloneofsimo's und LoCon), Teile des Projekts sind jedoch unter separaten Lizenzbedingungen verfügbar:
Speichereffiziente Aufmerksamkeit Pytorch: MIT
Bitsandbytes: MIT
BLIP: BSD-3-Klausel
svd_merge_lora.py
VRAM-Nutzung wurde reduziert. Allerdings erhöht sich die Hauptspeicherauslastung (32GB sind ausreichend).svd_merge_lora.py
ist eine VRAM-Datei.メインメモリの使用量は増加します (32GB) Es wurde ein Fehler in svd_merge_lora.py
, sdxl_merge_lora.py
und resize_lora.py
behoben, bei dem der Hash-Wert der LoRA-Metadaten nicht korrekt berechnet wurde, wenn sich save_precision
von der in der Berechnung verwendeten precision
unterschied. Weitere Informationen finden Sie in Ausgabe Nr. 1722. Vielen Dank an JujoHotaru, der das Problem angesprochen hat.
Es wird in der nächsten Version enthalten sein.
svd_merge_lora.py
、 sdxl_merge_lora.py
、 resize_lora.py
で、保存時の精度が計算時の精度と異なる場合、L oRA Ausgabe Nr. 1722.
以上は次回リリースに含まれます.
sdxl_merge_lora.py
unterstützt jetzt OFT. Vielen Dank an Maru-mee für die PR #1580.
svd_merge_lora.py
unterstützt jetzt LBW. Danke an Terracottahaniwa. Weitere Informationen finden Sie in PR #1575.
sdxl_merge_lora.py
unterstützt auch LBW.
Weitere Informationen zum LBW finden Sie unter LoRA Block Weight von hako-mikan.
Diese werden in der nächsten Version enthalten sein.
sdxl_merge_lora.py
が OFT をサポートされました.PR #1580 Maru-mee ist nicht bekannt.
svd_merge_lora.py
で LBW がサポートされました.PR #1575 terracottahaniwa 氏に感謝します。
sdxl_merge_lora.py
ist eine LBW-Erweiterung.
LBW ist ein Hako-Mikan-Mitglied und ein LoRA-Block-Gewichtsmanager.
以上は次回リリースに含まれます.
Problem behoben, bei cache_latents.py
und cache_text_encoder_outputs.py
nicht funktionierten. (Wird in der nächsten Version enthalten sein.)
cache_latents.py
und cache_text_encoder_outputs.py
が動作しなくなっていたのを修正しました 。
Der Standardwert von huber_schedule
in „Geplanter Huber-Verlust“ wird von exponential
in snr
geändert, was zu besseren Ergebnissen führen dürfte.
Geplanter snr
exponential
huber_schedule
.
imagesize
wurde neu hinzugefügt. Wenn Sie die Bibliotheken also nicht sofort aktualisieren können, installieren Sie sie bitte separat mit pip install imagesize==1.4.1
.bitsandbytes==0.43.0
, prodigyopt==1.0
, lion-pytorch==0.0.6
sind in der Datei „requirements.txt“ enthalten.bitsandbytes
erfordert keine komplexen Verfahren mehr, da es jetzt offiziell Windows unterstützt..toml
) zu schreiben. Vielen Dank an bghira, dass Sie das Problem angesprochen haben.--console_log_simple
im Trainingsskript anzugeben, um die umfassende Protokollierung zu deaktivieren.train_network.py
und sdxl_train_network.py
werden geändert, um einige Datensatzeinstellungen in den Metadaten des trainierten Modells aufzuzeichnen ( caption_prefix
, caption_suffix
, keep_tokens_separator
, secondary_separator
, enable_wildcard
).train_network.py
und sdxl_train_network.py
enthalten sind. Das Speichern und Laden des Status erfolgt schneller, die Dateigröße ist kleiner und der Speicherverbrauch beim Laden verringert sich.--noise_offset_random_strength
und --ip_noise_gamma_random_strength
werden jedem Trainingsskript hinzugefügt. Mit diesen Optionen können der Rausch-Offset und das IP-Rausch-Gamma im Bereich von 0 bis zum angegebenen Wert variiert werden. PR #1177 Danke an KohakuBlueleaf!--save_state_on_train_end
werden jedem Trainingsskript hinzugefügt. PR #1168 Danke an gesen2egee!--sample_every_n_epochs
und --sample_every_n_steps
in jedem Trainingsskript zeigen jetzt eine Warnung an und ignorieren sie, wenn eine Zahl kleiner oder gleich 0
angegeben wird. Vielen Dank an S-Del, dass Sie das Problem angesprochen haben. .toml
Datei für die Datensatzkonfiguration wird jetzt in UTF-8-Kodierung gelesen. PR #1167 Danke an Horizon1704!secondary_separator
wird hinzugefügt, um das Tag-Trennzeichen anzugeben, das nicht das Ziel des Mischens oder Löschens ist.secondary_separator=";;;"
. Wenn Sie secondary_separator
angeben, wird der Teil nicht gemischt oder gelöscht.enable_wildcard
wird hinzugefügt. Bei Festlegung auf true
kann die Platzhalternotation {aaa|bbb|ccc}
verwendet werden. Die mehrzeilige Beschriftung ist ebenfalls aktiviert.keep_tokens_separator
wurde aktualisiert und kann nun zweimal in der Beschriftung verwendet werden. Wenn Sie keep_tokens_separator="|||"
angeben , der Teil geteilt durch die Sekunde |||
wird nicht gemischt oder gelöscht und bleibt am Ende.caption_prefix
und caption_suffix
können zusammen verwendet werden. caption_prefix
und caption_suffix
werden zuerst verarbeitet, und dann werden enable_wildcard
, keep_tokens_separator
, shuffling and drop secondary_separator
der Reihe nach verarbeitet.tag_image_by_wd14_tagger.py
hinzugefügt (nur Option --onnx
). PR #1192 Danke an sdbds!pip install onnx==1.15.0 onnxruntime-gpu==1.17.1
usw. Bitte überprüfen Sie auch die Kommentare in requirements.txt
.--repo_id
in tag_image_by_wd14_tagger.py
gespeichert. Dadurch werden mehrere repo_id-Modelle zwischengespeichert. Bitte löschen Sie nicht benötigte Dateien unter --model_dir
.tag_image_by_wd14_tagger.py
hinzugefügt.--use_rating_tags
und --use_rating_tags_as_last_tag
aus--character_tags_first
--character_tag_expand
--always_first_tags
--tag_replacement
--beam_search
und einem Wert von 2 oder mehr für --num_beams
in make_captions.py
auftrat. Der maskierte Verlust wird in jedem Trainingsskript unterstützt. Um den maskierten Verlust zu aktivieren, geben Sie die Option --masked_loss
an.
Die Funktion ist noch nicht vollständig getestet, daher kann es zu Fehlern kommen. Wenn Sie Probleme finden, öffnen Sie bitte ein Problem.
Der ControlNet-Datensatz wird zur Angabe der Maske verwendet. Die Maskenbilder sollten RGB-Bilder sein. Der Pixelwert 255 im R-Kanal wird als Maske behandelt (der Verlust wird nur für die Pixel mit der Maske berechnet) und 0 wird als Nichtmaske behandelt. Die Pixelwerte 0–255 werden in 0–1 umgewandelt (dh der Pixelwert 128 wird als halbes Gewicht des Verlusts behandelt). Einzelheiten zur Datensatzspezifikation finden Sie in der LLLite-Dokumentation.
Der geplante Huber-Verlust wurde in jedes Trainingsskript eingeführt. Dies ist eine Methode zur Verbesserung der Robustheit gegenüber Ausreißern oder Anomalien (Datenkorruption) in den Trainingsdaten.
Bei der herkömmlichen MSE (L2)-Verlustfunktion könnten die Auswirkungen von Ausreißern erheblich sein und möglicherweise zu einer Verschlechterung der Qualität der generierten Bilder führen. Andererseits kann die Huber-Verlustfunktion zwar den Einfluss von Ausreißern unterdrücken, neigt jedoch dazu, die Wiedergabe feiner Details in Bildern zu beeinträchtigen.
Um dieses Problem anzugehen, nutzt die vorgeschlagene Methode eine clevere Anwendung der Huber-Verlustfunktion. Durch die Planung der Verwendung von Huber-Verlust in den frühen Phasen des Trainings (wenn das Rauschen hoch ist) und MSE in den späteren Phasen wird ein Gleichgewicht zwischen Ausreißerrobustheit und feiner Detailwiedergabe hergestellt.
Experimentelle Ergebnisse haben bestätigt, dass diese Methode im Vergleich zum reinen Huber-Verlust oder MSE eine höhere Genauigkeit bei Daten mit Ausreißern erzielt. Der Anstieg des Rechenaufwands ist minimal.
Die neu hinzugefügten Argumente loss_type, huber_schedule und huber_c ermöglichen die Auswahl des Verlustfunktionstyps (Huber, Smooth L1, MSE), der Planungsmethode (exponentiell, konstant, SNR) und des Huber-Parameters. Dies ermöglicht eine Optimierung basierend auf den Eigenschaften des Datensatzes.
Weitere Informationen finden Sie in PR #1228.
loss_type
: Geben Sie den Typ der Verlustfunktion an. Wählen Sie huber
für Huber-Verlust, smooth_l1
für glatten L1-Verlust und l2
für MSE-Verlust. Der Standardwert ist l2
, derselbe wie zuvor.huber_schedule
: Geben Sie die Planungsmethode an. Wählen Sie exponential
, constant
oder snr
. Der Standardwert ist snr
.huber_c
: Geben Sie den Huber-Parameter an. Der Standardwert ist 0.1
.Bitte lesen Sie die Veröffentlichungen für aktuelle Updates.
imagesize
und pip install imagesize==1.4.1
bitsandbytes==0.43.0
、 prodigyopt==1.0
、 lion-pytorch==0.0.6
und „requirements.txt“ werden angezeigt.bitsandbytes
für Windows-Betriebssysteme..toml
)への記載をお勧めします.問題提起していただいた bghira 氏に感謝します。--console_log_simple
ぅようです--console_log_simple
: Richのロギングを無効してお試しください.train_network.py
oder sdxl_train_network.py
、学習したモデルのメタデータに一部のデータセット設定が記録されるよう修正しました( caption_prefix
、 caption_suffix
、 keep_tokens_separator
、 secondary_separator
、 enable_wildcard
)。train_network.py
oder sdxl_train_network.py
, state oder U-Netの保存、読み込みが高速化され、ファイルサイズも小さくなり、また読み込み時のメモリ使用量も削減されます.--noise_offset_random_strength
および--ip_noise_gamma_random_strength
が追加されました. PR #1177 KohakuBlueleaf ist nicht verfügbar.--save_state_on_train_end
#1168 gesen2egee 氏に感謝します。--sample_every_n_epochs
“ und --sample_every_n_steps
.オプションに0
以下の数値を指定した時、警告を表示するとともにそれらを無視するよう変更しました.問題提起していただいたS-Del ist nicht bekannt. .toml
ファイルが UTF-8-Kodierung氏に感謝します.secondary_separator
“ ist nicht verfügbar. secondary_separator=";;;"
secondary_separator
=";;;".時にまとめて扱われます.enable_wildcard
wird verwendet. true
{aaa|bbb|ccc}
が使えます.また複数行キャプションも有効になります.keep_tokens_separator
をキャプション内に 2 1girl, hatsune miku, vocaloid ||| stage, mic ||| best quality, rating: general
Vocaloid keep_tokens_separator="|||"
1girl, hatsune miku, vocaloid ||| stage, mic ||| best quality, rating: general
|||
されず末尾に残ります.caption_prefix
und caption_suffix
. caption_prefix
keep_tokens_separator
caption_suffix
Die Funktion secondary_separator
wird verwendet.tag_image_by_wd14_tagger.py
で v3 のリポジトリがサポートされました( --onnx
指定時のみ有効)。 PR #1192 sdbds氏に感謝します.pip install onnx==1.15.0 onnxruntime-gpu==1.17.1
. requirements.txt
.tag_image_by_wd14_tagger.py
und andere --repo_id
-Dateienディレクトリに保存するようにしました.これにより複数のモデルファイルがキャッシュされます. --model_dir
tag_image_by_wd14_tagger.py
ist eine Datei, die nicht verfügbar ist.--use_rating_tags
zu empfehlen und --use_rating_tags_as_last_tag
--character_tags_first
--character_tag_expand
--always_first_tags
--tag_replacement
make_captions.py
– --beam_search
– --num_beams
習スクリプトでマスクロスをサポートしました.マスクロスを有効にするには--masked_loss
オプションを指定してください.
Problemを立てていただけると助かります.
Verwenden Sie ControlNet, um RGB zu verwenden画像である必要があります.R チャンネルのピクセル値 255 がロス計算対象、0 0-255 Sekunden, 0-1 Sekunden 128 Seiten. LLLite-Versionをご覧ください.
Daten Korruption, geplanter Huber-Verlust
従来のMSE(L2)損失関数では、異常値の影響を大きく受けてしまい、生成画像の品質低下を招く恐れがありました.一方、Huber損失関数は異常値の影響を抑えられますが、画像の細部再現性が損なわれがちでした.
この手法ではHuber損失関数の適用を工夫し、学習の初期段階(ノイズが大きい場合)ではHuber損失を後期段階ではMSEを用いるようスケジューリングすることで、異常値耐性と細部再現性のバランスを取ります.
Weitere Informationen finden Sie unter Huberでより高い精度を達成することが確認されています.また計算コストの増加はわずかです.
Weitere Informationen finden Sie unter „Loss_Type“, „Huber_Schedule“, „Huber_C“ und „Huber, Smooth L1, MSE)とスケジューリング方法(exponentiell, konstant, SNR)を選択できます.
PR Nr. 1228 ist nicht verfügbar.
loss_type
smooth_l1
Die huber
„loss_type“ ist l2
verfügbar損失を選択します.デフォルトはl2
で、従来と同様です。huber_schedule
: exponential
, constant
, Huber_Schedule. snr
snr
huber_c
: 0.1
PR --loss_type smooth_l1 --huber_schedule snr --huber_c 0.1
最近の更新情報は Release をご覧ください.
Der von train_network.py
unterstützte LoRA wurde benannt, um Verwirrung zu vermeiden. Die Dokumentation wurde aktualisiert. Im Folgenden sind die Namen der LoRA-Typen in diesem Repository aufgeführt.
LoRA-LierLa : (LoRA für Li n e a r Layers )
LoRA für lineare Layer und Conv2d-Layer mit 1x1-Kernel
LoRA-C3Lier : (LoRA für Lösungsschichten mit 3 x3 Kernel- und Linearschichten )
Zusätzlich zu 1., LoRA für Conv2d-Schichten mit 3x3-Kernel
LoRA-LierLa ist der Standard-LoRA-Typ für train_network.py
(ohne conv_dim
-Netzwerkargument).
Eine Eingabeaufforderungsdatei könnte beispielsweise so aussehen
# prompt 1
masterpiece, best quality, (1girl), in white shirts, upper body, looking at viewer, simple background --n low quality, worst quality, bad anatomy,bad composition, poor, low effort --w 768 --h 768 --d 1 --l 7.5 --s 28
# prompt 2
masterpiece, best quality, 1boy, in business suit, standing at street, looking back --n (low quality, worst quality), bad anatomy,bad composition, poor, low effort --w 576 --h 832 --d 2 --l 5.5 --s 40
Zeilen, die mit #
beginnen, sind Kommentare. Sie können Optionen für das generierte Bild mit Optionen wie --n
nach der Eingabeaufforderung angeben. Folgendes kann verwendet werden.
--n
Negative Aufforderung bis zur nächsten Option.--w
Gibt die Breite des generierten Bildes an.--h
Gibt die Höhe des generierten Bildes an.--d
Gibt den Seed des generierten Bildes an.--l
Gibt den CFG-Maßstab des generierten Bildes an.--s
Gibt die Anzahl der Schritte in der Generierung an. Die Eingabeaufforderungsgewichtungen wie ( )
und [ ]
funktionieren.