文章目录
- 0. 环境搭建
- 0.1 Windows
- 0.1.1 git环境安装
- 0.1.2 python 环境搭建
- 0.1.2.1 配置pip国内镜像源
- 0.1.3 stable diffusion环境搭建
- 0.1.3.1 远程访问Stable diffusion
- 0.1.3.2 模型 Lora下载
- 1. 基础知识
- 1.1 Stable Diffusion Webui及基础参数
- 1.2 参数说明
- 1.2.1 采样方法
- 1.2.1.1 采样接待步数
- 1.2.2 提示词相关性
- 1.2.3 随机种子
- 参考文献
0. 环境搭建
0.1 Windows
0.1.1 git环境安装
去下方网站获取git的win安装包,之后不断点击下一步就可以了:
https://git-scm.com/
安装完之后,运行Win+R
唤出控制台,执行如下命令检验是否安装完成
git --version
0.1.2 python 环境搭建
去下方网站获取python的win安装包,之后不断点击下一步就可以了。在最后一步,一定要选择 Add python.ext to PATH
环境变量。
https://www.python.org/
安装完之后,运行Win+R
唤出控制台,执行如下命令检验是否安装完成
python --version
0.1.2.1 配置pip国内镜像源
运行Win+R
唤出控制台,输入如下命令
python -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade pip
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
0.1.3 stable diffusion环境搭建
- 去想要安装的盘符上新建个文件夹用于存放stable diffusion的相关信息
- 下载stable diffusion的开源仓库
git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui
- 如果没问题的话,在当前目录会存在一个
webui-user.bat
这个批处理文件,双击运行 - 在批处理的控制台会出现如下信息
Running at local url:http://127.0.0.1:7860
类似的信息,复制这个网址,用浏览器打开
0.1.3.1 远程访问Stable diffusion
远程访问主要有两种方式:
- 内网穿透:依赖内网穿透软件(比如花生壳),这样可以在公网环境访问你的远端stable diffusion,随时出图。但是这依赖我们在批处理文件之中设置如下的启动参数:
set COMMANDLINE_ARGS= --listen
- 批处理启动参数:如果你的远端环境可以访问外网,可以在批处理文件中增加如下述的启动命令:
set COMMANDLINE_ARGS= --share
注:不能同时设置listen和share参数,因为listen参数的优先级会更高
0.1.3.2 模型 Lora下载
-
访问相关模型网站,笔者常去的是下面的C站:
https://civitai.com/
2. 点击自己喜欢的模型,选择下载
3. 将下载后的文件放到stable diffusion指定的目录下盘符:\目录\stable-diffusion-webui\models\Stable-diffusion
注: Lora下载放到这个目录
盘符:\目录\stable-diffusion-webui\models\Lora
- 点击stable diffusion的刷新按钮,就可以刷新了
注:C站目前应该是禁止大陆ip访问了,大家可以科学上网的时候绕过大陆ip
1. 基础知识
Stable Diffusion是2022年发布的深度学习文本到图像生成模型,它是一种潜在扩散模型,它由创业公司Stability AI与多个学术研究者和非营利组织合作开发。目前的SD的源代码和模型都已经开源,在Github上由AUTOMATIC1111维护了一个完整的项目,正在由全世界的开发者共同维护。由于完整版对网络有一些众所周知的需求,国内有多位开发者维护着一些不同版本的封装包。
1.1 Stable Diffusion Webui及基础参数
下图是Stable Diffusion的Web ui展示:
1.2 参数说明
上图之中存在着很多参数,我这里按照对用户的重要性来逐一说明:
1.2.1 采样方法
采样方法总结:
- 如果只是想得到一些较为简单的结果:选用欧拉(Eular)或者Heun
- 对于侧重于速度、融合、新颖且质量不错的结果:
DPM++ 2M Karras, Step Range:20-30
UniPc, Step Range: 20-30
- 期望得到高质量的图像,且不关心图像是否收敛:
DPM ++ SDE Karras, Step Range:8-12
DDIM, Step Range:10-15
- Euler : 基于Karras论文,在K-diffusion实现,20-30steps就能生成效果不错的图片,采样器设置页面中的 sigma noise,sigma tmin和sigma churn这三个属性会影响到它
- Euler a: 使用了祖先采样(Ancestral sampling)的Euler方法,受采样器设置中的eta参数影响
- LMS:线性多步调度器(Linear multistep scheduler)源于K-diffusion的项目实现
- heun:基于Karras论文,在K-diffusion实现,受采样器设置页面中的 sigma参数影响
- DPM2:这个是Katherine Crowson在K-diffusion项目中自创的,灵感来源Karras论文中的DPM-Solver-2和算法2,受采样器设置页面中的 sigma参数影响;DPM2 a使用了祖先采样(Ancestral sampling)的DPM2方法,受采样器设置中的ETA参数影响
- DPM++ 2S a:基于Cheng Lu等人的论文(改进后,后面又发表了一篇),在K-diffusion实现的2阶单步并使用了祖先采样(Ancestral sampling)的方法,受采样器设置中的eta参数影响;Cheng Lu的github中也提供已经实现的代码,并且可以自定义,1、2、3阶,和单步多步的选择,webui使用的是K-diffusion中已经固定好的版本。对细节感兴趣的小伙伴可以参考Cheng Lu的github和原论文。
- DPM++ 2M:基于Cheng Lu等人的论文(改进后的版本),在K-diffusion实现的2阶多步采样方法,在Hagging face中Diffusers中被称作已知最强调度器,在速度和质量的平衡最好。这个代表M的多步比上面的S单步在采样时会参考更多步,而非当前步,所以能提供更好的质量。但也更复杂。
- DPM++ SDE:基于Cheng Lu等人的论文的,DPM++的SDE版本,即随机微分方程(stochastic differential equations),而DPM++原本是ODE的求解器即常微分方程(ordinary differential equations),在K-diffusion实现的版本,代码中调用了祖先采样(Ancestral sampling)方法,所以受采样器设置中的ETA参数影响
- DPM fast: 基于Cheng Lu等人的论文,在K-diffusion实现的固定步长采样方法,用于steps小于20的情况,受采样器设置中的ETA参数影响
- DPM adaptive: 基于Cheng Lu等人的论文,在K-diffusion实现的自适应步长采样方法,DPM-Solver-12 和 23,受采样器设置中的ETA参数影响
- Karras后缀:LMS Karras 基于Karras论文,运用了相关Karras的noise schedule的方法,可以算作是LMS使用Karras noise schedule的版本;
1.2.1.1 采样接待步数
输出画面需要的步数,每一次采样步数都是在上一次的迭代步骤基础上绘制生成一个新的图片,一般来说采样迭代步数保持在 18-30 左右即可,低的采样步数会导致画面计算不完整,高的采样步数仅在细节处进行优化,对比输出速度得不偿失。
1.2.2 提示词相关性
Stable Diffusion 中的提示词相关性指的是输入提示词对生成图像的影响程度。当我们提高提示词相关性时,生成的图像将更符合提示信息的样子;相反,如果提示词相关性较低,对应的权重也较小,则生成的图像会更加随机。
因此,通过调整提示词相关性,可以引导模型生成更符合预期的样本,从而提高生成的样本质量。
- 在具体应用中,对于人物类的提示词,一般将提示词相关性控制在 7-15 之间;
- 而对于建筑等大场景类的提示词,一般控制在 3-7 左右。这样可以在一定程度上突出随机性,同时又不会影响生成图像的可视化效果。
因此,提示词相关性可以帮助我们通过引导模型生成更符合预期的样本,从而提高生成的样本质量。
1.2.3 随机种子
随机种子是一个可以锁定生成图像的初始状态的值。当使用相同的随机种子和其他参数,我们可以生成完全相同的图像。设置随机种子可以增加模型的可比性和可重复性,同时也可以用于调试和优化模型,以观察不同参数对图像的影响。
在 Stable Diffusion 中,常用的随机种子有-1 和其他数值。当输入-1 或点击旁边的骰子按钮时,生成的图像是完全随机的,没有任何规律可言。而当输入其他随机数值时,就相当于锁定了随机种子对画面的影响,这样每次生成的图像只会有微小的变化。因此,使用随机种子可以控制生成图像的变化程度,从而更好地探索模型的性能和参数的影响。
参数 | 含义 |
---|---|
采样方法 | 如果只是想得到一些较为简单的结果:选用欧拉(Eular)或者Heun 对于侧重于速度、融合、新颖且质量不错的结果: * DPM++ 2M Karras, Step Range:20-30 * UniPc, Step Range: 20-30 期望得到高质量的图像,且不关心图像是否收敛: * DPM ++ SDE Karras, Step Range:8-12 * DDIM, Step Range:10-15 |
提示词相关性 | 对于人物类的提示词,一般将提示词相关性控制在 7-15 之间; 而对于建筑等大场景类的提示词,一般控制在 3-7 左右 |
模型 | 用素材+SD低模(如SD1.5/SD1.4/SD2.1),深度学习之后炼制出的大模型,可以直接用来生图。大模型决定了最终出图的大方向 |
VAE | 类似类似美颜工具之中的滤镜,是对大模型的补充,稳定画面的色彩范围 |
LoRA | 模型插件,是在基于某个大模型的基础上,深度学习之后炼制出的小模型。需要搭配大模型使用,可以在中小范围内影响出图的风格,或是增加大模型所没有的东西。炼制的时候如果基于SD底模,在不同大模型之间更换使用时的通用性会较好。但如果基于特定的大模型,可能会在和该大模型配合时得到针对性的极佳效果 |
ControlNet | 能够基于现有图片得到诸如线条或景深的信息,再反推用于处理图片 |
参考文献
- Stable Diffusion-采样器篇 --> 1.2.1 采样方法
- stable diffusion webui如何工作以及采样方法的对比 --> 1.2.1 采样方法
- 万字保姆级教程!Stable Diffusion完整入门指南 --> 1.2 参数说明