Stable Diffusion 学习笔记

创造,梦想,未来。

前言

你可能需要知道 (之后简称 ) 的工作原理,但这似乎并不重要(因为涉及代码层面的我也不是很会了)。这篇博客将再现我的学历历程,或有谬误,还请海纳。


什么是AIGC?

。但我们只讨论生成图像的情况。

主流 在于文生图()和图生图()两种,诚然,画家在现实中也只有这两种情况来进行作画,我们称前者为“创作”,后者为“借鉴”。

任何一张照片,都是由千万级像素构成的。对于画师而言,他们需要的操作是:草稿,涂线,描摹,上色。而 不会这些,它所使用的方式,叫扩散()。

正如一个近视的人,他取下眼镜看向一个物体,他并不知道这个物体具体是什么,所以,他根据想象以及自己的经验所得,将这个物体复原了出来。

这就是 (图生图)的过程——升噪,扩散,降噪。

但这显然是一个极其随机的过程,因为我们不知道这个近视的人脑子里装的是什么东西,所以,我们需要一些东西对其进行约束,使其稳定扩散,这就是 ,与 的诞生。

而这个约束的过程,就是训练

我们将数以亿计的照片给予这个模型,并告诉它每一张图片的构成成分。

当很多张图片里都一个块圆状的红色光泽球形物体,且这些图片里都有一个东西叫“苹果”时,它便认得了这个东西就是苹果。同理,它会认得什么是男人,什么是女人,什么是手,什么是脚。

当然,这些过程不需要你完成(找一亿张照片还是太困难了),但这就是训练一个大模型,或者底模型,即 的基本流程,第一个 的练成花了 年左右(电脑时),而如今,只需要一台民用 再花上一个下午就可以了。


WebUI 以及基本运行流程

准备工具

  • 一台算力足够强大的电脑,配备有强大的显卡(建议 ),显存至少在 以上。
  • 一个存储量大的硬盘(或移动硬盘)。
  • 科学上网的能力()。
  • 一颗拥有无限创造力的心和灵魂。

对于第五点,我建议你可以在官网下载原版:https://github.com/AUTOMATIC1111/stable-diffusion-webui
但是里面全英而且没有大多数插件,仅有初始功能。对于新手而言或许不太友好,入手颇有些困难。
所以我建议你也可以下载秋叶的整合包:https://pan.baidu.com/s/1MjO3CpsIvTQIDXplhE0-OA?pwd=aaki

接着,如前面所言,你需要一个 来作为你的底模,一般底模分为二次元系,真实系和半真实系(现在好像有福瑞系),国内一般使用 Liblib 作为模型下载地,但如果你具备上述的第三条,那么请前往 CivitAIHuggingface

一般用前者,因为他毕竟是图像型网站,Huggingface全是代码不一定看得懂。

当然,秋叶的整合包配备有基础 ckpt 如 Anything 这个牢模。不过你用那个多半都是早年间 AI 烂大街的画风,实属不算好看,所以我建议你在网上多整点下来。

AI 画图的大致过程如下:

看不懂没关系,我也看不懂

基本操作

启动

启动时,如果你下载的是 上的原装,那么请点击根目录下的 run.bat 文件,如果下载的是秋叶整合包,那么直接打开启动器一键启动即可。

启动后,你会发现你的电脑上有一个程序正在运行,它就是真正的 ,但我们需要通过一些简化算法使它变得可控,所以就诞生了 ,顾名思义, 放在了浏览器页面,所以当局域名生成完成后,你只需要使用任意一个浏览器将其打开即可。需要注意的是,使用某些浏览器时会导致浏览器卡死或者渲染出错,不同电脑效果不同,一般使用 或者 或者夸克。

文生图

在启动后,你的 默认开启的是 页面,其下包含:

  • 正面提示词(
  • 负面提示词(
  • 生成参数/Embedding/Ckpt/Lora/以及更多

以及整个页面最上面一条,即 ckpt 和 VAE 的调用。

正面提示词

即你想要生成的东西,需要注意的是,这些词汇大多需要是训练集内包含的词汇,对于一张动漫图的生成,你可以在 Danbooru 上大概率找到你想要生成的词汇的通常描述方式,一般而言 WebUI 自带提示词补全功能,不过笔者建议还是可以稍稍去学习下英语,也可以时时刻刻把翻译器摆在旁边。

在最开始的 AIGC 中,SD 并不能识别自然语言(即人与人之间正常对话时产生的句子),所以我们需要将其转化为提示词语言。

想象一幅画面,一个女孩漫步在森林里,她有着怎样的外貌(头发的颜色,眼睛,身体,服饰),她的动作,整张图片的背景等等。

那么,现在我们用英语将其描绘出来:

1
A young girl wandering in the forest. She has big blue eyes and long black hair. She is wearing a long and off-shoulder white dress with a pair of sneakers. She is facing the camera, smiling with mouth open. The weather is sunny and sun is visible in the photo. 

如果你把上面这句话作为提示词,大概率是能得到你想要的结果的,但我不建议,因为动漫系模型几乎都不使用自然语言作为训练集,他们用的是提示词,所以,你要填入正面提示词的应该是:

1
1girl, solo, forest, nature, sun, day, teen, blue eyes, black hair, long hair, bare shoulders, long dress, white sneakers, walking, smile, :d, looking at viewer, 

提示词之间用 , 隔开即可。

最后你发现出来的效果可能不尽人意,但是够看。上面我们使用的叫做「画面描述提示词」,而除此之外,还有「质量提示词」和「画风提示词」。

质量提示词一般固定,随要求而定,一般是:

1
best quality, score_9, masterpiece,

之类的,还有更多就需要读者自己去探索了,笔者不多赘述。至于画风提示词,我们之后再谈。

接下来展示由刚刚所使用的提示词生成的图:

pho

使用的模型是:Hassaku XL v2.1 [fix]

可能效果不甚明显,但还是加上更优,提示词一般对生成速度影响不大。(头身比是不是有点怪

在限制不强的情况下,生成图随机成分较重,建议在抽卡时使用,而如果对某些动作或者画面有特殊需求,一定要将提示词写得足够详细才有可能得到相应的效果。

而如果你要特别强调某一个提示词,可以将其加上权重。写入的提示词默认权重为 1,未写入的权重为 0。改变权重的方式有:

1
(1girl),[1girl],{1girl},(1girl:1.2)

其中 () 会使权重 x1.1,这意味着 ((1girl)) 的权重是 1.21[] 会使权重 /1.1{} 会使权重 x1.05(:xx) 将权重改为所填数字,一般不超过 1.5,过高会有过拟合风险。

提示词语法须知

{} 虽是这么说,但是实际效果其实非常随机,不建议使用,一般在风格提示词里作为随机风格使用,而提示词还有两个用法是:

比如说你要画的人物头发是多色的,你可以这样写:

white hair|golden hair,在两个提示词之间加上 |,同样可以调整权重 (white hair:0.9)|(golden hair:1.2) 都是可行的。

或者写成:

white hair:golden hair:0.4:0.6,需要注意的是,后面的权重数值之和必须为 1,否则会出现拟合错误或者过拟合。

但经过我的试验,发现 |x:x:x:x 这种写法并不常见,效果也不甚明显。所以不建议使用。

一般可以直接写为:

white hair, golden hair, multicolored hair,至于其出现的方式可以约束为 streaked hair(挑染),gradient(渐变)等等。


负面提示词

负面提示词是用于指示你不想让其在画面中出现的物象,这个东西一般都很格式化,大概都是那些词。权重越高,其在画面中的占比和出现概率越小。

一般而言,会添加:

1
NSFW, worstquality, bad anatomy,sketches,username,lowres,normal quality,monochrome, grayscale, ugly, disfigured, too many fingers, extra limb,

等等。

当然,如果你就是要出一张黑白照,那么 monochromegrayscale 就得放正面了。

NSFW 的意思,指的是 级内容。

一般来讲,如果你不想要出一些风格如 disney movie,也可以加上。


Forge


Comfy


Lora训练