Skip to content
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

Open
WangShuXian6 opened this issue Jul 29, 2023 · 11 comments
Open

stable diffusion webui #155

WangShuXian6 opened this issue Jul 29, 2023 · 11 comments

Comments

@WangShuXian6
Copy link
Owner

WangShuXian6 commented Jul 29, 2023

stable diffusion

Stable Diffusion是一个非常实用的AI绘画工具,它的免费开源性和高效实用性为用户提供了更多的可能性
Stability-AI/stablediffusion: High-Resolution Image Synthesis with Latent Diffusion Models (github.com)
github.com/Stability-AI/stablediffusion

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
基于潜在扩散模型的高分辨率图像合成


Stable Diffusion WebUI 简称 SD-WebUI,是一个基于 Gradio 库的 Stable Diffusion 浏览器界面。

NovelAI 简称 NAI,是一项月费服务,用于 AI 辅助创作、讲故事、虚拟陪伴,或者只是供您想象的 GPT 驱动的沙盒。

Stable Diffusion 原模型是面向三次元的,而 NovelAI 所用的模型是二次元特化版本。


相关链接

AI 作图知识库 guide.novelai.dev
https://github.com/wfjsw/VP-StableDiffusionBook

@WangShuXian6
Copy link
Owner Author

WangShuXian6 commented Jul 29, 2023

@WangShuXian6
Copy link
Owner Author

WangShuXian6 commented Jul 29, 2023

秋葉aaaki/sd-webui-aki

https://www.bilibili.com/read/cv22159609?spm_id_from=333.999.list.card_opus.click
秋葉 整合包 为作者免费发布,请勿从其他渠道购买付费版本,原版本就免费开源

整合包
https://www.bilibili.com/video/BV1iM4y1y7oA

秋葉aaaki整合包

百度盘:https://pan.baidu.com/s/1sVmVqA2CGUsZwyRdjoA5Vg
夸克盘:https://pan.quark.cn/s/3a32257a7323

启动器
https://www.bilibili.com/video/BV1ne4y1V7QU
https://pan.quark.cn/s/fa19c5989f06
启动器内文件全部放入整合包,覆盖

本机配置
i5-12490F
3060TI G6X 8GB
32GB内存
固态硬盘


插件安装/更新/设置/卸载教程

https://www.bilibili.com/read/cv22316068?from=articleDetail

插件一览/更新

打开 WebUI,在 “扩展” 一栏可以找到如下的选项卡。点入扩展时,会首先在 “已安装” 页面。

该页面会展示目前安装的插件。

重点:所有插件相关的操作完毕都需要点击图中这个橙色按钮 “应用并重启用户界面” !!
image

左侧的对勾表示是否启用该插件,可以通过点击对勾切换 启用/禁用 插件。
image

点击检查更新将会检查全部插件的更新(比较慢,推荐使用启动器的这个一键更新按钮)
image

同样,启动器内的对勾也是可以管理插件启用的。

注意:为了避免未知错误,启动器只有在 WebUI 处于关闭状态的时候才支持管理插件。

使用启动器管理插件的时候,请先关闭 WebUI。
image

插件安装

有几种办法可以安装插件。所有的插件都会被安装在 WebUI 目录底下的 “extensions” 文件夹里。

记住所有插件相关的操作完毕都需要点击 “应用并重启用户界面” !!

从插件列表安装

在 “可用” 一栏,点击 “加载自”,就会加载目前可用的插件列表。加载后在下方可以筛选插件类型。

在右侧点击相应的 Install 按钮安装。
image

从Git网址直接安装

“从网址安装” 一栏可以填写Git地址,点击安装会自动安装。

常见的链接,比如这种:https://github.com/Akegarasu/sd-webui-model-converter

又或者是这个:https://jihulab.com/hunter0725/sd-webui-controlnet

都是需要直接填写到这里,点击安装的。
image

不要打开网页下载压缩包!不要打开网页下载压缩包!

很多教程教你去下载压缩包都是害人的!!!!

从网页直接下载压缩包,不会附带一个叫 “.git” 的文件夹,“.git” 文件夹会存放版本信息,没有了这个就无法正常管理、升级、切换版本。就比如这样
image

手动使用指令安装

此方法需要你安装git。

直接进入 extensions 文件夹内,执行下方指令即可
git clone 插件网址

插件卸载

直接进入 extensions 文件夹内,删除你不想要的插件文件夹即可。
image

插件设置

很多插件都有自己的单独设置,可以在 WebUI 的 “设置” 一栏中找到。
image

设置完毕需要点击保存设置,然后点击重启。

@WangShuXian6
Copy link
Owner Author

WangShuXian6 commented Jul 29, 2023

AI 绘图 Tag

标签超市 https://tags.novelai.dev/

改善画质:
masterpiece, best quality

进阶 Tag

权重

(girl) 加权重,这里是1.1倍。括号是可以叠加的,如((girl)) 加很多权重。1.1*1.1=1.21

[girl] 减权重,一般用的少。减权重也一般就用下面的指定倍数。

(girl:1.5) 指定倍数,这里是1.5倍的权重。还可以 (girl:0.9) 达到减权重的效果

@WangShuXian6
Copy link
Owner Author

WangShuXian6 commented Jul 29, 2023

AI 绘图 反面 Tag(不想要的内容)

通用反面 Tag
保底不出古神用的 Tag:
lowres, bad anatomy, bad hands, text, error, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality, normal quality, jpeg artifacts, signature, watermark, username, blurry

@WangShuXian6
Copy link
Owner Author

WangShuXian6 commented Jul 29, 2023

采样步数

采样步数不需要太大,一般在50以内。通常28是一个不错的值。

采样器

采样器没有优劣之分,但是他们速度不同。

提示词相关性

提示词相关性代表你输入的 Tag 对画面的引导程度有多大,可以理解为 “越小AI越自由发挥”
太大会出现锐化、线条变粗的效果。太小AI就自由发挥了,不看 Tag

随机种子

随机种子是 生成过程中所有随机性的源头 每个种子都是一幅不一样的画。
默认的 -1 是代表每次都换一个随机种子。
由随机种子,生成了随机的噪声图,再交给AI进行画出来。

查询图片参数

AI生成图片会自动保存全部参数到原图中,可以在WebUI的 “图片信息” 一栏内通过解析原图查看到。

工具:https://spell.novelai.dev/

非AI生成图片或经过压缩的图片可以通过 Deepdanbooru、Tagger 来尝试反推tag。

Deepdanbooru 默认已经自带了,可以在图生图页面找到

@WangShuXian6
Copy link
Owner Author

WangShuXian6 commented Jul 30, 2023

stable diffusion webui 指南-使用与调参

https://guide.novelai.dev/guide/configuration/param-basic


调参基础

本章内容大多基于 Stable Diffusion WebUI 前端。NovelAI 原始界面只开放了所有设置的一小部分。

常用参数介绍

  • Prompt(提示词):对你想要生成的东西进行文字描述。
  • Negative prompt(反向提示词):用文字描述你不希望在图像中出现的东西。
  • Sampling Steps(采样步数):扩散模型的工作方式是从随机高斯噪声向符合提示的图像迈出小步。这样的步骤应该有多少个。更多的步骤意味着从噪声到图像的更小、更精确的步骤。增加这一点直接增加了生成图像所需的时间。回报递减,取决于采样器。
  • Sampling method(采样器):使用哪种采样器。Euler a(ancestral 的简称)以较少的步数产生很大的多样性,但很难做小的调整。随着步数的增加,非 ancestral 采样器都会产生基本相同的图像,如果你不确定的话,可以使用 LMS。
  • Batch count/n_iter:每次生成图像的组数。一次运行生成图像的数量为 Batch count * Batch size。
  • Batch size:同时生成多少个图像。增加这个值可以提高性能,但你也需要更多的 VRAM。图像总数是这个值乘以批次数。除 4090 等高级显卡以外通常保持为 1。
  • CFG Scale(无分类指导规模):图像与你的提示的匹配程度。增加这个值将导致图像更接近你的提示(根据模型),但它也在一定程度上降低了图像质量。可以用更多的采样步骤来抵消。
  • Width:图像的宽度,像素。要增加这个值,你需要更多的显存。大尺度的图像一致性会随着分辨率的提高而变差(模型是在 512x512 的基础上训练的)。非常小的值(例如 256 像素)也会降低图像质量。这个值必须是 8 的倍数。
  • Height:图像高度。
  • Seed:随机数的起点。保持这个值不变,可以多次生成相同(或几乎相同,如果启用了 xformers)的图像。没有什么种子天生就比其他的好,但如果你只是稍微改变你的输入参数,以前产生好结果的种子很可能仍然会产生好结果。

来自 installgentoo wiki

一个小指南:RedditAbout

Sampling steps 迭代步数

::: info
迭代是重复反馈的动作,神经网络中我们希望通过迭代进行多次的训练以到达所需的目标或结果。
每一次迭代得到的结果都会被作为下一次迭代的初始值。
一个迭代 = 一个正向通过 + 一个反向通过
:::

更多的迭代步数可能会有更好的生成效果,更多细节和锐化,但是会导致生成时间变长。而在实际应用中,30 步和 50 步之间的差异几乎无法区分。

太多的迭代步数也可能适得其反,几乎不会有提高。

进行图生图的时候,正常情况下更弱的降噪强度需要更少的迭代步数(这是工作原理决定的)。你可以在设置里更改设置,让程序确切执行滑块指定的迭代步数。

Samplers 采样器

目前好用的有 EulerEuler a(更细腻),和 DDIM

推荐 Euler aDDIM新手推荐使用 Euler a

Euler a 富有创造力,不同步数可以生产出不同的图片。调太高步数 (>30) 效果不会更好。

DDIM 收敛快,但效率相对较低,因为需要很多 step 才能获得好的结果,适合在重绘时候使用

LMSPLMSEuler 的衍生,它们使用一种相关但稍有不同的方法(平均过去的几个步骤以提高准确性)。大概 30 step 可以得到稳定结果

PLMS 是一种有效的 LMS(经典方法),可以更好地处理神经网络结构中的奇异性

DPM2 是一种神奇的方法,它旨在改进 DDIM,减少步骤以获得良好的结果。它需要每一步运行两次去噪,它的速度大约是 DDIM 的两倍。但是如果你在进行调试提示词的实验,这个采样器效果不怎么样

Euler 是最简单的,因此也是最快的之一

英文 Wiki 介绍

英文论坛介绍

不同 Step 和 采样器 的不同效果示例:

预览一 预览二
image image

CFG Scale 提示词相关性

cfg scale 是图像与提示词的契合度,该值越高,提示词对最终生成结果的影响越大,契合度越高。

过高的 CFG Scale 体现为粗犷的线条和过锐化的图像。

注意尺寸

出图尺寸太宽时,图中可能会出现多个主体。

要匹配好姿势,镜头和人物才不畸形,有时候需要限定量词,多人物时要处理空间关系和 prompt 遮挡优先级。人数->人物样貌->环境样式->人物状态

1024 之上的尺寸可能会出现不理想的结果!推荐使用 小尺寸分辨率 + 高清修复(下方介绍)。

Highres. fix 高清修复

通过勾选 txt2img(文生图) 页面上的 "Highres. fix" 复选框来启用。

默认情况下,txt2img(文生图) 在高分辨率下会生成非常混沌的图像。该选项会使得模型首先生成一张小图片,然后通过 img2img 将图片分辨率扩大,以实现高清大图效果。

Batch Count 与 Batch Size

  • Batch Count(生成批次) 指定共生成几个批次。
  • Batch Size(每批数量) 指定每个批次并行生产多少张图片。

大的 Batch Size 需要消耗巨量显存。若您的显卡没有超过 12G 的显存,请不要调节 Batch Size。

对于显存极大的显卡而言,一次生成一张图片无法充分利用显卡计算容量,此时可将 Batch Size 提高以充分压榨算力。

随机种子

理论上,种子决定模型在生成图片时涉及的所有随机性。

实际的种子数值并不重要。它只是初始化一个定义扩散起点的随机初始值。

在应用完全相同参数(如 Step、CFG、Seed、prompts)的情况下,生产的图片应当完全相同。(不使用 xformers 等会带来干扰的优化器)

不同显卡由于微架构不同,可能会造成预料之外的不同结果。主要体现在 GTX 10xx 系列显卡上。详见 这里的讨论

Denoising strength 降噪强度

Denoising strength 仅在 img2img(图生图)或 高清修复 时被应用,其表征最后生成图片对原始输入图像内容的变化程度。通过调整该值,可以降低对画风的影响,但也会弱化 img2img 能力。值越高 AI 对原图的参考程度就越低 (同时增加迭代次数)。

对于图生图来说,低 denoising 意味着修正原图,高 denoising 就和原图就没有大的相关性了。一般来讲阈值是 0.7 左右,超过 0.7 和原图基本上无关,0.3 以下就是稍微改一些。

实际执行中,具体的执行步骤为 Denoising strength * Sampling Steps。

不间断生成

在 WebUI 的生成键上右击即可出现 不间断生成 的选项。

使用 WebUI 复现 NAI 官网结果

相关讨论,应该读一读!

::: tip
由于 xformers 在优化过程中引入的抖动与部分显卡微架构差异,尝试完全复原在不同机器上生成的图片是不明智的。所以不要纠结一些细节不能复现。
:::

需要做的事情

  • 如果使用 7G 模型,需要将 config.yml 改名为 模型名.yml 与模型文件放置在一起。这种加载方式会消耗大量显存并减慢加载速度。如果使用 4G 模型,无需进行任何操作即可达到等同效果。
  • 启用 xformers
  • 加载 animevae.pt 模型(将该模型文件改名为 模型名.vae.pt 与模型文件放置在一起)
  • Settings 中将 Stop At last layers of CLIP model 设为 2
    • 匹配 NAI 的一个优化
  • Settings 中将 Eta noise seed delta 设置为 31337
  • 将 NovelAI 自动填充的正反标签前置在提示词组中
    • 正向标签:masterpiece, best quality,
    • 反向标签:lowres, bad anatomy, bad hands, text, error, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality, normal quality, jpeg artifacts, signature, watermark, username, blurry
  • 如果使用大括号,将大括号翻译为权重数字(每个大括号 105%)
    • {...} 翻译为 (...:1.05)
    • [...] 翻译为 (...:0.9091)

不需要做的事情

  • 加载模型包中的 hypernetwork。官网默认并不使用 hypernetwork。

进阶使用

X/Y/Z 图表

这项功能可以在 文生图/图生图 界面的左下角种 “脚本” 一栏内选择 “X/Y/Z 图表” 以启用。

它创建具有不同参数的图像网格。使用 X 类型和 Y 类型字段选择应由行和列共享的参数,并将这些参数以逗号分隔输入 X 值 / Y 值字段。支持整数、浮点数和范围。

Simple ranges 简单范围

1-5 = 1, 2, 3, 4, 5

Ranges with increment in bracket 括号范围

1-5 (+2) = 1, 3, 5
10-5 (-3) = 10, 7
1-3 (+0.5) = 1, 1.5, 2, 2.5, 3

Ranges with the count in square brackets 方括号范围

1-10 [5] = 1, 3, 5, 7, 10
0.0-1.0 [6] = 0.0, 0.2, 0.4, 0.6, 0.8, 1.0

Prompt S/R 替换

S/R 是 X/Y 图的的一种高级操作模式。

S/R 是 搜索/替换 的意思,输入一个单词或短语的列表,它从列表中取第一个并将其视为关键词,并将该关键词的所有实例替换为列表中的其他条目的所有实例替换为列表中的其他条目。

例如,提示 a man holding an apple, 8k clean 和 S/R 提示 an apple, a watermelon, a gun 结合,你会得到三个提示。

  • a man holding an apple, 8k clean
  • a man holding a watermelon, 8k clean
  • a man holding a gun, 8k clean

列表使用的语法与 CSV 文件中的一行相同,所以如果你想在你的条目中加入逗号,你可以
在你的条目中加入逗号,你必须将文本放在引号中,并确保引号之间没有空格。
确保引号和分隔逗号之间没有空格。

  • darkness, light, green, heat - 4 items - darkness, light, green, heat
  • darkness, "light, green", heat - 错误示例 - 4 items - darkness, "light, green", heat
  • darkness,"light, green",heat - 正确示例 - 3 items - darkness, light, green, heat

设置示例

引用官方 Wiki 的设置图:

image

Variations 变化种子

Variation strength sliderVariation seed field 允许您指定现有图片应更改多少以使其看起来不同。
在最大强度下,图片种子将完全取决于 Variation seed;在最小强度下,图片种子将完全取决于原始种子。(使用 Ancestral 采样器时除外)。
image

样式模板

Save prompt as style 按钮可将当前的提示词写入 styles.csv 作为模板使用。该文件包含所有保存的模板。

右侧的下拉框将允许您从以前保存的样式中选择任何样式,并自动将其 附加 到输入中

要删除样式,请从 styles.csv 中手动将其删除并重新启动程序。

Face restoration 真人人脸修复

适用于修复真人图片的面部问题。对动漫图片效果较差。

Face Restoration @ WebUI Wiki

图片信息 PNG info

生成的图片原图内嵌生成信息,拖放到 PNG Info 页面即可查看。

附加功能 Extras

SD-WebUI 的 Extras 页有一个自带的超分功能,可以使用 ESRGAN_4x 模型提升图片分辨率。

当然 RealESRGAN 或者 RealCUGAN 也可以。

::: tip 相关模型
文件统一下载到 SDwebUI文件夹\models

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 选择

SD Upscaler 在注重细节的同时还提升分辨率。

曾经有段时间,LSDR 被认为是最好的。有些人喜欢 swinir,有些喜欢 esrgan4xymmv,推荐使用 ESRGAN_4x

如果你要搞二次元,推荐使用 Real-CUGAN

图像去噪

推荐使用 Real-ESRGAN 降噪。

image

效果图

自定义.css

创建一个名为 user.css 的文件并放在 webui.py 旁,将自定义 CSS 代码放入 user.css 中。

下面的例子将设置画廊的最短长度:

#txt2img_gallery,
#img2img_gallery {
    min-height: 768px;
}

更换提示音

如果在 webui.py 附近存在 notification.mp3 文件,它将在图片生成结束后播放。


疑难解答

本章主要描述生成图片时遇到的各类问题。安装运行时常见问题见 SD-WebUI 方案 - 错误处理 章节。

生成黑/绿图

Green or Black screen

如果是 GTX 16xx 系列,启动参数需要加 --precision full --no-half, 因此如果显存不足还要加 --medvram

如果是其他显卡而且加载了 VAE 时出现黑图,加入 --no-half-vae 参数(见 关于 AUTOMATIC1111 /stable-diffusion-webui 的 FAQ)。

RuntimeError Sizes of tensors must match

(img2img) 如果你得到 RuntimeError: Sizes of tensors must match,你需要改变输入图像的分辨率

彩虹混乱图

如果 AI 输出了混乱的彩虹色图片,可能是生成分辨率或步数设置得太低。

高分辨率出鬼图 / 低显存生成大分辨率图片

使用 Highres. fix 或先使用低分辨率成图后再使用 Waifu2x 等技术提升分辨率。

RuntimeError: Unable to find a valid cuDNN algorithm to run convolution

前面那节有相关的参数建议。

生成报错解释:显存不足

先检查 CUDA 是否可用,打开命令窗,输入 python 并分行输入

import torch
print(torch.cuda.is_available())

CUDA out of memory

显存不足


模型选择

模型安全提示

It's not a virus it's a checkpoint file

.ckpt.pt 文件使用 Pickle模块 加载模型,而Pickle 模块在设计上并不安全。

所以模型种可能含有恶意数据,可使得加载期间执行任意代码。原则上,您应该只加载您信任的数据。永远不要加载可能未知来源的、或可能被篡改的模型。

:::tip
一种新型的模型格式 safetensors 解决了这个问题。如果模型作者提供了这个格式的模型,请优先选择它。
:::

如果杀毒软件拦截,有可能创建者向文件中注入了恶意的 Python 代码。

WebUI 内置了一定的安全检查,如果你使用 Automatic1111 的 WebUI, 其在这方面做了一些验证。对于不安全的文件,会提示

The file may be malicious, so the program is not going to read it.
You can skip this check with --disable-safe-unpickle commandline argument.

值得注意的是,出现该提示并不一定表明文件一定危险,有时由于网络问题、内存问题无法完整加载模型时也会出现此提示。
可以结合该提示上方与下方的报错综合分析具体出错原因。

可以通过此脚本检查风险: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 数据集训练。

提示词常用连贯的自然语言句子描述一个物体,如:

A horse running on the moon

下载地址:

Waifu Diffusion 模型

Waifu Diffusion 模型采用 Danbooru 数据集中图片与标签训练,适用于生成各类二次元图像。

提示词常用 Danbooru 提供的标签组合,如:

1girl, white hair, blue dress, black shoes

下载地址:

NovelAI 泄露模型

NovelAI 模型采用 Danbooru 数据集中图片与标签训练,适用于生成各类二次元图像。

提示词常用 Danbooru 提供的标签组合、与部分私有标签,如:

masterpiece, best quality, 1girl, white hair, blue dress, black shoes

使用该模型的 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 1

Part 1 中较常用的文件列举如下:

:::warning
受 WebUI 算法限制,在 WebUI 中具有相同 Hash 的模型存在不是同一个模型的可能。
:::

CRC32 WebUI Hash 文件名 模型包路径 说明
31D10243 925997E9 full-pruned.ckpt stableckpt/animefull-final-pruned/model.ckpt 全量 压缩模型
81274D13 E6E8E1FC full-latest.ckpt stableckpt/animefull-latest/model.ckpt 全量 完整模型
ADDB53AF 1D4A34AF sfw-pruned.ckpt stableckpt/animesfw-final-pruned/model.ckpt 精选 压缩模型
1D44365E 202FCEC0 sfw-latest.ckpt stableckpt/animesfw-final-pruned/model.ckpt 精选 完整模型
*.vae.pt stableckpt/animevae.pt 用于稳定风格,修复饱和度问题
*.yaml stableckpt/anime*/config.yaml 模型配置文件,主要作用是让完整模型达到压缩模型的效果
stableckpt/vector_adjust/v2.pt 未知风格化

注意,.yaml.vae.pt 的名称应该与 .ckpt 文件相对应。

hypernetworks 包含了 stableckpt/modules/modules 里的文件,是风格相关的数据集,可以作为特定人物的 embedding model 调用,和 model 使用可以生成特定风格。主要格式为 *.pt。需要在 WebUI 的设置标签页启用这个增强模型。

Part 2

prodmodels 是 GPT 模型(语言处理),但是实际用了 CLIP,所以不用我们管。

random_stableckpt 是一些模型,有的与 Part1 重复

image

::: details 附内容

  • stableckpt/ - Stable Diffusion checkpoints
  • animefull-latest - The model NovelAI uses in production
  • workspace/ - Code used to train/run/finetune models
  • sd-private.tar.zst - Stuff to train Stable Diffusion
  • github/ - Code taken from GitHub. CREDENTIALS SCRUBBED
  • novelai/ - From NovelAI org
  • *.tar.zst - Archived git repos, public AND PRIVATE
  • aboutus.gpg - Our public GPG key
  • sha256sum - SHA256 sums of every file
  • sha256sum.sig Detached signature for the sums, signed by our GPG key

:::

启动 CLI 有提示加载就即可,同时可以去设置选模型那里选喜欢的 hypernetwork

使用 latest (7G) 还是 pruned (4G) 模型

4GB 的模型由 7GB 的模型修剪而来,去除了最后一次的权重,留下了 EMA 权重。

个人用户只需要使用 pruned 4 GB 模型。使用 latest 会过度占用 RAM 和 VRAM。

且 NAI 在线上也使用 EMA 权重,所以选择 latest 7GB 模型是没有意义的。

结论由此贴讨论得到

详细介绍

拆包视频可以看 av688965561

杂项

  • 猜测模型中 masterpiece, best quality 等在 Danbooru 中不存在的标签有可能是为了适应商业需求而进行补充标记的。
  • 猜测 full 模型投入了所有的数据,未经清洗。而 sfw (curated) 模型则数据更加精确,应该受过清洗。这导致了 full 模型的不稳定。
  • 在 “事件 2” 中,我们看到了很多其他的模型,比如 wallpaper 模型,它们应该使用了不同的数据集进行训练。
  • 有些模型可能是根据 rating 进行分类的。

但是事实上我们并不知道细节,所以以上只是猜测并且不可信的。

Anything 2.1 / 3.0

image
image

融合模型,适用于生成各类二次元图像。

下载地址:https://pan.baidu.com/s/1r--2XuWV--MVoKKmTftM-g?pwd=ANYN

SD Pokemon Diffusers

image

经过微调的 Stable Diffusion 模型,专注于生成宝可梦图片。

HuggingFace/lambdalabs/sd-pokemon-diffusers

SD PixelArt SpriteSheet Generator

image
经过微调的 Stable Diffusion 模型,专注于生成多个方向的像素小人。

HuggingFace/Onodofthenorth/SD_PixelArt_SpriteSheet_Generator

风格化

Furry 超网络模型比较

image

其他超网络模型比较

other-hn-xy eaeaa8e2

参考参数:

masterpiece, best quality, masterpiece, 1girl, solo, outdoors, flowers, dancing

Negative prompt: nsfw, lowres, bad anatomy, bad hands, text, error, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality, normal quality, jpeg artifacts,signature, watermark, username, blurry, artist name

Steps: 28, Sampler: Euler, CFG scale: 12, Seed: [SEE COLUMN], Size: 512x512, Model hash: 925997e9, Hypernet: [SEE ROW]

结论

aini 有一种你可能不喜欢的强烈风格,我认为它具有最高的一致性和质量。

anime_3 是该系列中质量最高的,但它们都有些不一致. 我一般不会推荐他们。

可以看到 furry 的超网络在添加动物特征方面更加激进,因此这里更保守的变化可能与采样器、步骤和 CFG 有关。

所有超网络的 X/Y


其他

xformers

xformers 分辨率越高加速效果越好。使用 xformers 会引入一些随机性,稍微影响生成的图像。

如果你使用 Pascal、Turing 或者 Ampere 架构的卡(包括 GTX 1000,RTX 2000、3000 系列),将 --xformers 参数添加到 webui-user.bat 中的 COMMANDLINE_ARGS

::: tip
有人说在 700 和 900 系列卡上使用 xformers 的性能明显较差,请注意这一点。
本人实测,2050 在启用 xformers 之后,速度慢了 50%
:::

::: warning
注意使用 xformers 优化加速将使得同种子生成的图片存在细微差异。
:::

通常不需要自行编译 xformers。如果需要编译,见 在 Windows 上编译 xformers

使用 CPU 进行绘画

根据此 PR

可以通过 --use-cpu all 尽可能的使用 CPU 进行生成,虽然慢 100 倍。

4GB 显卡支持

针对具有低 VRAM 的 GPU 的优化。这应该可以在具有 4GB 内存的视频卡上生成 512x512 图像。

--lowvram 是 basujindal 对优化思想的重新实现。模型被分成模块,GPU 内存中只保存一个模块;当另一个模块需要运行时,前一个模块将从 GPU 内存中卸载。这种优化的性质使处理速度变慢——与我的 RTX 3090 上的正常操作相比,速度慢了大约 10 倍。

--medvram 是另一个优化,通过不在同一批次中处理条件和无条件去噪,可以显着减少 VRAM 的使用。这种优化的实现不需要对原始的稳定扩散代码进行任何修改。

::: info
经过 10/10 的优化,RTX2050 的 4GB 显卡也可以使用 --medvram
:::

当然也可以减半精度,或者生成一张 64x64 图片清理显存。

速度判定

注意区分 it/ss/it

终端的 it/s 速率是大致速率,在一秒钟可完成多次迭代时显示,代表每秒钟迭代次数。数字升高代表加速。

s/it 速率是上值的倒数,在一秒钟无法完成一次迭代时显示,代表每次迭代所需秒数。因此,数字降低代表加速。

在 WebUI 中使用 SD 2.0 模型

目前仅支持 Stable Diffusion 2.0-v 模型。

  1. 将 WebUI 更新为最新版。
  2. 下载 768-v-ema.ckpt 模型文件,放置在 models/Stable-Diffusion 目录中。
  3. 下载 v2-inference-v.yaml,改名为 768-v-ema.yaml 放置在 models/Stable-Diffusion 目录中。
  4. 选择使用新的模型。

在使用 2.0 模型时,训练面板可能无法使用。

在 Windows 上编译 xformers

::: tip
你可以在 这里 下载预构建的 xformers!记得先查看 GPU 架构
:::

确保 Python 版本为 3.10 或更高版本(使用 python --version 查看),然后安装下述应用:

  • 安装 VS Build Tools 2022,运行安装时只需要选择 Desktop development with C++
  • 安装 CUDA Toolkit。可选择 Custom 安装方式,删除一些如 Nsight、Visual Studio 集成等无用组件。
  1. 确认 nvcc 可用
nvcc --version
  1. 克隆 xFormers 存储库,在环境中激活它
git clone https://github.com/facebookresearch/xformers.git
cd xformers
git submodule update --init --recursive
  1. 创建虚拟环境且激活环境
python -m venv venv

#CMD
venv\Scripts\activate.bat
#Bash
source ./venv/bin/activate
#WindowsBash
source ./venv/Scripts/activate
  1. 为避免获取 CPU 版本时出现问题,请单独安装 pyTorch:
pip install torch torchvision --extra-index-url https://download.pytorch.org/whl/cu113
  1. 然后安装其余的依赖项
pip install -r requirements.txt
pip install wheel
pip install ninja
  1. 如果使用 CUDA 11.6 之前的旧版本,需要强制启用它以在 MS Build Tools 2022 上构建。

在 CMD 设置

set NVCC_FLAGS=-allow-unsupported-compiler"

或在 Bash 设置

export NVCC_FLAGS=-allow-unsupported-compiler
  1. 查看你自己的 GPU 架构

GPU 架构表

比如说,如果你的 GPU 是 GTX 1070,基于该表,架构是 6.1

CMD

set TORCH_CUDA_ARCH_LIST=6.1

BASH

export TORCH_CUDA_ARCH_LIST=6.1
  1. 构建 xFormers,请注意构建将需要很长时间(可能需要 10-20 分钟),它最初可能会抱怨一些错误,但它仍然应该可以正确编译。

  2. 在环境中安装

python setup.py build
python setup.py bdist_wheel

找到 dist 文件夹并将文件 *.whl 复制到 stable-diffusion-webui

stable-diffusion-webui 目录中安装.whl

如果构建的 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 系显卡正常启动,在 COMMANDLINE_ARGS=--xformers 参数, 其他显卡加 --force-enable-xformers 参数

Windows 编译错误自查

错误:Filename too longfatal error C1083: Cannot open compiler generated file: '': Invalid argument

说明你的路径太长了。

RuntimeError: CUDA error: no kernel image is available for execution on the device

现在更多 GPU 架构是自动支持的,尝试重新安装并使用 --xformers 参数。

如果你移动了 xformers,那么应该删除里面的 venv 目录。

Windows (30 系之外要自己编译)

自己编译指路 wiki/Xformers 还有 这个 Post

修剪模型

Voldy Retard Guide - Pruning a .CKPT

将要修剪的 .ckpt 文件放在 /stable-diffusion-webui 文件夹,把 脚本 另存本地,删除第 6 行和 第 8 行。然后在 prune.py 中的最后一行编辑 ckpt 的名称。

比如,prune_it('wd-v1-2-full-emma.ckpt')

然后运行这个脚本,修剪过程可能需要几分钟。


@WangShuXian6
Copy link
Owner Author

WangShuXian6 commented Jul 30, 2023

stable diffusion webui 指南-提示词工程学


提示词工程学

这节会介绍绘图所需要用到的提示词,和相关的 SD-WebUI 网页应用资源。如果你会画画,那么效果会更加稳定可观。

基本流程

image

这幅图演示了循环迭代的流程。

迭代方式,有循环迭代和线性迭代两种,线性迭代适用于多样性测试,而 循环迭代 是优化的更好选择。

来回改提示 + 固定种子并不是好选择。

目前研究基本方向是:

  • 提示词 + PS/Inpaint(微修/嫁接)
  • 提示词 + 3D 参考

关于生成时涉及到的参数配置,见 参数介绍

提示词来源

提示词的来源主要取决于以下三个要素:

  • 模型所采用的自然语言处理 (NLP) 方案支持的词汇表
  • 模型初始训练材料标记词来源

::: tip
下文提供的词库、网站、Wiki 均主要适用于 NovelAI 泄露模型。使用其他模型时应当参照对应资料进行调整。
:::

以 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
提前告知:WebUI 的设置页面需要按下 Apply setting 才能保存设置。
:::

考场速查

这里是打开页面就可以看到的工具箱

标签参考

工具

灵感

后期

作品参考

风格化



outline: [2, 4]

文字转图片

请先通过前文 调参基础 了解 SD-WebUI 网页应用提供的基本参数。

如何书写提示词

这是一个通用的指南,内容是基本通用的,可能有例外情况,请读对应的章节了解不同应用的特性。

写什么?

::: tip
提示词是提示而不是判定依据,比如你输入质量判定词汇的时候,其实是在限制数据的范围,而不是 “要求” AI 出一张很好的图片。
:::

单词标签

对于在标签单词上特化训练的模型,建议使用逗号隔开的单词作为提示词。

普通常见的单词,例如是可以在数据集来源站点找到的著名标签(比如 Danbooru)。单词的风格要和图像的整体风格搭配,否则会出现混杂的风格或噪点。

避免出现拼写错误。NLP 模型可能将拼写错误的单词拆分为字母处理。

自然语言

对于在自然语言上特化训练的模型,建议使用描述物体的句子作为提示词。

取决于训练时使用的数据集,可以使用英文,日文,特殊符号或一些中文。大多数情况下英文较为有效。

避免 with 之类的连接词或复杂的语法,大多数情况下 NLP 模型只会进行最简单的处理。

避免使用重音符(如 é 和 è)和德语 umlauts(如 ä 和 ö),它们可能无法被映射到正确的语义中。

不建议随意套用现成模板,尤其是无法经过人类理解的模板。

Emoji

Emoji (💰,💶,💷,💴,💵,🎊,🪅🪄,🎀,👩‍🚀) 表情符号也是可以使用并且 非常准确 的。

Emoji 因为只有一个字符,所以在语义准确度上表现良好。

Emoji 在构图上有影响,比如 💐☺️💐

表情符号参考

颜文字

对于使用 Danbooru 数据的模型来说,可以使用颜文字在一定程度上控制出图的表情。

例如:

:-) 微笑 :-( 不悦 ;-) 使眼色 :-D 开心 :-P 吐舌头 :-C 很悲伤 :-O 惊讶 张大口 :-/ 怀疑

仅支持西方颜文字,详细内容请见 Danbooru 颜文字部分维基百科

空格

逗号前后的少量空格并不影响实际效果。

开头和结尾的额外空格会被直接丢弃。词与词之间的额外空格也会被丢弃。

标点符号

用逗号、句号、甚至是空字符(\0)来分隔关键词,可以提高图像质量。目前还不清楚哪种类型的标点符号或哪种组合效果最好。当有疑问时,只要以一种使提示更容易被阅读的方式来做。

对于部分模型,建议将下划线(_)转换为空格。

艺术风格词

可以通过指定风格关键词来创作带有特效或指定画风的图片。

参考资料:

NovelAI 使用教程和魔咒课堂
人偶教室的测试记录
风格化: 32 种

或通过使用 微调模型 来创作图片。

运动和姿势

如果没有很大要求的话,选择只与少数姿势相关的提示。

这里的姿势是指某一事物的物理配置:图像主体相对于摄像机的位置和旋转,人类/机器人关节的角度,果冻块被压缩的方式,等等。你试图指定的事物中的差异越小,模型就越容易学习。

因为运动就其定义而言涉及到主体姿势的巨大变化,与运动相关的提示经常导致身体的扭曲,如重复的四肢。另外,因为人类的四肢,特别是人类的手和脚有很多关节,他们可以采取许多不同的、复杂的姿势。这使得他们的可视化特别难学,对于人类和神经网络都是如此。

简而言之:人类站着/坐着的好形象很容易,人类跳着/跑着的好形象很难。

如何写?

模板

先想一下要画什么,例如 主题,外表,情绪,衣服,姿势,背景 一类,然后参考数据集标签表(如果有的话,比如 Danbooru, Pixiv 等)。

然后将想要的相似的提示词组合在一起,请使用英文半角 , 做分隔符,并将这些按从最重要到最不重要的顺序排列。

一种模板示例如下:

(quality), (subject)(style), (action/scene), (artist), (filters)
  • (quality) 代表画面的品质,比如 low res 结合 sticker 使用来 “利用” 更多数据集, 1girl 结合 high quality 使用来获得高质量图像。
  • (subject) 代表画面的主题,锚定画面内容,这是任何提示的基本组成部分。
  • (style) 是画面风格,可选。
  • (action/scene) 代表动作/场景,描述了主体在哪里做了什么。
  • (artist) 代表艺术家名字或者出品公司名字。
  • (filters) 代表一些细节,补充。可以使用 艺术家,工作室,摄影术语,角色名字,风格,特效等等。

大小写

CLIP 的标记器在标记之前将所有单词转为小写。其他模型,如 BERT 和 T5,将大写的单词与非大写的单词区别对待。

但避免涉及特殊语法,以防被解释为其他语义,例如 AND

词汇顺序

demystifying_prompting_what_you_need_to_know/

似乎 VAE 使用了一种称为贝叶斯定理的统计方法。在计算标记的去向时,前几个单词似乎锚定了其余单词标记在潜在空间中的分布。

早期的标记具有更一致的位置,因此神经网络更容易预测它们的相关性。在贝叶斯推理中,矩阵中的第一个标记或证据很重要,因为它设置了初始概率条件。但是后面的元素只是修改了概率条件。因此,至少在理论上,最后的令牌不应该比前面的令牌具有更大的影响。

但是解析器理解事物的方式是不透明的,因此没有办法确切地知道词法顺序是否具有“锚”效应。

可以 使用 X/Y 图自动生成各种顺序 进行尝试。

提示词长度

避免过长的提示词。

提示词放入的顺序就是优先级。由于提示词的权重值从前向后递减,放置在特别靠后的提示词已经对图片的实际生成影响甚微。

不堆叠提示词是一个好习惯,但是如果你确实有很多内容要写,可以适当提高生成步数,以便在生成过程中更好地利用提示词。

SD-WebUI 突破最多 75 个词组限制的方式是将每 20 + 55 个词分为一组。选项 Increase coherency by padding from the last comma within n tokens when using more than 75 tokens 让程序试图通过查找最后 N 个标记中是否有最后一个逗号来缓解这种情况,如果有,则将所有经过该逗号的内容一起移动到下一个集合中。该策略可适当缓解提示词过多无法处理的问题,但可能破坏提示词之间的权重关系。

除了 WebUI 对此情况进行了特殊处理外,由于 GPT-3 模型限制,提示词处理空间并不是无限的,大多在在 75-80 之间,75 字符后的内容会被截断。

特异性

问题体现在语义偏移上。对于神经网络的训练来说,特征的质量很重要:输入和输出之间的联系越强,神经网络就越容易学习这种联系。

换句话说,如果一个关键词有非常具体的含义,那么学习它与图像之间的联系要比一个关键词有非常广泛的含义容易得多。

这样一来,即使是像 "Zettai Ryouiki" 这样很少使用的关键词也能产生非常好的结果,因为它只在非常具体的情况下使用。另一方面,"动漫" 即使是一个比较常见的词,也不会产生很好的结果,这可能是因为它被用于许多不同的情况,即使是没有字面意思的动漫。如果你想控制你的图片的内容,选择具体的关键词尤其重要。另外:你的措辞越不抽象越好。如果可能的话,避免留下解释空间的措辞,或需要 "理解" 不属于图像的东西。甚至像 "大" 或 "小" 这样的概念也是有问题的,因为它们与物体离相机近或远是无法区分的。理想情况下,使用有很大可能逐字出现在你想要的图像标题上的措辞。

语义失衡

每一个提示词就像染料一样,它们的 “亲和性“ 不同,如果更常见的提示词,比如 loli (和其他提示词并列放置)的影响就大于其他提示词。

比如,如果你想生成动漫图片,使用了 星空 startrail 标签,相比你期望出现的动漫星空,会有更多来自真实照片的星空元素。

许多词汇在基准上的权重就不一样,所以要根据效果进行合理调节。

否定提示词

SD-WebUI 网页应用会在生成时 避免生成否定提示词提及的内容

否定提示是一种使用 Stable-Diffusion 的方式,允许用户指定他不想看到的内容,而不对模型本身做额外的要求。

通过指定 unconditional_conditioning 参数,在生成中采样器会查看去噪后符合提示的图像(城堡)和去噪后看起来符合负面提示的图像(颗粒状、雾状)之间的差异,并尝试将最终结果远离否定提示词。

# 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, [...])

比如使用以下提示词避免生成水印和文字内容

lowres, bad anatomy, bad hands, text, error, missing fingers,
extra digit, fewer digits, cropped, worst quality, low quality,
normal quality, jpeg artifacts, signature, watermark, username, blurry

还如这个例子

ugly, fat, obese, chubby, (((deformed))), [blurry], bad anatomy,
disfigured, poorly drawn face, mutation, mutated, (extra_limb),
(ugly), (poorly drawn hands fingers), messy drawing, morbid,
mutilated, tranny, trans, trannsexual, [out of frame], (bad proportions),
(poorly drawn body), (poorly drawn legs), worst quality, low quality,
normal quality, text, censored, gown, latex, pencil

更多资料详见 官方 Wiki

提示词语法

以下内容主要适用于 SD-WebUI。NovelAI 用户可参照 官网文档

权重系数

权重系数可改变提示词特定部分的比重。

更多资料详见 Wiki:Attention Emphasis

对于 SD-WebUI,具体规则如下:

  • (word) - 将权重提高 1.1 倍
  • ((word)) - 将权重提高 1.21 倍(= 1.1 * 1.1),乘法的关系。
  • [word] - 将权重降低 90.91%
  • (word:1.5) - 将权重提高 1.5 倍
  • (word:0.25) - 将权重减少为原先的 25%
  • \(word\) - 在提示词中使用字面意义上的 () 字符

使用数字指定权重时,必须使用 () 括号。如果未指定数字权重,则假定为 1.1。指定单个权重仅适用于 SD-WebUI。

::: info
权重增加通常会占一个提示词位,应当避免加特别多括号。
:::

> ( n ) = ( n : 1.1 )
> (( n )) = ( n : 1.21 )
> ((( n ))) = ( n : 1.331 )
> (((( n )))) = ( n : 1.4641 )
> ((((( n )))) = ( n : 1.61051 )
> (((((( n )))))) = ( n : 1.771561 )

::: tip 关于 NovelAI
因为 NAI 使用的是 WebUI 2022 年 9 月 29 日之前的实现,所以权重增强语法是旧的 {} ,新的 WebUI 更改为 ()

换算关系

NAI 的 [word] = WebUI 的 (word:0.952) (0.952 = 1/1.05)

NAI 的 {word} = WebUI 的 (word:1.05)

NAI 花括号权重为 1.05/个,WebUI 圆括号权重为 1.1/个。
:::

::: tip How It Works
每个单词都将被解析为 768 维度空间内的一个向量,该向量“指向”概念的方向。

如果你缩放这个向量,这个概念会变得更强或更弱。

详见 Here
:::

无论使用何种具体的脚本,重复某个关键词似乎都会增加其效果。

值得注意的是,你的提示中存在越多的提示词,任何单一提示词的影响就越小。你还会注意到,由于这个原因,在增加新的提示词时,风格会逐渐消失。强烈建议随着提示符长度的增加改变风格词的强度,以便保持一致的风格。

标签替换

详见 Prompt Editing

允许您开始先使用一个提示词,但在生成过程中间切换到其他提示词。基本语法是:

  • [to:when] 在指定数量的 step 后添加 to 到提示
  • [from::when] 在指定数量的 step 后从提示中删除 from
  • [from:to:when] 在指定数量的 step 后将 from 替换为 to

其中 fromto 是替换前后的提示词,when 表示替换时机。

如果 when 是介于 0 和 1 之间的数字,则它指进行切换的步数的百分比。如果它是一个大于零的整数,那么这代表进行切换的字面步数。

替换标签可无限嵌套。

示例:对于 a [fantasy:cyberpunk:16] landscape

  • 开始时,模型将绘制 a fantasy landscape
  • 在第 16 步之后,它将采用 a cyberpunk landscape 继续生成。

标签轮转

详见 Alternating Words

允许您在生成过程中每步轮换使用多个提示词。基本语法是:

[a|b|c]

生成的第一步将使用 a,第二步将使用 b,第三步将使用 c,第四步将使用 a,依此类推。

多组提示词生成

详见 Composable-Diffusion

::: warning
AND 的语法优先级最高,因此试图使用 AND 分离单个提示词的操作是错误的。注意甄别部分公开教程中的错误示例。
:::

允许在生成时同时使用多组提示词,并将结果直接相加。基本语法是:

a, b, c AND d, e, f

这将使用两组提示词 a, b, cd, e, f 生成,并将它们的结果相加。

Prompt matrix 参数矩阵

使用 | 分隔多个 Tag,程序将为它们的每个组合生成一个图像。 例如,如果使用 a busy city street in a modern city|illustration|cinematic lighting ,则可能有四种组合(始终保留提示的第一部分):

  • a busy city street in a modern city
  • a busy city street in a modern city, illustration
  • a busy city street in a modern city, cinematic lighting
  • a busy city street in a modern city, illustration, cinematic lighting

图片转图片

一般我们有两种途径对图像进行修复:PS 和 InPaint,使用方法也十分多样。

WebUI 使用 --gradio-img2img-tool color-sketch 启动会带入一个插件对图片进行颜色涂抹(这里不是 Inpaint)

处理图片大小

  • Just resize : 将图像调整为目标分辨率。除非高度和宽度完全匹配,否则图片会被挤压
  • Crop and resize:调整图像大小,使整个目标分辨率都被图像填充。裁剪多余部分。
  • Resize and fill:调整图像大小,使整个图像在目标分辨率内。用图像的颜色填充空白区域。

注意颜色

无论是 3D (DAZ 这样的 3D 模型) 还是线稿,AI 只识别 色彩 ,而不是线条,色彩直接决定图转图的效果。

三渲二

调整 3D 模型骨架比寻找样图更容易。

可以结合 3D 建模 摆 Pose,也可以使用 MMD 相关软件。

如果是真人图片,需要适当提高 CFG Scale 相似度,结合提示词一起生成。降噪 Denoising 越高,相关性越低。

推荐使用 DAZ 或者 Blender 或者 Unity ,在对 3D 模型的测试中,色彩主要影响 AI 的绘画效果,所以你的模型需要有纹理。

如果你使用 Blender ,你可以使用 这个视频 分享的 模型娃娃

Inpainting 修补

::: tip 不同之处
PS 重新绘画投入 Img2Img 的话,会导致画风的变动,而 Inpaint 就不会。
:::

在 Inpainting 选项卡中,在图像的一部分上绘制蒙版,该部分将被重新绘制。

Masked content 设置确定在修复之前放置到遮罩区域中的内容,一般选 original,可以保持图片一致性,如果你不希望修补内容继承原来的色彩分布,选 fill 就是使用图片的大部分底色,选 latent noise 可以获得随机色彩点阵图(使生成内容脱离关联)。

它们的效果如下:

示意操作 fill original latent noise latent nothing
image image image image image

mask 横条决定了涂抹区块边缘的平滑程度。original 指代 原图,fill 是 填充底色

::: tip
fill 要更多 step 才能消除不自然感.
:::

mask 横条决定了模糊程度。original 是原图,fill 是填充底色fill 要更多 step 才能消除不自然感。

Inpaint at full resolution 即全分辨率修复。默认情况下 Inpaint 会将生成的图像大小 整体 调整为 UI 中指定的目标分辨率。启用 Inpaint at full resolution 后,仅调整遮罩区域 的大小,并在处理后将其 粘贴回 原始图片。这允许你处理大尺寸图片,并允许以更大的分辨率渲染修复对象。

目前有几种方法进行重绘制操作:

  • 使用鼠标在网页上绘制蒙版(Inpaint masked 指重画涂鸦区域,Inpaint not masked 指重画除涂鸦之外的区域)
  • 在外部编辑器中擦除部分图片并上传透明图片。 透明区域会成为蒙版的一部分。注意:某些编辑器默认将完全透明的区域保存为黑色。
  • 将模式(图片右下角)更改为 "Upload mask" 并为蒙版处理为单独的黑白图像(白色部分会被 inpaint)。

如果 inpaint at full resolution 出现黑块,可能是内存不足,尝试卸载 VAE 模型。

image

开源调研-AI 绘画全参数讲解-002img2img 图像到图像

通过这种方法,我们可以更改角色衣物风格或者其他任何细节。

如何教会 AI 画手

Outpainting 外部修补

Outpainting 扩展原始图像并修复创建的空白空间。

您可以在 img2img 选项卡底部的 Script -> Poor man's outpainting 中找到该功能。

与正常的图像生成不同,Outpainting 似乎从大步数中受益匪浅。一个好的外绘需要一组与图片相匹配的优秀提示词、最大的 Denoising 和 CFG 比例,以及使用 Euler a 或 DPM2 a 生成 50 到 100 步数。

Loopback 回环生成

在 img2img 中设置 loopback 脚本,它允许自动将输出图像设为下一批的输入图像。

Batch 数设置控制获得多少次迭代

通常,在执行此操作时,您需要自己为下一次迭代选择许多图像中的一个,因此此功能的有用性可能值得怀疑,但反正我已经设法获得了一些我无法获得的非常好的输出。

从附加信息提取提示词

程序默认会在图片中加入提示词,参数,模型信息,对于没有压缩的原图,可以拖入 PNG Info 选项卡,查看其内嵌的生成信息。

也可以使用 在线工具 查看它。

Denoising strength 降噪强度

Denoising strength 降噪强度

值越低,生成的图片与原图的差距越小。通常由图片清晰度与风格共同确定。

从图片内容提取提示词

CLIP Interrogate

CLIP 可以从图像中提取令牌。

默认情况下,只有一个列表 - 艺术家列表(来自 artists.csv)。

不过你可以通过执行以下操作添加更多列表:

  • 在与 webui.py 相同的位置创建 interrogate 目录
  • 将文本文件放入其中,每行包含相关描述

你可以在这里查看使用哪个文本文件的例子。实际上,你可以直接用这个例子中的文件 —— 除了 artists.txt ,你已经有一份艺术家列表在 artists.csv 中了不是吗(或者用这个也行,随你)。每个文件都会使最后的描述增加一行字。如果你将 .top3. 放到文件名中,比如 flavors.top3.txt ,文件中相关度最高的三行将会被添加到提示词中(其他数量也行)。

DeepDanbooru Interrogate

新版 Stable-Diffusion-WebUI 已无需使用 --deepdanbooru 开关启用该功能。

可在 img2img / 图生图 页面中看到 DeepDanbooru Interrogate 按钮。可以从图像中提取令牌。

设置页面中可以配置是否使用空格代替下划线 (use spaces for tags in deepbooru),及是否自动使用 \ 转义括号 (escape (\) brackets in deepbooru (so they are used as literal brackets and not for emphasis))。

低显存生成大分辨率图片

如果遇到生成鬼图或者低显存生产高分辨率图片,可以采用 Img2Img 画质提升脚本。

强烈推荐使用 Extras 功能对低分辨率进行超分辨率处理。

使用脚本

如果你想使用脚本提供的分辨率增强,这里有 Img2Img 的具体流程:

  1. 使用 --medvram 或者 --lowvram 参数启动 webui
  2. 选择较小分辨率生成图片。记住生成图片的分辨率。生成完毕之后,复制图片的 Seed
  3. 生成完毕后,先查看图片效果是否满意。如果满意,直接将图片送进 Img2img。(点击 Send to img2img
  4. 在 img2img 界面底部,有一个 Script 选项。将 Script 选为 SD Upscale,里面的 Tile overlap 尽量调小
  5. 一般送入 Img2img 的图,输入框自动填充原提示词。如果你发现 prompt 有变动,请手动填充
  6. 选择合适的 Sampling StepsSampling method
  7. 确认你的 WidthHeight原图一致
  8. 将第 2 步复制的 Seed 填入 img2img 的 Seed 里并生成

这里的 Width 和 Height 是超分时 img2img 的图片大小,如果不等会导致出现重叠问题

SD Upscale 选项在 Img2Img 的 Script 栏目中,主要作用是提升分辨率。

脚本解决方案来源于此


实战技巧

这个简短的实战指南,可以让你快速了解如何合理调整参数达成目的效果。

目前,AI 处理不好细节和多人物,如果一个个处理,光影结构就会乱掉。如果修图,不如重画。但是画背景和做预览很实用。

核心逻辑就是缩小预选数据的范围,调节天平在消极和积极提示之间的方向,还有使用部分语法控制提示词效果的强烈程度和起效过程。

灵感表

角度
人物 表情 头发 眼睛 衣着 状态 姿势位 镜头位
场景 广狭选择 光影选择 背景主体 人物事件地
数据限定 绘画类型 评价限定 联想元素 3D/2D
事件 缩写词 SFW/NSFW 出品公司 作品品牌

画作焊接!

通过 PaintHua-无限外延画布的在线工具 ,你可以连续 “焊接” 作品,非常方便。只需要在启动命令加上 --api 参数,然后打开网页就可以使用。

GitHub

并不支持在任意模型上进行图像外延,因为它们不是 Inpaint 模型 (Stable Diffusion 有专用的 Inpaint 模型。)

遏制风格污染

介绍如何在 WebUI 中生成图片时,将主体作为重点,而不是画风。[^12]

为了得到预期结果,我们将 style 改为 [style:10]

Automatic 1111 的 WebUI 提示词语法中,[x:10] 告诉 稳定扩散 直到第十个 step 再渲染这个提示词。

当达到 10 步的时候,一个基本的图像已经形成了,所以风格化肆意污染主体成分,而是像在现有图像上进行 IMG2IMG(你可以把它看成是 Img2img 的形式)

你可以根据你所做的整体步骤的多少来试验这个数字。如果你把格式改为 [x:0.2](即低于 1 的数字),那么它就变成了百分比,[x:0.6]告诉 SD 等到总步骤数的 60% 时再渲染 x ,以此类推。

尺寸选择

不应该将其与画质挂钩,尺寸一定程度上影响了主题,因为它潜在代表选择的类别(比如竖屏人物,横屏风景,小分辨率表情包居多)。

若需提升画质,可采取如 waifu2x 等的成熟技术提升分辨率。

视角

推荐使用 Danbooru 含有的术语

image

引用来自日本 Wiki 的图片,作者不明

参数 解释
extreme closeup 脸部特写
close up 头像
medium close up 证件照
medium shot 半身
cowboy shot 无腿
medium full shot 无脚
full shot 全身

噪声

分类 描述 示例 处理
粗糙 细节不够,人物像米糕一样 需要适当提升 step
波浪 密集的波浪或图案 向量不“均匀”,可能是权重设置太高
模型 训练处理的模型非常抽象 向量不“均匀”,可能是炼丹炼炸了
冲突 实景中的扁平动漫纸片儿 可能混用了不同次元或主题的提示词
彩虹 输出混乱的彩虹色图片 可能是生成分辨率被设置得太低。
尺寸 大尺寸下输出扭曲的图片 开启Highres Fix选项或使用 小分辨率+超分 的方法

动漫风格

anime coloring 会有很好的效果,像动漫截图一样。(如果遇到黑白色,需要指定人物部件的色彩)

av304175820 - AI 绘 | 让你的图片更特别!32 种风格化 prompt 简介 @ Bilibili

优化作品效果

对目标进行审视

想一想,自己想要的作品,在互联网上会被打上什么标签呢?

贴纸肯定不会打上 masterpiece, best quility, 吧。

另外就是如果要求的是像素作品,应该移除一些冲突的消极提示(如果有的话)。

顺序调整

在前面的词汇会锚定画面的色彩分布。什么重要什么放前面。

语义偏移防范

为了防止语义偏移,优先考虑 emoji,然后少用不必要的 with 一类的复杂语法。

彩虹混乱图

如果输出混乱的彩虹色图片,可能是生成分辨率被设置得太低。

波浪噪点图

密集的波浪或图案,可能是因为权重设置太高了。

抠图?

扣过的图,其余背景都会被处理成黑色。

如果你需要背景,效果一般不是很好,建议填色后再操作。

粗糙的噪声

细节不够,人物像米糕一样。需要适当提升 step.

保护图片不被分割线切割

消极提示加入

comic 2koma 3koma 4koma collage

应该可以改善。

跨领域术语/奇门遁甲

跨领域术语的核心逻辑就是缩小指定的数据范围,从画面内容之外的平台,领域,事件上入手来提升效果。

是的!你可以在提示中使用 Film GlossaryFILM GLOSSARY 摄影术语Cinematic techniques 摄影技术,以及绘画术语 (类型) 来控制基本情况。

跨领域!你甚至可以使用各种惊险运动的名词来生产一些特效...比如空降

比如,景深,光圈,构图,拍摄机位,运动元素,艺术摄影术语表中文介绍

但是 这种效果可能会带来附加作用:引入你不希望见到的风格(如实景而不是而二次元)数据进入图片。把握好量度。适当增加 Step 和 风格提示 来改善.

你还可以使用 平台名 来限定数据集的范围,比如 pixiv 之类的词汇。

扩展阅读

迭代草图

详见 GitHub Discussions 讨论串

这里讨论一下如何将 手绘草图 通过 AI 绘画优化,注意不是二次元

在第一次迭代中,您不需要太多 Steps,CFG 可以非常低(以获得更好的多样化结果),如果不想完全丢失草图,Denoising 应该在 0.3 - 0.4 左右。

在最后的迭代中,增加 Steps 和 Denoising 强度(但不超过 0.8,否则图像将被破坏,尤其是在大于 512*512 时)请参见 这里,同时根据需要提高 CFG 和尺寸。

你可以随时修复提示(添加或删除出现的细节)并尝试不同的采样器。

另外,你不应该在初次生成使用一个固定不变的种子。

如果你提供一个种子(而不是随机的 -1),你的图像很快就会变得过饱和、过度锐化、过度像素化..... 当然如果想微调,可以使用固定种子。

多人物 / 宽幅单人物

单纯使用 txt2img 无法有效指定多人物情况下单个人物的特征。

较为推荐的方案是 打草图 + IMG2IMG 的方式。

宽幅画作单人物生成最好打草图,进行色彩涂抹,确定画面主体。

多人物确定人物数量,最好使用草稿 / 有色 3D 排列 + 图生图。

进行手掌修复

将图片送入 inpaint,使用大致相同的提示词,将关于 的提示放在前面,根据你希望它变动多少来设置降噪(如果只是希望手更完整,调至 0.25 以下),然后保留步骤和 CFG 与 txt2img gen 相同。

或者仅遮住手部,以全分辨率修复,大大降低填充(它使用周围的像素来创建上下文,但只是在重新制作手部)并仅提示手部问题(详细的手部描写等)

CFG 越高,越符合提示词,降噪越高越偏离原图。

同人物 & 差分

需要用到进阶的 Img2Img 相关内容,最好的方法是准备一个带有色彩的 3D 母本模型,然后这样就可以保证基本一致。

也可以用很多提示词来限制角色内容,出很多张,挑能用的作品。

如果是表情或者是背景,可以采用 重绘画 技巧。

如果你想了解一些差分的实例,5CH 日语 Wiki 提供了一个实例。

复刻

如果想复刻他人生成的图片,需要相同的 seed ,提示词和其他参数(包括尺寸)。不过如果对方使用了 微调模型,那么你就几乎无法复刻。

自欺欺人式复刻:图转图,降噪拉到到 0.3 以下...

使用 AI 进行设计

背景

拿到一张饱和度稍微高的照片后,可以用 AI 进行处理,然后当作背景使用。使用 anime coloring 来增强动漫风格。

图标

看这个

表情包

表情包效果真的很好。 sticker 配合 西方颜文字 完成度超高!

文档编写者试了一下,以下 prompt 可以出高质量表情包。

不要对贴纸要求质量提示词。

积极词汇

1girl,sticker,chibi,Q,
white background,

masterpiece,best quality 可加可不加,质量不够就加

lowres 可加可不加,不够复古就加

chibi 控制角色为 Q 版(大头小身),不够 Q 就加

sticker 是指定风格为社交软件贴纸,必须

消极词汇

bad anatomy, bad hands, text, error, missing fingers, extra digit, fewer digits, cropped, worst quality, jpeg artifacts, signature, watermark, username, blurry, bad feet

low quality 可加可不加

尺寸要求正方形。

立绘

av559362671 - 【AI 绘图】画师不是 AI 的附庸!手绘+AI 辅助展示!StableDiffusion/NOVELAI 辅助角色立绘设计最详细分享! @ Bilibili

BV14e4y1U7r9

修改画作

想要用 WebUI 改画或者手动添加元素?下面是一个小指南。

首先,IMG2IMG2 和 Inpaint 的效果是完全不同的。如果你不希望风格发生变动,不要选择 IMG2IMG2.

为了避免图片拉伸,尺寸上都应该 尽量靠近原图尺寸,选择 Crop and resize 也就是裁切后调整大小

Masked Content

Masked content 相关设置确定在修复之前放置到遮罩区域中的内容,它决定了初始的参考内容(origin 就是模糊之前蒙版的内容,而 latent nosie 是以噪声(很多随机色素点点做参考)。

image

latent noise 是确定 AI 参考的内容,而 Denoising strength 可以理解为对参考的偏离度。

变动元素

如果需要变动元素,抠图、贴图即可。

如果需要添加元素,我们可以通过 PS 给角色移植一个手让 AI 来润色,或者为没有下半身的半身像嫁接其他作品的下半身让 AI 修复。

image

基于原图进行微调

使用 Inpaint,主要场景是去除/替换。

首先要对人物边缘描细线,然后打上色块(如果有阴影,取亮色或者画全阴影)。变动强度选择较低的 0.3 左右的去噪(越低越接近输入的图片)。

然后使用 Img2Img Inpaint + 相关提示词修复,不满意可以再改,直到满意。然后对图像进行 realesrgan 超分,去除图像纹理。

image

修复绘画技巧/Inpaint/PS 重绘画/嫁接修复/躺姿补全

使用 PS 软件增删元素,然后重新生产。这可以解决画手的问题。

AI 也接受其他成图进行嫁接(解决躺姿没有下半身的问题)

比如

image

一张图片 展现 WebUI 下 img2img 中不同参数下效果的详细对比图(prompt、steps、scale、各种 seed 等参数均保持一致)

纵轴是 Denoising strength(线上版的 strength),横轴是 Variation strength


杂项

提示词原理

图像生成器

image

information creator 完全在图像信息空间(或潜伏空间)中工作。这一特性使它比以前在像素空间工作的扩散模型更快。在技术上,这个组件是由一个 UNet 神经网络和一个调度算法组成的。

Text Encoder

提示词的解析由 Text Encoder/CLIP 处理 (token embedding),这里是提示词转译给 AI 的关键一步。

ClipText 用于文本编码。

输入文本,输出 77 个标记嵌入向量,每个都有 768 个维度。

information creator

UNet + Scheduler 在信息(潜在)空间中逐步处理/分散信息。

它输入文本嵌入和一个由噪声组成的起始多维数组(结构化的数字列表,也叫张量),输出一个经过处理的信息阵列。

Image Decoder

Text Decoder 根据从 information creator 那里获得的信息绘制一幅图画。 它只在过程结束时运行一次以生成最终图像。

Autoencoder Decoder 使用处理过的信息阵列绘制最终图像的解码器。输入处理过的信息阵列 (dimensions: (4,64,64)),输出结果图像 (dimensions: (3, 512, 512),即 (red/green/blue, width, height)。

CLIP 的工作

image

CLIP 训练图 from https://bbs.huaweicloud.com/blogs/371319

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 的解码器解码输出。

image

扩展阅读:

WebUI 的实现

WebUI 的 prompt_parser 通过本地 WebUI 实现了渐变等功能。

WebUI prompt 语法会转换为相应时间的 prompt,然后通过 embedding 交给 Ai 处理。

关于权重的实现:权重增加通常会占一个提示词位。

关于渐变的实现:到了指定 Step,WebUI 程序会替换对应提示词,达到渐变效果。

其他以此类推。

整个看下来,原理流程如图 image

By RcINS

你可以在 illustrated-stable-diffusion 看到全面的介绍。本节部分内容也是由此翻译。

良好参数(风格趋向插画)

an extremely delicate and beautiful

草图风格

描述
sketch 可以让图片看起来像随手画的草稿
lineart 可以让线条变得很粗
posing sketch, monochrome 黑白草图
rough sketch 上了颜色的草图
monochrome+lineart 情况下一般只会让眼睛上色,强调发色后头发也可以上色
monochrome, gray scale, pencil sketch lines 做出的铅笔速写的感觉

利用 sketch,pastel color,lineart 的 tag 模拟一张图的绘画过程

艺术风格

描述
chibi 可以画出低头身比的效果(二头身, 三头身)
watercolor pencil 可以生成彩铅画
faux traditional media 可以做出签绘的风格
anime screeshot, 可以让画面变成动画风格
retro artstyle 赛璐璐风
photorealistic, painting, realistic, sketch, oil painting 厚涂
pastel color 和 sketch 搭配会有速涂的质感

杂志/设定集 风格

描述
official art 变得更加官方一点
three views from front, back and side 和 costume setup materials 可以用来生成设定图
multiple views 会出现类似设定图
character sheet 会出现设定图
magazine cover 会把背景换成杂志封面, 配合 office art 更像真实杂志(虽然字没法看)
magazine scan 类似杂志内页的风格
posing 会强调有一个动作, 不至于出现混乱的动作(露出有六个手指头的手)
caustics 画面向主题聚焦, 类似海报

常用参数: SFW

人物数量 描述
数量 one boy / one girl / two boy / two girl (one_boy_one_girl 是错误的)
人物画风 描述
质量提升参数 masterpiece, best quality
原神 Genshin Impact
萝莉 female child , loli (画风差)
人物样貌 描述
头发 hair
长发 longhair
短发 shorthair
眼睛 eyes
渐变颜色长发 gradient pink longhair
渐变颜色眼睛 gradient pink eyes
粗眉毛 thick eyebrows
猫尾巴 cat tail
猫耳朵 cat ears
动物耳朵 animal ears
毛茸茸的动物耳朵 animal ear fluff
刘海 bangs
两眼之间的头发 hair between eyes
眉毛后面的头发 eyebrows behind hair
锁骨 collarbone
斗篷(要在很前面才有效) cape
乳房尺寸 small breasts
出汗 sweating
颜色丝袜(和长丝袜冲突) white stockings , black stockings
长丝袜 thighhighs
女仆 maid
发带 ribbon
爱心眼 heart-shaped pupils
御姐/JK/辣妹? gyaru
肌肉发达 muscular
天使翅膀(要是形容人的第一个才正常) angel wings
颜色内裤(赠内衣) pink underpants
肚脐 navel
颈部颜色项圈 white collar
黑色皮肤 dark skin
撕裂的衣服 torn clothes
撕裂的裤子 torn legwear
开襟夹克(配合叉开腿特色) open jacket
异色瞳 heterochromia_blue_red
吊袜带(会和内衣冲突) garter straps
靴子 boots
眼罩 blindfold
流泪 tears
项链 necklace
眼镜 glasses
比基尼 bikini
湿衣服 wet clothes
透明衣物 transparent raincoat , transparent jacket , transparent tshirt
唾液(自动伸舌头) saliva
流口水(和唾液冲突) drooling
水手服 sailor dress
环境样式 描述
在床上 on bed
光线反射 reflection light
赛博朋克 cyberpunk, city, kowloon, rain
在地毯上 on carpet
在瑜伽垫上(它分不清什么是瑜伽垫,只知道色块比较大,所以要配合 one girl 用) on_yoga_mats
人物视角 描述
正面视角 from viewer
从上到下视角 from below
全身 full body
人物状态 描述
叉开腿 spread leg
露出腋下 armpits
举起手 hands up, arms up
爪子手 paw pose
站立 standing
行走 walking
吐舌头 tongue out
抬起腿 legs up
手放背后 arms behind back, hidden hands
衬衫 shirt
长袖 long sleeves
连帽衫 hoodie
褶边 frills
喇叭裤 bloomers
白色连衣裙 white dress
捆绑 bondage , bondage body , bondage foot , bondage hand
蹲下 crouch , squatting
真画风 photorealistic
跪下 kneel down
湿身 wet body

提示词速查

调参工程师

@WangShuXian6
Copy link
Owner Author

WangShuXian6 commented Jul 30, 2023

stable diffusion webui 指南-进阶深入


识别 AI 作品

本节讨论 AI 作品与人类绘制作品可能存在的显著区别。

采用 Img2Img 生成的图片、或经人工二次处理的图片不在此讨论范畴中。

内容译自 human-or-ai-walkthrough

失效方法

完成度

目前由 AI 绘制的插图完成度已经逼近甚至超越了真人画师,所以粗略查看是无法区分是否由 AI 绘制。

主题/风格/氛围

通过学习 Prompt Editing ,任何人都可以很好的摆脱 AI 默认的绘画风格,并让 AI 生成符合主题/绘画风格的图片(越知名则越容易,例如京都动画的风格)。所以根据插图的主题,画风特征判断已经不可行了。

有效方法

既然不能根据画风或主题鉴别 AI 绘画,那么我们只能从细节入手。AI 不擅长保持细节一致,而人类很容易保持细节的一致性。

左右眼形状和高光的一致性

这是最明显的特征。对于人类,除非有特殊原因,如人物处于特殊情况或采用特效,否则左右眼和高光的形状和数量是一致的。

然而,在人工智能绘画的情况下,左眼和右眼的绘画和高光几乎肯定是不同的。人类可以理解 "左眼和右眼在物理上是相同的形状,在相同的情况下,那里当然是一致的",而人工智能却无法理解绘画背后的原理。

其中最明显的是 "高光与眼白融为一体,瞳孔破碎"。人类知道 "首先是眼球,然后是瞳孔,在此基础上,周围的光线反射形成光泽",所以 "即使瞳孔的一部分被高光挡住,瞳孔本身的形状也不会被破坏"是理所当然的,但人工智能不承认任何 "眼白、瞳孔和亮点之间的逻辑关系",它只学习最终的结果。眼睛的不自然变形是判断的另一个依据。人类知道眼睛本质上是一个规则的圆,但人工智能却不知道。

AI 绘制插图的另一个特点是,它通常会稍微改变左眼和右眼的颜色。当然也有左右两边眼睛颜色不同的角色,但在大多数情况下,这些角色都可以清楚地识别为具有不同颜色。它是可以用来判断一个角色是否一眼看去颜色相同,但仔细观察却又不同的因素之一。

然而,这并不是一个重要的依据,因为这样的插图很常见。 另外,左眼和右眼的颜色因周围环境的不同而显得不同,这是很自然的事情,所以不要搞错。

左右眼的睫毛的一致性

在人类绘制的插图中,睫毛通常是沿脸部中心线对称的。 然而,在人工智能生成的插图中,出现在左眼和右眼的睫毛的数量和位置通常是不同的。

然而,即使在人类绘制的插图中,左眼和右眼的睫毛形状也会有一定程度的差异,所以即使左眼和右眼的睫毛形状不同也没有什么关系。另一方面,如果睫毛的形状从左到右是一致的,同时还有眼睛和高光,那么几乎可以肯定它是由人绘制的插图。

服装的对称性

人类知道 "大多数衣服都是对称制作的";人工智能不知道这一点,但它在某种程度上知道服装设计往往在左边和右边有相似的形状。

结果发生这种情况:

这件衣服有一个对称的设计,但仔细观察,左右两边的设计在拓扑学层面上明显不同。

需要注意的是,特征应该是 在拓扑学(=形状的连接,件数,......)层面上是不同,而不是 对称或不对称。 即使是人类不可能把对称的物体画得完全对称,会出现一些尺寸和形状的失真。不对称的服装设计也很常见,所以不要搞错。

这种不对称性不仅可以适用于服装,也可以适用于皇冠和发饰等装饰品。

重复形状的一致性

这也是一个主要的特征,AI 不擅长连续绘制相同的形状,即使是一件衣服上的一列纽扣。

当然,即使是人类画出来的,也会稍有偏差,有时还会故意不绘制整齐,所以很难说。但最起码人工智能不可能像人一样故意将相同的形状以相等的间隔排列。

简单的几何形状

人工智能并不擅长画直线、规则的圆和一定大小的干净的椭圆。 这是因为人工智能不知道这些形状的构思。但 AI 很擅长在背景中画直线,建筑物的边缘、管道等往往被画成直线。

如果插图中出现了简单、清晰的形状,就可以用来判断这幅插图是由人制作的。

人工制品的功能一致性

人工制品的各个部分应该天生具有 "它放在那里的意义 "和 "它提供的功能"。

因此,如果有一个人工制品,它是各部分的聚合,而这些部分是一致的意义,以提供一个特定的功能,我们可以判断该插图是人类绘制的。

需要注意的是,这种不一致的情况不应该被用来判断一幅插图是由人工智能绘制的 这是因为人类也可以有意地画出这样的插图。这只意味着人工智能无法绘制足够好的机械插图。

字符

人工智能无法正确绘制真实的字母。 大多数时候,它输出的字母看起来有些未来主义,或者好像它们是在一个完全不同的文明中发明的。

这是一个非常明显的特征,但需要注意的是,这不应该被认为是人工智能绘画的特征。 人类自然有可能设计出他们从未见过的字母,有许多插图中的神秘字母就是这样设计的。

另一方面,如果字母被画在'正确的位置'和'适当的顺序',这是确定该插图是由人画的一个强有力的因素。 这是因为即使是输出格式良好的文本也很困难,对于今天的人工智能来说,把它放在正确的地方是一项极其困难的任务。

行的作用的一致性

在人类绘画中,绘制物体边界的线不能在线的中间突然变成另一个物体的边界。线条也不能在物体的内部和外部之间变换。

人工智能不知道线条应该是一致的。遇到相近的像素点,它很容易地以 哦,我连! 的想法把线顺理成章地连接起来,渲染成一条线。

溶解、融合和噪点

这是人工智能生成的插图中非常常见的一点。 内部/外部的判断变得模糊不清,导致物体溶解,与其他物体融合,或产生不自然的噪点。

噪点和溶解目前可以通过超分和增量训练进行修复。

背景色

用头发或其他物体(如手臂)围成的一个本应是空的空间,AI 有可能会画成与周围环境不同的背景。通常情况下,封闭的背景被涂上比其他空间稍亮的颜色。

不连续

人类了解一个物体被另一个物体遮挡时,同一物体持续存在于它的下方。人工智能并不了解,即使是一根头发的短暂中断,也可能导致前后对象之间失去连续性。

细节

人类可以理解,物体的大小与它对画面的重要性无关,因此,即使是小的物体,如耳环或皮带,如果它们是画面的重要元素,也会被仔细画出来。 对这种小物体的精心绘制是决定插图是由人绘制的一个主要因素。


术语解释

黑话

缩写/术语 解释
oneshot 一张图
LAION 一个图像数据集库 https://laion.ai
aug (augmentaion) 通过裁切、翻转获取更多数据集的方式
ucg unconditional guidance
ML 机器学习
Latent Space 潜在空间
LDM Latent Diffusion Model 潜在扩散模型
缩写 解释
NAI (NovelAI ,一般特指泄露模型)
咒语/念咒 提示词组合 (prompts)
施法/吟唱/t2i 文本转图像 (txt2img)
i2i 图像转图像 (img2img)
魔杖 图像生成所涉及到的参数
inpaint/outpaint 局部重绘,一种 img2img 的方法
ti/emb/嵌入模型 模型微调方法中的 Textual Inversion,一般特指 Embedding 插件
hn/hyper 模型微调方法中的 hypernetwork,超网络
炸炉 指训练过程中过度拟合,但炸炉前的日志插件可以提取二次训练
废丹 指完全没有训练成功
美学/ext Aesthetic Embeddings,一种嵌入模型,特性是训练飞快,但在生产图片时实时计算。
db/梦展 DreamBooth,目前一种性价比高(可以在极少步数内完成训练)的微调方式,但硬件要求过高
ds DeepSpeed,微软开发的训练方式,移动不需要的组件到内存来降低显存占用,可使 db 的 vram 需求降到 8g 以下。开发时未考虑 win,目前在 win 有兼容性问题故不可用
8bit/bsb 一般指 Bitsandbyte,一种 8 比特算法,能极大降低 vram 占用,使 16g 可用于训练 db。由于链接库问题,目前/预计未来在 win 不可用

损失

一种衡量指标,用于衡量模型的预测偏离其标签的程度。或者更悲观地说是衡量模型有多差。要确定此值,模型必须定义损失函数。例如,线性回归模型通常将均方误差用于损失函数,而逻辑回归模型则使用对数损失函数。

损失函数

损失函数(loss function)或代价函数(cost function)是将随机事件或其有关随机变量的取值映射为非负实数以表示该随机事件的“风险”或“损失”的函数。 在应用中,损失函数通常作为学习准则与优化问题相联系,即通过最小化损失函数求解和评估模型。

关于 损失函数 (Archive)

潜在空间

压缩数据的表示,其中相似的数据点在空间上更靠近在一起。

关于潜在空间的中文解释见 理解机器学习中的潜在空间

过拟合 (Overfitting)

创建的模型与训练数据过于匹配,以致于模型无法根据新数据做出正确的预测。

收敛 (Convergence)

通俗来说,收敛通常是指在训练期间达到的一种状态,即经过一定次数的迭代之后,训练损失和验证损失在每次迭代中的变化都非常小或根本没有变化。也就是说,如果采用当前数据进行额外的训练将无法改进模型,模型即达到收敛状态。在深度学习中,损失值有时会在最终下降之前的多次迭代中保持不变或几乎保持不变,暂时形成收敛的假象。

ENSD

在设置页中的 eta noise seed delta 是 eta 噪声种子增量。

它对处理你种子的操作增加了一些偏移量。

NovelAI 官方在此处使用 31337

CLIP

CLIP 是一个非常先进的神经网络,可以将提示词文字转换为数字表示。神经网络在这种数值上工作得很好,这就是为什么 SD 的开发人员选择 CLIP 作为 Stable Diffusion 生成图像方法中涉及的 3 个模型之一。由于 CLIP 是一个神经网络,这意味着它有很多层。您的提示词以一种简单的方式被数字化,然后经过网络层层处理。在第一层之后得到的运算结果,会输入第二层,结果再输入第三层,等等,直到到达最后一层,这就是 SD 中 CLIP 模型的使用方法。Stop At last layers of CLIP model 滑块的默认值是 1,代表通过 CLIP 神经网络的所有运算层。但是您可以提前结束运算,直接使用倒数第二层的输出 - 即滑块值 2。您停止的越早,神经网络在提示词上工作的层数就越少。

> https://github.com/AUTOMATIC1111/stable-diffusion-webui/wiki/Features#ignore-last-layers-of-clip-model

要让 AI 作画,先要让程序“听懂”你的指令,比如

a big cherry tree above a lake with flying petals in the sky.

对一个相对复杂场景的文本描述,AI 需要能“理解”并匹配到对应的画面,大部分项目依赖的都是一个叫 CLIP 的模型。

CLIP 在生成模型的潜在空间进行搜索,从而找到与给定的文字描述相匹配的潜在图像。

它非常现代且高效。

CUDA

配合 CUDA 技术,显卡可以模拟成一颗 PhysX 物理加速芯片。

使用 CUDA 技术,GPU 可以用来进行通用处理(不仅仅是图形);这种方法被称为 GPGPU。与 CPU 不同的是,GPU 以较慢速度并发大量线程,而非快速执行单一线程。以 GeForce 8800 GTX 为例,其核心拥有 128 个内处理器。利用 CUDA 技术,就可以将那些内处理器做为线程处理器,以解决数据密集的计算。

LDM

Latent Diffusion Model 潜在扩散模型。

image

下面的框

潜在扩散模型

VAE

Variational autoencoders (VAEs) 是一种用于学习潜在表示的深度学习技术。它们也被用来绘制图像,在半监督学习中取得最先进的成果,以及在句子之间进行插值。

VAE 作为一个生成模型,其基本思路是把一堆真实样本通过编码器网络变换成一个理想的数据分布,然后这个数据分布再传递给一个解码器网络,得到一堆生成样本,生成样本与真实样本足够接近的话,就训练出了一个自编码器模型。那 VAE (变分自编码器) 就是在自编码器模型上做进一步变分处理,使得编码器的输出结果能对应到目标分布的均值和方差。

详见 变分自编码器 (Archive)

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)

模型的权重在训练期间的一次更新。迭代包含计算参数在单个批量数据上的梯度损失。

Tensor

TensorFlow 程序中的主要数据结构。张量是 N 维(其中 N 可能非常大)数据结构,最常见的是标量、向量或矩阵。张量的元素可以包含整数值、浮点值或字符串值。

检查点 (Checkpoint)

一种数据,用于捕获模型变量在特定时间的状态。借助检查点,可以导出模型权重,跨多个会话执行训练,以及使训练在发生错误之后得以继续(例如作业抢占)。请注意,图本身不包含在检查点中。

Embeddings

一种分类特征,以连续值特征表示。通常,嵌入是指将高维度向量映射到低维度的空间。例如,您可以采用以下两种方式之一来表示英文句子中的单词:

  • 表示成包含百万个元素(高维度)的稀疏向量,其中所有元素都是整数。向量中的每个单元格都表示一个单独的英文单词,单元格中的值表示相应单词在句子中出现的次数。由于单个英文句子包含的单词不太可能超过 50 个,因此向量中几乎每个单元格都包含 0。少数非 0 的单元格中将包含一个非常小的整数(通常为 1),该整数表示相应单词在句子中出现的次数。
  • 表示成包含数百个元素(低维度)的密集向量,其中每个元素都包含一个介于 0 到 1 之间的浮点值。这就是一种嵌套。

在 TensorFlow 中,会按反向传播损失训练嵌套,和训练神经网络中的任何其他参数时一样。

激活函数

一种函数(例如 ReLU 或 S 型函数),用于对上一层的所有输入求加权和,然后生成一个输出值(通常为非线性值),并将其传递给下一层。

权重 (Weight)

线性模型中特征的系数,或深度网络中的边。训练线性模型的目标是确定每个特征的理想权重。如果权重为 0,则相应的特征对模型来说没有任何贡献。


@WangShuXian6
Copy link
Owner Author

WangShuXian6 commented Jul 30, 2023

stable diffusion webui 指南-模型训练


模型精调

这节对显卡显存大小的要求较高。训练前,需要确定至少有 8 GB 专用显存。大规模的模型训练可能需要至少 12 GB 专用显存。

模型训练的不同方法

如果你在 --medvram 参数下开始训练,可能会出现 RuntimeError: Expected all tensors to be on the same device 错误,无法创建训练。
这是优化机制导致的问题,WebUI 在 这次提交 中允许了在 --medvram 下创建 embedding 的情况。请更新版本到这个版本之后。

fine tune = hn/TI/DreamArtist (APT)/DB/native training etc.
fine tune directly = DB/native training

Textual Inversion (TI)

从一些具有共同语义 [V] 的图片中,提取 [V] 的一个方法。提取出的 [V] 张量称之为 "Embedding"。将 Embedding 保存为文件,之后生成图片时就可以在提示词中使用文件名方便引用。

特征

训练产物较小 (.pt 文件多数只占用数十 KB 空间),WebUI 自带训练支持。

可以解决新出的角色画不出的问题,或者模仿特定的可以用语言精确描述的艺术风格。

因为 TI 是在 Text Encoder 的输出做处理,并不涉及图像生成本身,所以并不能让模型学习到未知概念。

不同模型训练出的 embeddings 通常无法通用。

使用

使用时,将 embedding(一个 .pt 、一个 .bin 文件或新版图片格式 .png / .webp / .avif / .jxl)放入 webui 的 embeddings 目录并在提示词中提及使用到的 embedding 的文件名(不包括扩展名)。添加或更换模型无需重启 webui。可以同时使用多个 embedding。

如果你使用 DreamArtist ,则将 *-neg.pt 一并放入 embeddings 目录,在积极和消极提示词中同时使用它们即可。

相关

Hypernetwork (HN)

一类给模型生成权重的网络,在这里是给 LDM (潜在扩散模型) 生成权重。是一个较为实验性的方法,NovelAI 率先探索了在 LDM 上使用。

特征

与 TI 不同,Hypernetwork 会改动 LDM 本身的权重,所以可以训练出无法用语言精确表述的细节,也更适用于画风的训练。

训练产物大小中等,大多在 80 - 160 MB 上下,WebUI 自带训练支持。

使用

::: tip
由于 Embedding 与 Hypernetwork 共用 .pt 扩展名,加载时需要予以区分。主要的区分手段为文件大小。
:::

使用时,将 .pt 文件放入 /models/hypernetworks 并在设置页面的 hypernetworks 下拉菜单中启用它。

NAI 泄露包中的 stableckpt/modules/modules 文件夹有 NovelAI 训练的一些 Hypernetwork。

DreamBooth (DB)

直接微调 LDM 和 Text Encoder 以适应用户特定的图像生成需求的一个方法。

你能想象你自己的狗环游世界,或者你最喜欢的包在巴黎最独特的展厅里展示吗?你的鹦鹉成为一本插图故事书的主角呢?

特征

与 TI 和 HN 不同,DreamBooth 可以做到出图和训练集高度相似但是却不失泛化能力,用于训练特定具象概念(比如一个角色穿着特定衣服)效果特别好。但是不像 TI 和 HN 像完整权重的 “插件” 一样即插即用,强度也不可调。

这个模型并非为学习画风(抽象概念)而设计。但似乎可以一定程度上适应“画风”。具体效果交由读者你实验。

训练产物较大,使用 .ckpt 扩展名,大多在 2 - 4 GB 上下。

使用

操作方法同一般模型,把 DreamBooth 训练出的 .ckpt 文件放进 webui 的 models\Stable-diffusion 目录里,在 webui 的左上角切换即可使用。

image

官网 https://dreambooth.github.io/

论文 https://arxiv.org/abs/2208.12242

Advanced Prompt Tuning (APT)

"Can super dramatically improve the image quality and diversity"

Pull Here

添加对否定词的即时嵌入学习,以显着提高生成图像的质量。 高质量的概念可以从单个图像中学习。

添加重建损失以提高生成图像的细节质量和丰富度。

添加通过人工注释训练的鉴别器(使用 convnext 实现)允许嵌入基于模型进行学习。

Aesthetic Gradients

微调 CLIP 以适应某个特定生成需求的方法,可以和 TI 一样起到缩短 prompt 的作用。可能略微提升出图的质量。

这项技术通过在生成时计算每个图片的权重,提供了一个 我不说你应该懂往哪里训练 的功能。使 AI 更聪明地调整并增加细节。

此项功能来自这个 存储库,在 这次提交 中,此功能被剥离为插件。

特征

通过这项技术,你不需要通过 过多提示词 来提升图片的质量,而是保持作品原始的总体构图,并提高美观度。在少量提示词情况下也可以生成效果不错的作品。

暗影·夜光所言,添加 25% 以内的权重,就可以稍微改善画面的美观度而不影响内容。美学 与 Hypernetworks 让 AI 作品更接近原画师风格,但是美学权重本身效果并不好。需要配合 Hypernetworks 超网络。

训练这项模型很快,但是在每一次生产时都会重新为图片计算一次,所以出图很慢。

注意:当种子改变时,训练结果也会改变。

使用

你可以使用下面的 Git 命令来安装这个东西。

git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui-aesthetic-gradients extensions/aesthetic-gradients

安装后,在 webui 的 extensions 文件夹下面创建 aesthetic-gradients 文件夹。

使用时,把 .pt 文件放在 models/aesthetic_embeddings/

然后重启程序,你就可以在 Img2Img 中使用此项功能。

image

如何选择

综述。Textual Inversion 和 Hypernetwork 适用于 整体靠近,前者教 AI 用模型中的标签组成一个 人物,后者也是类似的。区别在于 Hypernetwork 以调节模型权重为手段,而 Textual Inversion 告诉 AI 特定标签应该如何组成。

而 DreamBooth 适用于 细节 的模仿,它的训练过程 重新整改 了模型,新模型之中含有了新的样本特征(加了新东西),DreamBooth 技术本身用于 复刻,所以可以认识冷门元素。

至于 Aesthetic Gradients ,也就是给 AI 认识一组 优秀的数据。结果就是这个东西会增加细节,训练很简单,但是会拖慢生成图片的速度(每次生成都要重新计算)。并不适合应用。

附录


Textual Inversion

官方 Wiki

::: tip
训练时请不要加载 VAE。

在启动 webui 前把 "xxx.vae.pt" 重命名为 "xxx.vae.pt.disabled" 或其他名字。

在设置内勾选 Move VAE and CLIP to RAM when training hypernetwork. Saves VRAM. 的效果是将 VAE 模型从显存转移到内存,而非卸载,
:::

image

Apt / DreamArtist

此功能通过扩展提供。

普通的 Textual Inversion 仅从激励方向调整 AI,而 DreamArtist (Apt) 同时从激励和抑制两个方向进行微调。所以 DreamArtist 是一种更加高效的 Textual Inversion.

https://github.com/7eu7d7/DreamArtist-sd-webui-extension

论文地址

具体训练方式见 下文

准备数据集

数据集应保证风格一致,内容具有同一概念。如果算力允许,图片越多越好。数据内容可以是插画,抽象画作,也可以是表情包。

对数据集质量要求高,如果背景出现人影等物体,就会训练进去。训练程序非常敏感。

要求

显存至少 6GB,舒适使用需要 12GB 显存。根据实验数据,8GB 显存应该选择 512x512 分辨率;不推荐 --lowvram--medvram 参数下进行训练。

如果你有足够的 VRAM,那么使用 --no-half --precision full 可能会防止溢出带来的问题。

你可以中断和恢复训练,但是 optimizer state 不会被保存,所以不推荐这样做。

设置说明

准备 30 张以上的目标人设图片,每一张图片应当裁剪为同样的比例。( webui 已经支持了长方形图片的裁剪)

Interrogate Options 设置中,Interrogate: deepbooru score threshold 是 deepdanbooru (从图像提取标签的一个模型) 标签置信度阀值。建议使用 0.75,也就是保留置信度大于 0.75 的结果。

比如,假定识别结果为:

1.000 1girl
0.986 blush
0.981 long_hair
0.980 solo
0.918 japanese_clothes
0.912 rating:safe
0.798 bangs
0.795 wide_sleeves
0.731 blunt_bangs
0.637 long_sleeves
0.628 monochrome

就会丢弃 wide_sleeves 以下的内容。

Interrogate: deepbooru sort alphabetically 是按照字母顺序排序 Tag,因为 Tag 对结果影响很大,所以我们取消勾选此项。

use spaces for tags in deepbooru 应当开启。

escape (\) brackets in deepbooru (so they are used as literal brackets and not for emphasis) 应当开启。

按下 Apply setting 保存设置。

创建训练

打开 train 选项卡,在 Create embedding选项卡新建一个 embedding 模型。

Number of vectors per token 是 embedding 的宽度,与数据集有关,如果少于 百张,可以设置 3。

宽度越大时效果越强,但是需要数万轮训练。据 usim-U 的视频,设置 24 至少需要三百张高质量作品。

Name 输入框输入你预想的出现此人设的 提示词。

Initialization text 可以输入 one girl 这种大分类,只能填一个,人物可以是 1girl 或者 1boy,或者画风。

Number of vectors per token 是此 embedding 要占据的 token 位数量,越多越好,但是相应也会减少其他提示词 token 的位置。

新建,会创建一个在 embedding 下的 pt 文件。

预处理

打开 Preprocess images 选项卡。

Source directory 中填入你的训练用图片文件夹目录,里面只允许有训练图片。

Destination directory 中填入预处理完毕后图片保存路径。

选择训练的图片大小,一般 8Gb 显卡使用 512x512 ,尺寸越大不一定越好。

接下来有四个复选框

  • Create flipped copies
    勾选后会将图片镜像反转来增加数据量。
  • Use deepbooru caption as filename
    深度学习识 Tag,勾选后可以训练适用于 NAI 的 embedding。 如果你没有这个选项,需要在启动项添加--deepdanbooru
    Windows 需要在 webui-user.batCOMMANDLINE_ARGS= 一行添加,或者直接 python launch.py --deepdanbooru 。(如果启动卡住是网络问题)
  • Use BLIP for caption
    使用 BLIP 模型为文件名添加标题。不太适合二次元图片。
  • Split oversized images into two
    将超大图像一分为二,一般不用。
    所以我们勾选 Use deepbooru caption as filenameCreate flipped copies
    点击按钮,等待处理结束。

训练

训练是一个动态的过程!

Train 子选项卡中,选择你要训练的模型。

学习率

Learning rate (超参数:学习率),学习速率代表了神经网络中随时间推移,信息累积的速度,这个参数较大地影响了影响训练的速度。

通常,Learning rate 越低学习越慢(花费更长的时间收敛),但是效果一般更好。

一般设置为 0.005,如果想快一些,可以使用 0.01 加快。但是如果设置得太高,梯度下降时候步长太大无法收敛,会且可能会破坏 embedding,使得效果达不到预期。如果设置的太小,容易陷入局部最优。目前 TI 支持设置 0.1:500, 0.01:1000, 0.001:10000 的学习率,它会按照 学习率:步数 进行,如果步数为小数,则代表 总步数*百分比

训练时,可以先用较大的学习率进行测试,然后逐步调小 0.1 -- 0.02 -- 0.005 ,每次测试都用上一次效果最好的。

image

其他参数

Log directory 是日志目录

Prompt template file 是带有提示的文本文件,每行一个,用于训练模型。

目录中 textual_inversion_templates,解释了你可以使用这些文件做什么。

训练时参考 style.txtsubject.txt,比如训练画风,使用 style.txt,训练人物、物体,使用 subject.txt

根据模板文件,你可以在文件名中使用下面的关键词,处理时它们会被替换。

[name]:  embedding 的名称
[filewords]: 数据集中图像文件的名字

操作

  • Preview prompt
    预览,完成后用此提示词生成一张预览。
    如果为空,将使用来自 prompt 的提示。
  • Save a copy of embedding to log directory every N steps, 0 to disable
    每 N 步将嵌入的副本保存到日志目录,0 表示禁用。
  • Save an image to log directory every N steps, 0 to disable
    每 N 步保存一个图像到日志目录,0 表示禁用。

步数

Max steps 决定完成多少 step 后,训练将停止。

一个 step 是向模型训练一张图片(或一批图片,但目前不支持批量)并用于改进 embedding。如果你中断训练并在以后恢复训练,步数会被保留。

角色形象的风格化模型,建议步数为 15000-40000

画师画风的风格化模型,建议步数为 40000-80000

::: tip
这里给出的是一个参考,实际上 5000 和 7000 也有人成功。

关键在于 Loss 率,Loss 10 轮不降低就可以停止了。

如果 Loss 大于 0.3 ,效果就不是很好
:::

如果太多会过拟合(可以理解为 AI 的死板),请随时观察,如果过拟合,可以停止。如果效果不是很好,可以去找早些时候的模型继续训练。不断调整找到一个好的效果。

Save images with embedding in PNG chunks 是生成一个图片形式的 pt 文件,很方便我们分享嵌入,且其相较于 pt 文件更为安全。人物卡

一切妥当之后,点击右下角 训练 ,等待。

训练完毕。如果卸载了 VAE ,将 VAE 权重文件重命名回去,重启程序。

其他解释

[filewords]

这个是代表替换提示词模板文件的 [filewords] 为数据集文件的名字,可以实现把 文件名插入提示词

  1. 默认情况下,文件的扩展名以及-文件名开头的所有数字和破折号都会被删除。

所以这个文件名:000001-1-a man in suit.png将成为提示文本:a man in suit。文件名中文本的格式保持不变。

  1. 可以使用 Filename word regexFilename join string 选项更改文件名中的文本。

例如,使用单词 regex =\w+ 和 连接字符串 = , ,上面的文件将生成以下文本:a, man, in, suit

正则表达式会从文本提取提示词
['a', 'man', 'in', 'suit', ]

并将连接字符串(',')放在这些单词之间以创建一个文本a, man, in, suit

也可以创建一个与图像具有相同文件名的文本文件 (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。

那么,训练是如何进行的呢?

被送入模型的向量是训练向量+提示向量。你给它提供一个提示,提示转化为一堆向量并输入模型,输出与训练图片进行比较,被训练的词向量被稍微修正。这个过程在训练中会反复进行。

因为训练向量的修正不会使用提示向量提供的内容进行训练。所以文件词不应该包含属于被训练内容的特性。

如果你有,比如说一个在所有照片中都穿着 black t-shirt 的主体,你可以通过在这些图片的 filewords 中加入 black t-shirt 来有效地将其从训练集中否定掉。

除非你试图修复照片,否则请将 filewords 用于 style,而不是用于 subject。

av559085039 - 【AI 绘画】AI 不认识人物怎么办!强大的 Textual Inversion【NovelAI】 @ Bilibili

官方 Wiki

DreamArtist 小指南

此段内容由 konbaku yomu 撰写在 中文社区.

准备

训练集最重要的,因 DA 特性最少 one shot 即可炼制,所以我测试的都是 原图 + 镜像。下面所有的调参方法都没有训练集本身重要。训练集没选好怎么调参都没用。

训练集标准是 人物正面(全身 或 半身) + 高分辨率 + 尽量简洁的背景 + 人物本身没有什么特殊动作(含有类似瑜伽的动作或者持握物体的元素的图片都不行,会严重影响泛化和成图)

基础参数设置如下:

  • 关闭 --xformers
  • 重启 SD-WebUI 后设置里面将 CLIP Skip 设为 1(通常为 2)
  • 使用 7 GB 的 anime 模型文件 (latest 模型)。

你还可以通过添加训练集灰度图进行 局部学习增强

训练

方向 重建 学习率 CFG filewords read 提示词模板 训练集参数 step 范围 EMA ****
人物 3e-3(不稳定可以改为 2.5e-3) 3 不建议开 subject.txt 默认 512 即可 3000~6500 (看 sample 质量) 0.97(插件推荐)/0.95(作者推荐)
画风 5e-3 5 建议开启 style.txt 默认 512 即可 1500~2000 0.97(插件推荐)/0.95(作者推荐)

关于 Batch Size 和 Accumulation steps

Accumulation steps 相当于增加 Batch Size,但这个设置多少,训练时间就多几倍,总体 bs = (batch size * Accumulation steps),视自己显卡情况自行开启,默认为 1 1。

其他

  1. 默认词元 token 为 (3,6),根据角色复杂程度可以加大剂量为 (4,7)(5,8),作者甚至推荐过 (10,10)
  2. 训练人物时 loss > 0.2 基本上直接失败,大概率鬼图,稳定 loss 应该小于 0.15,可以通过裁减原图背景减低训练 loss,最好提升训练集的质量。
  3. 可以尝试通过添加灰度图增加训练稳定性(实验中)。
  4. 插件作者的推荐:训练画风时可以把提示词模板文件改为 style_filewords,效果不错(实验中)


Hypernetwork

Hypernetworks 是一种新颖的概念,用于在不触及任何权重的情况下微调模型。

此项技术被广泛用于画风模仿中,和 Textual Inversion 相比,泛化效果更好。

这个页面主要是为你实际操作提供一份指南。

如果你在寻找一些更加详细深入的 Hypernetwork 说明,请看 这篇社区贴文.

超网络训练指南

::: tip 关于 VAE
据说 VAE 会破坏训练结果。

在设置内勾选 Move VAE and CLIP to RAM when training hypernetwork. Saves VRAM. 的效果是将 VAE 模型从显存转移到内存,而非卸载,

如需卸载,请重命名。
:::

Train 选项卡下可以训练 Hypernetworks,训练方式与 Textual Inversion 相同。

预处理训练集

与训练人物不同,训练超网络并不需要在意背景是否干净或者主体是否突出,虽然训练素材越多效果越好,但是请注意以下信息

  • 画风固定,譬如抛弃画师早期作品
  • 去除文字或水印
  • 分辨率不要过小

裁切处理

目前 WebUI 已经集成了图像预处理功能,可以自动裁切缩放图片。

如果你需要确保画面主体明确,推荐自己手动裁切来保证主体在画面中心。可以使用例如 批量裁切工具 之类的辅助工具。

因为是风格训练,并不用担心训练主体是否非对称等问题,所以推荐打开图像翻转来倍增数据集,提升训练效果。

贴标签

如果你还没有打标签,可以勾选 Using deepbooru for caption ,来让 deepbooru 自动生成标签。

如果你想手动打标签,推荐使用 GUI 贴标签工具

参数

注意,应该使用非常低的学习率,例如 0.000005 或 0.0000005.

如果学习率是 5e-6,步数大约 10000 到 20000。见 学习率计算器 (来自 Discussion #2670)

分辨率设置为要训练的分辨率,最好使用 1:1 的纵横比。

如果数据集的图片不是方形的,请勾选 Split oversized images into two

如果你还没有打标签,可以勾选 Using deepbooru for caption ,来让 deepbooru 识别标签。

网络层结构

关于超网层结构,你可以简单理解成一个微型神经网络,譬如这个默认结构 1, 2, 1 代表该网络由两个中间维度为 2x 的全连接层组成,左右两个 1 分别是输入与输出,2 是中间层。

超网结构有两种设计方向,分别是更宽或是更深。

更宽的超网更加开朗,适合用于认识一些新事物,譬如 1, 4, 1 这种就属于宽超网。

更深的超网更加社恐,更加适合归纳总结数据,简单讲就是对画风之类的学习效果更加好,譬如 1, 1.5, 1.5, 1.5, 1 就是深超网。

另外,请注意,将超网数字加和就是这个超网的数据量,量越大,训练出来的超网文件就越大。1, 2, 1 的 pt 文件大概是 83.8 MB,1, 2, 2, 1 大概是 167 MB。如果要扩展的话,一定要注意盘空间是否足够,否则很容易爆盘。

在超网结构设计里需要注意的另一点就是,请让你的设计看起来更像是沙漏而不是水桶,一个 1, 2, 3, 2, 1 的超网可能最终效果还不如一个 1, 2, 2, 2, 1 的超网。

另外一点就是,和 1, 3, 1 相比,1, 1.5, 1.5, 1 虽然它们总量是一样的,但是后者有着更深的网络层级,在画风训练上可能更具优势

如果你期望选用更加激进的方案可以试试 1, 0.75, 0.5, 0.5, 0.5, 0.75, 1 这样的结构,虽然它和 1, 3, 1 总量是一样的,但是它深度更大。

层标准化 Layer Normalization

如果勾选,则在每个完全连接层之后添加标准化处理。

作用是防止超网络过拟合,使训练更加稳定。

LN 对防止过拟合使训练更加稳定是有意义的,但是根据之前的测试,linear 开启 LN 的情况,可能学不进去东西,出空包弹。使用激活函数后,LN现在是可使用的。

Swish 似乎并不需要开启 LN,因为 Swish 的训练速度慢,所以应该使用更高的学习率。

Dropout

启用 Dropout 可以防止超网络过拟合,目前不支持自定义 Dropout 比率,默认为 0.3

1, 2, 1 的层结构上,dropout 可能只会对小数据集有帮助。

激活函数 Activation Functions

激活函数对输入进行非线性变换,使其能够学习和执行更复杂的任务,深层神经网络表达能力更加强大。

支持 ReLU、LeakyReLU 和 Linear。选择 Linear (线性) 的效果和没有激活函数一样。

Swish 对比 ReLU 和 Linear 要更好,Swish 适合更大的网络,而 ReLU 可能对 1, 2, 1 的超网络带来更好的结果。

激活函数是神经网络中非线性的来源。如果去掉激活函数,神经网络的权重和偏差只会进行线性变换(不管神经网络有多少层,线性运算的复合还是线性运算的),最终的效果只相当于单层的线性模型。
image

hypernet对比图, the woman in picture is 24 years old

关于激活函数,见 维基百科

额外注意

在开启 LN 选用激活函数并开启 Dropout 后,超网络没以前那么容易过拟合,但是可能需要更大的学习率进行学习。

Hypernetwork画风训练经验分享



outline: [2, 3]

DreamBooth

TODO/HELP 审计

简介

DreamBooth 是一种定制个性化的 TextToImage 扩散模型的方法。仅需少量训练数据就可以获得极佳的效果。

Dreambooth 基于 Imagen 研发,使用时只需将模型导出为 ckpt,然后就可以被加载到各种 UI 中。

然而,Imagen 的模型和预训练的权重都不可用。所以最初的 Dreambooth 并不适用于稳定扩散。但后面 diffusers 实现了 Dreambooth 这一功能,并且完全适配了 Stable Diffusion。

Diffusers 提供跨多种模态(例如视觉和音频)的预训练扩散模型,作为扩散模型推理和训练的模块化工具箱提供支持。
本节使用 Shivam Shirao 的 diffusers 分支版本讲解参数,配置衍生自 ShivamShrirao/diffusers
image

关于移动云训练见 这个这个(由 eij x 提供 )

选择

Windows 系统的显存至少需要 16 GB, Linux 系统要求显存至少为 8 GB

(Colab 笔记本来自 社区置顶

准备

::: tip

如果你选择使用 AutoDL 的镜像,需要把 dreambooth-for-diffusion 文件夹移到 autodl-tmp(数据盘)中,且确保当前运行路径为 dreambooth-for-diffusion,具体操作细节在 知乎教程 中有图文说明。

:::

模型转换

在各个笔记本或镜像中都会有以下类型命令,作用是将 ckpt 模型转换为 diffusers 权重格式来训练。

训练前示例

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 編 .

It may be useful to break up the image, or to crop the background/headers etc. separately.

训练方法

下例来自 CCRcmcpe/diffusers 版本 的 YAML 配置文件。

DreamBooth 本身不能训练所谓的画风。而 Native Training 对模型进行微调会带来画风的改变,作为所谓的画风训练方法。

古典思路是:

  • Native + deepdanbooru -> prompt txt - “训练风格”
  • Dreambooth + class prompt/instance prompt - 训练物体

但还有很多分类,差异如:是否给每张图片配对 Prompt, 是否 启用 prior_preservation loss(PPL), 是否使用 train text encoder (TTL)

DreamBooth = instance + class with prior preservation loss (其中分给图片单独标签,和使用同一个标签的区别)。

DreamBooth

专业训练特定物体/人物。使用 --with_prior_preservation 来启用 DreamBooth ,只有 DreamBooth 训练会用到 [V] 的概念和 --instance_prompt 相关的参数。

  • Instance Image
    你所训练的目标数据集。
  • Instance Prompt
    默认实现为全局共享一个 prompt, 这对于 few shot 是可能有效的,即 DreamBooth (original paper method)。但当你的训练目标增多之后可以开启 combine_prompt_from_txt 选项,为每个 instance 准备一个 prompt (通常为 txt) 即为 DreamBooth (alternative method). Instance Prompt 之中应该包含一个唯一标识符 [V]
  • Class/Regularization Image
    对应 --class_data_dir,应该为 自动生成 即 auto-generated 的图像,用于检测 AI 的先验知识。不应该放任何非 AI 生成的图像。如果你确定这么做应该去使用 Native Training。(掺杂同风格图在 class image 属于早期探索的弯路,目前已经不再鼓励。)每次重新训练不同主题要清空一次。
  • Class Prompt
    对应 --class_prompt 参数,由程序自动生成,可以从其他支持 CLIP SKIP 2 的推理前端生成好之后放进 class img 集内。程序同样可以从独立的 txt 中读取内容。

DreamBooth 本身具有十分强烈的 copy and paste 效果,使用 class/regularization 可以适当抑制该效果。

训练多个物体见 Multiple Concept 节。

示例 train_object.sh

Native Training

Native Training 为原生训练,与 DreamBooth 不同的是,Native Training 会直接使用你的训练集进行训练,不再需要 Class Image。

关闭 prior_preservation 选项以开始以原生方式进行训练,是训练画风的推荐方式。

在此训练中没有 Instance / Class Image 之分,所有的图像都会被用于训练。但是你需要为每个图准备一个 Instance Prompt,放在和图片名称一样的文本文件,通常为 txt。例子参考 dataset exp

Native Training 需要较多的数据集,但这个量众说纷纭,大约在 [100, 10000] 这个区间,多多益善。(但仍然建议人工挑选)

示例 train_style.sh

参数

  • with_prior_preservation
    启用 prior_preservation 以开始 DreamBooth 训练,禁用此参数开启 Native Training。
  • prior_loss_weight
    越低则越难过拟合,但是也越难学到东西。
  • learning_rate
    学习率。DreamBooth 本身具有十分强烈的 copy and paste 效果。使用 class/regularization 可以适当压制该效果。
  • use_txt_as_label
    通常在 Native 训练微调模型时使用,读取与图片同名的 txt 文件作为 label。启用该选项会关闭 DreamBooth, 无视 instance_prompt 参数传入的内容而转为从 txt 文件中读取 label。
  • center_crop
    脚本自带的裁切图片选项,建议自己裁成正方形的哦。
  • resolution
    图片的分辨率(一般为 512),定义此参数会缩放图像。
  • max_train_steps
    训练的最大步数,一般是 1000,如果你的数据集比较大,那么可以适当增大该值。
    训练步数的选择一般来说是,训练步骤 =(参考图像 x 100)
  • save_model_every_n_steps
    每多少步保存一次模型,方便查看中间训练的结果找出最优的模型,也可以用于从检查点恢复上一次的训练结果(colab 笔记本用户注意挂载到云盘中)。
  • lr_scheduler
    学习率调节器,可选有 constant, linear, cosine, cosine_with_restarts, cosine_with_hard_restarts

关键说明

一般训练画风会去除 --with_prior_preservation 参数,但是需要为每张待训练图片都准备提示,也就是启用 --use_txt_as_label 来读取与图片同名的 txt 文件作为 label(也就是再放一个同名的 txt),该选项会忽略 instance_prompt 参数传入的内容。

这点体现在 train_style.sh 中。
一般训练特定物体/人物是启用 --with_prior_preservation 的只需要使用单一标签 --instance_prompt,需要使用 Ai 的先验知识,同时 启用 --class_prompt --class_data_dir 参数 ,Class dir 是自动生成的,每次重新训练要清空一次。体现在 train_object.sh 中。

解释 Instance Prompt / Class Prompt

  • Instance Prompt 会被处理为类似 photo of a cute person
  • Class Prompt 会用来生成一类图片,被处理为类似 photo of a person

示例:

  • 训练人物的示例
    • Instance prompt: masterpiece, best quality, sks 1girl, aqua eyes, aqua hair
    • Class prompt: masterpiece, best quality, 1girl, aqua eyes, aqua hair
  • 训练风格的示例
    • Instance prompt: 1girl, by sks
    • Class prompt: 1girl

关于 [V]

训练集类型 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 去给你的图像打标。或者使用 DeepDanbooruBLIP

如果你使用 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
修改或覆盖原始库中的文件时,请备份。
:::

准备环境 GitPythonMiniConda(或 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

:::

image
峰值显存占用正好为 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 文件夹里面。

每一次使用,都会重新计算,训练速度快,生成速度慢。

@WangShuXian6
Copy link
Owner Author

WangShuXian6 commented Jul 30, 2023

stable diffusion webui 指南-二次开发


插件

开发插件

WebUI 通过以下方式与插件交互:

  • 如果存在 install.py 脚本,它将被执行。
  • 插件 scripts 目录中的脚本将被执行,就好像它们只是普通的自定义脚本一样,除了:
    • sys.path 被设为插件所在目录,因此您可以在其中导入任何内容而无需担心污染环境
    • 您可以使用 scripts.basedir() 来获取当前扩展的目录(因为用户可以将其命名为任何他想要的名称)
  • javascript 目录中的文件被添加到前端页面
  • localizations 目录中的语言文件将被添加到设置中;如果有两个同名的语言文件,它们将互相覆盖。
  • 插件的 style.css 文件被添加到页面
  • 如果插件在其根目录中有 preload.py 文件,则在解析命令行参数之前加载它
  • 如果插件的 preload.py 有一个 preload 函数,它会被调用,命令行参数解析器会作为参数传递给它。这是一个如何使用它来添加命令行参数的示例:
def preload(parser):
    parser.add_argument("--wildcards-dir", type=str, help="directory with wildcards", default=None)

关于如何开发自定义脚本(通常是插件的主要内容),请参阅 开发自定义脚本

详见 Developing extensions

插件案例

安装完毕重启程序。目前 SD-WebUI 已经自带扩展管理器界面。

DreamBooth extension

https://github.com/d8ahazard/sd_dreambooth_extension

Dreambooth Extension for Stable-Diffusion-WebUI

training-picker

https://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

允许使用类似 __name__ 提示的语法,以从名为 name.txt 的文件中获取随机一行。

Deforum

https://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.

Video2Video

https://github.com/Leonm99/Stable-Diffusion-Video2Video

将 视频 投入 Img2Img,输出带有关键帧的视频。

Img2img Video

https://github.com/memes-forever/Stable-diffusion-webui-video

Artists To Study

https://github.com/camenduru/stable-diffusion-webui-artists-to-study

https://artiststostudy.pages.dev 添加到 WebUI

美学权重评分器

https://github.com/tsngo/stable-diffusion-webui-aesthetic-image-scorer

计算生成图像的美学分数。

Tokenizer

https://github.com/AUTOMATIC1111/stable-diffusion-webui-tokenizer

stable-diffusion-webui 的一个扩展,增加了一个标签,让你预览 CLIP 模型将如何标记你的文本。

自动补全

https://github.com/DominikDoom/a1111-sd-webui-tagcomplete

使 SD 做到类似 NAI 的标签输入自动补全效果。

txt2mask

https://github.com/ThereforeGames/txt2mask

使用自然语言为 Stable Diffusion 修复自动创建遮罩。

multi-subject-render

https://github.com/Extraltodeus/multi-subject-render

生成多个的物体并合成在同一张图上。全自动 Photoshop

DAAM

https://github.com/kousw/stable-diffusion-webui-daam

提示词热度图,显示提示词作用于图片的哪些部分。



outline: [2, 3]

自定义脚本

此主题的内容可能不会即时更新到此处,源地址

开发自定义脚本

你可以在 modules/scripts.py 中找到Script类。

如果要创建你自己的自定义脚本,请创建一个实现类的 python 脚本,并将其放到 scripts 文件夹中,使用以下示例或文件夹中已有的其他脚本作为指导。

Script 类有四个主要方法,这里通过一个简单的示例脚本进行更详细的描述,这个脚本可以旋转和/或翻转生成的图像。

这里 有很多社区共享的脚本,可以将文件添加到 scripts/ 文件夹中。

自定义脚本案例

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-lexikrea

Automatic1111 Stable Diffusion 的脚本,用于从 krea 和 lexica 中提取提示。

https://github.com/Vetchems/sd-lexikrea

Advanced prompt matrix

https://github.com/GRMrGecko/stable-diffusion-webui-automatic/blob/advanced_matrix/scripts/advanced_prompt_matrix.py

安装后可以使用以下语法

<cyber|cyborg|> cat <photo|image|artistic photo|oil painting> in a <car|boat|cyber city>

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 CFG

https://github.com/lilly1987/AI-WEBUI-scripts-Random


API

启用 API

使用 --api 参数运行程序。

如果使用 webui-user.bat,可以设置

set COMMANDLINE_ARGS=--api

想要在启用 API 的同时使用插件,追加--enable-insecure-extension-access

使用 API

在浏览器访问 {WebUI 启动网址}/docs (如 http://127.0.0.1:7860/docs) 就可以查看到 WebUI 的 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)

覆盖生成设置

关于 override_settings,此参数的目的是覆盖单个请求的 WebUI 设置,例如 CLIP Skip 等。可以传递到此参数的设置项列表可在文档中找到。

附录

@WangShuXian6
Copy link
Owner Author

WangShuXian6 commented Jul 30, 2023

stable diffusion webui 指南-附录


附录

社区

这里是相关的社区资源

图库

项目

其他前端

服务

提示词相关

文档

风格化

社区

超网络

embeddings

::: warning
不同大模型之间不能通用 embeddings
:::

模板库

数据集

市场应用情况调查

这里是稳定扩散(非 NAI 模型)的应用情况。

3D

在 blender 上,AI 有 渲染插件

设计

专辑图

配图

自媒体

哔哩哔哩已经一大堆了,抖音也不少,可以做的话题很多

套壳

无良某些公司套壳开源项目,比如 某某画廊,某某版图。

(题外:韭菜采收容易,可用于园艺,在世界广泛种植)

插图/背景

小说插图,AI 画背景(据说原版模型也很好用)

服务

  • 某些公司对开源项目进行再包装,以创作者社区的形式,对用户收取订阅费用。比如 XX 画廊,XX 版图。小程序多一些。
  • 腾讯 QQ 小世界可以让用户使用 AI 进行作画

NFT

FAQ

模型会进化吗

生成的图像没有喂给模型,NAI 会继续优化模型,而 Leak 的模型则是一个固定的版本。

10 月份的热潮可能会是短暂的。

NAI 模型使用 Danbooru2021 的数据,而 Danbooru2022 还未训练(个人不能负载如此昂贵的继续训练成本),且某公司的模型也不会再次泄漏。

以后就是大公司的对弈了。

Ps 插件

不确定是否安全的 插件

扩展

SD GUIDE FOR ARTISTS AND NON-ARTISTS

cs231n

cs228

关于文档

贡献支持

此项目由以下人员参与编写整理校对,排名不分先后:

鸣谢

引用的开源教程.

图标提供

编辑器

文档写作指导

托管

Cloudflare Pages

关于 Danbooru 标签翻译项目

建议参考 EhTagTranslation Web 页面提交翻译,可以提供 Json 化的数据,便于接入和展开,是更好的选择。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant