StableDiffusion下载部署及相关参数介绍

StableDiffusion下载部署

官网上有默认的Web UI,不过自己安装的是有大佬配置好了的整合包:Stable Diffusion整合包v4.4

具体安装配置请参照B站大佬秋叶aaaki的安装视频:

【AI绘画·11月最新】Stable Diffusion整合包v4.4发布!全新加速 解压即用 防爆显卡

https://www.bilibili.com/video/BV1iM4y1y7oA/?spm_id_from=333.337.search-card.all.click&vd_source=2e29779ae9d416549bbc23da2d314580

模型与导航

和Midjourney不同,Stable Diffusion有很多模型可供选择,但需要自行下载安装。可以从Hugging Face、Civitai等平台下载模型,并将模型文件(以及可能附带的配置文件)放到Web UI安装目录下的“models/Stable-diffusion”文件夹中。

提示词

要在Stable Diffusion中画图,需要通过输入文本提示词来告诉它想要什么样的图像。Stable Diffusion的提示词分为正向提示词和反向提示词。顾名思义,正向提示词表示绘图时想要的内容,反向提示词则表示不想要的内容。提示词一般需要使用英文,不同的关键词之间使用半角逗号隔开,也有一些模型支持中文或其他语言的关键词,具体可见各模型的说明。下面来看一个具体的例子。例如,想画一只在开心地奔跑的小狗,可以在正向提示词输入框中输入以下内容:

a dog, happy, running

在这里插入图片描述

其余输入框或参数保持默认,然后单击右侧的“生成”按钮,稍等片刻,就能在右侧的预览面板看见生成的图片,生成的图如上图所示。注意,Stable Diffusion生成图片时具有一定随机性,用相同提示词生成的图片也会有所不同。

下面是一段反向提示词的例子:

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

这些词的含义是“低分辨率、不良解剖结构、文本、错误、多余数字、较少数字、裁剪、质量最差、低质量、正常质量、jpeg伪像、签名、水印、用户名、模糊”。

加上反向提示词后,生成的图片如图所示。

在这里插入图片描述

在本例中,反向提示词的影响不是很显著,不过在进行更复杂的绘画时,反向提示词可能会对图片内容和质量起到非常重要的作用,后续章节中可以看到更多示例。

图片权益

刚刚使用Stable Diffusion生成了两张小狗的图片,很多读者可能会有疑问,这两张图片有版权吗?或者更广泛一点,用Stable Diffusion生成的图片属于谁?可以商用吗?

这是一个复杂的问题,目前国内外都还存在很多争议。由于Stable Diffusion的模型需要使用大量图片来训练,这些用作训练的图片本身可能受版权保护,使用这些模型创作的图片也可能会包含这些版权图片的元素或特征。如果绘制的图片与版权图片非常相似,那么可能会侵害原图的“复制权”;若并不完全相似但仍然保留了原图的基础表达,则可能会侵害原图的“改编权”;当然,如果生成的图片与原图差异很大,没有明显的相似之处,则一般认为没有侵权,创作者享有新生成图片的所有权,可以用于商业等目的。

常用参数

可以看到,Stable Diffusion的基本用法很简单,只需选择合适的模型,然后输入正向提示词、反向提示词即可。不过,如果要得到更细致的结果,就需要对各参数设置有所了解。下面就来介绍常用的参数。

在这里插入图片描述

为了生成图像,Stable Diffusion会先在潜空间中生成一张随机的噪声图,然后再对这张图片多次去噪,最后得到一张正常的图片,如图所示。这个去噪的过程被称为采样(sampling),而采样方法(sampler)则是这个过程中使用的方法。

在这里插入图片描述

1 老式求解器

Euler、Henu、LMS采样方法比较简单,是老式的常微分方程(ODE)求解器。其中Euler是最简单的求解器,Henu比Euler更准确但是也更慢,LMS(Linear Multi-Step method,线性多步法)速度与Euler相同,但LMS号称更准确。

在这里插入图片描述

2 祖先采样方法

有一些取样器的名字中带有一个字母“a”,这表明它们是祖先采样方法(ancestral sampler)。祖先采样方法属于随机采样方法,它们会在每个采样步骤中添加随机噪声,使结果具有一定的随机性,从而探索不同的可能性。需要说明的是,还有一些其他方法也是随机采样,尽管它们的名字中没有“a”。使用祖先采样方法可以通过较少的步骤产生多样化的结果,但缺点是图像不会收敛,随着迭代步数的增加,图像将不断变化,生成的图像可能更嘈杂且不真实。而如果使用Euler等收敛采样方法,一定步数之后图像的变化会逐渐变小,直到趋于稳定。

祖先采样方法如下:

  • Euler a。
  • DPM2 a。
  • DPM++ 2S a。
  • DPM++ 2S a Karras。

3 Karras版本

带有“Karras”字样的采样方法使用了泰罗·卡拉斯(Tero Karras)等人的论文①中推荐的噪声规则,与默认的规则相比,Karras的规则在开始时噪声较多,在后期噪声较少,据他们研究,这样的规则可以提高图像质量。

相关的采样方法如下。

  • LMS Karras。
  • DPM2 Karras。
  • DPM2 a Karras。
  • DPM++ 2S a Karras。
  • DPM++ 2M Karras。
  • DPM++ SDE Karras。

4 DDIM和PLMS

DDIM(Denoising Diffusion Implicit Model,去噪扩散隐式模型)和PLMS(Pseudo Linear Multi-Step method,伪线性多步法)是第一版Stable Diffusion中就附带的采样方法,其中DDIM是最早为扩散模型设计的采样方法之一,PLMS则比DDIM更新、更快。目前,这两个采样方法基本已经过时,不再被广泛使用。

5 DPM系列

DPM(Diffusion Probabilistic Model solver,扩散概率模型求解器)和DPM++是为2022年发布的扩散模型设计的新采样器,它们代表了一系列具有相似架构的求解器。

DPM2与DPM相似,只是它是二阶的,更准确但是也更慢。

DPM++是对DPM的改进,它使用快速求解器来加速引导采样。与Euler、LMS、PLMS和DDIM等其他采样器相比,DPM++速度更快,可以用更少的步骤实现相同的效果。

DPM++ 2S a是一种二阶单步求解器,其中“2S”代表“Second-order Single-step”(二阶单步),“a”表示它使用了祖先采样方法。

DPM++ 2M是一种二阶多步求解器,其中“2M”代表“Second-order Multi-step”(二阶多步),结果与Euler相似,它在速度和质量方面有很好的平衡,采样时会参考更多步而不是仅当前步,所以质量更好,但实现起来也更复杂。

DPM fast是DPM的一种快速实现版本,比其他方法收敛更快,但牺牲了一些质量。DPM fast通常用于对速度有较高要求的批量处理任务,但可能不适用于对图像质量要求较高的任务。

DPM adaptive方法可以根据输入图像自适应实现一定程度的去噪所需的步数,但它可能会很慢,适合需要较多处理时间的大图像任务。

DPM++ SDE和DPM++ SDE Karras使用随机微分方程(SDE)求解器求解扩散过程,它们与祖先采样方法一样不收敛,随着步数的变化,图像会出现明显的波动。

6 UniPC

UniPC(Unified Predictor-Corrector)是2023年发布的新采样方法,是目前最快最新的采样方法,可以在5~10步内实现高质量的图像生成。

7 k-diffusion

另外还有k-diffusion,它是指凯瑟琳·克劳森(Katherine Crowson)的k-diffusion GitHub库①和与之相关的采样方法,即前面提到的泰罗·卡拉斯(Tero Karras)等人论文中研究的采样方法。

基本上,除了DDIM、PLMS和UniPC之外的所有采样方法都源自k-diffusion。

8 速度

不同的采样方法在速度上有所差别,如表所示是各采样方法的渲染速度参考。

在这里插入图片描述

9 参考建议

在速度以及收敛性上,各采样方法的评判标准是确定的,但对于图片渲染的质量则没有统一的标准。有人认为带有“Karras”的方法比不带这个标签的同名方法更好,但也有人认为二者并没有明显的差异。同时,一些采样方法在照片等真实风格的图像上表现较好,另一些则在卡通漫画等风格的图像上更具优势。读者可以在具体实践中分别尝试比较,以找到最合适的采样方法。如果要提供一些经验上的建议,通常认为DPM++系列采样方法是大多数情况下较好的选择。以下是一些更具体的建议,仅供参考。如果时间有限,不想尝试太多方案,可以选择Euler或者DPM++ 2M。如果希望生成速度快且质量不错,可以选择DPM++ 2M Karras或者UniPC。如果希望得到高质量的图像,且不关心收敛性,可以选择DPM++ SDE Karras。

迭代步数

迭代步数是指在生成图片时进行多少次扩散计算,每次迭代相当于对图像进行一次去噪。迭代的步数越多,花费的时间也越长。迭代步数并不是越多越好,具体数字的选择和采样方法、参数设置等因素有关,一般在20~50次即可,太少可能会生成尚未完成的模糊的图像,太多则是一种浪费。下图展示了使用DPM++ 2M Karras采样方法生成一张小狗图片前20步迭代的结果。

在这里插入图片描述

在这里插入图片描述

可以看到,在前几步迭代中,图像内容存在严重的问题,第7步开始内容基本正常了,但尚未收敛,到第11步时绘图便已基本完成,后续的迭代中基本是在调整细节,图像的内容已经没有大的变化。对这个例子来说,迭代20步已经足够,后续迭代并不会提升图像的质量。如果继续迭代下去会怎么样呢?图7-17展示了第20、30、40、50、100、150次迭代的结果,可以看到,后续迭代中差异已经极小。当然,如果选择了不收敛的采样方法(如祖先采样方法),则后续迭代中图像将会不断随机变化,而不会收敛到一个稳定的值,但这些变化只是随机波动,并不会提升图片的质量。另外,其他参数也可能影响迭代步数的值。例如后面将要介绍的CFG参数,如果设置得较大,可能导致图片模糊,此时可以通过增加迭代步数的方式生成更多细节。

在这里插入图片描述

面部修复

在采样方法下面有三个复选框设置,分别是面部修复(Restore faces)、平铺图(Tiling)、高分辨率修复(Hires.fix),如图所示。

在这里插入图片描述

其中“面部修复”使用了额外的模型,可用于修复人物面部的问题。在使用这个功能之前,需要先指定使用的面部修复模型,具体设置位于“设置”面板的“面部修复”页面。目前有CodeFormer、GFPGAN两个模型可供选择,默认为CodeFormer。下方的数值条可以控制CoderFormer的权重,设为0时效果最强。

在这里插入图片描述

启用面部修复可能会对最终产生的图片带来一些不可预知的影响,如果发现影响不是想要的,可以关闭这个选项,或者增加CodeFormer权重参数以降低影响。

平铺图

“平铺图”用于生成可以无缝平铺的图案,可用于制作墙纸、印花图案等。

“平铺图”用于生成可以无缝平铺的图案,可用于制作墙纸、印花图案等。如图所示是一个例子,生成了一张可以平铺的花卉的图案。

在这里插入图片描述

高分辨率修复

“高分辨率修复”功能可用于将生成的图片放大为分辨率更高的高清图片。Stable Diffusion的原始分辨率是512像素或768像素,这个尺寸对大部分实际应用场景来说都太小了,虽然可以在下方的宽度和高度参数中直接设置更大的尺寸,但那样也可能带来新的问题,因为偏离原始分辨率可能会影响构图并生成错误的内容,例如生成的人物有两个头等。这时,就可以先生成较小的正常尺寸的图片,再使用“高分辨率修复”(Hires.fix)功能来放大图片的尺寸。勾选“高分辨率修复”复选框,界面上会显示更详细的设置项,如图所示。

在这里插入图片描述

放大算法

首先,需要选择“放大算法”,目前共有15种放大算法,如图所示

在这里插入图片描述

其中Lanczos、Nearest算法是较为传统的算法,仅根据图像的像素值进行数学运算来扩大画面并填充新像素,效果一般,尤其当生成的图像本身就比较模糊时,这些算法无法准确地填充缺失的信息。

ESRGAN 4x算法倾向于保留精细的细节并产生清晰锐利的图像。

LDSR(Latent Diffusion Super Resolution)是一种潜在扩散模型,质量好但速度非常慢,一般不推荐。

R-ESRGAN 4x+是对ESRGAN 4x的增强,在处理逼真的照片类图像时表现最佳,如果要放大风格较为真实的图像,推荐使用这个算法。

R-ESRGAN 4x+ Anime6B则是专为二次元图像优化过的算法,处理二次元图像时效果较好。

当然,也可以直接使用默认的Latent算法开始,多数情况下它的表现已经足够好。如果对效果不太满意,可再依次尝试其他算法,选择更佳的方案。

迭代步数

“高分迭代步数”(Hires steps)是指放大图像时的采样步数。默认为0,表示与生成图片时的步数相同,也可以修改为其他值。该值对最终图像的影响很大,如果步数过多,可能会生成一些奇怪的效果,可以根据具体场景尝试不同的值。

重绘幅度

“重绘幅度”(Denoising strength)也叫去噪强度,控制在执行放大采样之前添加的噪声强度。对Latent系列的放大器来说,这个值在0.5~0.8效果较好,低于0.5可能会得到模糊的图像,数值太高则会使图像细节发生很大的变化。

放大倍数以及尺寸

“放大倍数”参数非常直观,就是控制具体要将原图放大多少倍。如果原图尺寸是512×512,将放大倍数设为2时,将得到1024×1024的新图。在放大倍数参数后面是设置宽度和高度的值,也可以调整这两个值,直接指定新图的尺寸。如果设置了具体的宽度和高度值,那么放大倍数参数将失效。以上就是关于“高分辨率修复”(Hires.fix)功能的介绍,启动此项功能之后,在生成图片时会有两个过程。第一个过程就是普通的图片生成过程,第二个过程则是高分辨率修复过程,如果一切顺利,将得到一张指定分辨率的新图。除此之外,也可以单击顶部导航栏中的“后期处理”(Extras)标签,在其中上传并放大图片。

宽度和高度

可以指定生成图片的宽度和高度,如图所示。

在这里插入图片描述

宽度和高度的默认值都是512,范围为64~2048,可以输入范围内的任意值,但需要是8的倍数。图片宽度和高度的数值越大,生成时所需要的时间和资源也越多。另外,Stable Diffusion最初是基于256×256大小的数据集训练的,后来的潜在扩散模型(Laten diffusion model)使用了512×512的数据集训练,2.0之后的版本则使用768×768的数据集训练。因此,Stable Diffusion在生成512×512大小的图片时效果更好,2.0之后的版本中将宽或者高至少一项设为768时效果更好。如果希望生成分辨率较高的图,除了调整宽度和高度,也可以先生成一个尺寸较小的图,然后使用“高分辨率修复(Hires.fix)”等设置项或其他工具来放大图片,以减少资源消耗。

批量生成

可以使用相同的提示词以及参数来批量生成多张图片,每张图片都会有一定变化,不会雷同。在参数设置中有两项与批量生成图片有关,分别是“总批次数”和“单批数量”,如图所示。

在这里插入图片描述

两者的含义分别如下。总批次数:一共执行多少次生成任务,默认值为1,最大值为100。单批数量:每次任务生成多少张图片,默认值为1,最大值为8。其中生成图片的总数为两者相乘,即如果总批次数为3,单批数量为4,那么总共生成的图片数将是3×4=12张。如果需要批量生成4张图片,设置“总批次数为4、单批数量为1”和设置“总批次数为1,单批数量为4”效果是一样的,但后者会更快一些,同时后者也需要更大的显存支持。批量生成时,随机数种子参数(Seed)的值会不断递增,即第二张图的种子值是第一张图的种子值+1,第三张图的种子值是第二张图的种子值+1,以此类推。这个特性可以保证批量生成的图片产生变化,但又不至于变化太大。

CFG Scale

CFG Scale(Classifier Free Guidance scale)参数指定提示词的权重影响,默认值为7,如图所示。

在这里插入图片描述

理论上,CFG值越高,AI就会越严格地按照提示词进行创作,CFG值越低,AI会越倾向于自由发挥。如果CFG值为1,AI会几乎完全自由地创作,而值高于15时,AI的自由度将非常有限。

在Web UI中,CFG值的范围为1~30,可以满足绝大部分应用场景,不过如果通过终端使用Stable Diffusion,则最高可以将CFG设为999,还可以设为负值。当CFG的值为负数时,Stable Diffusion将生成与提示词相反的内容,类似使用反向提示词。

当CFG值设置得较高时,输出图像可能会变得模糊,细节丢失,此时,可以通过增加采样迭代步数或者更改采样方法来修复问题。

图演示了CFG值较高时,迭代步数(Step)对图像的影响。可以看到,迭代步数为20时,图像部分区域太亮,缺少细节,同时小狗似乎多了一只前脚。迭代步数提高到30、40之后,图像细节就改善了很多。

在这里插入图片描述

CFG值以及影响的参考如下。

  • 基本上忽略提示词。
  • 参考提示词,但更有创意。
  • 在遵循提示词和自由发挥之间的良好平衡。
  • 更遵守提示词。
  • 严格按照提示词操作。

多数情况下,CFG的数值为7~10是一个较为合适的选择。

随机数种子

种子(Seed)在Stable Diffusion中是一个非常重要的概念,可以大致理解为图片的特征码,如果想重复生成某张图片,除了使用相同的提示词、采样方法、迭代步数等参数,种子也必须要保持一致。随机数种子的设置组件如图所示。

在这里插入图片描述

默认情况下,随机数种子显示为-1,表示每次都使用一个新的随机数。控件旁边的骰子按钮在这里插入图片描述
表示种子使用随机值,单击之后随机数种子输入框会显示-1。绿色循环箭头按钮在这里插入图片描述
则表示使用上一次生成图像的种子值,可用于重现结果。在查看生成的图片时,可以发现图片的文件名可能类似“00072-3374807977.png”,其中前面的“00072”表示这是今天生成的第73张图片(编号从0开始,第一张图片是“00000”,第二张图片是“00001”),后面的“3374807977”即是这张图片的种子值。可以在随机数种子输入框中输入具体的种子值,例如“3374807977”,以便重新生成指定的图片。勾选随机数种子设置项最右侧的复选框,可以打开扩展栏,如图所示。

在这里插入图片描述

其中变异随机种子(Variation seed)和变异强度(Variation strength)两个值需要配合调整,调整这两个值,可以生成介于两张图片中间的图。其中变异强度的值范围为0~1,0表示完全不变异,1表示完全变异。

例如使用两个随机数分别获得了两张小狗的图像,如图1和图2所示。

在这里插入图片描述

在这里插入图片描述

将“3374807977”和“3374807978”分别填入随机数种子(Seed)和变异随机种子(Variation seed)栏,然后调整变异强度的值从0逐步过渡到1,便可以得到介于上面两张图片中间的新图,如图所示。

需要注意的是,如果两张图差异过大,那么中间的过渡图片中可能会出现一些奇怪的内容。从宽度/高度中调整种子是另一个实用功能。有时可能想调整一张图片的尺寸,即使已经输入了固定的种子值,但在Stable Diffusion中,调整尺寸也会让图片内容发生较大变化,这时,就可以使用从宽度/高度中调整种子的功能。

在这里插入图片描述

下面来看一个例子。图所示为原图,尺寸是512×512,固定提示词、种子等参数,将它的尺寸改为512×768。如果直接修改尺寸,将得到图7-33所示的结果,可以看到,图片内容与原图差别很大,不但小狗的毛色变了,连数量都发生了变化。

在这里插入图片描述

在这里插入图片描述

此时,可以从宽度/高度中调整种子,将宽度和高度设为原图的值,如图7-34所示,随后生成的图片结果如图7-35所示。可以看到,虽然小狗的模样仍然发生了变化,但也保留了原图中小狗的很多特征,例如毛色。如果提示语对小狗的外貌描述得更详细,甚至可以得到更好的效果。

在这里插入图片描述

在这里插入图片描述

总结

链图片转存中…(img-AHeye7zX-1703487221058)]

此时,可以从宽度/高度中调整种子,将宽度和高度设为原图的值,如图7-34所示,随后生成的图片结果如图7-35所示。可以看到,虽然小狗的模样仍然发生了变化,但也保留了原图中小狗的很多特征,例如毛色。如果提示语对小狗的外貌描述得更详细,甚至可以得到更好的效果。

[外链图片转存中…(img-jPEzeKpA-1703487221058)]

[外链图片转存中…(img-xiYdBcFv-1703487221059)]

总结

本文介绍了如何在本地安装Stable Diffusion Web UI——一款专为Stable Diffusion打造的可视化操作界面应用,关于Stable Diffusion的功能介绍基本都将基于这个应用。接着介绍了Stable Diffusion的基本用法,使用Stable Diffusion画图很简单,只需选择模型,输入提示词描述想要的内容即可。另外,还可以添加反向提示词,告诉AI画面中不要出现什么。和Midjourney不同,Stable Diffusion有很多参数设置项,本章中介绍了各个常用的参数,包括采样方法、迭代步数、CFG Scale、随机数种子等参数的含义以及设置。可以先从各项参数的默认值开始,如果想更细致地控制绘画结果,那么了解这些参数的作用将很有帮助。

  • 14
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT学徒.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值