-
Notifications
You must be signed in to change notification settings - Fork 11
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
stable diffusion webui #155
Comments
stable diffusion webuistable-diffusion-webui |
秋葉aaaki/sd-webui-aki
插件安装/更新/设置/卸载教程插件一览/更新
插件安装
从插件列表安装
从Git网址直接安装
不要打开网页下载压缩包!不要打开网页下载压缩包!
插件卸载插件设置
|
AI 绘图 Tag
进阶 Tag权重
|
AI 绘图 反面 Tag(不想要的内容)
|
采样步数
采样器
提示词相关性
随机种子
查询图片参数
|
stable diffusion webui 指南-使用与调参调参基础本章内容大多基于 Stable Diffusion WebUI 前端。NovelAI 原始界面只开放了所有设置的一小部分。 常用参数介绍
Sampling steps 迭代步数::: info 更多的迭代步数可能会有更好的生成效果,更多细节和锐化,但是会导致生成时间变长。而在实际应用中,30 步和 50 步之间的差异几乎无法区分。 太多的迭代步数也可能适得其反,几乎不会有提高。 进行图生图的时候,正常情况下更弱的降噪强度需要更少的迭代步数(这是工作原理决定的)。你可以在设置里更改设置,让程序确切执行滑块指定的迭代步数。 Samplers 采样器目前好用的有 推荐
不同 Step 和 采样器 的不同效果示例:
CFG Scale 提示词相关性
过高的 CFG Scale 体现为粗犷的线条和过锐化的图像。 注意尺寸出图尺寸太宽时,图中可能会出现多个主体。 要匹配好姿势,镜头和人物才不畸形,有时候需要限定量词,多人物时要处理空间关系和 prompt 遮挡优先级。人数->人物样貌->环境样式->人物状态 1024 之上的尺寸可能会出现不理想的结果!推荐使用 小尺寸分辨率 + 高清修复(下方介绍)。 Highres. fix 高清修复通过勾选 txt2img(文生图) 页面上的 "Highres. fix" 复选框来启用。 默认情况下,txt2img(文生图) 在高分辨率下会生成非常混沌的图像。该选项会使得模型首先生成一张小图片,然后通过 img2img 将图片分辨率扩大,以实现高清大图效果。 Batch Count 与 Batch Size
大的 Batch Size 需要消耗巨量显存。若您的显卡没有超过 12G 的显存,请不要调节 Batch Size。 对于显存极大的显卡而言,一次生成一张图片无法充分利用显卡计算容量,此时可将 随机种子理论上,种子决定模型在生成图片时涉及的所有随机性。 实际的种子数值并不重要。它只是初始化一个定义扩散起点的随机初始值。 在应用完全相同参数(如 Step、CFG、Seed、prompts)的情况下,生产的图片应当完全相同。(不使用 不同显卡由于微架构不同,可能会造成预料之外的不同结果。主要体现在 GTX 10xx 系列显卡上。详见 这里的讨论。 Denoising strength 降噪强度
对于图生图来说,低 实际执行中,具体的执行步骤为 Denoising strength * Sampling Steps。 不间断生成在 WebUI 的生成键上右击即可出现 不间断生成 的选项。 使用 WebUI 复现 NAI 官网结果::: tip 需要做的事情
不需要做的事情
进阶使用X/Y/Z 图表这项功能可以在 文生图/图生图 界面的左下角种 “脚本” 一栏内选择 “X/Y/Z 图表” 以启用。 它创建具有不同参数的图像网格。使用 X 类型和 Y 类型字段选择应由行和列共享的参数,并将这些参数以逗号分隔输入 X 值 / Y 值字段。支持整数、浮点数和范围。 Simple ranges 简单范围
Ranges with increment in bracket 括号范围
Ranges with the count in square brackets 方括号范围
Prompt S/R 替换S/R 是 X/Y 图的的一种高级操作模式。 S/R 是 搜索/替换 的意思,输入一个单词或短语的列表,它从列表中取第一个并将其视为关键词,并将该关键词的所有实例替换为列表中的其他条目的所有实例替换为列表中的其他条目。 例如,提示
列表使用的语法与 CSV 文件中的一行相同,所以如果你想在你的条目中加入逗号,你可以
设置示例引用官方 Wiki 的设置图: Variations 变化种子
样式模板
右侧的下拉框将允许您从以前保存的样式中选择任何样式,并自动将其 附加 到输入中 要删除样式,请从 Face restoration 真人人脸修复适用于修复真人图片的面部问题。对动漫图片效果较差。 图片信息 PNG info生成的图片原图内嵌生成信息,拖放到 PNG Info 页面即可查看。 附加功能 ExtrasSD-WebUI 的 Extras 页有一个自带的超分功能,可以使用 当然 ::: tip 相关模型 LDSR,文件大小为 1.9GB BSGRAN 4x ,文件大小为 63.9M ESRGAN_4x,文件大小为 63.8MB [ScuNET GAN/PSNR](https://github.com/cszn/KAIR/releases/download/v1.0/scunet_color_real_gan.pth" to D:\stable-diffusio\models\ScuNET\ScuNET.pth),文件大小为 68.6MB SwinIR 4x,文件大小为 136MB Upscaler 选择
曾经有段时间, 如果你要搞二次元,推荐使用 Real-CUGAN 图像去噪推荐使用 Real-ESRGAN 降噪。
自定义.css创建一个名为 user.css 的文件并放在 webui.py 旁,将自定义 CSS 代码放入 user.css 中。 下面的例子将设置画廊的最短长度: #txt2img_gallery,
#img2img_gallery {
min-height: 768px;
} 更换提示音如果在 webui.py 附近存在 疑难解答本章主要描述生成图片时遇到的各类问题。安装运行时常见问题见 SD-WebUI 方案 - 错误处理 章节。 生成黑/绿图如果是 GTX 16xx 系列,启动参数需要加 如果是其他显卡而且加载了 VAE 时出现黑图,加入 RuntimeError Sizes of tensors must match(img2img) 如果你得到 彩虹混乱图如果 AI 输出了混乱的彩虹色图片,可能是生成分辨率或步数设置得太低。 高分辨率出鬼图 / 低显存生成大分辨率图片使用 Highres. fix 或先使用低分辨率成图后再使用 Waifu2x 等技术提升分辨率。 RuntimeError: Unable to find a valid cuDNN algorithm to run convolution前面那节有相关的参数建议。 生成报错解释:显存不足 先检查 CUDA 是否可用,打开命令窗,输入 import torch
print(torch.cuda.is_available()) CUDA out of memory见 显存不足 模型选择模型安全提示见 It's not a virus it's a checkpoint file
所以模型种可能含有恶意数据,可使得加载期间执行任意代码。原则上,您应该只加载您信任的数据。永远不要加载可能未知来源的、或可能被篡改的模型。 :::tip 如果杀毒软件拦截,有可能创建者向文件中注入了恶意的 Python 代码。 WebUI 内置了一定的安全检查,如果你使用 Automatic1111 的 WebUI, 其在这方面做了一些验证。对于不安全的文件,会提示
值得注意的是,出现该提示并不一定表明文件一定危险,有时由于网络问题、内存问题无法完整加载模型时也会出现此提示。 可以通过此脚本检查风险:https://rentry.org/safeunpickle2 另外,你可以在 这里 看到一个简单的检查脚本。 相关项目 pickle_inspector。 raise pickle.UnpicklingError("global '%s/%s' is forbidden" %
(module, name)) 如果你运行脚本得到了类似 "global something.something is forbidden" 这意味着检查点试图做坏事,可能有危险。 模型选择模型使用的数据集和标签对于效果影响非常重要,在使用之前要先了解数据来源。 Stable Diffusion 模型Stable Diffusion 模型适用于生成与照片、艺术品类似的图像。基于 LAION 数据集训练。 提示词常用连贯的自然语言句子描述一个物体,如:
下载地址:
Waifu Diffusion 模型Waifu Diffusion 模型采用 Danbooru 数据集中图片与标签训练,适用于生成各类二次元图像。 提示词常用 Danbooru 提供的标签组合,如:
下载地址: NovelAI 泄露模型NovelAI 模型采用 Danbooru 数据集中图片与标签训练,适用于生成各类二次元图像。 提示词常用 Danbooru 提供的标签组合、与部分私有标签,如:
使用该模型的 models 文件夹结构大致如下: ./models ├── hypernetworks │ ├── aini.pt │ ├── anime_2.pt │ ├── anime_3.pt │ ├── anime.pt │ ├── furry_2.pt │ ├── furry_3.pt │ ├── furry_kemono.pt │ ├── furry_protogen.pt │ ├── furry.pt │ ├── furry_scalie.pt │ ├── furry_transformation.pt │ └── pony.pt ├── Stable-diffusion │ ├── model.ckpt -> 任意一个 ckpt 文件 │ ├── model.vae.pt -> animevae.pt │ ├── model.yaml -> 与 model.ckpt 同文件夹的 config.yaml (无须使用) │ └── ...... 此处给出的文件名仅为示例。可根据自己喜好增删或改名。注意不同扩展名的文件应当拥有相同的前缀。 Part 1Part 1 中较常用的文件列举如下: :::warning
注意,
Part 2
::: details 附内容
::: 启动 CLI 有提示加载就即可,同时可以去设置选模型那里选喜欢的 使用 latest (7G) 还是 pruned (4G) 模型4GB 的模型由 7GB 的模型修剪而来,去除了最后一次的权重,留下了 EMA 权重。 个人用户只需要使用 pruned 4 GB 模型。使用 latest 会过度占用 RAM 和 VRAM。 且 NAI 在线上也使用 EMA 权重,所以选择 latest 7GB 模型是没有意义的。 详细介绍拆包视频可以看 av688965561 杂项
但是事实上我们并不知道细节,所以以上只是猜测并且不可信的。 Anything 2.1 / 3.0融合模型,适用于生成各类二次元图像。 下载地址:https://pan.baidu.com/s/1r--2XuWV--MVoKKmTftM-g?pwd=ANYN SD Pokemon Diffusers经过微调的 Stable Diffusion 模型,专注于生成宝可梦图片。 见 HuggingFace/lambdalabs/sd-pokemon-diffusers。 SD PixelArt SpriteSheet Generator
见 HuggingFace/Onodofthenorth/SD_PixelArt_SpriteSheet_Generator。 风格化Furry 超网络模型比较其他超网络模型比较参考参数:
结论
可以看到 其他xformersxformers 分辨率越高加速效果越好。使用 xformers 会引入一些随机性,稍微影响生成的图像。 如果你使用 Pascal、Turing 或者 Ampere 架构的卡(包括 GTX 1000,RTX 2000、3000 系列),将 ::: tip ::: warning 通常不需要自行编译 xformers。如果需要编译,见 在 Windows 上编译 xformers 使用 CPU 进行绘画根据此 PR 可以通过 4GB 显卡支持针对具有低 VRAM 的 GPU 的优化。这应该可以在具有 4GB 内存的视频卡上生成 512x512 图像。
::: info 当然也可以减半精度,或者生成一张 64x64 图片清理显存。 速度判定注意区分 终端的
在 WebUI 中使用 SD 2.0 模型目前仅支持 Stable Diffusion 2.0-v 模型。
在使用 2.0 模型时,训练面板可能无法使用。 在 Windows 上编译 xformers::: tip 确保 Python 版本为 3.10 或更高版本(使用
nvcc --version
git clone https://github.com/facebookresearch/xformers.git
cd xformers
git submodule update --init --recursive
python -m venv venv
#CMD
venv\Scripts\activate.bat
#Bash
source ./venv/bin/activate
#WindowsBash
source ./venv/Scripts/activate
pip install torch torchvision --extra-index-url https://download.pytorch.org/whl/cu113
pip install -r requirements.txt
pip install wheel
pip install ninja
在 CMD 设置 set NVCC_FLAGS=-allow-unsupported-compiler" 或在 Bash 设置 export NVCC_FLAGS=-allow-unsupported-compiler
比如说,如果你的 GPU 是 GTX 1070,基于该表,架构是 6.1 CMD set TORCH_CUDA_ARCH_LIST=6.1 BASH export TORCH_CUDA_ARCH_LIST=6.1
python setup.py build
python setup.py bdist_wheel 找到 dist 文件夹并将文件 在 如果构建的 whl 名称不同,请在下面的安装命令中更改文件名 #CMD
./venv/scripts/activate
#Bash
source ./venv/bin/activate
#WindowsBash
source ./venv/Scripts/activate
pip install xformers-0.0.14.dev0-cp310-cp310-win_amd64.whl 30 系显卡正常启动,在 Windows 编译错误自查
说明你的路径太长了。
现在更多 GPU 架构是自动支持的,尝试重新安装并使用 --xformers 参数。 如果你移动了 xformers,那么应该删除里面的 venv 目录。 Windows (30 系之外要自己编译) 自己编译指路 wiki/Xformers 还有 这个 Post 修剪模型见 Voldy Retard Guide - Pruning a .CKPT。 将要修剪的 比如, 然后运行这个脚本,修剪过程可能需要几分钟。 |
stable diffusion webui 指南-提示词工程学提示词工程学这节会介绍绘图所需要用到的提示词,和相关的 SD-WebUI 网页应用资源。如果你会画画,那么效果会更加稳定可观。 基本流程这幅图演示了循环迭代的流程。 迭代方式,有循环迭代和线性迭代两种,线性迭代适用于多样性测试,而 循环迭代 是优化的更好选择。 来回改提示 + 固定种子并不是好选择。 目前研究基本方向是:
关于生成时涉及到的参数配置,见 参数介绍。 提示词来源提示词的来源主要取决于以下三个要素:
::: tip 以 NovelAI 泄露模型为例,该模型主要采用 Danbooru 网站上的用户标签参与训练,因此使用这些标签进行图像生成可获得最佳效果。使用 MidJourney 时则可参照 MidJourney-Styles-and-Keywords-Reference 提供的参考数据, Danbooru 网站的 Wiki 提供了一部分 标签分类与说明,这些文档可被视作权威来源。例如,笔触 / 绘画工具 / 风格化 / 绘画技术标签组可见下属对应的 tag group:image composition 分区。 部分热心网友整理了中文版的标签参考、模板共享与其他信息,见 调参魔法书 和 手抄魔法本 日本社区也整理一些标签用词,可以在 NovelAI 5ch Wiki 中进行检索。 同时,市面上存在多种提示词辅助构建工具,详见 Danbooru 标签超市 (项目地址) 或 魔咒百科词典 (后者不支持负面 Tag) Bilibili 上也发布了许多视频教程,如 【开源调研】AI 绘画魔法の奥义 (只剩一瓶辣椒酱),但需要了解 通过 AI 模仿画风,特定镜头,增加特效,微修微调,PS 嫁接出图,通过 3D 特定姿势,重画,迭代 等等操作的话,需要 通读 下面的内容。 ::: warning 考场速查这里是打开页面就可以看到的工具箱 标签参考
工具灵感
后期作品参考风格化
outline: [2, 4]文字转图片请先通过前文 调参基础 了解 SD-WebUI 网页应用提供的基本参数。 如何书写提示词这是一个通用的指南,内容是基本通用的,可能有例外情况,请读对应的章节了解不同应用的特性。 写什么?::: tip 单词标签对于在标签单词上特化训练的模型,建议使用逗号隔开的单词作为提示词。 普通常见的单词,例如是可以在数据集来源站点找到的著名标签(比如 Danbooru)。单词的风格要和图像的整体风格搭配,否则会出现混杂的风格或噪点。 避免出现拼写错误。NLP 模型可能将拼写错误的单词拆分为字母处理。 自然语言对于在自然语言上特化训练的模型,建议使用描述物体的句子作为提示词。 取决于训练时使用的数据集,可以使用英文,日文,特殊符号或一些中文。大多数情况下英文较为有效。 避免 避免使用重音符(如 é 和 è)和德语 umlauts(如 ä 和 ö),它们可能无法被映射到正确的语义中。 不建议随意套用现成模板,尤其是无法经过人类理解的模板。 EmojiEmoji (💰,💶,💷,💴,💵,🎊,🪅🪄,🎀,👩🚀) 表情符号也是可以使用并且 非常准确 的。 Emoji 因为只有一个字符,所以在语义准确度上表现良好。 Emoji 在构图上有影响,比如 颜文字对于使用 Danbooru 数据的模型来说,可以使用颜文字在一定程度上控制出图的表情。 例如:
仅支持西方颜文字,详细内容请见 Danbooru 颜文字部分 或 维基百科 空格逗号前后的少量空格并不影响实际效果。 开头和结尾的额外空格会被直接丢弃。词与词之间的额外空格也会被丢弃。 标点符号用逗号、句号、甚至是空字符( 对于部分模型,建议将下划线( 艺术风格词可以通过指定风格关键词来创作带有特效或指定画风的图片。 参考资料: NovelAI 使用教程和魔咒课堂 或通过使用 微调模型 来创作图片。 运动和姿势如果没有很大要求的话,选择只与少数姿势相关的提示。 这里的姿势是指某一事物的物理配置:图像主体相对于摄像机的位置和旋转,人类/机器人关节的角度,果冻块被压缩的方式,等等。你试图指定的事物中的差异越小,模型就越容易学习。 因为运动就其定义而言涉及到主体姿势的巨大变化,与运动相关的提示经常导致身体的扭曲,如重复的四肢。另外,因为人类的四肢,特别是人类的手和脚有很多关节,他们可以采取许多不同的、复杂的姿势。这使得他们的可视化特别难学,对于人类和神经网络都是如此。 简而言之:人类站着/坐着的好形象很容易,人类跳着/跑着的好形象很难。 如何写?模板先想一下要画什么,例如 主题,外表,情绪,衣服,姿势,背景 一类,然后参考数据集标签表(如果有的话,比如 Danbooru, Pixiv 等)。 然后将想要的相似的提示词组合在一起,请使用英文半角 一种模板示例如下:
大小写CLIP 的标记器在标记之前将所有单词转为小写。其他模型,如 BERT 和 T5,将大写的单词与非大写的单词区别对待。 但避免涉及特殊语法,以防被解释为其他语义,例如 词汇顺序demystifying_prompting_what_you_need_to_know/ 似乎 VAE 使用了一种称为贝叶斯定理的统计方法。在计算标记的去向时,前几个单词似乎锚定了其余单词标记在潜在空间中的分布。 早期的标记具有更一致的位置,因此神经网络更容易预测它们的相关性。在贝叶斯推理中,矩阵中的第一个标记或证据很重要,因为它设置了初始概率条件。但是后面的元素只是修改了概率条件。因此,至少在理论上,最后的令牌不应该比前面的令牌具有更大的影响。 但是解析器理解事物的方式是不透明的,因此没有办法确切地知道词法顺序是否具有“锚”效应。 可以 使用 X/Y 图自动生成各种顺序 进行尝试。 提示词长度避免过长的提示词。 提示词放入的顺序就是优先级。由于提示词的权重值从前向后递减,放置在特别靠后的提示词已经对图片的实际生成影响甚微。 不堆叠提示词是一个好习惯,但是如果你确实有很多内容要写,可以适当提高生成步数,以便在生成过程中更好地利用提示词。 SD-WebUI 突破最多 75 个词组限制的方式是将每 20 + 55 个词分为一组。选项 除了 WebUI 对此情况进行了特殊处理外,由于 GPT-3 模型限制,提示词处理空间并不是无限的,大多在在 75-80 之间,75 字符后的内容会被截断。 特异性问题体现在语义偏移上。对于神经网络的训练来说,特征的质量很重要:输入和输出之间的联系越强,神经网络就越容易学习这种联系。 换句话说,如果一个关键词有非常具体的含义,那么学习它与图像之间的联系要比一个关键词有非常广泛的含义容易得多。 这样一来,即使是像 "Zettai Ryouiki" 这样很少使用的关键词也能产生非常好的结果,因为它只在非常具体的情况下使用。另一方面,"动漫" 即使是一个比较常见的词,也不会产生很好的结果,这可能是因为它被用于许多不同的情况,即使是没有字面意思的动漫。如果你想控制你的图片的内容,选择具体的关键词尤其重要。另外:你的措辞越不抽象越好。如果可能的话,避免留下解释空间的措辞,或需要 "理解" 不属于图像的东西。甚至像 "大" 或 "小" 这样的概念也是有问题的,因为它们与物体离相机近或远是无法区分的。理想情况下,使用有很大可能逐字出现在你想要的图像标题上的措辞。 语义失衡每一个提示词就像染料一样,它们的 “亲和性“ 不同,如果更常见的提示词,比如 比如,如果你想生成动漫图片,使用了 星空 许多词汇在基准上的权重就不一样,所以要根据效果进行合理调节。 否定提示词SD-WebUI 网页应用会在生成时 避免生成否定提示词提及的内容。 否定提示是一种使用 Stable-Diffusion 的方式,允许用户指定他不想看到的内容,而不对模型本身做额外的要求。 通过指定 # prompts = ["a castle in a forest"]
# negative_prompts = ["grainy, fog"]
c = model.get_learned_conditioning(prompts)
uc = model.get_learned_conditioning(negative_prompts)
samples_ddim, _ = sampler.sample(conditioning=c, unconditional_conditioning=uc, [...]) 比如使用以下提示词避免生成水印和文字内容
还如这个例子
更多资料详见 官方 Wiki 提示词语法以下内容主要适用于 SD-WebUI。NovelAI 用户可参照 官网文档。 权重系数权重系数可改变提示词特定部分的比重。 更多资料详见 Wiki:Attention Emphasis 对于 SD-WebUI,具体规则如下:
使用数字指定权重时,必须使用 ::: info
::: tip 关于 NovelAI 换算关系 NAI 的 NAI 的 NAI 花括号权重为 1.05/个,WebUI 圆括号权重为 1.1/个。 ::: tip How It Works 如果你缩放这个向量,这个概念会变得更强或更弱。 详见 Here 无论使用何种具体的脚本,重复某个关键词似乎都会增加其效果。 值得注意的是,你的提示中存在越多的提示词,任何单一提示词的影响就越小。你还会注意到,由于这个原因,在增加新的提示词时,风格会逐渐消失。强烈建议随着提示符长度的增加改变风格词的强度,以便保持一致的风格。 标签替换允许您开始先使用一个提示词,但在生成过程中间切换到其他提示词。基本语法是:
其中 如果 替换标签可无限嵌套。 示例:对于
标签轮转允许您在生成过程中每步轮换使用多个提示词。基本语法是:
生成的第一步将使用 多组提示词生成::: warning 允许在生成时同时使用多组提示词,并将结果直接相加。基本语法是:
这将使用两组提示词 Prompt matrix 参数矩阵使用
图片转图片一般我们有两种途径对图像进行修复:PS 和 InPaint,使用方法也十分多样。 WebUI 使用 处理图片大小
注意颜色无论是 3D (DAZ 这样的 3D 模型) 还是线稿,AI 只识别 色彩 ,而不是线条,色彩直接决定图转图的效果。 三渲二调整 3D 模型骨架比寻找样图更容易。 可以结合 3D 建模 摆 Pose,也可以使用 MMD 相关软件。 如果是真人图片,需要适当提高 推荐使用 DAZ 或者 Blender 或者 Unity ,在对 3D 模型的测试中,色彩主要影响 AI 的绘画效果,所以你的模型需要有纹理。 如果你使用 Blender ,你可以使用 这个视频 分享的 模型娃娃 Inpainting 修补::: tip 不同之处 在 Inpainting 选项卡中,在图像的一部分上绘制蒙版,该部分将被重新绘制。
它们的效果如下:
::: tip
目前有几种方法进行重绘制操作:
如果 开源调研-AI 绘画全参数讲解-002img2img 图像到图像 通过这种方法,我们可以更改角色衣物风格或者其他任何细节。 Outpainting 外部修补Outpainting 扩展原始图像并修复创建的空白空间。 您可以在 img2img 选项卡底部的 Script -> Poor man's outpainting 中找到该功能。 与正常的图像生成不同,Outpainting 似乎从大步数中受益匪浅。一个好的外绘需要一组与图片相匹配的优秀提示词、最大的 Denoising 和 CFG 比例,以及使用 Euler a 或 DPM2 a 生成 50 到 100 步数。 Loopback 回环生成在 img2img 中设置 loopback 脚本,它允许自动将输出图像设为下一批的输入图像。 Batch 数设置控制获得多少次迭代 通常,在执行此操作时,您需要自己为下一次迭代选择许多图像中的一个,因此此功能的有用性可能值得怀疑,但反正我已经设法获得了一些我无法获得的非常好的输出。 从附加信息提取提示词程序默认会在图片中加入提示词,参数,模型信息,对于没有压缩的原图,可以拖入 也可以使用 在线工具 查看它。 Denoising strength 降噪强度值越低,生成的图片与原图的差距越小。通常由图片清晰度与风格共同确定。 从图片内容提取提示词CLIP InterrogateCLIP 可以从图像中提取令牌。 默认情况下,只有一个列表 - 艺术家列表(来自 artists.csv)。 不过你可以通过执行以下操作添加更多列表:
你可以在这里查看使用哪个文本文件的例子。实际上,你可以直接用这个例子中的文件 —— 除了 DeepDanbooru Interrogate新版 Stable-Diffusion-WebUI 已无需使用 可在 img2img / 图生图 页面中看到 DeepDanbooru Interrogate 按钮。可以从图像中提取令牌。 设置页面中可以配置是否使用空格代替下划线 ( 低显存生成大分辨率图片如果遇到生成鬼图或者低显存生产高分辨率图片,可以采用 Img2Img 画质提升脚本。 强烈推荐使用 Extras 功能对低分辨率进行超分辨率处理。 使用脚本如果你想使用脚本提供的分辨率增强,这里有 Img2Img 的具体流程:
这里的 Width 和 Height 是超分时 img2img 的图片大小,如果不等会导致出现重叠问题 SD Upscale 选项在 Img2Img 的 Script 栏目中,主要作用是提升分辨率。 实战技巧这个简短的实战指南,可以让你快速了解如何合理调整参数达成目的效果。 目前,AI 处理不好细节和多人物,如果一个个处理,光影结构就会乱掉。如果修图,不如重画。但是画背景和做预览很实用。 核心逻辑就是缩小预选数据的范围,调节天平在消极和积极提示之间的方向,还有使用部分语法控制提示词效果的强烈程度和起效过程。 灵感表
画作焊接!通过 PaintHua-无限外延画布的在线工具 ,你可以连续 “焊接” 作品,非常方便。只需要在启动命令加上
遏制风格污染介绍如何在 WebUI 中生成图片时,将主体作为重点,而不是画风。[^12] 为了得到预期结果,我们将 Automatic 1111 的 WebUI 提示词语法中,[x:10] 告诉 稳定扩散 直到第十个 step 再渲染这个提示词。 当达到 10 步的时候,一个基本的图像已经形成了,所以风格化肆意污染主体成分,而是像在现有图像上进行 IMG2IMG(你可以把它看成是 Img2img 的形式) 你可以根据你所做的整体步骤的多少来试验这个数字。如果你把格式改为 [x:0.2](即低于 1 的数字),那么它就变成了百分比,[x:0.6]告诉 SD 等到总步骤数的 60% 时再渲染 x ,以此类推。 尺寸选择不应该将其与画质挂钩,尺寸一定程度上影响了主题,因为它潜在代表选择的类别(比如竖屏人物,横屏风景,小分辨率表情包居多)。 若需提升画质,可采取如 waifu2x 等的成熟技术提升分辨率。 视角
噪声
动漫风格
av304175820 - AI 绘 | 让你的图片更特别!32 种风格化 prompt 简介 @ Bilibili 优化作品效果对目标进行审视想一想,自己想要的作品,在互联网上会被打上什么标签呢? 贴纸肯定不会打上 另外就是如果要求的是像素作品,应该移除一些冲突的消极提示(如果有的话)。 顺序调整在前面的词汇会锚定画面的色彩分布。什么重要什么放前面。 语义偏移防范为了防止语义偏移,优先考虑 emoji,然后少用不必要的 彩虹混乱图如果输出混乱的彩虹色图片,可能是生成分辨率被设置得太低。 波浪噪点图密集的波浪或图案,可能是因为权重设置太高了。 抠图?扣过的图,其余背景都会被处理成黑色。 如果你需要背景,效果一般不是很好,建议填色后再操作。 粗糙的噪声细节不够,人物像米糕一样。需要适当提升 step. 保护图片不被分割线切割消极提示加入
应该可以改善。 跨领域术语/奇门遁甲跨领域术语的核心逻辑就是缩小指定的数据范围,从画面内容之外的平台,领域,事件上入手来提升效果。 是的!你可以在提示中使用 Film Glossary、FILM GLOSSARY 摄影术语、Cinematic techniques 摄影技术,以及绘画术语 (类型) 来控制基本情况。 跨领域!你甚至可以使用各种惊险运动的名词来生产一些特效...比如空降 比如,景深,光圈,构图,拍摄机位,运动元素,艺术摄影术语表中文介绍 但是 这种效果可能会带来附加作用:引入你不希望见到的风格(如实景而不是而二次元)数据进入图片。把握好量度。适当增加 Step 和 风格提示 来改善. 你还可以使用 平台名 来限定数据集的范围,比如 pixiv 之类的词汇。 扩展阅读
迭代草图这里讨论一下如何将 手绘草图 通过 AI 绘画优化,注意不是二次元。 在第一次迭代中,您不需要太多 Steps,CFG 可以非常低(以获得更好的多样化结果),如果不想完全丢失草图,Denoising 应该在 0.3 - 0.4 左右。 在最后的迭代中,增加 Steps 和 Denoising 强度(但不超过 0.8,否则图像将被破坏,尤其是在大于 512*512 时)请参见 这里,同时根据需要提高 CFG 和尺寸。 你可以随时修复提示(添加或删除出现的细节)并尝试不同的采样器。 另外,你不应该在初次生成使用一个固定不变的种子。 如果你提供一个种子(而不是随机的 多人物 / 宽幅单人物单纯使用 txt2img 无法有效指定多人物情况下单个人物的特征。 较为推荐的方案是 打草图 + IMG2IMG 的方式。 宽幅画作单人物生成最好打草图,进行色彩涂抹,确定画面主体。 多人物确定人物数量,最好使用草稿 / 有色 3D 排列 + 图生图。 进行手掌修复将图片送入 inpaint,使用大致相同的提示词,将关于 或者仅遮住手部,以全分辨率修复,大大降低填充(它使用周围的像素来创建上下文,但只是在重新制作手部)并仅提示手部问题(详细的手部描写等) CFG 越高,越符合提示词,降噪越高越偏离原图。 同人物 & 差分需要用到进阶的 Img2Img 相关内容,最好的方法是准备一个带有色彩的 3D 母本模型,然后这样就可以保证基本一致。 也可以用很多提示词来限制角色内容,出很多张,挑能用的作品。 如果是表情或者是背景,可以采用 重绘画 技巧。 如果你想了解一些差分的实例,5CH 日语 Wiki 提供了一个实例。 复刻如果想复刻他人生成的图片,需要相同的
使用 AI 进行设计背景拿到一张饱和度稍微高的照片后,可以用 AI 进行处理,然后当作背景使用。使用 图标表情包表情包效果真的很好。 文档编写者试了一下,以下 prompt 可以出高质量表情包。 不要对贴纸要求质量提示词。 积极词汇
消极词汇
尺寸要求正方形。 立绘av559362671 - 【AI 绘图】画师不是 AI 的附庸!手绘+AI 辅助展示!StableDiffusion/NOVELAI 辅助角色立绘设计最详细分享! @ Bilibili
修改画作想要用 WebUI 改画或者手动添加元素?下面是一个小指南。 首先,IMG2IMG2 和 Inpaint 的效果是完全不同的。如果你不希望风格发生变动,不要选择 IMG2IMG2. 为了避免图片拉伸,尺寸上都应该 尽量靠近原图尺寸,选择 Masked Content
latent noise 是确定 AI 参考的内容,而 Denoising strength 可以理解为对参考的偏离度。 变动元素如果需要变动元素,抠图、贴图即可。 如果需要添加元素,我们可以通过 PS 给角色移植一个手让 AI 来润色,或者为没有下半身的半身像嫁接其他作品的下半身让 AI 修复。 基于原图进行微调使用 Inpaint,主要场景是去除/替换。 首先要对人物边缘描细线,然后打上色块(如果有阴影,取亮色或者画全阴影)。变动强度选择较低的 0.3 左右的去噪(越低越接近输入的图片)。 然后使用 Img2Img Inpaint + 相关提示词修复,不满意可以再改,直到满意。然后对图像进行 realesrgan 超分,去除图像纹理。 修复绘画技巧/Inpaint/PS 重绘画/嫁接修复/躺姿补全使用 PS 软件增删元素,然后重新生产。这可以解决画手的问题。 AI 也接受其他成图进行嫁接(解决躺姿没有下半身的问题) 比如 一张图片 展现 WebUI 下 img2img 中不同参数下效果的详细对比图(prompt、steps、scale、各种 seed 等参数均保持一致) 纵轴是 Denoising strength(线上版的 strength),横轴是 Variation strength 杂项提示词原理图像生成器information creator 完全在图像信息空间(或潜伏空间)中工作。这一特性使它比以前在像素空间工作的扩散模型更快。在技术上,这个组件是由一个 UNet 神经网络和一个调度算法组成的。 Text Encoder提示词的解析由 Text Encoder/CLIP 处理 (token embedding),这里是提示词转译给 AI 的关键一步。 ClipText 用于文本编码。 输入文本,输出 77 个标记嵌入向量,每个都有 768 个维度。 information creatorUNet + Scheduler 在信息(潜在)空间中逐步处理/分散信息。 它输入文本嵌入和一个由噪声组成的起始多维数组(结构化的数字列表,也叫张量),输出一个经过处理的信息阵列。 Image DecoderText Decoder 根据从 information creator 那里获得的信息绘制一幅图画。 它只在过程结束时运行一次以生成最终图像。 Autoencoder Decoder 使用处理过的信息阵列绘制最终图像的解码器。输入处理过的信息阵列 (dimensions: (4,64,64)),输出结果图像 (dimensions: (3, 512, 512),即 (red/green/blue, width, height)。 CLIP 的工作
Stable Diffusion 中使用的自动编码器的缩减系数为 8。这意味着一张 (4, 512, 512) 的图像在潜在空间中是 (4, 64, 64)。 在使用稳定扩散推理一张 512 x 512 的图片的过程中,模型用一个种子和一个文本提示作为输入。潜在种子生成大小 64 × 64 的随机潜在图像,而 prompt 进入 Text Encoder 通过 CLIP 的文本编码器转化为大小为 77 × 768 的文本嵌入。 U-Net 在以文本嵌入为条件的同时迭代地对随机高斯噪声表示进行去噪。U-Net 通过 采样算法 计算去噪的潜在图像表示,输出噪声残差。这个步骤重复许多次后,潜在表示由 Image Decoder 的 auto encoder 的解码器解码输出。 扩展阅读: WebUI 的实现WebUI 的 prompt_parser 通过本地 WebUI 实现了渐变等功能。 WebUI prompt 语法会转换为相应时间的 prompt,然后通过 embedding 交给 Ai 处理。 关于权重的实现:权重增加通常会占一个提示词位。 关于渐变的实现:到了指定 Step,WebUI 程序会替换对应提示词,达到渐变效果。 其他以此类推。
你可以在 illustrated-stable-diffusion 看到全面的介绍。本节部分内容也是由此翻译。 良好参数(风格趋向插画)
草图风格
利用 sketch,pastel color,lineart 的 tag 模拟一张图的绘画过程 艺术风格
杂志/设定集 风格
常用参数: SFW
提示词速查调参工程师 |
stable diffusion webui 指南-进阶深入识别 AI 作品本节讨论 AI 作品与人类绘制作品可能存在的显著区别。 采用 Img2Img 生成的图片、或经人工二次处理的图片不在此讨论范畴中。 失效方法完成度目前由 AI 绘制的插图完成度已经逼近甚至超越了真人画师,所以粗略查看是无法区分是否由 AI 绘制。 主题/风格/氛围通过学习 Prompt Editing ,任何人都可以很好的摆脱 AI 默认的绘画风格,并让 AI 生成符合主题/绘画风格的图片(越知名则越容易,例如京都动画的风格)。所以根据插图的主题,画风特征判断已经不可行了。 有效方法既然不能根据画风或主题鉴别 AI 绘画,那么我们只能从细节入手。AI 不擅长保持细节一致,而人类很容易保持细节的一致性。 左右眼形状和高光的一致性这是最明显的特征。对于人类,除非有特殊原因,如人物处于特殊情况或采用特效,否则左右眼和高光的形状和数量是一致的。 然而,在人工智能绘画的情况下,左眼和右眼的绘画和高光几乎肯定是不同的。人类可以理解 "左眼和右眼在物理上是相同的形状,在相同的情况下,那里当然是一致的",而人工智能却无法理解绘画背后的原理。 其中最明显的是 "高光与眼白融为一体,瞳孔破碎"。人类知道 "首先是眼球,然后是瞳孔,在此基础上,周围的光线反射形成光泽",所以 "即使瞳孔的一部分被高光挡住,瞳孔本身的形状也不会被破坏"是理所当然的,但人工智能不承认任何 "眼白、瞳孔和亮点之间的逻辑关系",它只学习最终的结果。眼睛的不自然变形是判断的另一个依据。人类知道眼睛本质上是一个规则的圆,但人工智能却不知道。 AI 绘制插图的另一个特点是,它通常会稍微改变左眼和右眼的颜色。当然也有左右两边眼睛颜色不同的角色,但在大多数情况下,这些角色都可以清楚地识别为具有不同颜色。它是可以用来判断一个角色是否一眼看去颜色相同,但仔细观察却又不同的因素之一。 然而,这并不是一个重要的依据,因为这样的插图很常见。 另外,左眼和右眼的颜色因周围环境的不同而显得不同,这是很自然的事情,所以不要搞错。 左右眼的睫毛的一致性在人类绘制的插图中,睫毛通常是沿脸部中心线对称的。 然而,在人工智能生成的插图中,出现在左眼和右眼的睫毛的数量和位置通常是不同的。 然而,即使在人类绘制的插图中,左眼和右眼的睫毛形状也会有一定程度的差异,所以即使左眼和右眼的睫毛形状不同也没有什么关系。另一方面,如果睫毛的形状从左到右是一致的,同时还有眼睛和高光,那么几乎可以肯定它是由人绘制的插图。 服装的对称性人类知道 "大多数衣服都是对称制作的";人工智能不知道这一点,但它在某种程度上知道服装设计往往在左边和右边有相似的形状。 结果发生这种情况:
需要注意的是,特征应该是 在拓扑学(=形状的连接,件数,......)层面上是不同,而不是 对称或不对称。 即使是人类不可能把对称的物体画得完全对称,会出现一些尺寸和形状的失真。不对称的服装设计也很常见,所以不要搞错。 这种不对称性不仅可以适用于服装,也可以适用于皇冠和发饰等装饰品。 重复形状的一致性这也是一个主要的特征,AI 不擅长连续绘制相同的形状,即使是一件衣服上的一列纽扣。 当然,即使是人类画出来的,也会稍有偏差,有时还会故意不绘制整齐,所以很难说。但最起码人工智能不可能像人一样故意将相同的形状以相等的间隔排列。 简单的几何形状人工智能并不擅长画直线、规则的圆和一定大小的干净的椭圆。 这是因为人工智能不知道这些形状的构思。但 AI 很擅长在背景中画直线,建筑物的边缘、管道等往往被画成直线。 如果插图中出现了简单、清晰的形状,就可以用来判断这幅插图是由人制作的。 人工制品的功能一致性人工制品的各个部分应该天生具有 "它放在那里的意义 "和 "它提供的功能"。 因此,如果有一个人工制品,它是各部分的聚合,而这些部分是一致的意义,以提供一个特定的功能,我们可以判断该插图是人类绘制的。 需要注意的是,这种不一致的情况不应该被用来判断一幅插图是由人工智能绘制的 这是因为人类也可以有意地画出这样的插图。这只意味着人工智能无法绘制足够好的机械插图。 字符人工智能无法正确绘制真实的字母。 大多数时候,它输出的字母看起来有些未来主义,或者好像它们是在一个完全不同的文明中发明的。 这是一个非常明显的特征,但需要注意的是,这不应该被认为是人工智能绘画的特征。 人类自然有可能设计出他们从未见过的字母,有许多插图中的神秘字母就是这样设计的。 另一方面,如果字母被画在'正确的位置'和'适当的顺序',这是确定该插图是由人画的一个强有力的因素。 这是因为即使是输出格式良好的文本也很困难,对于今天的人工智能来说,把它放在正确的地方是一项极其困难的任务。 行的作用的一致性在人类绘画中,绘制物体边界的线不能在线的中间突然变成另一个物体的边界。线条也不能在物体的内部和外部之间变换。 人工智能不知道线条应该是一致的。遇到相近的像素点,它很容易地以 哦,我连! 的想法把线顺理成章地连接起来,渲染成一条线。 溶解、融合和噪点这是人工智能生成的插图中非常常见的一点。 内部/外部的判断变得模糊不清,导致物体溶解,与其他物体融合,或产生不自然的噪点。 噪点和溶解目前可以通过超分和增量训练进行修复。 背景色用头发或其他物体(如手臂)围成的一个本应是空的空间,AI 有可能会画成与周围环境不同的背景。通常情况下,封闭的背景被涂上比其他空间稍亮的颜色。 不连续人类了解一个物体被另一个物体遮挡时,同一物体持续存在于它的下方。人工智能并不了解,即使是一根头发的短暂中断,也可能导致前后对象之间失去连续性。 细节人类可以理解,物体的大小与它对画面的重要性无关,因此,即使是小的物体,如耳环或皮带,如果它们是画面的重要元素,也会被仔细画出来。 对这种小物体的精心绘制是决定插图是由人绘制的一个主要因素。 术语解释黑话
损失一种衡量指标,用于衡量模型的预测偏离其标签的程度。或者更悲观地说是衡量模型有多差。要确定此值,模型必须定义损失函数。例如,线性回归模型通常将均方误差用于损失函数,而逻辑回归模型则使用对数损失函数。 损失函数损失函数(loss function)或代价函数(cost function)是将随机事件或其有关随机变量的取值映射为非负实数以表示该随机事件的“风险”或“损失”的函数。 在应用中,损失函数通常作为学习准则与优化问题相联系,即通过最小化损失函数求解和评估模型。 潜在空间压缩数据的表示,其中相似的数据点在空间上更靠近在一起。 关于潜在空间的中文解释见 理解机器学习中的潜在空间。 过拟合 (Overfitting)创建的模型与训练数据过于匹配,以致于模型无法根据新数据做出正确的预测。 收敛 (Convergence)通俗来说,收敛通常是指在训练期间达到的一种状态,即经过一定次数的迭代之后,训练损失和验证损失在每次迭代中的变化都非常小或根本没有变化。也就是说,如果采用当前数据进行额外的训练将无法改进模型,模型即达到收敛状态。在深度学习中,损失值有时会在最终下降之前的多次迭代中保持不变或几乎保持不变,暂时形成收敛的假象。 ENSD在设置页中的 它对处理你种子的操作增加了一些偏移量。 NovelAI 官方在此处使用 CLIP
要让 AI 作画,先要让程序“听懂”你的指令,比如
对一个相对复杂场景的文本描述,AI 需要能“理解”并匹配到对应的画面,大部分项目依赖的都是一个叫 CLIP 的模型。 CLIP 在生成模型的潜在空间进行搜索,从而找到与给定的文字描述相匹配的潜在图像。 它非常现代且高效。 CUDA配合 CUDA 技术,显卡可以模拟成一颗 PhysX 物理加速芯片。 使用 CUDA 技术,GPU 可以用来进行通用处理(不仅仅是图形);这种方法被称为 GPGPU。与 CPU 不同的是,GPU 以较慢速度并发大量线程,而非快速执行单一线程。以 GeForce 8800 GTX 为例,其核心拥有 128 个内处理器。利用 CUDA 技术,就可以将那些内处理器做为线程处理器,以解决数据密集的计算。 LDMLatent Diffusion Model 潜在扩散模型。
VAEVariational autoencoders (VAEs) 是一种用于学习潜在表示的深度学习技术。它们也被用来绘制图像,在半监督学习中取得最先进的成果,以及在句子之间进行插值。 VAE 作为一个生成模型,其基本思路是把一堆真实样本通过编码器网络变换成一个理想的数据分布,然后这个数据分布再传递给一个解码器网络,得到一堆生成样本,生成样本与真实样本足够接近的话,就训练出了一个自编码器模型。那 VAE (变分自编码器) 就是在自编码器模型上做进一步变分处理,使得编码器的输出结果能对应到目标分布的均值和方差。 CFG这个词汇为 Classifier Free Guidance Scale 的缩写,用于衡量模型“生成的预期图片和你的提示保持一致”的程度。 CFG Scale 值为 0 时,会生成一个基于种子的随机图像。 打个比方,想象你的提示是一个带有可变宽度光束的手电筒,你将它照到模型的潜在空间上以突出显示特定区域——你的输出图像将从该区域内的某个地方绘制,具体取决于种子。 将 CFG Scale 拨向 零会产生极宽的光束 ,突出显示整个潜在空间——您的输出几乎可以来自任何地方。 将 CFG Scale 拨向 20 会产生非常窄的光束, 以至于在极端情况下它会变成激光指示器,照亮潜在空间中的一个点。 超参数 (Hyperparameter)机器学习算法的参数。示例包括在决策林中学习的树的数量,或者梯度下降算法中的步长。在对模型进行定型之前,先设置超参数的值,并控制查找预测函数参数的过程,例如,决策树中的比较点或线性回归模型中的权重。有关详细信息,见 Wikipedia. 管线 (Pipeline)要将模型与数据集相匹配所需的所有操作。管线由数据导入、转换、特征化和学习步骤组成。对管线进行定型后,它会转变为模型。 代次 (Epoch)在训练时,整个数据集的一次完整遍历,以便不漏掉任何一个样本。因此,一个周期表示(N/批次规模)次训练迭代,其中 N 是样本总数。 Batch size一个批次中的样本数。例如,SGD 的批次规模为 1,而小批次的规模通常介于 10 到 1000 之间。批次规模在训练和推断期间通常是固定的;不过,TensorFlow 允许使用动态批次规模。 迭代 (Iteration)模型的权重在训练期间的一次更新。迭代包含计算参数在单个批量数据上的梯度损失。 TensorTensorFlow 程序中的主要数据结构。张量是 N 维(其中 N 可能非常大)数据结构,最常见的是标量、向量或矩阵。张量的元素可以包含整数值、浮点值或字符串值。 检查点 (Checkpoint)一种数据,用于捕获模型变量在特定时间的状态。借助检查点,可以导出模型权重,跨多个会话执行训练,以及使训练在发生错误之后得以继续(例如作业抢占)。请注意,图本身不包含在检查点中。 Embeddings一种分类特征,以连续值特征表示。通常,嵌入是指将高维度向量映射到低维度的空间。例如,您可以采用以下两种方式之一来表示英文句子中的单词:
在 TensorFlow 中,会按反向传播损失训练嵌套,和训练神经网络中的任何其他参数时一样。 激活函数一种函数(例如 ReLU 或 S 型函数),用于对上一层的所有输入求加权和,然后生成一个输出值(通常为非线性值),并将其传递给下一层。 权重 (Weight)线性模型中特征的系数,或深度网络中的边。训练线性模型的目标是确定每个特征的理想权重。如果权重为 0,则相应的特征对模型来说没有任何贡献。 |
stable diffusion webui 指南-模型训练模型精调这节对显卡显存大小的要求较高。训练前,需要确定至少有 8 GB 专用显存。大规模的模型训练可能需要至少 12 GB 专用显存。 模型训练的不同方法如果你在
Textual Inversion (TI)从一些具有共同语义 特征训练产物较小 ( 可以解决新出的角色画不出的问题,或者模仿特定的可以用语言精确描述的艺术风格。 因为 TI 是在 Text Encoder 的输出做处理,并不涉及图像生成本身,所以并不能让模型学习到未知概念。 不同模型训练出的 embeddings 通常无法通用。 使用使用时,将 embedding(一个 如果你使用 DreamArtist ,则将 相关
Hypernetwork (HN)一类给模型生成权重的网络,在这里是给 LDM (潜在扩散模型) 生成权重。是一个较为实验性的方法,NovelAI 率先探索了在 LDM 上使用。 特征与 TI 不同,Hypernetwork 会改动 LDM 本身的权重,所以可以训练出无法用语言精确表述的细节,也更适用于画风的训练。 训练产物大小中等,大多在 80 - 160 MB 上下,WebUI 自带训练支持。 使用::: tip 使用时,将 NAI 泄露包中的 DreamBooth (DB)直接微调 LDM 和 Text Encoder 以适应用户特定的图像生成需求的一个方法。
特征与 TI 和 HN 不同,DreamBooth 可以做到出图和训练集高度相似但是却不失泛化能力,用于训练特定具象概念(比如一个角色穿着特定衣服)效果特别好。但是不像 TI 和 HN 像完整权重的 “插件” 一样即插即用,强度也不可调。 这个模型并非为学习画风(抽象概念)而设计。但似乎可以一定程度上适应“画风”。具体效果交由读者你实验。 训练产物较大,使用 使用操作方法同一般模型,把 DreamBooth 训练出的 官网 https://dreambooth.github.io/ 论文 https://arxiv.org/abs/2208.12242 Advanced Prompt Tuning (APT)
添加对否定词的即时嵌入学习,以显着提高生成图像的质量。 高质量的概念可以从单个图像中学习。 添加重建损失以提高生成图像的细节质量和丰富度。 添加通过人工注释训练的鉴别器(使用 convnext 实现)允许嵌入基于模型进行学习。 Aesthetic Gradients微调 CLIP 以适应某个特定生成需求的方法,可以和 TI 一样起到缩短 prompt 的作用。可能略微提升出图的质量。 这项技术通过在生成时计算每个图片的权重,提供了一个 此项功能来自这个 存储库,在 这次提交 中,此功能被剥离为插件。 特征通过这项技术,你不需要通过 过多提示词 来提升图片的质量,而是保持作品原始的总体构图,并提高美观度。在少量提示词情况下也可以生成效果不错的作品。 据 暗影·夜光所言,添加 25% 以内的权重,就可以稍微改善画面的美观度而不影响内容。美学 与 Hypernetworks 让 AI 作品更接近原画师风格,但是美学权重本身效果并不好。需要配合 Hypernetworks 超网络。 训练这项模型很快,但是在每一次生产时都会重新为图片计算一次,所以出图很慢。 注意:当种子改变时,训练结果也会改变。 使用你可以使用下面的 Git 命令来安装这个东西。 git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui-aesthetic-gradients extensions/aesthetic-gradients 安装后,在 webui 的 使用时,把 然后重启程序,你就可以在 Img2Img 中使用此项功能。 如何选择综述。Textual Inversion 和 Hypernetwork 适用于 整体靠近,前者教 AI 用模型中的标签组成一个 人物,后者也是类似的。区别在于 Hypernetwork 以调节模型权重为手段,而 Textual Inversion 告诉 AI 特定标签应该如何组成。 而 DreamBooth 适用于 细节 的模仿,它的训练过程 重新整改 了模型,新模型之中含有了新的样本特征(加了新东西),DreamBooth 技术本身用于 复刻,所以可以认识冷门元素。 至于 Aesthetic Gradients ,也就是给 AI 认识一组 优秀的数据。结果就是这个东西会增加细节,训练很简单,但是会拖慢生成图片的速度(每次生成都要重新计算)。并不适合应用。 附录Textual Inversion::: tip 在启动 webui 前把 "xxx.vae.pt" 重命名为 "xxx.vae.pt.disabled" 或其他名字。 在设置内勾选 Move VAE and CLIP to RAM when training hypernetwork. Saves VRAM. 的效果是将 VAE 模型从显存转移到内存,而非卸载, Apt / DreamArtist此功能通过扩展提供。 普通的 Textual Inversion 仅从激励方向调整 AI,而 DreamArtist (Apt) 同时从激励和抑制两个方向进行微调。所以 DreamArtist 是一种更加高效的 Textual Inversion. https://github.com/7eu7d7/DreamArtist-sd-webui-extension 具体训练方式见 下文。 准备数据集数据集应保证风格一致,内容具有同一概念。如果算力允许,图片越多越好。数据内容可以是插画,抽象画作,也可以是表情包。 对数据集质量要求高,如果背景出现人影等物体,就会训练进去。训练程序非常敏感。 要求显存至少 6GB,舒适使用需要 12GB 显存。根据实验数据,8GB 显存应该选择 如果你有足够的 VRAM,那么使用 你可以中断和恢复训练,但是 optimizer state 不会被保存,所以不推荐这样做。 设置说明准备 30 张以上的目标人设图片,每一张图片应当裁剪为同样的比例。( webui 已经支持了长方形图片的裁剪) 在 比如,假定识别结果为:
就会丢弃
按下 创建训练打开
宽度越大时效果越强,但是需要数万轮训练。据 usim-U 的视频,设置 24 至少需要三百张高质量作品。
新建,会创建一个在 预处理打开
选择训练的图片大小,一般 8Gb 显卡使用 接下来有四个复选框
训练训练是一个动态的过程! 在 学习率
通常,Learning rate 越低学习越慢(花费更长的时间收敛),但是效果一般更好。 一般设置为 0.005,如果想快一些,可以使用 0.01 加快。但是如果设置得太高,梯度下降时候步长太大无法收敛,会且可能会破坏 训练时,可以先用较大的学习率进行测试,然后逐步调小 其他参数
目录中 训练时参考 根据模板文件,你可以在文件名中使用下面的关键词,处理时它们会被替换。
操作
步数
一个 step 是向模型训练一张图片(或一批图片,但目前不支持批量)并用于改进 embedding。如果你中断训练并在以后恢复训练,步数会被保留。 角色形象的风格化模型,建议步数为 15000-40000 画师画风的风格化模型,建议步数为 40000-80000 ::: tip 关键在于 Loss 率,Loss 10 轮不降低就可以停止了。 如果 Loss 大于 0.3 ,效果就不是很好 如果太多会过拟合(可以理解为 AI 的死板),请随时观察,如果过拟合,可以停止。如果效果不是很好,可以去找早些时候的模型继续训练。不断调整找到一个好的效果。
一切妥当之后,点击右下角 训练完毕。如果卸载了 VAE ,将 VAE 权重文件重命名回去,重启程序。 其他解释[filewords] 这个是代表替换提示词模板文件的
所以这个文件名:
例如,使用单词 正则表达式会从文本提取提示词 并将连接字符串(',')放在这些单词之间以创建一个文本 也可以创建一个与图像具有相同文件名的文本文件 (000001-1-a man in suit.txt) ,然后将提示文本放在那里。将不使用文件名和正则表达式选项。 Move VAE and CLIP from VRAM when training. Saves VRAM. 训练时从 VRAM 中卸载 VAE 和 CLIP 设置选项卡上的此选项允许您以较慢的预览图片生成为代价节省一些内存。 训练的结果是一个 .pt 或一个 .bin 文件(前者是原作者使用的格式,后者适用于 huggingface diffusers) subject_filewords.txt 模板is_textual_inversion_salvageable Textual Inversion 训练不能训练模型中没有的东西。它对训练照片也非常敏感。 如果你没有得到好的结果(未能收敛或结果崩坏),你需要更换训练数据或者使用 Dreambooth。 那么,训练是如何进行的呢? 被送入模型的向量是训练向量+提示向量。你给它提供一个提示,提示转化为一堆向量并输入模型,输出与训练图片进行比较,被训练的词向量被稍微修正。这个过程在训练中会反复进行。 因为训练向量的修正不会使用提示向量提供的内容进行训练。所以文件词不应该包含属于被训练内容的特性。 如果你有,比如说一个在所有照片中都穿着 除非你试图修复照片,否则请将 av559085039 - 【AI 绘画】AI 不认识人物怎么办!强大的 Textual Inversion【NovelAI】 @ Bilibili DreamArtist 小指南此段内容由 konbaku yomu 撰写在 中文社区. 准备训练集 是 最重要的,因 DA 特性最少 one shot 即可炼制,所以我测试的都是 原图 + 镜像。下面所有的调参方法都没有训练集本身重要。训练集没选好怎么调参都没用。 训练集标准是 人物正面(全身 或 半身) + 高分辨率 + 尽量简洁的背景 + 人物本身没有什么特殊动作(含有类似瑜伽的动作或者持握物体的元素的图片都不行,会严重影响泛化和成图) 基础参数设置如下:
你还可以通过添加训练集灰度图进行 局部学习增强。 训练
关于 Batch Size 和 Accumulation stepsAccumulation steps 相当于增加 Batch Size,但这个设置多少,训练时间就多几倍,总体 其他
HypernetworkHypernetworks 是一种新颖的概念,用于在不触及任何权重的情况下微调模型。 此项技术被广泛用于画风模仿中,和 Textual Inversion 相比,泛化效果更好。 这个页面主要是为你实际操作提供一份指南。 如果你在寻找一些更加详细深入的 Hypernetwork 说明,请看 这篇社区贴文. ::: tip 关于 VAE 在设置内勾选 Move VAE and CLIP to RAM when training hypernetwork. Saves VRAM. 的效果是将 VAE 模型从显存转移到内存,而非卸载, 如需卸载,请重命名。 在 预处理训练集与训练人物不同,训练超网络并不需要在意背景是否干净或者主体是否突出,虽然训练素材越多效果越好,但是请注意以下信息
裁切处理目前 WebUI 已经集成了图像预处理功能,可以自动裁切缩放图片。 如果你需要确保画面主体明确,推荐自己手动裁切来保证主体在画面中心。可以使用例如 批量裁切工具 之类的辅助工具。 因为是风格训练,并不用担心训练主体是否非对称等问题,所以推荐打开图像翻转来倍增数据集,提升训练效果。 贴标签如果你还没有打标签,可以勾选 如果你想手动打标签,推荐使用 GUI 贴标签工具。 参数注意,应该使用非常低的学习率,例如 0.000005 或 0.0000005. 如果学习率是 5e-6,步数大约 10000 到 20000。见 学习率计算器 (来自 Discussion #2670) 分辨率设置为要训练的分辨率,最好使用 1:1 的纵横比。 如果数据集的图片不是方形的,请勾选 如果你还没有打标签,可以勾选 网络层结构关于超网层结构,你可以简单理解成一个微型神经网络,譬如这个默认结构 超网结构有两种设计方向,分别是更宽或是更深。 更宽的超网更加开朗,适合用于认识一些新事物,譬如 更深的超网更加社恐,更加适合归纳总结数据,简单讲就是对画风之类的学习效果更加好,譬如 另外,请注意,将超网数字加和就是这个超网的数据量,量越大,训练出来的超网文件就越大。 在超网结构设计里需要注意的另一点就是,请让你的设计看起来更像是沙漏而不是水桶,一个 另外一点就是,和 如果你期望选用更加激进的方案可以试试 层标准化 Layer Normalization如果勾选,则在每个完全连接层之后添加标准化处理。 作用是防止超网络过拟合,使训练更加稳定。 LN 对防止过拟合使训练更加稳定是有意义的,但是根据之前的测试,linear 开启 LN 的情况,可能学不进去东西,出空包弹。使用激活函数后,LN现在是可使用的。 Swish 似乎并不需要开启 LN,因为 Swish 的训练速度慢,所以应该使用更高的学习率。 Dropout启用 Dropout 可以防止超网络过拟合,目前不支持自定义 Dropout 比率,默认为 0.3 在 激活函数 Activation Functions激活函数对输入进行非线性变换,使其能够学习和执行更复杂的任务,深层神经网络表达能力更加强大。 支持 ReLU、LeakyReLU 和 Linear。选择 Linear (线性) 的效果和没有激活函数一样。 Swish 对比 ReLU 和 Linear 要更好,Swish 适合更大的网络,而 ReLU 可能对 激活函数是神经网络中非线性的来源。如果去掉激活函数,神经网络的权重和偏差只会进行线性变换(不管神经网络有多少层,线性运算的复合还是线性运算的),最终的效果只相当于单层的线性模型。
额外注意在开启 LN 选用激活函数并开启 Dropout 后,超网络没以前那么容易过拟合,但是可能需要更大的学习率进行学习。 outline: [2, 3]DreamBooth
简介DreamBooth 是一种定制个性化的 TextToImage 扩散模型的方法。仅需少量训练数据就可以获得极佳的效果。 Dreambooth 基于 Imagen 研发,使用时只需将模型导出为 ckpt,然后就可以被加载到各种 UI 中。 然而,Imagen 的模型和预训练的权重都不可用。所以最初的 Dreambooth 并不适用于稳定扩散。但后面 diffusers 实现了 Dreambooth 这一功能,并且完全适配了 Stable Diffusion。
选择Windows 系统的显存至少需要 16 GB, Linux 系统要求显存至少为 8 GB
(Colab 笔记本来自 社区置顶) 准备::: tip 如果你选择使用 AutoDL 的镜像,需要把 ::: 模型转换在各个笔记本或镜像中都会有以下类型命令,作用是将 训练前示例python diffusers/scripts/convert_original_stable_diffusion_to_diffusers.py --checkpoint_path model.ckpt --original_config_file v1-inference.yaml --scheduler_type ddim --dump_path models/diffusers_model 训练后示例训练完成后,打包转换为 ckpt 即可用于各种 UI 中。 python diffusers/scripts/convert_diffusers_to_original_stable_diffusion.py --model_path models/resultModel --checkpoint_path result.ckpt --half 数据集数据集的创建是在 Dreambooth 训练 中获得良好、稳定结果的最重要部分。 class 和 instance 的质量决定生成的质量。 内容要求一定要使用高质量的样本,运动模糊或低分辨率等内容会被训练到模型里,影响作品质量。 当为一个特定的风格进行训练时,挑选具有良好一致性的样本。理想情况下,只挑选你要训练的艺术家的图像。避免粉丝艺术或任何具有不同风格的东西,除非你的目标是像风格融合。 对于主题,黑色或白色背景的样本有极大的帮助。透明的背景也可以,但有时会在主体周围留下白色轮廓。 如果需要使你的 Dreambooth 模型更加多样化,尽量使用不同的环境、灯光、发型、表情、姿势、角度和与主体的距离。 请确保包括有正常背景的图片(例如,对象在一个场景中的图片)。只使用带简单背景的图片,效果会比较差。 避免在你的渲染图中出现手粘在头上的情况,请删除所有手太靠近或接触头部的图片。 如果需要避免渲染图中出现鱼眼镜头效果,可以删除所有自拍图片。 为了避免不自然的过度模糊,确保图像不包含假的重景深或虚化。 数据集规范化一旦你收集了数据集的照片,将所有图片裁剪并调整为 512x512 的正方形(你可以利用 BIRME 在线工具批量裁剪),并删除任何水印、商标、被图片边缘切断的人/肢体,或其他你不希望被训练的内容。以 PNG 格式保存图像,并将所有图像放在 train 文件夹中。 处理处理图片的方式有许多,常见的有反转,旋转,亮度和裁切。将图片打碎或者对背景 / 大头等单独裁切,也许有助于提高训练效果。 相关实例请参考 Diffusers ベースの DreamBooth の精度をさらに上げる・ augmentation 編 .
训练方法下例来自 CCRcmcpe/diffusers 版本 的 YAML 配置文件。 DreamBooth 本身不能训练所谓的画风。而 Native Training 对模型进行微调会带来画风的改变,作为所谓的画风训练方法。 古典思路是:
但还有很多分类,差异如:是否给每张图片配对 Prompt, 是否 启用 prior_preservation loss(PPL), 是否使用 train text encoder (TTL) DreamBooth = instance + class with DreamBooth专业训练特定物体/人物。使用
DreamBooth 本身具有十分强烈的 copy and paste 效果,使用 class/regularization 可以适当抑制该效果。 训练多个物体见 Multiple Concept 节。 Native TrainingNative Training 为原生训练,与 DreamBooth 不同的是,Native Training 会直接使用你的训练集进行训练,不再需要 Class Image。 关闭 在此训练中没有 Instance / Class Image 之分,所有的图像都会被用于训练。但是你需要为每个图准备一个 Instance Prompt,放在和图片名称一样的文本文件,通常为 Native Training 需要较多的数据集,但这个量众说纷纭,大约在 [100, 10000] 这个区间,多多益善。(但仍然建议人工挑选) 参数
关键说明一般训练画风会去除 这点体现在 train_style.sh 中。 解释 Instance Prompt / Class Prompt
示例:
关于
|
训练集类型 | Instance prompt 必须包含的 | Class prompt 应该描述的 |
---|---|---|
A object/person | [V] |
The object's type and/or characteristics |
A artist's style | by [V] |
The common characteristics of the training set |
[V]
只用在 Instance prompt 中,是 CLIP 词汇表中的标记,对模型没有意义。这是由你自己设定的短语,类比方程未知量 x,不是一个叫 [V]
的确切值。
假设你想训练的人物叫做 [N]
(比如 balabalabala 先生
) , 你不应该直接使用 [N]
(balabalabala 先生
) 作为代表特征词。
推荐使用在 该词汇表 中存在但是没有对应概念或者说对应概念不明显的词 [V]
(比如 bala
)。
过长的名称很可能被分离为多个标记,会得不到预期效果。标记的分离情况具体可在 NovelAI Tokenizer 验证。
最后代表 [V]
的提示将携带模型学到的新东西,你就可以在生成时使用你设定的 [V]
了。
注:原论文中使用的示例词 sks
和现实中的枪械 SKS 相同,属于不适合被使用的词汇。但是如果你的训练程度足够高的话说不定可以覆写其影响。
不要使用默认的 by sks (sks 这个艺术家), 融合模型的时候会发生灾难。
解释 Subject images / Class images
Subject images (或者你在笔记本上看到的实例图像)是你想要训练的图像,所以如果你想要自己的外观的模型,你可以取 20 到 40 张自己的图像并输入这些图像。实例名是一个唯一的标识符,它将在提示符中表示受训对象,个人使用 “namelastname”,大多数笔记本使用“sks”,但最好更改它。
你实际上是在告诉 AI 把你介绍到数据库中,为了做到这一点,你选择一个类别,即最适合你所训练的类别,对于人们来说,通常使用 "person", "man"/"woman" 等。
在训练中使用 Class images 是为了 防止物体的特征 “渗透” 到同一 Class 的其他物体中。如果没有 Class images 作为参考点,AI 会将你的脸与 Class 中出现的其他脸合并。你的脸会渗透进模型生成的其他脸中。
DreamBooth 可以在没有 Class images 的情况下开始训练,只需要禁用 --with_prior_preservation
来开启 Native Training.
标注方法
你可以手动标注或使用 clip 或 deepdanbooru 进行自动标注。
推荐使用 crosstyan/blip_helper 去给你的图像打标。或者使用 DeepDanbooru 和 BLIP
如果你使用 AutoDl 的镜像,你可以使用内置的 label_images.py 进行标注。
从检查点恢复训练
参数的 MODEL_NAME 改成上一次模型的位置。
如果你用到 CLASS_DIR
,因为主题相同,所以不必清空,反之则清空。
Train Text Encoder
对应实例中的 --train_text_encoder
,不推荐使用。
使用 --train_text_encoder
后,Dreambooth 训练会额外训练文本编码器。
有玄学说法是在达到训练的某个 百分比/epoch/step 之后应该关闭以防止过度玩坏。
- 一开始写的 instance prompt 要长一些,概括你的训练目标 (但是又不要太长,不要覆盖你常用的词) (像是 girl 我会换成 woman, 1boy 换成 male)
- text prompt 词数太多了影响分散,效果不明显。
- instance prompt 不能只填一个
[V]
(比如balabala
,应该是a photo of balabala
) ,否则那个词也废掉了。 - 尝试提高学习率
Multiple Concept
对应实例中的 --concept_list
参数,用 DreamBooth 是可以训练多个概念/人物/动作/物体的。但是若训练两个人物则推理时不能使其同时出现,两者的特征会被混合起来。
如果用其他版本的 DreamBooth 训练方法检查 --concept_list
参数,可以读入一个类似的 json
文件。
- concepts_list.json
# You can also add multiple concepts here. Try tweaking `--max_train_steps` accordingly.
concepts_list = [
{
"instance_prompt": "photo of zwx dog",
"class_prompt": "photo of a dog",
"instance_data_dir": "/content/data/zwx",
"class_data_dir": "/content/data/dog"
},
# {
# "instance_prompt": "photo of ukj person",
# "class_prompt": "photo of a person",
# "instance_data_dir": "/content/data/ukj",
# "class_data_dir": "/content/data/person"
# }
]
# `class_data_dir` contains regularization images
Aspect Ratio Bucketing
对应上面参数中的 --use_aspect_ratio_bucket
。需要在 Colab 中使用的话,aspect_ratio_bucket
调成 enable: true
。
Aspect Ratio Bucketing 简称 ARB, 原版训练均只能使用 1:1
的图像,开启 ARB 使得训练非 1:1
的图像成为可能,但并非任意比例尺的图像,不在 bucket 内的图像将会被裁切。
[[ 256 1024], [ 320 1024], [ 384 1024], [ 384 960], [ 384 896], [ 448 832], [ 512 768], [ 512 704], [ 512 512], [ 576 640], [ 640 576], [ 704 512], [ 768 512], [ 832 448], [ 896 384], [ 960 384], [1024 384], [1024 320], [1024 256]]
ARB 与 DreamBooth 一起使用的兼容性不好,仅推荐 Native Training 时使用。
更多内容请查阅 使用 Dreambooth 训练稳定扩散的实验的分析
训练
按照笔记本步骤或说明训练即可,Colab 用户注意挂载磁盘防止断线。
训练完毕要将 diffusers 权重转换为 ckpt 文件才能使用哦!利用类似 diffusers2ckpt.py
的文件即可。
有些脚本提供
--half
参数用来保存 float16 半精度模型,权重文件大小会减半(约 2g),但效果基本一致。
WebUi 用户将训练出的.ckpt
文件复制到 webui 的models\Stable-diffusion
目录里,在 webui 的左上角切换模型即可使用。
使用时在prompt
里输入你之前指定的标志符(例如<blahblah>
) 来让 ai 在生成图像中加入你期待的东西。
过拟合后,CFG 影响很大,可以试试降低 CFG.
模型的效果要看测试图。
在 Windows 上使用
这里的内容适用于想在 Windows 系统上进行训练的同学。
Windows 上的 Dreambooth
可以采用 ShivamShrirao 的优化版本 来节省显存。
由于相关链接库的原因,用于在 Linux
上的部署方法无法直接在 windows 上使用,由于同样的原因,该优化版本在 colab 上最低 9.9G 的显存需求在 windows 上应该稍高,因此推荐 至少使用显存 12G 的显卡。
编纂者仅在 16G 显存的机器上测试成功,12G 显存的机器理论可行。
::: tip
修改或覆盖原始库中的文件时,请备份。
:::
准备环境 Git
,Python
,MiniConda
(或 MiniConda
)。
以下步骤在 python3.8,windows10 22H2 中操作,其他环境未测试
创建工作目录 ,在目录下构建 python3.8 的 venv 虚拟环境
python -m venv --system-site-packages venv_dbwin
venv_dbwin\Scripts\activate
python.exe -m pip install --upgrade pip
克隆 ShivamShrirao 的优化版本 dreambooth 到工作目录中并安装相关依赖(使用的 构建版本, 后续版本可能无法支持本文方法)
git clone https://github.com/ShivamShrirao/diffusers
cd diffusers
pip install -e .
cd examples\dreambooth
pip install -U -r requirements.txt
pip install OmegaConf
pip install pytorch_lightning
pip install einops
pip install bitsandbytes==0.34
完成后,在 windows 上需要根据 这个 Issue 中的方法实现 bitsandbytes 支持
将 这个仓库 中的 libbitsandbytes_cuda116.dll
文件手动拷贝到工作目录下的 venv_diffusers\Lib\site-packages\bitsandbytes
中,位于 libbitsandbytes_cuda116.so
的旁边;
然后更改脚本以应用,可以手动修改,为方便也可以下载以下文件替换:
将 cextension.py
- https://pastebin.com/jjgxuh8V 覆盖到 venv_diffusers\Lib\site-packages\bitsandbytes
目录。
将 main.py
- https://pastebin.com/BsEzpdpw 覆盖到 venv_diffusers\Lib\site-packages\bitsandbytes\cuda_setup
目录。
安装 PyTorch 和 Torchvision
pip install torch==1.12.1+cu116 torchvision==0.13.1+cu116 --extra-index-url https://download.pytorch.org/whl/cu116
进入 Python 并测试调用
import bitsandbytes
如果没有报错证明安装成功( Ctrl + Z
并回车退出 python)。
临时指南
设置 accelerate
accelerate config
In which compute environment are you running? ([0] This machine, [1] AWS (Amazon SageMaker)): 0
Which type of machine are you using? ([0] No distributed training, [1] multi-CPU, [2] multi-GPU, [3] TPU [4] MPS): 0
Do you want to run your training on CPU only (even if a GPU is available)? [yes/NO]:NO
Do you want to use DeepSpeed? [yes/NO]:NO
Do you wish to use FP16 or BF16 (mixed precision)? [NO/fp16/bf16]: fp16
按照上面的设置选项,也就是(0,0,NO,NO,fp16)。
修改显存优化
因为无法使用 xformers ,所以使用 此文件 中的优化方法作为代替。
将 attention.py - https://pastebin.com/nmwTrGB9 覆盖到 diffusers\src\diffusers\models
目录。
至此环境配置完成,可以开始训练了。具体使用参数请查阅 ShivamShrirao 的 readme 文件和 notebook 文件。
::: info
我使用以下参数训练。
accelerate launch --num_cpu_threads_per_process 8 diffusers/examples/dreambooth/train_dreambooth.py --pretrained_model_name_or_path=models/diffusers_model --pretrained_vae_name_or_path=models/diffusers_model/vae --output_dir=models --concepts_list="concepts_list.json" --with_prior_preservation --prior_loss_weight=1.0 --seed=1337 --resolution=512 --mixed_precision="fp16" --lr_scheduler="constant" --use_8bit_adam --gradient_accumulation_steps=1 --train_batch_size=1 --max_train_steps=800 --save_interval=10000 --learning_rate=1e-6 --num_class_images=100 --lr_warmup_steps=0 --gradient_checkpointing
:::
峰值显存占用正好为 12G,如果您只有一个显卡,显存不高于 12G,而且同时需要用于 Windows 系统显示,请关闭所有占用显存的程序或网页等,减少额外显存消耗再进行训练。
diffusers 不能直接使用 ckpt 文件进行训练,需要先进行转换,示例如下。
python diffusers\scripts\convert_original_stable_diffusion_to_diffusers.py --checkpoint_path model.ckpt --original_config_file v1-inference.yaml --scheduler_type ddim --dump_path models/diffusers_model
训练完成同样要进行打包转换为 ckpt, 即可用于 AUTOMATIC1111 的 WebUI 中。
python diffusers\scripts\convert_diffusers_to_original_stable_diffusion.py --model_path models/resultModel --checkpoint_path result.ckpt --half
这是一个临时的解决方案,期待 Windows 官方适配的到来。
其他
DreamBooth 参数表
usage: argmark [-h] --pretrained_model_name_or_path
PRETRAINED_MODEL_NAME_OR_PATH [--revision REVISION]
[--tokenizer_name TOKENIZER_NAME] --instance_data_dir
INSTANCE_DATA_DIR [--class_data_dir CLASS_DATA_DIR]
[--instance_prompt INSTANCE_PROMPT]
[--class_prompt CLASS_PROMPT]
[--with_prior_preservation]
[--prior_loss_weight PRIOR_LOSS_WEIGHT]
[--num_class_images NUM_CLASS_IMAGES]
[--output_dir OUTPUT_DIR] [--seed SEED]
[--resolution RESOLUTION] [--center_crop]
[--use_filename_as_label] [--use_txt_as_label]
[--train_text_encoder]
[--train_batch_size TRAIN_BATCH_SIZE]
[--sample_batch_size SAMPLE_BATCH_SIZE]
[--num_train_epochs NUM_TRAIN_EPOCHS]
[--max_train_steps MAX_TRAIN_STEPS]
[--gradient_accumulation_steps GRADIENT_ACCUMULATION_STEPS]
[--gradient_checkpointing]
[--learning_rate LEARNING_RATE] [--scale_lr]
[--lr_scheduler LR_SCHEDULER]
[--lr_warmup_steps LR_WARMUP_STEPS] [--use_8bit_adam]
[--adam_beta1 ADAM_BETA1] [--adam_beta2 ADAM_BETA2]
[--adam_weight_decay ADAM_WEIGHT_DECAY]
[--adam_epsilon ADAM_EPSILON]
[--max_grad_norm MAX_GRAD_NORM] [--push_to_hub]
[--hub_token HUB_TOKEN] [--hub_model_id HUB_MODEL_ID]
[--logging_dir LOGGING_DIR]
[--log_with {tensorboard,wandb}]
[--mixed_precision {no,fp16,bf16}]
[--local_rank LOCAL_RANK]
[--save_model_every_n_steps SAVE_MODEL_EVERY_N_STEPS]
[--auto_test_model] [--test_prompt TEST_PROMPT]
[--test_prompts_file TEST_PROMPTS_FILE]
[--test_negative_prompt TEST_NEGATIVE_PROMPT]
[--test_seed TEST_SEED]
[--test_num_per_prompt TEST_NUM_PER_PROMPT]
Arguments
英文说明在英文页面。
short | long | default | help |
---|---|---|---|
-h |
--help |
显示此帮助信息并退出 | |
--pretrained_model_name_or_path |
None |
预训练模型的路径或来自 huggingface.co/models 的模型标识符。 | |
--revision |
None |
修订来自 huggingface.co/models 的预训练模型标识。 | |
--tokenizer_name |
None |
预训练的标记器名称或路径,如果与 model_name 不相同的话。 | |
--instance_data_dir |
None |
一个包含实例图像训练数据的文件夹。 | |
--class_data_dir |
None |
一个包含类图像训练数据的文件夹。 | |
--instance_prompt |
None |
带有指定实例的标识符的提示 | |
--class_prompt |
None |
提示指定与提供的实例图像相同类别的图像。 | |
--with_prior_preservation |
标记,以增加先前的保存损失。 | ||
--prior_loss_weight |
1.0 |
The weight of prior preservation loss. | |
--num_class_images |
100 |
用于事先保存损失的最小的类图像。如果没有足够的图像,额外的图像将用 class_prompt 进行采样。 | |
--output_dir |
text-inversion-model |
输出目录,模型预测和 checkpoints 将被写入该目录。 | |
--seed |
None |
可重复的培训的种子。 | |
--resolution |
512` | 输入图像的分辨率,训练/验证数据集中的所有图像将被调整到这个分辨率。 |
Aesthetic Gradients
https://github.com/AUTOMATIC1111/stable-diffusion-webui-aesthetic-gradients
从一张或几张图片创建嵌入式模型,以将特定的画风应用于生成的图像。
Source directory
填数据源文件夹地址。
生成的 embedding 在 models
文件夹里面。
每一次使用,都会重新计算,训练速度快,生成速度慢。
stable diffusion webui 指南-二次开发 插件开发插件WebUI 通过以下方式与插件交互:
def preload(parser):
parser.add_argument("--wildcards-dir", type=str, help="directory with wildcards", default=None) 关于如何开发自定义脚本(通常是插件的主要内容),请参阅 开发自定义脚本。 插件案例安装完毕重启程序。目前 SD-WebUI 已经自带扩展管理器界面。 DreamBooth extensionhttps://github.com/d8ahazard/sd_dreambooth_extension Dreambooth Extension for Stable-Diffusion-WebUI training-pickerhttps://github.com/Maurdekye/training-picker 允许用户通过视频的关键帧进行复用,并自动从各个关键帧中挑选和导出训练示例。 随机艺术家插件https://github.com/yfszzx/stable-diffusion-webui-inspiration cd extensions
git clone https://github.com/yfszzx/stable-diffusion-webui-inspiration.git extensions/stable-diffusion-webui-inspiration 美学权重插件https://github.com/AUTOMATIC1111/stable-diffusion-webui-aesthetic-gradients git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui-aesthetic-gradients.git extensions/aesthetic-gradients 历史记录画廊https://github.com/yfszzx/stable-diffusion-webui-images-browser cd extensions
git clone https://github.com/yfszzx/stable-diffusion-webui-images-browser.git extensions/stable-diffusion-webui-images-browser Wildcards 通配符https://github.com/AUTOMATIC1111/stable-diffusion-webui-wildcards 允许使用类似 Deforumhttps://github.com/deforum-art/deforum-for-automatic1111-webui Deforum 的官方 API,一个用于 2D 和 3D 动画的扩展脚本,supporting keyframable sequences, dynamic math parameters (even inside the prompts), dynamic masking, depth estimation and warping. Video2Videohttps://github.com/Leonm99/Stable-Diffusion-Video2Video 将 视频 投入 Img2Img,输出带有关键帧的视频。 Img2img Videohttps://github.com/memes-forever/Stable-diffusion-webui-video Artists To Studyhttps://github.com/camenduru/stable-diffusion-webui-artists-to-study 把 https://artiststostudy.pages.dev 添加到 WebUI 美学权重评分器https://github.com/tsngo/stable-diffusion-webui-aesthetic-image-scorer 计算生成图像的美学分数。 Tokenizerhttps://github.com/AUTOMATIC1111/stable-diffusion-webui-tokenizer stable-diffusion-webui 的一个扩展,增加了一个标签,让你预览 CLIP 模型将如何标记你的文本。 自动补全https://github.com/DominikDoom/a1111-sd-webui-tagcomplete 使 SD 做到类似 NAI 的标签输入自动补全效果。 txt2maskhttps://github.com/ThereforeGames/txt2mask 使用自然语言为 Stable Diffusion 修复自动创建遮罩。 multi-subject-renderhttps://github.com/Extraltodeus/multi-subject-render 生成多个的物体并合成在同一张图上。 DAAMhttps://github.com/kousw/stable-diffusion-webui-daam 提示词热度图,显示提示词作用于图片的哪些部分。 outline: [2, 3]自定义脚本此主题的内容可能不会即时更新到此处,源地址 开发自定义脚本你可以在 如果要创建你自己的自定义脚本,请创建一个实现类的 python 脚本,并将其放到 Script 类有四个主要方法,这里通过一个简单的示例脚本进行更详细的描述,这个脚本可以旋转和/或翻转生成的图像。 这里 有很多社区共享的脚本,可以将文件添加到 自定义脚本案例sd-dynamic-prompts实现用于随机提示语生成的微型模板语言。 https://github.com/adieyal/sd-dynamic-prompts Depth Maps for Stable Diffusion从生成的图像中创建深度图。 https://github.com/thygate/stable-diffusion-webui-depthmap-script sd-lexikreaAutomatic1111 Stable Diffusion 的脚本,用于从 krea 和 lexica 中提取提示。 https://github.com/Vetchems/sd-lexikrea Advanced prompt matrix安装后可以使用以下语法
XYZ 绘图脚本生成一个 .html 文件以交互浏览图像集。 使用滚轮或箭头键在 Z 维度中移动。 https://github.com/xrpgame/xyz_plot_script Embedding to PNG将一个已经存在的 Embeddings 转换为 PNG 表示。 https://github.com/dfaker/embedding-to-png-script Random Steps and CFGhttps://github.com/lilly1987/AI-WEBUI-scripts-Random API启用 API使用 如果使用 set COMMANDLINE_ARGS=--api 想要在启用 API 的同时使用插件,追加 使用 API在浏览器访问 详见 API。 Basic Documentation and Examples for using API 下面是一个同步类实现。 import time
import json
import requests
import io
import base64
from PIL import Image, PngImagePlugin
class WebUIApi(object):
def __init__(url):
self.url=url
def txt2img(payload,outpath:str=None,infotie:bool=True):
payload_json = json.dumps(payload)
response = requests.post(url=f'{self.url}/sdapi/v1/txt2img', data=payload_json).json()
# response 响应包含 images、parameters 和 info,image 可能会含有多个图像。
for i in response['images']:
# 解码 base64
image = Image.open(io.BytesIO(base64.b64decode(i)))
# 元信息输出
pnginfo = PngImagePlugin.PngInfo()
if infotie:
pnginfo.add_text("parameters", str(response['info']))
# 保存,因为本地不会自动生成文件。
if not outpath:
print("Random file name")
outpath=f"{str(time.time())}.png"
image.save(outpath, pnginfo=pnginfo)
payload = {
"prompt": "1girl",
"steps": 20
}
# 其他参数会使用默认值
WebUIApi(url="http://127.0.0.1:7860").txt2img(payload=payload,outpath="1145.png",infotie=True) 覆盖生成设置关于 附录
|
stable diffusion
Stability AI
https://stability.ai/
https://dreamstudio.ai/
https://huggingface.co/stabilityai/stable-diffusion-2-1
https://legacy.dreamstudio.ai/dream
Stable Diffusion Online
稳定的在线扩散 (stablediffusionweb.com)
High-Resolution Image Synthesis with Latent Diffusion Models
基于潜在扩散模型的高分辨率图像合成
相关链接
The text was updated successfully, but these errors were encountered: