Ce référentiel contient des scripts de formation, de génération et d'utilitaires pour Stable Diffusion.
L'historique des modifications est déplacé vers le bas de la page. 更新履歴はページ末尾に移しました。
Lire la suite READMEはこちら
La version de développement se trouve dans la branche dev
. Veuillez consulter la branche dev pour les dernières modifications.
La prise en charge de FLUX.1 et SD3/SD3.5 se fait dans la branche sd3
. Si vous souhaitez les former, veuillez utiliser la branche sd3.
Pour une utilisation plus facile (scripts GUI et PowerShell etc...), veuillez visiter le référentiel maintenu par bmaltais. Merci à @bmaltais !
Ce référentiel contient les scripts pour :
Le fichier ne contient pas d'exigences pour PyTorch. La version de PyTorch dépendant de l’environnement, elle n’est pas incluse dans le fichier. Veuillez d'abord installer PyTorch en fonction de l'environnement. Voir les instructions d'installation ci-dessous.
Les scripts sont testés avec Pytorch 2.1.2. 2.0.1 et 1.12.1 ne sont pas testés mais devraient fonctionner.
La plupart des documents sont rédigés en japonais.
La traduction anglaise par darkstorm2150 est ici. Merci à darkstorm2150 !
Python 3.10.6 et Git :
Donnez un accès illimité aux scripts à PowerShell pour que venv puisse fonctionner :
Set-ExecutionPolicy Unrestricted
et répondez AOuvrez un terminal Powershell standard et tapez ce qui suit à l'intérieur :
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
Si python -m venv
affiche uniquement python
, remplacez python
par py
.
Remarque : désormais bitsandbytes==0.43.0
, prodigyopt==1.0
et lion-pytorch==0.0.6
sont inclus dans le fichierRequirements.txt. Si vous souhaitez utiliser une autre version, veuillez l'installer manuellement.
Cette installation est pour CUDA 11.8. Si vous utilisez une version différente de CUDA, veuillez installer la version appropriée de PyTorch et xformers. Par exemple, si vous utilisez CUDA 12, veuillez installer pip install torch==2.1.2 torchvision==0.16.2 --index-url https://download.pytorch.org/whl/cu121
et pip install xformers==0.0.23.post1 --index-url https://download.pytorch.org/whl/cu121
.
Réponses pour accélérer la configuration :
- This machine
- No distributed training
- NO
- NO
- NO
- all
- fp16
Si vous souhaitez utiliser bf16, veuillez répondre à bf16
à la dernière question.
Remarque : Certains utilisateurs signalent ValueError: fp16 mixed precision requires a GPU
se produise lors de l'entraînement. Dans ce cas, répondez 0
à la 6ème question : What GPU(s) (by id) should be used for training on this machine as a comma-separated list? [all]:
(Un seul GPU avec l'identifiant 0
sera utilisé.)
Lorsqu'une nouvelle version sort, vous pouvez mettre à niveau votre dépôt avec la commande suivante :
cd sd - scripts
git pull
.venvScriptsactivate
pip install -- use-pep517 -- upgrade - r requirements.txt
Une fois les commandes terminées avec succès, vous devriez être prêt à utiliser la nouvelle version.
Si vous souhaitez mettre à niveau PyTorch, vous pouvez le mettre à niveau avec la commande pip install
dans la section Installation de Windows. xformers
doit également être mis à niveau lorsque PyTorch est mis à niveau.
L'implémentation de LoRA est basée sur le dépôt de cloneofsimo. Merci pour votre excellent travail !
L'extension LoRA vers Conv2d 3x3 a été initialement publiée par cloneofsimo et son efficacité a été démontrée à LoCon par KohakuBlueleaf. Merci beaucoup KohakuBlueleaf !
La majorité des scripts sont sous licence ASL 2.0 (y compris les codes de Diffusers, cloneofsimo's et LoCon), cependant des parties du projet sont disponibles sous des conditions de licence distinctes :
Pytorch d'attention efficace en mémoire : MIT
bits et octets : MIT
BLIP : clause BSD-3
svd_merge_lora.py
a été réduite. Cependant, l'utilisation de la mémoire principale augmentera (32 Go suffisent).svd_merge_lora.py
et la VRAM sont compatibles. Il s'agit d'une carte mémoire de 32 Go. Correction d'un bug dans svd_merge_lora.py
, sdxl_merge_lora.py
et resize_lora.py
où la valeur de hachage des métadonnées LoRA n'était pas correctement calculée lorsque la save_precision
était différente de la precision
utilisée dans le calcul. Voir le numéro 1722 pour plus de détails. Merci à JujoHotaru d'avoir soulevé le problème.
Il sera inclus dans la prochaine version.
svd_merge_lora.py
、 sdxl_merge_lora.py
、 resize_lora.py
で、保存時の精度が計算時の精度と異なる場合、L oRA. numéro 1722. JujoHotaru 氏に感謝します.
以上は次回リリースに含まれます.
sdxl_merge_lora.py
prend désormais en charge OFT. Merci à Maru-mee pour le PR #1580.
svd_merge_lora.py
prend désormais en charge LBW. Merci à Terracottahaniwa. Voir PR #1575 pour plus de détails.
sdxl_merge_lora.py
prend également en charge LBW.
Voir LoRA Block Weight par hako-mikan pour plus de détails sur LBW.
Ceux-ci seront inclus dans la prochaine version.
sdxl_merge_lora.py
が OFT をサポートされました。PR #1580 Maru-mee 氏に感謝します。
svd_merge_lora.py
で LBW がサポートされました。PR #1575 terracottahaniwa 氏に感謝します。
sdxl_merge_lora.py
et LBW utilisent la fonction sdxl_merge_lora.py.
LBW の詳細は hako-mikan 氏の LoRA Block Weight をご覧ください。
以上は次回リリースに含まれます.
Correction de cache_latents.py
et cache_text_encoder_outputs.py
ne fonctionnant pas. (Sera inclus dans la prochaine version.)
cache_latents.py
et cache_text_encoder_outputs.py
が動作しなくなっていたのを修正しました。
La valeur par défaut de huber_schedule
dans Scheduled Huber Loss passe d' exponential
à snr
, ce qui devrait donner de meilleurs résultats.
Perte Huber planifiée selon huber_schedule
exponential
snr
.
imagesize
a été récemment ajouté, donc si vous ne pouvez pas mettre à jour les bibliothèques immédiatement, veuillez les installer avec pip install imagesize==1.4.1
séparément.bitsandbytes==0.43.0
, prodigyopt==1.0
, lion-pytorch==0.0.6
sont inclus dans le fichierRequirements.txt.bitsandbytes
ne nécessite plus de procédures complexes car il prend désormais officiellement en charge Windows..toml
). Merci à bghira d'avoir soulevé le problème.--console_log_simple
dans le script de formation pour désactiver la journalisation enrichie.train_network.py
et sdxl_train_network.py
sont modifiés pour enregistrer certains paramètres d'ensemble de données dans les métadonnées du modèle entraîné ( caption_prefix
, caption_suffix
, keep_tokens_separator
, secondary_separator
, enable_wildcard
).train_network.py
et sdxl_train_network.py
. L'enregistrement et le chargement de l'état sont plus rapides, la taille du fichier est plus petite et l'utilisation de la mémoire lors du chargement est réduite.--noise_offset_random_strength
et --ip_noise_gamma_random_strength
sont ajoutées à chaque script d'entraînement. Ces options peuvent être utilisées pour faire varier le décalage du bruit et le gamma du bruit IP dans la plage de 0 à la valeur spécifiée. PR #1177 Merci à KohakuBlueleaf !--save_state_on_train_end
sont ajoutées à chaque script de formation. PR #1168 Merci à gesen2egee !--sample_every_n_epochs
et --sample_every_n_steps
dans chaque script de formation affichent désormais un avertissement et les ignorent lorsqu'un nombre inférieur ou égal à 0
est spécifié. Merci à S-Del d'avoir soulevé le problème. .toml
pour la configuration de l'ensemble de données est désormais lu en codage UTF-8. PR #1167 Merci à Horizon1704 !secondary_separator
est ajouté pour spécifier le séparateur de balises qui n'est pas la cible du mélange ou de la suppression.secondary_separator=";;;"
. Lorsque vous secondary_separator
, la partie n'est ni mélangée ni supprimée.enable_wildcard
est ajouté. Lorsqu'elle est définie sur true
, la notation générique {aaa|bbb|ccc}
peut être utilisée. La légende multiligne est également activée.keep_tokens_separator
est mis à jour pour être utilisé deux fois dans la légende. Lorsque vous spécifiez keep_tokens_separator="|||"
, la partie divisée par la seconde |||
n'est ni mélangé ni abandonné et reste à la fin.caption_prefix
et caption_suffix
peuvent être utilisées ensemble. caption_prefix
et caption_suffix
sont traités en premier, puis enable_wildcard
, keep_tokens_separator
, la lecture aléatoire et la suppression, et secondary_separator
sont traités dans l'ordre.tag_image_by_wd14_tagger.py
(option --onnx
uniquement). PR #1192 Merci à sdbds !pip install onnx==1.15.0 onnxruntime-gpu==1.17.1
etc. Veuillez également vérifier les commentaires dans requirements.txt
.--repo_id
dans tag_image_by_wd14_tagger.py
. Cela met en cache plusieurs modèles repo_id. Veuillez supprimer les fichiers inutiles sous --model_dir
.tag_image_by_wd14_tagger.py
.--use_rating_tags
et --use_rating_tags_as_last_tag
--character_tags_first
--character_tag_expand
--always_first_tags
--tag_replacement
--beam_search
et d'une valeur de 2 ou plus pour --num_beams
dans make_captions.py
. La perte masquée est prise en charge dans chaque script de formation. Pour activer la perte masquée, spécifiez l'option --masked_loss
.
La fonctionnalité n'est pas entièrement testée, il peut donc y avoir des bugs. Si vous rencontrez des problèmes, veuillez ouvrir un problème.
L'ensemble de données ControlNet est utilisé pour spécifier le masque. Les images du masque doivent être les images RVB. La valeur de pixel 255 dans le canal R est traitée comme le masque (la perte est calculée uniquement pour les pixels avec le masque) et 0 est traité comme le non-masque. Les valeurs de pixel 0 à 255 sont converties en 0 à 1 (c'est-à-dire que la valeur de pixel 128 est traitée comme la moitié du poids de la perte). Voir les détails de la spécification de l'ensemble de données dans la documentation LLLite.
La perte Huber programmée a été introduite dans chaque script de formation. Il s'agit d'une méthode permettant d'améliorer la robustesse contre les valeurs aberrantes ou les anomalies (corruption des données) dans les données d'entraînement.
Avec la fonction de perte MSE (L2) traditionnelle, l'impact des valeurs aberrantes pourrait être important, conduisant potentiellement à une dégradation de la qualité des images générées. D’un autre côté, même si la fonction de perte de Huber peut supprimer l’influence des valeurs aberrantes, elle tend à compromettre la reproduction des détails fins des images.
Pour résoudre ce problème, la méthode proposée utilise une application intelligente de la fonction de perte de Huber. En planifiant l'utilisation de la perte de Huber dans les premières étapes de la formation (lorsque le bruit est élevé) et du MSE dans les étapes ultérieures, il établit un équilibre entre la robustesse aberrante et la reproduction fine des détails.
Les résultats expérimentaux ont confirmé que cette méthode permet d'obtenir une plus grande précision sur les données contenant des valeurs aberrantes par rapport à la perte de Huber pure ou MSE. L’augmentation du coût de calcul est minime.
Les arguments nouvellement ajoutés loss_type, huber_schedule et huber_c permettent la sélection du type de fonction de perte (Huber, smooth L1, MSE), de la méthode de planification (exponentielle, constante, SNR) et du paramètre de Huber. Cela permet une optimisation basée sur les caractéristiques de l’ensemble de données.
Voir PR #1228 pour plus de détails.
loss_type
: Spécifiez le type de fonction de perte. Choisissez huber
pour la perte Huber, smooth_l1
pour la perte L1 en douceur et l2
pour la perte MSE. La valeur par défaut est l2
, ce qui est la même qu'avant.huber_schedule
: Spécifiez la méthode de planification. Choisissez exponential
, constant
ou snr
. La valeur par défaut est snr
.huber_c
: Spécifiez le paramètre de Huber. La valeur par défaut est 0.1
.Veuillez lire les versions pour les mises à jour récentes.
imagesize
pip install imagesize==1.4.1
pour la version 1.4.1.bitsandbytes==0.43.0
、 prodigyopt==1.0
、 lion-pytorch==0.0.6
et conditions.txt ci-dessous.bitsandbytes
pour Windows et les versions ultérieures..toml
Bghira 氏に感謝します。--console_log_simple
オプションを指定し、richのロギングを無効してお試しください。train_network.py
avec sdxl_train_network.py
、学習したモデルのメタデータに一部のデータセット設定が記録されるよう修正しました( caption_prefix
、 caption_suffix
、 keep_tokens_separator
、 secondary_separator
、 enable_wildcard
)。train_network.py
et sdxl_train_network.py
et state et U-Net et Text Encoder et State.の保存、読み込みが高速化され、ファイルサイズも小さくなり、また読み込み時のメモリ使用量も削減されます.--noise_offset_random_strength
および--ip_noise_gamma_random_strength
が追加されました。 PR #1177 KohakuBlueleaf 氏に感謝します。--save_state_on_train_end
est disponible. PR #1168 gesen2egee 氏に感謝します。--sample_every_n_epochs
--sample_every_n_steps
オプションに0
以下の数値を指定した時、警告を表示するととも. S-Del 氏に感謝します。 .toml
et encodage UTF-8.PR #1167 Horizon1704氏に感謝します。secondary_separator
secondaire. secondary_separator
secondary_separator=";;;"
時にまとめて扱われます。enable_wildcard
を追加しました. true
に す る と ワ イ ル ド カ ー ド記法{aaa|bbb|ccc}
が使えます。また複数行キャプションも有効になります。keep_tokens_separator
2つ使えるようにしました。たとえばkeep_tokens_separator="|||"
と指定したとき、 1girl, hatsune miku, vocaloid ||| stage, mic ||| best quality, rating: general
|||
1girl, hatsune miku, vocaloid ||| stage, mic ||| best quality, rating: general
されず末尾に残ります。caption_prefix
et d' caption_suffix
. caption_prefix
et caption_suffix
sont des paramètres de base, keep_tokens_separator
et keep_tokens_separator drop. secondary_separator
処理されます.tag_image_by_wd14_tagger.py
でv3のリポジトリがサポートされました( --onnx
指定時のみ有効)。 PR #1192 sdbds氏に感謝します。pip install onnx==1.15.0 onnxruntime-gpu==1.17.1
pour la version 1.17.1. Les requirements.txt
sont remplies.tag_image_by_wd14_tagger.py
で、モデルを--repo_id
のサブディレクトリに保存するようにしました。これにより複数のモデルファイルがキャッシュされます. --model_dir
直下の不要なファイルは削除願います.tag_image_by_wd14_tagger.py
.--use_rating_tags
-- --use_rating_tags_as_last_tag
--character_tags_first
--character_tag_expand
--always_first_tags
--tag_replacement
make_captions.py
--beam_search
を指定し--num_beams
に2以上の値を指定した時のエラーを修正しました。 マスクロスを有効--masked_loss
オプションを指定してください。
Problèmeを立てていただけると助かります。
Le module ControlNet et le module ControlNet RVB画像である必要があります。R チャンネルのピクセル値 255 がロス計算対象、0 0-255 heures, 0-1 heures de travail. 128 versions d'applications LLLite.をご覧ください。
Données de base corruption) et la perte programmée de Huber.
従来のMSE(L2)損失関数では、異常値の影響を大きく受けてしまい、生成画像の品質低下を招く恐れがありIl s'agit d'une question de Huber.えられますが、画像の細部再現性が損なわれがちでした.
L'entreprise Huber s'en occupe. Il s'agit d'un article de Huber. 、後期段階ではMSEを用いるようスケジューリングすることで、異常値耐性と細部再現性のバランスを取ります.
Les entreprises Huber et MSEでより高い精度を達成することが確認されています。また計算コストの増加はわずかです。
損失関数の種類(Huber, lisse L1, MSE)とスケジューリング方法(exponentielle, constante, SNR.
Il s'agit du PR #1228.
loss_type
: Type de perte par rapport à la valeur de huber
et de Huber, smooth_l1
et smooth L1 et l2
avec MSE損失を選択します。デフォルトはl2
で、従来と同様です。huber_schedule
: fonction exponential
, constant
, constante. snr
snr
huber_c
: Huber est basé sur 0.1
. PR --loss_type smooth_l1 --huber_schedule snr --huber_c 0.1
などで試してみるとよいかもしれません.
最近の更新情報は Release をご覧ください。
La LoRA prise en charge par train_network.py
a été nommée pour éviter toute confusion. La documentation a été mise à jour. Voici les noms des types LoRA dans ce référentiel.
LoRA-LierLa : (LoRA pour Li n e a r Couches )
LoRA pour les couches linéaires et les couches Conv2d avec noyau 1x1
LoRA-C3Lier : (LoRA pour les couches C olutionnelles avec 3 x 3 couches Kernel et Lin e a r )
En plus de 1., LoRA pour les couches Conv2d avec noyau 3x3
LoRA-LierLa est le type LoRA par défaut pour train_network.py
(sans argument de réseau conv_dim
).
Un fichier d'invite pourrait ressembler à ceci, par exemple
# 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
Les lignes commençant par #
sont des commentaires. Vous pouvez spécifier des options pour l'image générée avec des options telles que --n
après l'invite. Les éléments suivants peuvent être utilisés.
--n
Invite négative jusqu'à l'option suivante.--w
Spécifie la largeur de l'image générée.--h
Spécifie la hauteur de l'image générée.--d
Spécifie la graine de l'image générée.--l
Spécifie l'échelle CFG de l'image générée.--s
Spécifie le nombre d'étapes dans la génération. Les pondérations d'invite telles que ( )
et [ ]
fonctionnent.