该存储库包含稳定扩散的训练、生成和实用脚本。
更改历史记录移至页面底部。 更新履迹歴はページ导出に移しました。
日本语版READMEはこちら
开发版本位于dev
分支。请检查 dev 分支以获取最新更改。
FLUX.1 和 SD3/SD3.5 支持在sd3
分支中完成。如果你想训练它们,请使用 sd3 分支。
为了更方便地使用(GUI 和 PowerShell 脚本等...),请访问 bmaltais 维护的存储库。感谢@bmaltais!
该存储库包含以下脚本:
该文件不包含 PyTorch 的要求。由于PyTorch的版本取决于环境,因此未包含在文件中。请先根据环境安装PyTorch。请参阅下面的安装说明。
这些脚本使用 Pytorch 2.1.2 进行测试。 2.0.1 和 1.12.1 未经测试,但应该可以工作。
大多数文件都是用日语写的。
darkstorm2150 的英文翻译在这里。感谢darkstorm2150!
Python 3.10.6 和 Git:
授予对 powershell 的不受限制的脚本访问权限,以便 venv 可以工作:
Set-ExecutionPolicy Unrestricted
并回答 A打开常规 Powershell 终端并在其中输入以下内容:
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
如果python -m venv
仅显示python
,请将python
更改为py
。
注意:现在, bitsandbytes==0.43.0
、 prodigyopt==1.0
和lion-pytorch==0.0.6
已包含在 requests.txt 中。如果您想使用其他版本,请手动安装。
此安装适用于 CUDA 11.8。如果您使用不同版本的 CUDA,请安装适当版本的 PyTorch 和 xformers。例如,如果您使用 CUDA 12,请安装pip install torch==2.1.2 torchvision==0.16.2 --index-url https://download.pytorch.org/whl/cu121
和pip install xformers==0.0.23.post1 --index-url https://download.pytorch.org/whl/cu121
。
加速配置的答案:
- This machine
- No distributed training
- NO
- NO
- NO
- all
- fp16
如果您想使用 bf16,请回答bf16
最后一个问题。
注意:一些用户报告训练中出现ValueError: fp16 mixed precision requires a GPU
。在这种情况下,对第六个问题回答0
: What GPU(s) (by id) should be used for training on this machine as a comma-separated list? [all]:
(将使用 id 0
的单个 GPU。)
当新版本发布时,您可以使用以下命令升级您的存储库:
cd sd - scripts
git pull
.venvScriptsactivate
pip install -- use-pep517 -- upgrade - r requirements.txt
命令成功完成后,您应该准备好使用新版本。
如果要升级 PyTorch,可以使用 Windows 安装部分中的pip install
命令进行升级。升级PyTorch时, xformers
也需要升级。
LoRA 的实现基于cloneofsimo 的存储库。感谢您所做的出色工作!
LoRA 对 Conv2d 3x3 的扩展最初由 cloneofsimo 发布,其有效性由 KohakuBlueleaf 在 LoCon 上得到了证明。非常感谢琥珀蓝叶!
大多数脚本均根据 ASL 2.0 获得许可(包括来自 Diffusers、cloneofsimo's 和 LoCon 的代码),但该项目的部分内容可根据单独的许可条款使用:
内存高效注意力 Pytorch:麻省理工学院
位和字节:麻省理工学院
BLIP:BSD-3 条款
svd_merge_lora.py
VRAM 使用量已减少。不过,主内存使用量会增加(32GB就足够了)。svd_merge_lora.py
のVRAM使用量を切しました。ただし、メインメモriの使用量は増加します(32GBあれば十分です)。修复了svd_merge_lora.py
、 sdxl_merge_lora.py
和resize_lora.py
中的错误,当save_precision
与计算中使用的precision
不同时,无法正确计算 LoRA 元数据的哈希值。有关详细信息,请参阅问题 #1722。感谢 JujoHotaru 提出这个问题。
它将包含在下一个版本中。
svd_merge_lora.py
、 sdxl_merge_lora.py
、 resize_lora.py
で、保存时の精度が计算时の精度と异なる场合计算、LoRAメタデータのハッシュ値が正しくされな不い具合を修改しました。详细は问题#1722をご覧ください。问题提起していただいた JujoHotaru 氏に感谢します。
以上は次回ririsuに含まれます。
sdxl_merge_lora.py
现在支持 OFT。感谢 Maru-mee 的 PR #1580。
svd_merge_lora.py
现在支持 LBW。感谢赤土陶器。有关详细信息,请参阅 PR #1575。
sdxl_merge_lora.py
还支持 LBW。
有关 LBW 的详细信息,请参阅 hako-mikan 的 LoRA Block Weight。
这些将包含在下一个版本中。
sdxl_merge_lora.py
が OFT をサポートされました。PR #1580 Maru-mee 氏に感谢します。
svd_merge_lora.py
で LBW がサポートされました。PR #1575 terracottahaniwa 氏に感谢します。
sdxl_merge_lora.py
でも LBW がサポートされました。
LBW の详细は hako-mikan 氏の LoRA Block Weight をご覧ください。
以上は次回ririsuに含まれます。
修复了cache_latents.py
和cache_text_encoder_outputs.py
不起作用的问题。 (将包含在下一版本中。)
cache_latents.py
およびcache_text_encoder_outputs.py
が动作しなくなっていたのを修改しました。(次回uririーsuに含まれます。)
Scheduled Huber Loss 中huber_schedule
的默认值从exponential
更改为snr
,预计会给出更好的结果。
Scheduled Huber Loss のhuber_schedule
のデfuォルト値をexponential
から、より良い结果が期待できるsnr
に変更しました。
imagesize
是新增的,所以如果无法立即更新库,请单独使用pip install imagesize==1.4.1
进行安装。bitsandbytes==0.43.0
、 prodigyopt==1.0
、 lion-pytorch==0.0.6
包含在 requests.txt 中。bitsandbytes
不再需要复杂的过程,因为它现在正式支持 Windows。.toml
)中写入 wandb API key 和 HuggingFace token 。感谢 bghira 提出这个问题。--console_log_simple
选项以禁用丰富的日志记录。train_network.py
和sdxl_train_network.py
被修改为在训练模型的元数据中记录一些数据集设置( caption_prefix
、 caption_suffix
、 keep_tokens_separator
、 secondary_separator
、 enable_wildcard
)。train_network.py
和sdxl_train_network.py
状态中的错误。状态的保存和加载速度更快,文件大小更小,加载时的内存占用也减少。--noise_offset_random_strength
和--ip_noise_gamma_random_strength
添加到每个训练脚本中。这些选项可用于在 0 到指定值的范围内改变噪声偏移和 ip 噪声伽玛。 PR #1177 感谢 KohakuBlueleaf!--save_state_on_train_end
添加到每个训练脚本中。 PR #1168 感谢 gesen2egee!--sample_every_n_epochs
和--sample_every_n_steps
会显示警告,并在指定小于或等于0
的数字时忽略它们。感谢 S-Del 提出这个问题。 .toml
文件现在以 UTF-8 编码读取。 PR #1167 感谢 Horizon1704!secondary_separator
以指定不是混洗或丢弃目标的标签分隔符。secondary_separator=";;;"
。当您指定secondary_separator
时,该部分不会被打乱或删除。enable_wildcard
。当设置为true
时,可以使用通配符{aaa|bbb|ccc}
。多行标题也已启用。keep_tokens_separator
已更新为在标题中使用两次。当您指定keep_tokens_separator="|||"
时,除以第二个|||
的部分不会被洗牌或丢弃并保留在最后。caption_prefix
和caption_suffix
可以一起使用。首先处理caption_prefix
和caption_suffix
,然后依次处理enable_wildcard
、 keep_tokens_separator
、shuffling和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
等安装或更新它。另请检查requirements.txt
中的注释。--repo_id
保存在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
选项。
该功能尚未经过全面测试,因此可能存在错误。如果您发现任何问题,请打开问题。
ControlNet 数据集用于指定掩码。遮罩图像应该是 RGB 图像。 R通道中的像素值255被视为掩模(仅对具有掩模的像素计算损失),0被视为非掩模。将像素值0-255转换为0-1(即像素值128被视为损失的一半权重)。请参阅 LLLite 文档中数据集规范的详细信息。
每个训练脚本中都引入了 Scheduled Huber Loss。这是一种提高训练数据中异常值或异常(数据损坏)稳健性的方法。
对于传统的 MSE (L2) 损失函数,异常值的影响可能很大,可能导致生成图像的质量下降。另一方面,虽然 Huber 损失函数可以抑制异常值的影响,但它往往会损害图像中精细细节的再现。
为了解决这个问题,所提出的方法巧妙地应用了 Huber 损失函数。通过在训练的早期阶段(当噪声较高时)安排使用 Huber 损失并在后期阶段使用 MSE,它在离群值鲁棒性和精细细节再现之间取得了平衡。
实验结果证实,与纯 Huber 损失或 MSE 相比,该方法对包含异常值的数据具有更高的准确性。计算成本的增加是最小的。
新添加的参数loss_type、huber_schedule和huber_c允许选择损失函数类型(Huber、smooth L1、MSE)、调度方法(指数、常数、SNR)和Huber参数。这使得能够根据数据集的特征进行优化。
有关详细信息,请参阅 PR #1228。
loss_type
:指定损失函数类型。选择huber
表示 Huber 损失,选择smooth_l1
表示平滑 L1 损失,选择l2
表示 MSE 损失。默认为l2
,与之前相同。huber_schedule
:指定调度方法。选择exponential
、 constant
或snr
。默认值为snr
。huber_c
:指定 Huber 的参数。默认值为0.1
。请阅读版本以了解最新更新。
pip install imagesize==1.4.1
で个别にイimagesize
してください。bitsandbytes==0.43.0
、 prodigyopt==1.0
、 lion-pytorch==0.0.6
がrequirements.txt に含まれるようになりました。bitsandbytes
が公式に Windows をサポートしたため复雑な手顺が不要になりました。.toml
)への记载をお勧めします。问题提起していただいた bghira 氏に感谢します。--console_log_simple
オプションを指定し、richのロギングを无效してお试しください。train_network.py
およびsdxl_train_network.py
で、学习したモデルのメタデータにのデータセット设定が记录されるよう修改しました( caption_prefix
、 caption_suffix
、 keep_tokens_separator
、 secondary_separator
、 enable_wildcard
)。train_network.py
およびsdxl_train_network.py
で、state に U-Net および 文本编码器 が含まれる不具合を修改しました。stateの保存、読み込みが高速化され、ァイルサイズも小さくなり、また読み込み时のメモri使用量も量されます。--noise_offset_random_strength
および--ip_noise_gamma_random_strength
が追加されました。 PR #1177 KohakuBlueleaf氏に感谢します。--save_state_on_train_end
オプションが追加されました。 PR #1168 gesen2egee 氏に感谢します。--sample_every_n_epochs
および--sample_every_n_steps
オプションに0
以下の数値を指定した时、警告を表示するとともにそれらを无视するよう変更しました。问题解除していただいたS-Del氏に感谢します。 .toml
ァイルが UTF-8 编码で読み込まれるようになりました。PR #1167 Horizon1704 氏に感谢します。secondary_separator
secondary_separator=";;;"
のように指定しまた。 secondary_separator
で区切ることで、その部分はシャaffuru、掉落时にまとめて扱われます。enable_wildcard
を追加しました。 true
にするとワイルドカード记法{aaa|bbb|ccc}
が使えます。また复数行キャプションも有效になります。keep_tokens_separator
をキャプション内に 2 つ使えるようにしました。たとえばkeep_tokens_separator="|||"
と指定したとき、 1girl, hatsune miku, vocaloid ||| stage, mic ||| best quality, rating: general
とキャプションを指定すると、二番目の|||
で分割された部分はシャッfuru、dropされず导出に残ります。caption_prefix
とcaption_suffix
とあわせて使えます。caption_prefixとcaption_prefix
は首先に处理され、その后、ワイルcaption_suffix
カード、 keep_tokens_separator
、shaffuruおよび掉落、 secondary_separator
の顺に处理されます。tag_image_by_wd14_tagger.py
で v3 のoriポジトoriがサポートされました( --onnx
指定时のみ有效)。 PR #1192 sdbds 氏に感谢します。pip install onnx==1.15.0 onnxruntime-gpu==1.17.1
等でインストール、プデートしてください。requirements.txtのコrequirements.txt
ントもあわせてご确认ください。tag_image_by_wd14_tagger.py
で、モデルを--repo_id
のサブディrekutoriに保存するようにしました。これにより复数のモデルufァイルァキャにしまます。 --model_dir
直下の不要なfuァイルは削除愿います。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以上の値を指定した时のエラーを修改しました。 い学习各sukuryputoでマsukurossuをサポートしました。マsukurosuを有效にするには--masked_loss
オプションを指定してくださ。
机能は完全にテsutoされていないため、不具合があるかもしれません。その场合は问题を立てていただけると助かります。
マsukuの指定には ControlNet データセットを使用します。マsuku肖像は RGB 肖像である必要があります。R チャンネルのピクセル値 255がrosu 计算対象、0 がrosu 计算対象外になります。0-255 の値は、0-1 の范囲に変换されます(つまりピクセル値 128の部分はrosuの重みが半分になります)。データセットの详细は LLLite ドキュメnt をご覧ください。
学习sukuriputoに、学习データ中の异常値や外れ値(数据损坏)への耐性を高め各るための手法、Scheduled Huber Lossが导入されました。
従来のMSE(L2)损失关数では、异常値の影响を大きく受けてしまい、生成肖像の品质低下を招く恐れがあり另一方面、Huber损失关数は异常値の影响を抑えられますが、肖像の细部重现が损なわれがちでした。
この手法ではHuber损失关数の适用を工夫し、学习の青少年段阶(ノイズが大きい场合)ではHuber损失を、后期段阶ではMSEを用いるようsukeケジューringuすることで、异常値耐性と细再现部性のバransuを取ります。
実験の结果では、この手法が纯粋なHuber损失やMSEと比べ、异常値を含むデータでより高い精度を达成することが确认されています。また计算コsuトの増加はわずかです。
具体的には、新たに追加された引数loss_type、huber_schedule、huber_cで、损失关系数种类(Huber、smooth L1、MSE)とsukeジューringu方法(指数、常数、 SNR)を选択できます。これによりデータセットに応じた最适化が可能になります。
详细は PR #1228 をご覧ください。
loss_type
: 损失关系数の种类を指定します。 huber
で Huber损失、 smooth_l1
で smooth L1损失、 l2
で MSE损失を选択します。デfuォルトはl2
で、従来と同様です。huber_schedule
: sukeジューringu方法を指定します。 exponential
で指数关数的、 constant
で一定、 snr
で信号対雑音比に基づくsukeジューringグを选択します。デfuォルトはsnr
です。huber_c
: Huber损失のパラメータを指定します。デfuォルトは0.1
です。 PR 内でいくつかの比较が共同されています。この机能を试す场合、最初は--loss_type smooth_l1 --huber_schedule snr --huber_c 0.1
などで试してみるとよいかもしれません。
最近の更新情报は发布をご覧ください。
train_network.py
支持的 LoRA 已被命名以避免混淆。文档已更新。以下是此存储库中 LoRA 类型的名称。
LoRA-LierLa : (LoRA用于线性层)
LoRA 用于具有 1x1 内核的线性层和 Conv2d 层
LoRA - C3Lier :(LoRA 用于具有3 x3 内核和线性层的C olutional 层)
除了1.之外,LoRA for Conv2d 层具有 3x3 内核
LoRA-LierLa 是train_network.py
的默认 LoRA 类型(没有conv_dim
网络参数)。
例如,提示文件可能如下所示
# 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
以#
开头的行是注释。您可以在提示后使用--n
等选项为生成的图像指定选项。可以使用以下内容。
--n
否定提示直到下一个选项。--w
指定生成图像的宽度。--h
指定生成图像的高度。--d
指定生成图像的种子。--l
指定生成图像的CFG比例。--s
指定生成的步骤数。 ( )
和[ ]
等提示权重正在起作用。