[h1]1.安装部署[/h1]

[h2]1.1 windows系统部署教程[/h2]

对于初学者而言,入门建议选择windows系统,版本需使用windows 10以上版本,现在国内windows系统整合包功能齐全,对于新手来说安装也比较方便。

1.1.1 硬件要求

建议使用运行内存不少于 16 GB内存的计算机,同时安装盘符预留100 GB以上的硬盘空间。

1.1.2 显卡要求

因为跑图需要用到CUDA加速,而CUDA是NVIDIA推出的运算平台,所以只对NVIDIA显卡支持良好,虽然AMD的显卡也可以用于跑图,但是速度慢得多。
跑图建议使用4 GB以上显存显卡,最低配置RTX 3050,当然使用RTX3060、RTX4050、RTX4090等显卡效果更好,其它配置较低的显卡也可以跑图,只是速度会非常慢。

显卡算力越强,出图越快;显卡显存越高,所能设置的图片分辨率越高。
跑图和挖矿类似,GPU会 100% 运行,过度使用显卡有损坏的风险,特别是笔记本要注意散热,别长时间跑图。

1.1.3 检查计算机配置

某些用户对计算机配置不了解,可以 点击下载鲁大师 进行检测。

1.1.4 检查N卡驱动

在安装webui之前,我们需要首先检查N卡驱动是否安装。

右击[mark]此电脑[/mark],点击[mark]管理[/mark],打开[mark]设备管理器[/mark],点击[mark]显卡适配器[/mark],双击[mark]N卡[/mark],点击驱动程序可以看到[mark]驱动程序[/mark]版本,则[mark]N卡[/mark]驱动运行正常。一般来说,如[mark]N卡[/mark]驱动运行异常,[mark]显卡适配器[/mark][mark]N卡[/mark]那里有个黄色感叹号标志。
如未安装驱动,请前往英伟达官网下载对应显卡驱动,点击下载N卡驱动

1.1.5 检查CUDA安装情况

前面讲到,因为跑图需要用到CUDA加速,所以CUDA安装与否也需要进行检查。

检测是否安装CUDA,[mark]Win+R[/mark]启动[mark]cmd[/mark],输入[mark]nvcc –V[/mark],如果已安装,则会显示CUDA版本信息,未成功安装则会报错。如果未安装CUDA,可以 点击下载 CUDA 

1.1.6 软件安装部署

推荐直接使用整合包,B站秋叶制作的整合包非常好用,点击下载 Stable diffusion 整合包

1.安装 python 环境

点击下载 python,版本建议3.7以上,安装时必须勾选[mark]Add Python to PATH[/mark]。
安装完成后,[mark]Win+R[/mark]启动[mark]cmd[/mark],输入[mark]python –version[/mark],检查 python是否安装成功;输入[mark]pip –version[/mark],检查pip管理包是否安装成功。

2.安装启动器运行依赖

双击[mark]启动器运行依赖-dotnet-6.0.11.exe[/mark]进行安装。

3.运行启动器

将下载的整合包解压,打开[mark]*/stable diffusion/novelai-webui-aki-v3[/mark]目录中的[mark]A启动器.exe[/mark],等待验证本地程序完整性。


点击客户端右下角一键启动,稍等片刻会弹出用户协议,按要求填入我已阅读并同意用户协议,一定不要填错,填写后保存,关闭控制台,进入客户端重新点击一键启动,启动成功后会自动打开[mark]http://127.0.0.1:7860/[/mark]这个网址。

4.测试跑图

选择stable diffusion模型,在文生图中输入提示词[mark]panda[/mark],点击生成,稍等片刻出图,stable diffusion即安装成功。

[h2]1.2 AutoDL云平台部署教程[/h2]

对于部分用户,本地计算机配置较低无法运行webui,这时候我们可以考虑使用算力云租用GPU来运行Stable diffusion,虽然云平台是基于linux系统运行,相比windows系统比较复杂,但是只要跟着教程一步一步操作,这些也并不困难。

AutoDL是国内的平台,访问速度比较快,同时价格也比较合理,有按时/包日/包周/包月等比较灵活的付费方式,也便于我们选择。点击访问AutoDL

1.2.1 登录注册

AutoDL支持手机、微信登录,推荐使用微信扫码登录,比较方便,同时学生通过教育网邮箱认证后,还可以得到炼丹会员的折扣。

1.2.2 账号充值

登录控制台后,点击充值后选择其它金额,我们可以先充值5块钱试一下。

1.2.3 发票开具

有需要发票的还可以在控制台开具发票,点击费用找到发票管理即可。

1.2.4 安装部署

点击上方的算力市场即可租用算力,可以选择计费方式、地区、GPU型号。

对于新手而言,推荐使用包时的计费方式,地区选择西北地区,租用RTX 3080 Ti / 12 GB(1.14/时)或者RTX 4090 / 24 GB(¥2.61/时),数据盘默认不扩容。

点击社区镜像,选择[mark]AUTOMATIC1111/stable-diffusion-webui/NovelAI-Consolidation-Package-3.1:v15[/mark]这个版本。

点击立即创建构建容器实列,构建容器实例第一次拉取镜像较慢,请耐心等候。

需要注意的是,构建的实例关机后如果15天未开机使用,AutoDL会清理实例。

当状态成为运行中,这个时候我们点击[mark]快捷工具[/mark]下的[mark]JupyterLab[/mark]。

打开[mark]JupyterLab[/mark]后跳转一个新页面,左侧是文件目录,右侧是代码区域:

这里的安装比较简单,无需任何代码基础。

第一步:选中第一行代码
第二步:点击三角符号运行代码

第三步:运行完成后,第一行代码会显示“移动完成”。然后刷新浏览器,这一步务必刷新。

第四步:页面刷新完成后,右上角点击[mark]Python 3(ipykernel)[/mark]。

然后弹出选择内核的弹窗,选择[mark]xL_env[/mark](如果没有刷新就没有这个选项)

第五步:选中第二行代码,点击上面的三角符号运行代码,然后运行完成后如下图所示:

第六步:启动学术加速,因为AutoDL服务器在国内,而很多镜像资源服务器在国外,所以需要启动学术加速。

启动成功后如下图显示:

第七步:学术加速成功后,点击右侧[mark]启动SD-WebUI[/mark],往下拉点[mark]SD,启动[/mark]按钮。

这时候系统会自动进行相关部署,稍等五分钟左右,部署成功后会显示:Running on local URL: http://127.0.0.1:6006

第八步:这时候我们返回控制台,点击[mark]自定义服务[/mark],然后点击[mark]访问[/mark]。

这时候会自动跳转一个网页,让输入账号和密码。

第九步:这里返回[mark]JupyterLab[/mark]页面,找到[mark]启动SD-WebUI[/mark]选项,选择[mark]登录隐私设置[/mark],找到账号和密码。输入账号和密码后,即可跳转到webui。

这里看到的界面与windows版本下秋叶启动器的界面略有不同,是因为这个启动器安装了不同的插件。

第十步:照例测试跑图,在文生图中输入提示词[mark]panda[/mark],点击生成,稍等片刻出图,stable diffusion即安装成功。

1.2.5 其它建议

1.由于 AutoDL 新手大都选择按量计费也就是按小时计费,所以不用的时候,最好在控制台将容器实例关机。

2.由于算力云平台大都优先服务于包周/包月用户,有时候按量计费的用户,使用时开机却发现机器不处于空闲状态,这时候我们就可以考虑多租用几个容器实例,这样那个实例空闲我们选择那个实例即可。

3.由于实例15天未开机云平台会自动清空,所以重要资料即使做好备份,或者重要实例在时间范围内去开机使用下。

[h1]2.文生图入门[/h1]

[h2]2.1 选项功能介绍[/h2]

先对面板相关功能进行初步了解,为了便于直观展示,这里将文生图相关功能进行标注。

点击放大图片

[h2]2.2 简单出图示例[/h2]

大模型选择 majicMIX realistic_v7,你也可以选择其它模型,其它选项如上图所示,仅需输入正向提示词(1girl),然后点击生成,稍等片刻即可以得到一张照片。

这是一个简单的出图示例,如果想得到更高质量的图片,则需要学会对其它选项进行设置。虽然选项粗看比较繁琐,但是庖丁解牛反复学习,逐一了解每个选项的用法,也会很容易事半功倍。

[h1]3.模型用法[/h1]

[h2]3.1 CheckPoint模型[/h2]

Checkpoint模型,又称大模型或底模,决定了图片生成的风格。

通常文件大小在2G-7G之间,文件后缀为ckpt、safetensors。

存放路径为:[mark]*/stable-diffusion-webui/novelai-webui-aki-v3/models/Stable-diffusion[/mark]

[h2]3.2 Lora模型[/h2]

[h2]3.3 VAE模型[/h2]

3.3.1 VAE模型介绍

VAE,全名Variational autoenconder,中文叫变分自编码器。是模型算法组成部分之一,位于运作流程末端,作用是让出图颜色更鲜艳、细节更锐利;同时也能在一定程度上改善局部细节的生成质量,如手部、服装、脸部等,原理比较复杂,可以简单地把它理解为一种“滤镜”。

[success title=”示例1″]

左侧是没有使用VAE输出的图像,右侧是使用VAE输出的图像

[/success]

通常文件大小在300M-5G之间,文件后缀为pt、ckpt、safetensors。

存放路径为: [mark]*/stable-diffusion-webui/novelai-webui-aki-v3/models/VAE[/mark]

3.3.2 VAE模型选择

VAE模型不能单独使用,需要配合大模型一起使用,但不是所有大模型都需要配合使用 VAE,因为部分大模型本身就自带 VAE,可以直接生成质量优异的图像。

① 阅读大模型使用说明

Civitai 等网站下载大模型时,一般模型作者都会使用说明里,说明是否会需要配合VAE使用。如下图的 Aniflatmix 大模型,在模型页面就建议搭配Orangemix / Anything V4.5 / NAI 这三种VAE 使用。

② 根据出图效果判断

要确定是否应该使用VAE,最简单的方法是观察生成的图像质量。如果图像的颜色看起来灰暗或泛白,与参考图像相比有显著的不同,这时就应该考虑启用VAE。

3.3.3 VAE模型下载

VAE模型的资源,就像其他AI绘图模型一样,主要分布在 CivitaiHuggingface 这两个网站。你可以在 Civitai模型 上筛选并查阅VAE资源,也可以直接在网上搜索特定的VAE名称来获取所需资源。

3.3.4 VAE模型推荐

① 官方VAE模型

Stability AI 官方发布了两个官方VAE模型:

这两个模型都能适配不同风格的大模型,并且能显著增强图像的色彩饱和度。根据使用体验,ema更锐利会明显地修改画面的细节、mse会更平滑对画面影响相对较小。

② 风格化VAE模型

某些VAE更适用于特定风格的大模型。在下载时,应仔细查看VAE开发者提供的使用指南。例如,ClearVAEkl-f8-anime2Anything等VAE,适合搭配动漫风大模型使用。

不同VAE下,图像生成效果会略有差异,大家可以根据实际情况对比选择:

[h2]3.4 Embedding模型[/h2]

3.4.1 Embedding模型介绍

Embedding(嵌入) 也叫 textual inversion (文本反转),它在深度学习领域通常指的是“嵌入式向量”,这些向量能够代表输入数据(如文本或图像)的关键特征。Embedding模型通常用来嵌入元素特征(比如人物特征/特定画风)、负面信息(用来减少图的崩坏几率),可以理解为Embedding的作用就是对提示词进行打包。

存放路径为: [mark]*/stable-diffusion-webui/novelai-webui-aki-v3/embeddings[/mark]

通常文件大小在几十kb,文件后缀为pt、ckpt、safetensors。

3.4.2 Embeddings模型使用

①正向提示词Embedding使用

比如想生成一张《电锯人》中玛奇玛(Makima)这个角色的图像,选择 rabbit_v6 动漫风格大模型。

[success title=”输入提示词:”]

1girl, long hair, braided, white shirt, black tie, black pants

一个女孩,长发,扎着辫子,白衬衫,黑色领带,黑色裤

[/success]

在这种情况下,我们可以通过使用少量的玛奇玛图片来训练一个Embedding嵌入模型。这个模型能够在大模型创建玛奇玛图像时,把相应的特征关键字嵌入到大模型的词库中。这样一来,大模型就能“认识”玛奇玛的外观,从而自动生成准确的形象。

我们制作一个Embedding嵌入模型命名为 corneo_makima,同时存放在相应目录,更改提示词为:

1girl, long hair, braided, white shirt, black tie, black pants, corneo_makimazh

如果我们把这个模型命名为“corneo_makima”,并在输入正向提示词时加上这个名称,就可以不需要我们提供详细的描述,自动地生成准确的玛奇玛形象。这样生成的图像就具有了玛奇玛图片的一些特征。

从上图可以看到,使用Embedding模型生成的图片具有原始形象的某些特征,比如眼睛样式、头发颜色,但是样貌还是有很大的差别,所以Embedding模型使用有一定的局限性,仅在生成特定的人物形象、画风、姿势动作上有所应用。

同时由于训练数据较少,生成图像的精细度受限,个性化特征展现远不如lora模型那样稳定,因此在正向提示词的使用上并不普遍。

②反向提示词Embedding使用

在图像生成过程中,为了防止产生质量不佳的图像,经常需要输入一些反向提示词:

[success title=”例如:”]

Low resolution, blur, facial features distortion, finger errors, watermarks

低分辨率、模糊、五官扭曲、手指错误、水印

[/success]

Embedding的优势在于,它能够将这些冗长的描述性提示词压缩成一个简洁的提示词,实现相同或更佳的效果,所以Embedding在反向提示词使用比较广泛。

EasyNegative 是一款目前广泛应用的反向提示词嵌入模型,它能有效地增强图像的细节,防止出现模糊、灰暗色调和面部畸形等问题,非常适合用于大型动漫风格的大模型。

badhandv4 是一个专为手部细节优化设计的反向提示词嵌入模型,它能在最小化对原始风格的干扰的同时,有效减少手部不完整、手指数目错误或多余手臂等问题,非常适合用于动漫风格大模型。

3.4.3 Embedding模型下载

Embedding模型的资源,就像其他AI绘图模型一样,主要分布在 Civitai 和 Huggingface 这两个网站。你可以在 Civitai模型 上筛选并查阅Embedding资源,也可以直接在网上搜索特定的Embedding名称来获取所需资源。

3.4.4 Embedding模型推荐

下面推荐6款 embedding 模型,大家可以根据自己的需要下载:

EasyNegative

EasyNegative 是目前使用率极高的一款反向提示词 embedding 模型,可以有效提升画面的精细度,避免模糊、灰色调、面部扭曲等情况,适合动漫风大模型。

Deep Negative_v1_75t

Deep Negative 可以提升图像的构图和色彩,减少扭曲的面部、错误的人体结构、颠倒的空间结构等情况的出现,无论是动漫风还是写实风的大模型都适用。

badhandv4

badhand 是一款专门针对手部进行优化的反向提示词 embedding 模型,能够在对原画风影响较小的前提下,减少手部残缺、手指数量不对、出现多余手臂的情况,适合动漫风大模型。

Fast Negative

Fast Negative 也是一款非常强大的反向提示词 embedding 模型,它打包了常用的反向提示词,能在对原画风和细节影响较小的前提下提升画面精细度,动漫风和写实风的大模型都适用。

BadDream + UnrealisticDream

这两款 embedding 模型是专门为写实风大模型 DreamShaper 制作的,开发者是同一个人。BadDream 适合“dreamshaper 风格”的图像;UnrealisticDream 更适合写实逼真的图像,并且需要与 BadDream 或其他常规反向提示词一起使用。

[h2]3.5 模型后缀解析[/h2]

格式 描述
.ckpt Pytorch的标准模型保存格式,容易遭受Pickle反序列化攻击。
.pt Pytorch的标准模型保存格式,容易遭受Pickle反序列化攻击。
.pth Pytorch的标准模型保存格式,容易遭受Pickle反序列化攻击。
.safetensors safetensors格式可与Pytorch的模型相互格式转换,内容数据无区别。
其它 webui 特殊模型保存方法:PNG、WEBP图片格式。

延伸阅读:什么是PyTorch?

3.5.1 safetensors和ckpt格式区别

  • Safetensors格式所生成的内容与ckpt等格式完全一致。
  • Safetensors格式拥有更高的安全性。
  • Safetensors比ckpt格式加载速度更快。
  • 该格式必须在2023年之后的Stable Diffusion内才可以使用,在此之间的SD版本内使用将无法识别。
  • Safetensors格式由Huggingface推出,将会逐渐取代ckpt、pt、pth等格式,使用方法上与其它格式完全一致。

3.5.2 Pickle反序列化攻击

可以将字节流转换为一个对象,但是当我们程序接受任意输入时,如果用户的输入包含一些恶意的序列化数据,然后这些数据在服务器上被反序列化,服务器是在将用户的输入转换为一个对象,之后服务器就会被任意代码执行。

[h1]4.提示词撰写[/h1]

[h2]4.1 提示词语法[/h2]

文字提示词(prompt)分为正向提示词和反向提示词,提示词可以绘制出想象中的画面。

特别需要注意的是,提示词相关符号需使用半角符号。

[h3]4.1.1 分割符号[/h3]

在构建Prompt时,合理使用分割符号可以帮助提高生成图像的质量。常见的分割符号包括[mark]逗号,[/mark][mark]圆括号()[/mark][mark]中括号[][/mark][mark]大括号{}[/mark][mark]尖括号<>[/mark]。这些符号可以用于分隔不同的提示词,并赋予它们不同的权重和优先级。

①逗号

[mark]逗号, [/mark]可用于分割词缀,且有权重排序功能,逗号前权重高,逗号后权重低,空格和换行等不影响词缀分隔。

[success title=”示例:”]

1girl, car

可能主体是女孩,衬托是汽车

car, 1girl

可能主体是汽车,衬托是女孩

[/success]

②小括号

[mark]小括号()[/mark]每用一次代表权重提高1.1倍,支持多层嵌套方式,可以直接在括号里输入冒号接着写上权重的数值。

  • (word) 提示词权重提高1.1倍
  • ((word)) 提示词权重提高1.21倍(1.1*1.1)
  • (word:1.5) 提示词权重提高1.5倍
  • (word:0.25) 提示词权重减少4倍

③中括号

[mark]中括号[][/mark]每用一次代表权重降低1.1倍,支持多层嵌套方式,不可以直接在括号里输入冒号接着写上权重的数值。

  • [word] 提示词权重降低1.1倍
  • [[word]]提示词权重降低1.21倍 ( 1.1 * 1.1)

④大括号

[mark]大括号{}[/mark]每用一次代表权重降低1.1倍,支持多层嵌套方式,不可以直接在括号里输入冒号接着写上权重的数值。

  • {word} 提示词权重提升1.05倍
  • {{word}}提示词权重提升1.1025倍( 1.05 * 1.05)

[h3]4.1.2 权重控制[/h3]

①顺序原则

一般来说越靠前的词汇权重就会越高。

 

所以多数情况下的提示词格式是:质量词+媒介词+主体+主体描述+背景+背景描述+艺术风格

[success title=”示例:”]

masterpiece,bestquality,sketch,1girl,stand,black jacket,wall backgoround,full of poster

杰作,最佳质量,速写,一个女孩,站立,黑色夹克,墙壁背景,充满海报

[/success]

②加权方式

可以通过分割符号[mark]小括号()[/mark][mark]大括号{}[/mark]进行加权,支持多层嵌套加权。

  • (girl)代表girl提升1.1倍权重,((girl)代表提升1.1*1.1=1.21倍权重
  • {girl}代表girl提升1.05倍权重,{{girl}}代表提升1.05*1.05=1.1025倍权重。

但是这样调整比较麻烦,一般用(girl: 1.5)这样的方式来控制权重。

③降权方式

可以通过分割符号[mark]中括号[][/mark]进行降权,支持多层嵌套加权。

  • [girl]代表girl降低1.1倍权重,[[girl]]代表降低1.1*1.1=1.21倍权重。

但是这样调整比较麻烦,一般用(girl: 0.7)这样的方式来控制权重。‘’

[h3]4.1.3 分步绘制[/h3]

元素融合一般采用”|”或者“:”符号。

 

[h2]4.2 正向提示词[/h2]

正向提示词支持用自然语言进行描述,简而言之就是一句自然的话,从下图可以看到出图质量一般。

[success title=”示例”]

A girl wearing a sweater standing under cherry blossoms

一个女孩穿着毛衣在樱花下站着

[/success]

为了提升出图质量,通常将一句话分解成若干个关键词(tag),调整权重按序排列。

还是以上一句提示词为基础:

A girl wearing a sweater standing under cherry blossoms

提取出以下关键词:

1girl, sweater, standing, cherry blossoms

将自然语言描述的句子中的关键词提取出来,用特定的方式进行排列,调整权重,使画面更接近自己想要的效果。

 

拆解法

 

公式法

[h2]4.3 反向提示词[/h2]

反向提示词(negative prompt)就是输入不想在画面中出现的内容,比如低质量图片、变形的手、多余的指头等。

反向提示词分两类,

  • 一个是手动输入反向提示词语
  • 一个是加载下载好的 Embedding

[h1]5.Clip 跳过层(Clip Skip)[/h1]

因为Stable Diffusion v1.5大部分模型都是将Clip Skip值设置为2训练出来的,所以在实际使用时通常把CLIP Skip值设置为2,出图质量更好更能反应提示词所表达的含义。

Clip 跳过层(Clip Skip)

[h2]5.1 Clip概念[/h2]

CLIP,全称是Contrastive Language-Image Pre-Training,中文的翻译是:通过语言与图像比对方式进行预训练,可以简称为图文匹配模型,即通过对语言和图像之间的一一对应关系进行比对训练,然后产生一个预训练的模型,能为日后有文本参与的生成过程所使用。

CLIP 本身也是一个神经网络,它将 Text Encoder 从文本中提取的语义特征和 Image Encoder 从图像中提取的图像特征进行匹配训练。这样的训练方式简单直接,且效果突出。研究人员发现在后续处理环节中,用来生成图像的 Diffusion 与表示的文本数据的 CLIP 可以非常好地协同工作,这也是为什么 Stable Diffusion 选择 CLIP 作为其图像生成方面的三大基础模型之一的原因。

 

标记化是计算机理解单词的方式,人类可以阅读单词,但计算机只能读取数字。这就是为什么文本提示词中的单词首先要被转换为数字,通常一个标记对应一个令牌。

在Stable Diffusion v1版本中,文本提示词(text prompt)由CLIP标记器(CLIP tokenizer)进行标记化。CLIP是一个由OpenAI开发的深度学习模型,用于为任何图像生成文本描述。

标记器只能对训练期间看到的单词进行分词。例如,CLIP 模型中有“dream”和“beach”,但没有“dreambeach”。Tokenizer 将“dreambeach”这个词分解为两个标记:“dream”和“beach”。因此,一个词并不总是意味着一个令牌!

另一个细则是空格字符也是令牌的一部分。在上述案例中,短语“dream beach”产生两个标记“dream”和“[space]beach”。这些令牌与“dreambeach”产生的令牌不同,后者是“dream”和“beach”。

Stable Diffusion 最多在提示中使用 75 个令牌,而不是75个字。

[h2]5.1 Clip跳过层概述[/h2]

为了在图像上反映文本提示词,CLIP标记器将文本标记化。

CLIP模型(Stable Diffusion  1.x 模型中存在的文本嵌入),具有由层组成的结构。

每一层都比上一层更具体。例如,如果第 1 层是人,则第 2 层可能是男性或女性,第 3 层可能是男人、男孩、父亲、爷爷等。请注意,这并不完全是 CLIP 模型的结构方式,而是为了举例说明。

例如,Stable Diffusion v1.5 模型的深度为 12 层。第 12 层是文本嵌入的最后一层,每一层都有一定大小的矩阵,并且每一层都有附加的矩阵。所以 4×4 第一层下面有 4 个 4×4……所以等等。所以文本空间在维度上他妈的很大。

CLIP模型由多个层组成,比如Stable Diffusion 1.5模型深度有12层。

 

 

 

 

 

这是一个在设置中的滑块,它控制 CLIP 网络对提示进行处理的提前停止时间。

更详细的解释:

CLIP 是一个非常先进的神经网络,它将您的提示文本转换为数值表示。神经网络非常适合使用这种数值表示,这就是为什么 SD 的开发者选择将 CLIP 作为稳定扩散方法中生成图像的三个模型之一的原因。由于 CLIP 是一个神经网络,这意味着它有很多层。您的提示以简单的方式被数字化,然后通过层进行馈送。在第一层之后,您会得到提示的数值表示,然后将其馈送到第二层,将该结果馈送到第三层,依此类推,直到达到最后一层,这是在稳定扩散中使用的 CLIP 的输出。这是滑块值为 1。但是您可以提前停止,使用倒数第二层的输出 – 这是滑块值为 2。您停止得越早,神经网络处理提示的层数就越少。

一些模型是通过这种调整进行训练的,因此在这些模型上设置此值有助于产生更好的结果。

注意:所有 SDXL 模型都是使用倒数第二(次级)层进行训练的。这就是为什么 Clip Skip 故意不会改变模型的结果,因为这只会使结果变得更糟。该选项仅由于早期的 SDv1 模型没有提供确定要使用的正确层的方式而提供。

[h1]6.采样迭代步数[/h1]

采样迭代步数是指在使用 Stable Diffusion 时,使用多少步将其绘制出来。在实际使用中,过少的步数会让图片降噪未完全完成;过多的步数会增加计算时间,同时很容易造成图片畸变。一般来说,采样步骤建议设置为20~30步。

从上图可以看出,步数设置为20步时,出图质量最高。高于20步时,女孩的形态反复变化,产生了一些畸变。

不同的模型最佳采样步骤会不同,这个需要大家反复进行测试,有些模型开发者也会在模型下载界面进行说明请注意阅读。

[h1]7.采样方法[/h1]

[h2]7.1 采样概念[/h2]

为了生成一张图片,Stable Diffusion首先在潜在空间中生成一个完全随机的图像,然后噪声预测器估计图像的噪声,预测的噪声被从图像中减去,这个过程重复多次,最后得到一张干净图像,这种去噪过程称为采样。在每个步骤都会生成一个新的采样图像,采样中使用的方法称为采样器或采样方法。

下面是一个采样示例,采样器逐渐产生越来越干净的图像。

[h2]7.2 噪声计划[/h2]

每次降噪都会对图像进行一次修改,通常降噪强度是前面几步较强,越到后面降噪强度越弱。这种针对每一步降噪强度的调控被称为噪声计划(Noise schedule)。目前webui中有default(默认)、Karras、Exponential三种噪声计划。

以下是default(默认)噪声计划,采样迭代步数为15步和30步的对比:

15步 30步

增加采样步数,可以减少每步之间的降噪幅度,这样可以避免截断误差

不同的采样器在每一步的降噪强度可能各不相同,这使得采样器能够灵活地适应不同的应用场景和需求。

含有Karras词缀的采样器均使用了karras噪声计划,karras与默认(default)噪声计划对比如下图所示:

karras噪声计划在初始采样步骤中的噪声较多,而在结尾采样步骤中的噪声较少,实验表明这样有助于提高生成图片的质量。

[h2]7.3 采样收敛概念[/h2]

收敛是一个经济学、数学名词,是研究函数的一个重要工具,是指会聚于一点,向某一值靠近。

采样收敛是在扩散算法经过一定的采样迭代步数后,图像是否趋于稳定。换句话说,收敛是在连续迭代过程中图像前后变化幅度较小,不收敛是指在连续迭代过程中图像前后变化幅度较大。

收敛,图像前后变化幅度较小 不收敛,图像前后变化幅度较大

注意观察Euler和Euler a采样器下猫背部的变化情况,Euler明显变化幅度较小,Euler a明显变化幅度较大。

为了便于理解,选择Euler和Euler a采样器,采样迭代步数选择1-30步进行对比:

详细对比图,点击查看原图

这里挑选出以下步数对比更直观:

很明显Euler收敛,Euler a不收敛。

[h2]7.4 采样器词缀含义[/h2]

在 Stable Diffusion webui 中,已经整合了多种采样器,如 Euler a、DPM2、DDIM 和 Restart 等。随着算法的进步和新算法的涌现,预计将会不断增加更多的采样器,这些采样器各有特点,对图像生成的效果和速度影响不同。在选择采样器时,我们应该深入了解它们的算法特性。

[h3]7.4.1 “a”含义[/h3]

所有名字中包含独立字母a的采样器都是原始采样器(Ancestral sampling)。原始采样器在每一步采样时都向图像引入新的随机噪声,这导致图像内容不断变化,难以达到稳定状态,专业术语称之为难以收敛。

[h3]7.4.2 “2S/2M/3M”含义[/h3]

例如DPM++2s a、DPM++ 2M SDE、DPM++3M SDE等采样器带有这些数字标识,这里介绍下它们的含义。

数字的含义:

2代表是二阶采样器,3代表是三阶采样器。不带这些数字是一阶采样器,比如Euler、DDIM采样器。

采样器阶数越高,采样结果越准确,但是阶数越高,计算复杂度也更高,对算力要求越高。

在数学中,”阶”通常表示对某个变量的导数或微分。一阶通常涉及变量的第一导数或微分,而二阶涉及第二导数或微分。在优化和采样的上下文中,采用二阶方法意味着我们考虑了样本点及其变化情况。这有助于更准确地估计函数的形状和行为,进而更好地进行采样。

字母的含义:

S代表singlestep,即每次迭代只进行一步。这使得采样速度更快,但可能需要更多的步骤才能达到所需的图像质量。这种方法更适用于需要快速反馈或实时渲染的应用,因为它可以快速生成图像,尽管可能需要更多的迭代来达到理想效果。

M代表multistep,即每次迭代会执行多步。由于每次迭代需要进行多次更新,采样速度较慢,但通常只需要较少的采样步数就能达到所需的图像质量。这种方法更适合那些对图像质量要求较高的应用,或者愿意花费稍长时间以获得更好结果的应用。

[h3]7.4.3 “SDE”含义[/h3]

SDE(Stochastic Differential Equation)是随机微分方程的简称。简而言之,这类微分方程的使用使得噪声的建模方式更为复杂和精确,它能够利用之前步骤中的信息。原则上,这种方法能够生成更高质量的图像,但是处理速度较慢。由于采用了随机方法,SDE采样方法永远不会达到收敛状态。因此,增加处理步骤的数量并不会提高图像质量,而是会产生更多样化的结果,这一点类似于原始采样器。

[h3]7.4.4 “Karras ”含义[/h3]

含有Karras(或简写为K)字样的采样方法,均使用了Karras 噪声计划。Karras一词的由来,是指由 Nvidia 工程师 Tero Karras 所领导的一系列工作,这项工作为某些采样器带来重要改进,有效提高了输出质量和采样过程中计算效率。karras噪声计划在初始采样步骤中的噪声较多,而在结尾采样步骤中的噪声较少,可提高出图质量。

[h3]7.4.5 “Exponential”含义[/h3]

含有Exponential字样的采样方法,均使用了Exponential噪声计划。Exponential意思是指数映射优化,使用Exponential采样方法的画面更柔和、背景更干净但细节相对减少。

[h2]7.5 各采样器概述[/h2]

Euler

Euler欧拉采样方法,是最简单直接的采样方法。这种采样方法基于ODE(普通微分方程),其特点是在每一步处理中都会以固定的比例逐渐减少噪声。尽管因为其简单性而在精确度上有所欠缺,但是Euler因处理速度较快而被广泛应用。

Heun

Heun可以看作Euler采样方法的改进版。与Euler仅采用线性近似不同,Heun在每个处理步骤中执行两项任务,因此被称为二阶采样器。它先用线性近似做出预测,然后通过非线性近似来进行校正。这种方法在提高精确度的同时,也确保了更高的图像质量。然而,这种精确度的提升也有一个小代价,处理时间大约是Euler方法的两倍。

DDIM

DDIM(Denoising Diffusion Implicit Models,去噪扩散隐含模型)是Stable diffusion v1版本提供的采样器,它通常被认为已经过时,不再被广泛使用。

PLMS

PLMS(Pseudo Linear Multi-Step method,伪线性多步法)也是Stable diffusion v1版本提供的采样器,它也通常被认为已经过时,不再被广泛使用。

LMS

LMS(Linear Multi-Step method,线性多步骤方法)可以视为PLMS的一个变种,区别在于 LMS 使用的是数值方法,而非 PLMS 中的概率方法(从 PLMS 中去掉概率因素“P”就得到了 LMS)。与Euler和Heun不同的是,LMS 方法会利用前几个步骤中的信息来在每一步减少噪声。这样的处理方式虽然提高了图像的精度,但相应地也增加了计算需求,所以步骤较少的情况下容易出现色块。

DPM

DDPM(Denoising Diffusion Probabilistic Model,去噪扩散概率模型)是Stable diffusion最早期的采样器之一,它采用了明确的概率模型来消除图像中的噪声,现在webui中不提供此采样方法。DPM(Diffusion Probabilistic Model,扩散概率模型)是一种概率模型,它在DDPM的基础上进行了一系列改进,因此得名。

DPM2

DPM2 可以被视为DPM的升级版,相当于2代版本,它在原有模型的基础上做了改良和优化。

DPM++

DPM++是基于DPM的改进版本,DPM++ 采用了混合方法,它结合了确定性和概率性方法,进行采样以及处理后续噪声。

DPM fast

DPM fast是DPM的快速算法,效果较差基本不使用。

DPM adaptive

DPM adaptive是一种自适应的采样器,可能根据生成过程中的反馈信息动态调整参数和策略,以优化生成结果。

UniPC

UniPC (Unified Predictor-Corrector,统一预测-校正器)采样器是一种基于单个预测器的采样器,可能具有较低的计算成本和较快的生成速度,但可能会牺牲一些图像质量。

Restart

Restart采样器可能使用了一种特殊的重新启动机制,用于提高生成过程的稳定性和收敛性。

[h2]7.6 采样方法推荐[/h2]

前面我们对采样概念进行了一些了解,这里做一个思维导图便于大家进行理解。

推荐使用Euler、Euler a、DPM++ 2M Karras、DPM++ SDE Karras、DPM++ 2M SDE Karras、DPM++ 2M SDE Exponential、DPM++ 3M SDE Karras、DPM++ 3M SDE Exponentia采样器,下图进行了标红。

[h1]7.脚本用法[/h1]

webui中的脚本功能十分强大,内置的脚本提供了批量生成图片等功能,便于用户对比不同参数。

[h2]7.1 提示词矩阵[/h2]

生成图像时,通常需要反复调整提示词,来测试出图效果。然而,高频次修改提示词来生成图像比较繁琐,而且无法直观的对比图像。为了解决这个问题,可以使用提示词矩阵。提示词矩阵(Prompt matrix),可以在脚本中找到相关选项:

使用提示词矩阵,需要使用竖线符号[mark]|[/mark]将多个提示词分隔开。

[success title=”示例1:”]

[error title=”输入正向提示词:”]

1 cute girl, best quality|pink hair|black shirt|black glasses

一个可爱女生,最佳质量|粉色头发|黑色衬衫|黑色眼镜

[/error]

这里[mark]1 cute girl, best quality[/mark]不是变量,而[mark]|[/mark]后的[mark]pink hair、black shirt、black glasses[/mark]均是变量。脚本将变量排列组合后,形成8组提示词:

1 cute girl, best quality
1 cute girl, best quality, pink hair
1 cute girl, best quality, black shirt
1 cute girl, best quality, black glasses
1 cute girl, best quality, pink hair, black shirt
1 cute girl, best quality, pink hair, black glasses
1 cute girl, best quality, black shirt, black glasses
1 cute girl, best quality, pink hair, black shirt, black glasses

通过以上组合可以看出,除[mark]1 cute girl, best quality[/mark]之外,[mark]|[/mark]后面的提示词会相互组合进行出图。

[alert title=”特别提示“]变量[mark]pink hair、black shirt、black glasses[/mark]也是有顺序的,所以排列组合后:

会存在 1 cute girl, best quality, pink hair, black shirt

不会存在 1 cute girl, best quality, black shirt, pink hair

[/alert]

从下方的出图可以看到,通过提示词的不断组合,一共获得8张图片:

[/success]

[success title=”示例2:”]

下面我们尝试修改正向提示词,把 black glasses(黑色眼镜)修改为 twin braids(双辫子),来测试发型效果。

[error title=”修改后正向提示词为:”]

1 cute girl, best quality|pink hair|black shirt|twin braids

一个可爱女生,最佳质量|粉色头发|黑色衬衫|双辫子

[/error]

脚本重新排列组合提示词后,形成8组提示词:

1 cute girl, best quality
1 cute girl, best quality, pink hair
1 cute girl, best quality, black shirt
1 cute girl, best quality, twin braids
1 cute girl, best quality, pink hair, black shirt
1 cute girl, best quality, pink hair, twin braids
1 cute girl, best quality, black shirt, twin braids
1 cute girl, best quality, pink hair, black shirt, twin braids

这里可以明显看到,第二排图片女孩由黑色眼镜变为了双辫子。

[/success]

需要注意的是,设置的组合提示词越多,组合情况越多,最终所需要出的图片也会越多,花费的时间也会越长,所以适当添加提示词即可。

7.1.1 把可变部分放在提示词文本的开头

把可变部分放在提示词文本的开头,就是把变量放在提示词的前面。

[success title=”示例3:”]

[error title=”勾选“把可变部分放在提示词文本的开头”,正向提示词输入:”]

1 cute girl, best quality|pink hair|black shirt|twin braids

一个可爱女生,最佳质量|粉色头发|黑色衬衫|双辫子

[/error]
这里[mark]1 cute girl, best quality[/mark]不是变量,而[mark]|[/mark]后的[mark]pink hair、black shirt、twin braids[/mark]均是变量。由于可变部分(变量)放在提示词文本的开头,脚本将变量排列组合后,形成8组提示词:

1 cute girl, best quality
pink hair, 1 cute girl, best quality
black shirt, 1 cute girl, best quality
twin braids, 1 cute girl, best quality
pink hair, black shirt, 1 cute girl, best quality
pink hair, twin braids, 1 cute girl, best quality
black shirt, twin braids, 1 cute girl, best quality
pink hair, black shirt, twin braids, 1 cute girl, best quality

[/success]

由于提示词的顺序原则,越靠前的提示词权重越高,所以勾选“把可变部分放在提示词文本的开头”对比不勾选“把可变部分放在提示词文本的开头”的出图,因为[mark]pink hair、black shirt、twin braids[/mark]这些变量权重更高,在出图中也相应元素体现得更加明显。

7.1.2 为每张图片使用不同随机种子

勾选这个选项,每次生成都会生成不一样的图片,这样生成的图片就没有对比性了,所以不建议不勾选。

7.1.3 选择提示词

脚本提示词作用域是在正向提示词区域还是反向提示词区域。

7.1.4 选择分割符

相互排列生成提示词的时候,是以逗号分割还是以空格进行分割,就是”|”替换成逗号还是空格,一般默认为逗号即可 。

7.1.5 宫格图边框

就是让生成的图片有边框,更容易区分照片。[h2]7.2 从文本框或文件载入提示词[/h2]

从文本框或文件载入提示词(Prompts from file or textbox),可以一次性输入多组提示词,进行任务批处理,按顺序逐一生成图片。输入的方式可以是文本框,也可以是文件(txt格式)。

7.2.1 选项作用

  • 每行输入都换一个随机种子:每条脚本提示词都使用不同的随机种子。
  • 每行输入都使用同一个随机种子:每条脚本提示词都使用相同的随机种子。
  • Insert prompts at the(插入提示词的位置):如果 Prompt(正向提示词)框中有内容,会与脚本提示词进行合并。”start” 表示将脚本提示词插入 Prompt 的前面;”end” 表示脚本提示词插入 Prompt 的后面。
  • 提示词输入列表:输入脚本提示词的地方,每条脚本提示词使用换行符分割。
  • 上传提示词输入文件:如果提示词脚本过多,可以将脚本提示词放到 txt 格式的文件,上传导入。

7.2.2 用法示例

简单示例:

在提示词列表中,输入以下四条提示词:a girl(一个女孩)、a boy(一个男孩)、a panda(一个熊猫)、a apple(一个苹果)。

a girl
a boy
a panda
a apple

这样会按顺序生成四张照片,分别为一个女孩、一个男孩、一个熊猫、一个苹果:

进阶示例:

在提示词列表中,输入以下提示词

--prompt "city" 
--prompt "snow mountain"
--prompt "a girl" --restore_faces true
--prompt "steppe" --sampler_name "DPM++ SDE Karras" --seed 2740754650

这会生成四张图片,分别是

城市
雪山 
一个女孩,开启面部修复
草原,指定采样方法为:DPM++ SDE Karras ,随机种子是:2740754650

7.2.3 输入规则

参数格式:

--参数名称 "字符串"
eg:--prompt "a beautiful girl,pink hair,black glasses" --sampler_name "DPM++ SDE Karras"
--参数名称 数值/布尔值
eg:--steps 20 --seed 2740754650 --restore_faces true

字符串需要用半角引号括起来,而数值不需要用半角引号括起来,布尔值(ture/false)也不需要用半角引号括起来,参数与参数之间用半角空格隔开,eg 是例如的意思。

restore_faces 为面部修复,默认为 false,如需要开启面部修复,则参数中要设置为 true。

7.2.4 常用参数

提示词脚本支持更复杂的批处理任务,可以通过以下参数指定提示词的模型、采样器、采样步数、宽/高等参数。

sd_model:模型名称
outpath_samples:样本输出路径
outpath_grids:网格输出路径
prompt_for_display:用于展示的提示词
prompt:正向提示词
negative_prompt:反向提示词
styles:提示词模板(自定义的提示词模板)
seed:随机种子
subseed_strength:次级种子强度
subseed:次级种子
seed_resize_from_h:次级种子高度
seed_resize_from_w:次级种子宽度
sampler_index:采样器索引
sampler_name:采样器名称
batch_size:生成批次
n_iter:每批数量
steps:采样迭代步数
cfg_scale:提词相关性
width:宽度
height:高度
restore_faces:面部修复
tiling:平铺
do_not_save_samples:不保存样本
do_not_save_grid:不保存网格

[h2]7.3 X/Y/Z 图表[/h2]

X/Y/Z 图表(X/Y/Z plot)是一个非常实用的功能,这个脚本可以快速帮助我们对不同参数进行测试和对比。

7.3.1 选项作用

X/Y/Z 轴的类型:

根据每个轴来确定要比较的要素,如下图所示,可以从下拉菜单中进行选择。

X/Y/Z 轴的值:

轴的类型不同,轴的值元素输入有不同的方法,下面列举常用的输入方法。

要素 输入值的类型 示例
随机种子(seed) 整数(-1,0,1,2,3……)

每个轴的设定值。如后文所述,填写时需要遵循规定的格式

  • 显示类型和值: 是否绘制表格标题
  • 宫格图边框间距: 表格图像之间的间隔。如果设置为大于0的值,将会产生间隙

 

X/Y/Z 轴均可以对以上参数进行设置

 

[h1]9.图生图教程[/h1]


THEAI.DO » Stable diffusion webui教程

发表回复