Stable Diffusion 入门到实践教程(理论篇)

2023-08-1011:37:07办公软件与工具应用Comments1,679 views字数 2651阅读模式

使用SD之前,一定要理解一下SD的整个过程。当然在整个过程中,如果单纯的去看论文或者是学习各种算法,我估计我也就废废了。所以,在这里,我们尝试使用更加简单的方式来说明这个问题。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/office/53381.html

SD的整个工作过程

首先我们了解一下,SD是如何工作的。了解它背后的原理,再尝试使用它,可能尝起来的效果会更好。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/office/53381.html

SD到底是什么

Stable Diffusion 翻译过来叫做稳定的扩散模型。本质而言就是一个通过扩散模型完成的深度学习模型。通过我们给定的文本信息(propmt) 生成指定的图像信息。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/office/53381.html

Stable Diffusion 入门到实践教程(理论篇)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/office/53381.html

 文章源自菜鸟学院-https://www.cainiaoxueyuan.com/office/53381.html

SD如何完成这个过程的

SD的核心工作就是不断给图片加噪,降噪的过程。(PS:站在学术角度这样讲不太对,但是好理解呀!手动狗头 🐶)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/office/53381.html

原理分析 接下来我们分析一下SD在整个过程中都是如何完成这些步骤的。注意这里我们不说论文,还是通过例子让大家了解。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/office/53381.html

查看一下下面这个图片你认识吗?文章源自菜鸟学院-https://www.cainiaoxueyuan.com/office/53381.html

                                Stable Diffusion 入门到实践教程(理论篇)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/office/53381.html

 文章源自菜鸟学院-https://www.cainiaoxueyuan.com/office/53381.html

请你大声喊出它的名字,没错,它就是猛兽侠,黑猩猩队长。哦,不对,不对。它是超级马里奥。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/office/53381.html

问题来了:这明显是一个像素风的,你是如何一眼就能够看出它是什么呢?文章源自菜鸟学院-https://www.cainiaoxueyuan.com/office/53381.html

Tips: 你的大脑做出的反应就是不断的给图片进行了降噪。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/office/53381.html

但是通过上面这幅图片,我们知道了另外一件事情,假设如果我能够让图片先加噪,但是再添加的过程中,因为是我们人为的,所以我们保留这些图片中的重点信息,一直到这个图片完全变得我们不认识为止:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/office/53381.html

Stable Diffusion 入门到实践教程(理论篇)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/office/53381.html

 文章源自菜鸟学院-https://www.cainiaoxueyuan.com/office/53381.html

我们把这个过程称之为正向扩散 。看到最后一幅图的时候,你的眼睛还能看出来这个东西是个啥吗? 在这个过程中,我们做到加噪的过程。在不断添加噪点的过程中,我们会训练出来一个U-Net(noise predictor) 模型的东西。这个模型做的事情:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/office/53381.html

  1. 选一张训练图片,比如一张猫的照片。
  2. 生成随机噪声图像。
  3. 通过一定次数的添加噪声图像的步骤来破坏这个训练图像。
  4. 教 noise predictor 来告诉我们添加了多少噪音,通过调整它的权重和告诉它正确答案来完成。

Stable Diffusion 入门到实践教程(理论篇)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/office/53381.html

 文章源自菜鸟学院-https://www.cainiaoxueyuan.com/office/53381.html

训练后,我们有一个U-Net噪声预测器,能够估计添加到图像中的噪声。那么接下来的事情就是想办法给这个哥们进行降噪了。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/office/53381.html

Stable Diffusion 入门到实践教程(理论篇)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/office/53381.html

 文章源自菜鸟学院-https://www.cainiaoxueyuan.com/office/53381.html

我们首先生成一个完全随机的图像,并要求噪声预测器告诉我们噪声。然后,我们从原始图像中减去这个估计的噪声。重复此过程几次。你会得到一只猫或一只狗的图像。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/office/53381.html

问题1:耗时和耗算力

问题产生原因文章源自菜鸟学院-https://www.cainiaoxueyuan.com/office/53381.html

假设我们现在需要绘制一幅图片,假设目前的图片大小是512 * 512的。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/office/53381.html

这个图片中需要进行着色,然后再不同的色块中,我们通过rgb三原色进行着色。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/office/53381.html

那么也就意味着我需要构建一个512 * 512 * 3 这么大的矩阵来存储我们每个色块的信息。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/office/53381.html

这对于我们电脑而言,不管是CPU或者是GPU,普通的家用计算机读取这个786432的色块信息应该是很简单的。但是我们现在需要做的是,需要计算这些色块的信息,正常情况下是可以进行计算的。但是这里就会出现两个问题:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/office/53381.html

  • 对于算力要求比较高
  • 计算时间相对而言比较长 而高算力和长时间得到的结果就是功耗比很大,得不偿失。不管是工业还是商用以及民用都是极大的负担。那么如何解决呢?

解决办法 拉低维度。维度越高,计算量越大。那么如果能够将维度降低是不是就能提升运算速度了呢?文章源自菜鸟学院-https://www.cainiaoxueyuan.com/office/53381.html

这个就有点像我们编码的时候用到的稀疏矩阵和稠密矩阵互换。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/office/53381.html

回过来也有点像我现在写文章或者是讲课的过程:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/office/53381.html

Stable Diffusion 入门到实践教程(理论篇)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/office/53381.html

 文章源自菜鸟学院-https://www.cainiaoxueyuan.com/office/53381.html

我们把信息降维之后,听起来更加简单了,只囊括了重要的特征信息,但是对于读者而言,这个信息确实在一定程度上损失了。但是提升了学习效率。那么在处理图像的过程中,就是通过VAE(Variational Autoencoder 变分自动编码器)来完成的。它包含两部分:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/office/53381.html

  • 编码器
  • 解码器

Stable Diffusion 入门到实践教程(理论篇)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/office/53381.html

 文章源自菜鸟学院-https://www.cainiaoxueyuan.com/office/53381.html

这里注意一件事:它并没有去改变原本的图像信息,它是在一个Latent Space(潜空间)中进行的。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/office/53381.html

首先将图像压缩到潜空间。潜空间小了 48 倍,所以它获得的好处是计算的数字少了很多。这就是为什么它的速度要快得多。我们谈到的所有正向和反向扩散实际上都是在潜空间中完成的。因此,在训练期间,它不是生成一个有噪声的图像,而是在潜空间中生成一个随机张量(潜噪声)。它不是用噪声破坏图像,而是用潜噪声破坏图像在潜空间的表示。这样做的原因是由于潜空间较小,所以速度会快很多。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/office/53381.html

问题2:propmt这里扮演的什么角色?

一直到这里,我们都无法确定我们给定的提示词到底是做什么的呢?文章源自菜鸟学院-https://www.cainiaoxueyuan.com/office/53381.html

运行过程

我们正常情况下在使用SD的时候后,大致流程(如果不是我们自己训练的大模型,比如我们下载目前比较火的Lora模型进行):文章源自菜鸟学院-https://www.cainiaoxueyuan.com/office/53381.html

  • 在C站上下载对应的模型
  • 复制模型中对应的propmt和negative提示词
  • 复制sampler采样方法以及seed随机种子
  • 选择自己合适的迭代步数
  • 运行整个模型
  • 查看结果

运行步骤分析

第一步:模型的作用

在这个过程中,模型就是别人已经训练好的计算过程以及权重文件信息以及流程。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/office/53381.html

这个模型库能够帮助我们后续找到对应的参考的图片信息。能够帮助我们快速出图。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/office/53381.html

第二步:提示词的作用

提示词分为正向提示词和负面提示词。在MJ中一般是不适用负面提示词的,但是在SD中负面提示词对于出图的效果有一定的正向作用。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/office/53381.html

因为这里需要解析提示词,所以很重要的一个步骤就是就是需要将文本信息转换为计算机可以识别的Token。需要完成的功能就是分词等操作。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/office/53381.html

比如你写的提示词是 agril,dreambeach。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/office/53381.html

那么会将这些词进行拆分 。通过CLIP 标记器进行标记化。没错这个标记器就是Web-UI下的CLIP。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/office/53381.html

Stable Diffusion 入门到实践教程(理论篇)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/office/53381.html

女孩会被分析为一个数字,然后这个数字会对应到模型库中的一个指定的资源。这个资源中包含了全是可以对应上的信息。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/office/53381.html

CLIP做的事情就是完成了文字的transfermer。这个和GPT是一致的。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/office/53381.html

第三步:复制采样方法和随机种子

Stable Diffusion 入门到实践教程(理论篇)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/office/53381.html

 文章源自菜鸟学院-https://www.cainiaoxueyuan.com/office/53381.html

当我们输入一些提示词信息之后,然后选择采样方法以及随机种子,其实做的事情如下:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/office/53381.html

  • 第一步:通过你设置的随机种子,生成一张潜空间的图片,注意-1代表每次都是随机,所以我们需要复制别人设置好的seed。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/office/53381.html

Stable Diffusion 入门到实践教程(理论篇)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/office/53381.html

  • 第二步:噪声预测器 U-Net 将潜在噪声图像和文本提示作为输入,并预测噪声。然后生成一个新的图像文章源自菜鸟学院-https://www.cainiaoxueyuan.com/office/53381.html

Stable Diffusion 入门到实践教程(理论篇)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/office/53381.html

  • 第三步:从潜在图像中减去潜在噪声。这将成为新的潜空间的图像。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/office/53381.html

Stable Diffusion 入门到实践教程(理论篇)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/office/53381.html

  • 第四步:步骤 2 和 3 重复一定数量的采样步骤,例如 20 次。这个次数就是迭代步数。那这里采样步骤就是如何计算新的随机图片。这里的有很多策略。而这些策略就是采样方法。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/office/53381.html

  • 第五步:最后VAE的解码器将潜在图像转换回像素空间。这是运行稳定扩散后获得的图像。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/office/53381.html

总结文章源自菜鸟学院-https://www.cainiaoxueyuan.com/office/53381.html

综合一下在整个SD的流程中,大致有三个比较重要的内容。图片借鉴了@飞鸟白菜。重新绘制了一下 哈哈。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/office/53381.html

Stable Diffusion 入门到实践教程(理论篇)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/office/53381.html

  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/office/53381.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定