跳到主要内容

Stable Diffusion 使用文档

本文档主要介绍Stable Diffusion WebUI的基础使用。 Stable Diffusion WebUI 简称 SD-WebUI,是一个基于 Gradio 库的 Stable Diffusion 浏览器界面,一键启动,省去了运行环境的安装步骤,方便使用。

如何运行

  1. 将下载好的Stable Diffusion WebUI放入C盘根目录,进入C:\novelai-webui 文件夹,打开 A启动器.exe。

  2. 点击 一键启动 按钮。

An image

  1. 等待数据加载完成后,会自动弹出浏览器进入Stable Diffusion操作页面。

An image

  1. 根据需要选择模型,填入正向提示词及负面提示词,调整参数,点击生成按钮即可出图。

调参基础

常用参数介绍

Prompt(提示词)

Prompt(提示词):对你想要生成的东西进行文字描述。

Negative prompt(反向提示词)

Negative prompt(反向提示词):用文字描述你不希望在图像中出现的东西。

Sampling Steps(采样步数)

Sampling Steps(采样步数):扩散模型的工作方式是从随机高斯噪声向符合提示的图像迈出小步。这样的步骤应该有多少个。更多的步骤意味着从噪声到图像的更小、更精确的步骤。增加这一点直接增加了生成图像所需的时间。回报递减,取决于采样器。

Batch count

Batch count/n_iter:每次生成图像的组数。一次运行生成图像的数量为 Batch count * Batch size。

Batch size

Batch size:同时生成多少个图像。增加这个值可以提高性能,但你也需要更多的 VRAM。图像总数是这个值乘以批次数。除 4090 等高级显卡以外通常保持为 1。

CFG Scale(无分类指导规模)

CFG Scale(无分类指导规模):图像与你的提示的匹配程度。增加这个值将导致图像更接近你的提示(根据模型),但它也在一定程度上降低了图像质量。可以用更多的采样步骤来抵消。

Width

Width:图像的宽度,像素。要增加这个值,你需要更多的显存。大尺度的图像一致性会随着分辨率的提高而变差(模型是在 512x512 的基础上训练的)。非常小的值(例如 256 像素)也会降低图像质量。这个值必须是 8 的倍数。

Height

Height:图像高度。

Seed

Seed:随机数的起点。保持这个值不变,可以多次生成相同(或几乎相同,如果启用了 xformers)的图像。没有什么种子天生就比其他的好,但如果你只是稍微改变你的输入参数,以前产生好结果的种子很可能仍然会产生好结果。

Samplers 采样器

目前好用的有 Euler,Euler a(更细腻),和 DDIM。 推荐 Euler a 和 DDIM,新手推荐使用 Euler a。 Euler a 富有创造力,不同步数可以生产出不同的图片。调太高步数 (>30) 效果不会更好。 DDIM 收敛快,但效率相对较低,因为需要很多 step 才能获得好的结果,适合在重绘时候使用。 LMS和 PLMS 是 Euler 的衍生,它们使用一种相关但稍有不同的方法(平均过去的几个步骤以提高准确性)。大概 30 step 可以得到稳定结果。 PLMS 是一种有效的 LMS(经典方法),可以更好地处理神经网络结构中的奇异性。 DPM2 是一种神奇的方法,它旨在改进 DDIM,减少步骤以获得良好的结果。它需要每一步运行两次去噪,它的速度大约是 DDIM 的两倍。但是如果你在进行调试提示词的实验,这个采样器效果不怎么样。 Euler 是最简单的,因此也是最快的之一。

注意尺寸

出图尺寸太宽时,图中可能会出现多个主体。 要匹配好姿势,镜头和人物才不畸形,有时候需要限定量词,多人物时要处理空间关系和 prompt 遮挡优先级。人数->人物样貌->环境样式->人物状态 1024 之上的尺寸可能会出现不理想的结果!推荐使用 小尺寸分辨率 + 高清修复(下方介绍)。

Highres. fix 高清修复

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

模型选择

模型使用的数据集和标签对于效果影响非常重要,在使用之前要先了解数据来源。

Stable Diffusion 模型

Stable Diffusion 模型适用于生成与照片、艺术品类似的图像。 提示词常用连贯的自然语言句子描述一个物体,如: A horse running on the moon 下载地址:

Stable Diffusion v1.2

Stable Diffusion v1.3

Stable Diffusion v1.4

Stable Diffusion v1.5

Stable Diffusion v2.0

提示词工程学

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

基本流程

An image

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

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

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

目前研究基本方向是:

提示词 + PS/Inpaint(微修/嫁接)

提示词 + 3D 参考

实战技巧

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

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

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

灵感表

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

尺寸选择

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

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

视角

推荐使用 Danbooru 含有的术语

An image

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

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

噪声

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

优化作品效果

对目标进行审视

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

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

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

顺序调整

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

语义偏移防范

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

彩虹混乱图

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

波浪噪点图

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

抠图?

扣过的图,其余背景都会被处理成黑色。 如果你需要背景,效果一般不是很好,建议填色后再操作。

粗糙的噪声

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

保护图片不被分割线切割

消极提示加入 comic 2koma 3koma 4koma collage 应该可以改善。

跨领域术语/奇门遁甲

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

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

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

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

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

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

扩展阅读

有用的电影术语

镜头类型

电视术语

摄影类型

摄影术语

[极限运动](https://en.wikipedia.org/wiki/Extreme_sport https://en.wikipedia.org/wiki/Category:Sports_by_type)

构图艺术

迭代草图

详见 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 可加可不加

尺寸要求正方形。

修改画作

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

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

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

Masked Content

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

An image

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

疑难解答

本章主要描述生成图片时遇到的各类问题。

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

显存不足

术语解释

黑话

缩写/术语解释
oneshot一张图
LAION一个图像数据集库 https://laion.ai
aug (augmentaion)通过裁切、翻转获取更多数据集的方式
ucgunconditional guidance
ML机器学习
Latent Space潜在空间
LDMLatent Diffusion Model 潜在扩散模型
NAI(NovelAI ,一般特指泄露模型)
咒语/念咒提示词组合 (prompts)
施法/吟唱/t2i文本转图像 (txt2img)
i2i图像转图像 (img2img)
魔杖图像生成所涉及到的参数
inpaint/outpaint局部重绘,一种 img2img 的方法
ti/emb/嵌入模型模型微调方法中的 Textual Inversion,一般特指 Embedding 插件
hn/hyper模型微调方法中的 hypernetwork,超网络
炸炉指训练过程中过度拟合,但炸炉前的日志插件可以提取二次训练
废丹指完全没有训练成功
美学/extAesthetic Embeddings,一种嵌入模型,特性是训练飞快,但在生产图片时实时计算。
db/梦展DreamBooth,目前一种性价比高(可以在极少步数内完成训练)的微调方式,但硬件要求过高
dsDeepSpeed,微软开发的训练方式,移动不需要的组件到内存来降低显存占用,可使 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 噪声种子增量。

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

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 潜在扩散模型。

An 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

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

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

  2. 表示成包含数百个元素(低维度)的密集向量,其中每个元素都包含一个介于 0 到 1 之间的浮点值。这就是一种嵌套。

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

激活函数

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

权重 (Weight)

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

常用插件