这个仓库包含了用于Stable Diffusion的训练、生成和实用脚本。
如需更易用的版本(带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 .\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.0、prodigyopt==1.0和lion-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/cu121和pip 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,可以使用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
cache_latents.py和cache_text_encoder_outputs.py不工作的问题。(将包含在下一个版本中。)huber_schedule的默认值从exponential改为snr,预期会产生更好的结果。imagesize,如果你不能立即更新库,请单独用pip install imagesize==1.4.1安装。bitsandbytes==0.43.0、prodigyopt==1.0、lion-pytorch==0.0.6已包含在requirements.txt中。
bitsandbytes不再需要复杂的步骤,因为它现在正式支持Windows。.toml)中写入wandb API密钥和HuggingFace令牌。感谢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中U-Net和文本编码器包含在状态中的错误。状态的保存和加载更快,文件大小更小,加载时的内存使用量减少。--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提出这个问题。.toml文件。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、洗牌和丢弃以及secondary_separator。tag_image_by_wd14_tagger.py中添加了对v3仓库的支持(仅--onnx选项)。PR #1192 感谢sdbds!
新增的参数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:指定调度方法。选择exponential、constant或snr。默认为snr。huber_c:指定Huber参数。默认为0.1。请阅读Releases以了解最近的更新。
imagesize,如果无法立即更新库,请单独运行pip install imagesize==1.4.1进行安装。bitsandbytes==0.43.0、prodigyopt==1.0和lion-pytorch==0.0.6现已包含在requirements.txt中。
bitsandbytes现在正式支持Windows,不再需要复杂的步骤。--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和Text Encoder的错误。state的保存和加载速度更快,文件大小更小,加载时的内存使用量也减少了。--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提出这个问题。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_prefix和caption_suffix功能一起使用。caption_prefix和caption_suffix首先处理,然后依次处理通配符、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等进行安装或更新。另请参阅requirements.txt中的注释。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选项。
该功能尚未完全测试,可能存在错误。如果发现问题,请提出Issue。
掩码指定使用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)。这使得可以根据数据集进行优化。
详情请参阅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。
为避免混淆,train_network.py支持的LoRA已被命名。文档已更新。以下是本仓库中LoRA类型的名称。
LoRA-LierLa:(用于线性层的LoRA)
用于线性层和1x1核的Conv2d层的LoRA
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 指定生成的步数。提示权重如( )和[ ]是有效的。


GPT充值
支持 ChatGPT Plus / Pro 充值服务,支付便捷,自动发货,售后可查。


AI 图片生成平台
GPT Image 2 是面向用户的 AI 图片生成平台,支持文生图、图生图及多模型创意工作流。


你的AI Agent团队
Vecbase 是专为 AI 团队打造的智能工作空间,将数据管理、模型协作与知识沉淀整合于一处。算法、产品与业务在同一平台无缝协同,让从数据到 AI 应用的落地更快一步。


全球首个AI音乐社区
音述AI是全球首个AI音乐社区,致力让每个人都能用音乐表达自我。音述AI提供零门槛AI创作工具,独 创GETI法则帮助用户精准定义音乐风格,AI润色功能支持自动优化作品质感。音述AI支持交流讨论、二次创作与价值变现。针对中文用户的语言习惯与文化背景进行专门优化,支持国风融合、C-pop等本土音乐标签,让技术更好地承载人文表达。


阿里Qoder团队推出的桌面端AI智能体
QoderWork 是阿里推出的本地优先桌面 AI 智能体,适配 macOS14+/Windows10+,以自然语言交互实现文件管理、数据分析、AI 视觉生成、浏览器自动化等办公任务,自主拆解执行复杂工作流,数据本地运行零上传,技能市场可无限扩展,是高效的 Agentic 生产力办公助手。


一站式搞定所有学习需求
不再被海量信息淹没,开始真正理解知识。Lynote 可摘要 YouTube 视频、PDF、文章等内容。即时创建笔记,检测 AI 内容并下载资料,将您的学习效率提升 10 倍。


为AI短剧协作而生
专为AI短剧协作而生的AniShort正式发布,深度重构AI短剧全流程生产模式,整合创意策划、制作执行、实时协作、在线审片、资产复用等全链路功能,独创无限画布、双轨并行工业化工作流与Ani智能体助手,集成多款主流AI大模型,破解素材零散、版本混乱、沟通低效等行业痛点,助力3人团队效率提升800%,打造标准化、可追溯的AI短剧量产体系,是AI短剧团队协同创作、提升制作效率的核心工具。


能听懂你表 达的视频模型
Seedance two是基于seedance2.0的中国大模型,支持图像、视频、音频、文本四种模态输入,表达方式更丰富,生成也更可控。


国内直接访问,限时3折
输入简单文字,生成想要的图片,纳米香蕉中文站基于 Google 模型的 AI 图片生成网站,支持文字生图、图生图。官网价格限时3折活动


职场AI,就用扣子
AI办公助手,复杂任务高效处理。办公效率低?扣子空间AI助手支持播客生成、PPT制作、网页开发及报告写作,覆盖科研、商业、舆情等领域的专家Agent 7x24小时响应,生活工作无缝切换,提升50%效率!
最新AI工具、AI资讯
独家AI资源、AI项目落地

微信扫一扫关注公众号