Project Icon

sd-scripts

Stable Diffusion模型训练与生成的综合脚本工具库

sd-scripts是一个专为Stable Diffusion模型开发的脚本库,集成了多种训练方法如DreamBooth、微调、LoRA和Textual Inversion。此外,它还提供了图像生成和模型转换功能。该项目包含训练脚本、数据准备工具和配置选项,有助于优化AI艺术创作流程。

这个仓库包含了用于Stable Diffusion的训练、生成和实用脚本。

更新历史已移至页面底部。 更新历史已移至页面末尾

日语版README在这里

如需更易用的版本(带GUI和PowerShell脚本等),请访问由bmaltais维护的仓库。感谢@bmaltais!

这个仓库包含以下脚本:

  • DreamBooth训练,包括U-Net和文本编码器
  • 微调(原生训练),包括U-Net和文本编码器
  • LoRA训练
  • Textual Inversion训练
  • 图像生成
  • 模型转换(支持1.x和2.x, Stable Diffusion ckpt/safetensors和Diffusers)

关于requirements.txt

该文件不包含PyTorch的要求。因为PyTorch的版本取决于环境,所以没有包含在文件中。请先根据环境安装PyTorch。请参阅下面的安装说明。

这些脚本已在Pytorch 2.1.2上测试。2.0.1和1.12.1未经测试但应该可以工作。

使用文档链接

大多数文档都是用日语写的。

darkstorm2150的英文翻译在这里。感谢darkstorm2150!

Windows必需依赖

Python 3.10.6和Git:

给powershell无限制的脚本访问权限以使venv工作:

  • 以管理员身份打开powershell窗口
  • 输入Set-ExecutionPolicy Unrestricted并回答A
  • 关闭管理员powershell窗口

Windows安装

打开一个普通的Powershell终端并在其中输入以下内容:

git clone https://github.com/kohya-ss/sd-scripts.git
cd sd-scripts

python -m venv venv
.\venv\Scripts\activate

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.0prodigyopt==1.0lion-pytorch==0.0.6已包含在requirements.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/cu121pip install xformers==0.0.23.post1 --index-url https://download.pytorch.org/whl/cu121

accelerate config的回答:

- 这台机器
- 无分布式训练
- NO
- NO  
- NO
- all
- fp16

如果你想使用bf16,请在最后一个问题回答bf16

注意:有些用户报告在训练中出现ValueError: fp16 mixed precision requires a GPU。在这种情况下,对第6个问题回答0: 这台机器上应该使用哪些GPU(按id)进行训练,以逗号分隔列表? [all]:

(将使用id为0的单个GPU。)

升级

当新版本发布时,你可以使用以下命令升级你的仓库:

cd sd-scripts
git pull
.\venv\Scripts\activate
pip install --use-pep517 --upgrade -r requirements.txt

命令成功完成后,你应该可以使用新版本了。

升级PyTorch

如果你想升级PyTorch,可以使用Windows安装部分的pip install命令进行升级。升级PyTorch时也需要升级xformers

致谢

LoRA的实现基于cloneofsimo的仓库。感谢出色的工作!

LoRA扩展到Conv2d 3x3最初由cloneofsimo发布,其有效性在KohakuBlueleaf的LoCon中得到了证明。非常感谢KohakuBlueleaf!

许可证

大多数脚本采用ASL 2.0许可(包括来自Diffusers、cloneofsimo和LoCon的代码),但项目的某些部分可能采用单独的许可条款:

Memory Efficient Attention Pytorch: MIT

bitsandbytes: MIT

BLIP: BSD-3-Clause

更新历史

2024年6月23日:

  • 修复了cache_latents.pycache_text_encoder_outputs.py不工作的问题。(将包含在下一个版本中。)

2024年4月7日: v0.8.7

  • Scheduled Huber Loss中huber_schedule的默认值从exponential改为snr,预期会产生更好的结果。

2024年4月7日: v0.8.6

亮点

  • 依赖库已更新。请参阅升级并更新库。
    • 特别是新添加了imagesize,如果你不能立即更新库,请单独用pip install imagesize==1.4.1安装。
    • bitsandbytes==0.43.0prodigyopt==1.0lion-pytorch==0.0.6已包含在requirements.txt中。
      • bitsandbytes不再需要复杂的步骤,因为它现在正式支持Windows。
    • 此外,PyTorch版本已更新到2.1.2(PyTorch不需要立即更新)。在升级过程中,PyTorch不会更新,所以如果需要,请手动安装或更新torch、torchvision、xformers(参见升级PyTorch)。
  • 启用wandb日志记录时,整个命令行会被暴露。因此,建议在配置文件(.toml)中写入wandb API密钥和HuggingFace令牌。感谢bghira提出这个问题。
    • 如果命令行中包含此类信息,训练开始时会显示警告。
    • 此外,如果存在绝对路径,路径可能会被暴露,因此建议指定相对路径或在配置文件中写入。在这种情况下,会显示INFO日志。
    • 详情请参见#1123和PR #1240
  • Colab似乎会在日志输出时停止。尝试在训练脚本中指定--console_log_simple选项以禁用富日志记录。
  • 其他改进包括添加了掩码损失、预定的Huber Loss、DeepSpeed支持、数据集设置改进和图像标记改进。详情见下文。

训练脚本

  • 修改了train_network.pysdxl_train_network.py,以在训练模型的元数据中记录一些数据集设置(caption_prefixcaption_suffixkeep_tokens_separatorsecondary_separatorenable_wildcard)。
  • 修复了train_network.pysdxl_train_network.py中U-Net和文本编码器包含在状态中的错误。状态的保存和加载更快,文件大小更小,加载时的内存使用量减少。
  • 支持DeepSpeed。PR #1101#1139 感谢BootsofLagrangian! 详情请参见PR #1101
  • 每个训练脚本都支持掩码损失。PR #1207 详情请参见掩码损失
  • 在每个训练脚本中引入了预定的Huber Loss。PR #1228 感谢kabachuha的PR以及cheald、drhead等人的讨论! 详情请参见PR和预定的Huber Loss
  • 在每个训练脚本中添加了--noise_offset_random_strength--ip_noise_gamma_random_strength选项。这些选项可用于在0到指定值的范围内改变噪声偏移和ip噪声gamma。PR #1177 感谢KohakuBlueleaf!
  • 在每个训练脚本中添加了--save_state_on_train_end选项。PR #1168 感谢gesen2egee!
  • 每个训练脚本中的--sample_every_n_epochs--sample_every_n_steps选项现在在指定小于等于0的数字时会显示警告并忽略它们。感谢S-Del提出这个问题。

数据集设置

  • 添加了数据集设置文档的英文版。PR #1175 感谢darkstorm2150!
  • 现在以UTF-8编码读取数据集配置的.toml文件。PR #1167 感谢Horizon1704!
  • 修复了在数据集设置中指定多个正则化图像子集时,最后一个子集设置应用于所有图像的错误。现在每个子集的设置正确应用于每个图像。PR #1205 感谢feffy380!
  • 在数据集子集设置中添加了一些功能。
    • 添加了secondary_separator以指定不是洗牌或丢弃目标的标签分隔符。
      • 指定secondary_separator=";;;"。当指定secondary_separator时,该部分不会被洗牌或丢弃。
    • 添加了enable_wildcard。设置为true时,可以使用通配符表示法{aaa|bbb|ccc}。多行标题也被启用。
    • 更新了keep_tokens_separator,可在标题中使用两次。当你指定keep_tokens_separator="|||"时,由第二个|||分隔的部分不会被洗牌或丢弃,并保留在末尾。
    • 现有的功能caption_prefixcaption_suffix可以一起使用。首先处理caption_prefixcaption_suffix,然后依次处理enable_wildcardkeep_tokens_separator、洗牌和丢弃以及secondary_separator
    • 详情请参见数据集配置
  • DreamBooth方法的数据集支持缓存图像信息(大小、标题)。PR #1178#1206 感谢KohakuBlueleaf! 详情请参见DreamBooth方法特定选项

图像标记

  • tag_image_by_wd14_tagger.py中添加了对v3仓库的支持(仅--onnx选项)。PR #1192 感谢sdbds!
    • Onnx可能需要更新。Onnx默认不安装,所以请用` 实验结果确认,该方法在包含异常值的数据上比纯粹的Huber损失或MSE达到了更高的精度。计算成本的增加是微不足道的。

新增的参数loss_type、huber_schedule和huber_c允许选择损失函数类型(Huber、平滑L1、MSE)、调度方法(指数、常数、SNR)和Huber参数。这使得可以根据数据集的特征进行优化。

详情请参见PR #1228。

  • loss_type:指定损失函数类型。选择huber表示Huber损失,smooth_l1表示平滑L1损失,l2表示MSE损失。默认为l2,与之前相同。
  • huber_schedule:指定调度方法。选择exponentialconstantsnr。默认为snr
  • huber_c:指定Huber参数。默认为0.1

请阅读Releases以了解最近的更新。

主要变更

  • 依赖库已更新。请参阅[升级]部分并更新库。
    • 特别是新增了imagesize,如果无法立即更新库,请单独运行pip install imagesize==1.4.1进行安装。
    • bitsandbytes==0.43.0prodigyopt==1.0lion-pytorch==0.0.6现已包含在requirements.txt中。
      • 由于bitsandbytes现在正式支持Windows,不再需要复杂的步骤。
    • 此外,PyTorch版本已更新到2.1.2。无需立即更新PyTorch。更新时,升级步骤不会更新PyTorch,请手动安装torch、torchvision和xformers。
  • 启用wandb日志输出时,整个命令行将被公开。因此,如果命令行包含wandb API密钥或HuggingFace令牌等,建议将其写入配置文件(.toml)。感谢bghira提出这个问题。
    • 在这种情况下,训练开始时会显示警告。
    • 此外,如果指定了绝对路径,该路径可能会被公开,建议指定相对路径或写入配置文件。这种情况下会显示INFO日志。
    • 详情请参见#1123和PR #1240。
  • 在Colab上运行时,似乎会因日志输出而停止。请尝试为学习脚本指定--console_log_simple选项以禁用rich日志记录。
  • 此外,还添加了掩码损失、Scheduled Huber Loss、DeepSpeed支持、改进数据集设置和图像标记等。详情请参见下文。

学习脚本

  • train_network.pysdxl_train_network.py中,修改为在训练模型的元数据中记录部分数据集设置(caption_prefixcaption_suffixkeep_tokens_separatorsecondary_separatorenable_wildcard)。
  • train_network.pysdxl_train_network.py中,修复了state中包含U-Net和Text Encoder的错误。state的保存和加载速度更快,文件大小更小,加载时的内存使用量也减少了。
  • 支持DeepSpeed。PR #1101、#1139 感谢BootsofLagrangian。详情请参见PR #1101。
  • 各学习脚本支持掩码损失。PR #1207 详情请参见[关于掩码损失]。
  • 各学习脚本添加了Scheduled Huber Loss。PR #1228 感谢kabachuha提出建议,以及cheald、drhead等人深入讨论。详情请参见相关PR和[关于Scheduled Huber Loss]。
  • 各学习脚本添加了--noise_offset_random_strength--ip_noise_gamma_random_strength选项,分别在0~指定值的范围内变化noise offset和ip noise gamma。PR #1177 感谢KohakuBlueleaf。
  • 各学习脚本添加了--save_state_on_train_end选项,在训练结束时保存state。PR #1168 感谢gesen2egee。
  • 各学习脚本在指定--sample_every_n_epochs--sample_every_n_steps选项为0或更小的值时,现在会显示警告并忽略这些选项。感谢S-Del提出这个问题。

数据集设置

  • 数据集设置的.toml文件现在以UTF-8编码读取。PR #1167 感谢Horizon1704。
  • 修复了在数据集设置中指定多个正则化图像子集时,最后一个子集的各种设置应用于所有子集图像的错误。现在每个子集的设置正确应用于各自的图像。PR #1205 感谢feffy380。
  • 在数据集的子集设置中添加了一些功能。
    • 添加了secondary_separator以指定不参与洗牌的标签分割标识符。例如指定secondary_separator=";;;"。使用secondary_separator分隔的部分在洗牌和drop时会作为一个整体处理。
    • 添加了enable_wildcard。设为true时可以使用通配符表示法{aaa|bbb|ccc}。多行标题也会启用。
    • 现在可以在标题中使用两个keep_tokens_separator。例如,当指定keep_tokens_separator="|||"时,如果标题为1girl, hatsune miku, vocaloid ||| stage, mic ||| best quality, rating: general,则第二个|||分隔的部分不会被洗牌和drop,而会保留在末尾。
    • 可以与现有的caption_prefixcaption_suffix功能一起使用。caption_prefixcaption_suffix首先处理,然后依次处理通配符、keep_tokens_separator、洗牌和drop、secondary_separator
    • 详情请参见[数据集设置]文档。
  • DreamBooth方式的DataSet添加了缓存图像信息(大小、标题)的功能。PR #1178、#1206 感谢KohakuBlueleaf。详情请参见[数据集设置]文档中的[DreamBooth方式专用选项]。
  • 添加了数据集设置的[英文文档]。PR #1175 感谢darkstorm2150。

图像标记

  • tag_image_by_wd14_tagger.py现在支持v3存储库(仅在指定--onnx时有效)。PR #1192 感谢sdbds。
    • 可能需要升级Onnx。默认情况下未安装Onnx,请运行pip install onnx==1.15.0 onnxruntime-gpu==1.17.1等进行安装或更新。另请参阅requirements.txt中的注释。
  • tag_image_by_wd14_tagger.py现在将模型保存在--repo_id的子目录中。这允许缓存多个模型文件。请删除--model_dir直接下的不必要文件。
  • tag_image_by_wd14_tagger.py添加了几个选项。
    • 部分选项在PR #1216中添加。感谢Disty0。
    • --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选项。

该功能尚未完全测试,可能存在错误。如果发现问题,请提出Issue。

掩码指定使用ControlNet数据集。掩码图像必须是RGB图像。R通道像素值255表示损失计算目标,0表示非损失计算目标。0-255的值会转换为0-1范围(即像素值128的部分损失权重为一半)。有关数据集的详细信息,请参见[LLLite文档]。

关于Scheduled Huber Loss

各学习脚本引入了Scheduled Huber Loss,这是一种提高学习数据中异常值和离群值(数据损坏)抵抗力的方法。

传统的MSE(L2)损失函数容易受到异常值的影响,可能导致生成图像质量下降。另一方面,Huber损失函数可以抑制异常值的影响,但往往会损害图像细节的再现性。 这种方法通过巧妙应用Huber损失函数,在学习的初期阶段(噪音较大时)使用Huber损失,而在后期阶段使用MSE,从而在异常值耐受性和细节重现性之间取得平衡。

实验结果表明,与纯Huber损失或MSE相比,这种方法在包含异常值的数据上能够达到更高的精度。而且计算成本的增加很小。

具体来说,新增的参数loss_type、huber_schedule和huber_c可以选择损失函数类型(Huber、smooth L1、MSE)和调度方法(指数型、常数型、SNR)。这使得可以根据数据集进行优化。

详情请参阅PR #1228

  • loss_type:指定损失函数类型。huber选择Huber损失,smooth_l1选择smooth L1损失,l2选择MSE损失。默认为l2,与之前相同。
  • huber_schedule:指定调度方法。exponential选择指数函数型,constant选择恒定型,snr选择基于信噪比的调度。默认为snr
  • huber_c:指定Huber损失的参数。默认为0.1

PR中分享了一些比较结果。如果要尝试这个功能,可以先试试--loss_type smooth_l1 --huber_schedule snr --huber_c 0.1

最新的更新信息请查看Release

附加信息

LoRA的命名

为避免混淆,train_network.py支持的LoRA已被命名。文档已更新。以下是本仓库中LoRA类型的名称。

  1. LoRA-LierLa:(用于线性层的LoRA)

    用于线性层和1x1核的Conv2d层的LoRA

  2. LoRA-C3Lier:(用于3x3核卷积层和线性层的LoRA)

    除1.外,还包括用于3x3核Conv2d层的LoRA

LoRA-LierLa是train_network.py的默认LoRA类型(不带conv_dim网络参数)。

训练期间的样本图像生成

提示文件可能如下所示:

# 提示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

# 提示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 指定生成的步数。

提示权重如( )[ ]是有效的。

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号