Stable Diffusion 文生图全网最细详解
Stable Diffusion 文生图全网最细详解
从这一节开始,我们将正式学习Stable Diffusion(SD)。首先从Web UI开始讲解,重点介绍使用最广泛的文生图模块。
一、WEB UI 页面
如果你使用的是SD,进入web ui页面后可以看到如下界面:
- 模型选择:模型对于SD绘图来说非常重要,不同的模型类型和质量会很大程度上决定最终的出图效果(模型相关的课程会在后面细讲)。
- Prompt区:如果你使用过ChatGPT,你应该知道Prompt是什么。简单来说,Prompt就是你想让SD帮忙生成什么样的图,反向Prompt就是你不想让SD生成的图里有这些东西。后续课程会详细讲解如何更好地编写Prompt。
- 功能栏:包括了常见的文生图、图生图、模型获取、模型训练等功能。不同的功能页面也不同,这一节课,我们先针对最常用的文生图模块页面来讲解。
- 采样区:采用什么样的绘画方式算法,以及“画多少笔”来绘图。一定程度上决定出图的质量。
- 调参区:设置分辨率、每次出图的批次、出图抽象性(和prompt关联性的程度)。
- 脚本区:通过配置脚本可以提高效率;比如批量出图、多参数的出图效果比较(课程中会大量使用)。
接下来会进一步介绍每个模块的使用。
二、模型选择
简单来说,模型就是“模型训练师”们通过大量的图片进行训练得到的具备某种风格的模型。我们使用某个模型后,后续在出图的整体方向就会更靠近这个模型的风格。
你安装好之后默认可以看到两个模型:
- anything:二次元风格模型
- Deliberate:真人风格模型
推荐的网站:
- Civitai:需要魔法
- AIGodlike
- Huggingface
三、Prompt 区
如果你学习过如何更好地编写ChatGPT的prompt,你会发现prompt的编写都会遵守一定的范式,这样得出来的效果才可能更贴近我们的想法。
选择完模型之后,我们就可以给予这个模型风格,告诉SD prompt画出什么样的图。比如:直接告诉SD画一个女孩,虽然能出来一个女孩,但是这个质量还是很差的,主要是因为我们的prompt写得太差劲了导致的。
如果我们完善一点(丰富一些prompt),会发现效果质量立竿见影;而我们只是加入了一些通用的prompt提示语。
- 正向的prompt:就是要高画质、更多的细节
- (masterpiece:1,2), best quality, masterpiece,best detail face
- 反向的prompt:不要少胳膊断腿,要是一个正常的图
- (((NSFW))), (worst quality:2), (low quality:2), (normal quality:2), lowres, normal quality, ((monochrome)), ((grayscale)), skin spots, acnes, skin blemishes, age spot, (ugly:1.331), (duplicate:1.331), (morbid:1.21), (mutilated:1.21), (tranny:1.331), mutated hands, (poorly drawn hands:1.5), blurry, (bad anatomy:1.21), (bad proportions:1.331), extra limbs, (disfigured:1.331), (missing arms:1.331), (extra legs:1.331), (fused fingers:1.61051), (too many fingers:1.61051), (unclear eyes:1.331), lowers, bad hands, missing fingers, extra digit,bad hands, missing fingers, (((extra arms and legs)))
其中的一些细节,比如提示语的语法格式、公式、权重、模版和tag大全,我们会在prompt和tag课程中细讲。
有个比较有意思的反向tag叫NSFW(no sutiable for work),一般情况尽量把这个加入到反向词中,特别是工作场合。不然惊喜可能随时都会出现(各种18+)…想想在工作的时候,你信誓旦旦给你的同事来一张漂亮的小姐姐,结果…
如果你不太信的话,可以直接把NSFW放在正向里面试试…
四、采样区
采样区做的事就是,我们该用什么样的采样方式来画,画多少笔(多细致)
- 采样方式
由于采样方式的原理比较深奥,涉及到很多的算法,我直接给结论:
我更加推荐使用下面这三个:
- Euler a
- DDIM
- DPM ++ 2M Karras
我们可以试试这三个不同采样方法的效果,整体的质量是非常好的,出图速度相对也会快很多。
- 采样步数
采样步数相当于是作画的时候画多少笔。同样的也是先给结论,建议在20-40之间,出图效果会更好。并不是越高越好。
来看看效果,会发现步数到了60其实也还好,但同时需要考虑到性价比,步数越高也就意味着耗费的资源会越多,对机器的配置会更高。所以一般我们的步数设置到20-40之间就可以了。
五、脸部修复
面部修复的适用在画真人、三次元的场景,特别是在画全身的时候。一般在画全身,由于脸部占比的空间比较小,那么绘制出来的效果就会比较差。
- 面部修复
SD支持直接一键进行脸部修复,但这效果可能不是非常好,也不是最终方案。举个例子:
模型选择:Realistic Vision V2.0(如何下载模型可以参照课程)
在没有开启面部修复的情况,脸部非常不自然(特别是在画全身的时候)。
开启面部修复后:出图的效果,脸部就自然了非常多。
- 高清修复
高清修复的原理相当于是把原分辨率的图放大进行绘制,绘制结束后再做一个还原,从而达到脸部的优化。这样对于电脑的资源消耗会更大。
其中有几个参数可以来说说:
- 放大算法:这块可以直接给结论;大家如果要改善真人、三次元的脸部直接使用R-ESRGAN 4x+;如果是二次元的使用R-ESRGAN 4x+ Anime6B
- 高清修复采样次数:建议直接给0,表示直接使用原有出图的采样步数即可
- 重绘幅度(Denoising):“放飞程度”,在修复的时候和原图的相似关系,越小表示越相似,越大最后的图就和原图没啥关系了
- 放大倍率:一般给到2倍即可。太大基本上电脑配置吃不消
我们可以来看看使用高清修复后优化的样子:耗时要远大于不修复的出图时间,但是效果也是比普通的面部修复要好。主要是可以根据自己的需要调节参数。
如果我们把重绘幅度拉满,会发现和原图就不太像了,甚至会… Emmm…
六、调参区
前面讲到的模型决定了出图的大方向,Prompt决定了最终的图是什么样,调参区则决定了一次出多少张图,分辨率以及随机性。
- 分辨率 高度&宽度
1.1 如何设置合适的大小
当我们默认进入SD Web UI页面后的默认高度和宽度就是512*512。这是因为综合各方面来说这个分辨率的性价比是最高的:
- 在SD的最初模型SD 1.5训练的图片的分辨率大部分都是512*512,所以在出图的时候,这个分辨率的效果也是最好的
- 基于性能的考量,512*512可以比较好的满足质量的要求。对于机器的配置的要求也能适中。如果分辨率设置的比较大,那么电脑的显卡可能就会崩掉,导致SD报错
考虑到SD的最初模型几乎都是512*512,所以我们想要比较好的效果的时候,至少应该要有个参数是在512-768之前,这样出图的质量都可以得到保障。
设置的分辨率是:768*320
1.2.妙用画身体
我们可以来思考一个问题,如果画一个全身的人出来?第一反应是不是就是在prompt里面提出来对吧?加上full body,我们可以来看看效果
出来的效果空间感很差,为了不出现拉伸的情况,SD会自动的做一些裁剪。所以,我们可以调整分辨率来实现画全身的场景
这个看起来是不是就非常完美了!当想要画全身的时候可以考虑用这种方式。当然了,细心的同学们会发现,手指还是有问题,我们后续会讲到如何优化!
- 批次VS每批数量
这个就很好理解了(相当于有一个马路,生成批次决定了有几辆车按顺序通过,每批数量决定了有几个车道可以并行通过):
- 生成批次:可以理解成点击一次生成会循环生成多少个数量的图
- 每批数量:表示一个批次里一次生成多少张图(一批会有一个概览图)
那我们选择哪种方式批量出图呢?如果你的配置比较高,那么可以使用每批数量的方式出图,会更快。否则就加大批次,每一批生成一个
七、随机种子 DNA
- 随机种子
可能会有同学发现前面我们出的图几乎都是一个样子。只有细微的不同,这个就是固定了随机种子导致的。默认随机种子的值是-1,表示每次出图都会随机一个种子,根据这个种子进行出图。如果我们想要固定某个形象,那么把对应种子的值填在这,那么每次出图的效果大致都会一样。
- 差异种子
如果我们点开更多,会发现还有更多参数:
- 随机种子会和差异种子进行融合
- 差异强度:融合后的效果到底更偏向随机种子还是差异种子;如果是0,那么相当于没有设置差异种子;如果是1那么相当于是没有设置随机种子
t/07e15d8a7169ce29f7408f524608b073.webp?x-oss-process=image/format,png)
- 差异种子
如果我们点开更多,会发现还有更多参数:
- 随机种子会和差异种子进行融合
- 差异强度:融合后的效果到底更偏向随机种子还是差异种子;如果是0,那么相当于没有设置差异种子;如果是1那么相当于是没有设置随机种子