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

2023年 8月 10日 87.6k 0

使用SD之前,一定要理解一下SD的整个过程。当然在整个过程中,如果单纯的去看论文或者是学习各种算法,我估计我也就废废了。所以,在这里,我们尝试使用更加简单的方式来说明这个问题。

SD的整个工作过程

首先我们了解一下,SD是如何工作的。了解它背后的原理,再尝试使用它,可能尝起来的效果会更好。

SD到底是什么

Stable Diffusion 翻译过来叫做稳定的扩散模型。本质而言就是一个通过扩散模型完成的深度学习模型。通过我们给定的文本信息(propmt) 生成指定的图像信息。

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

 

SD如何完成这个过程的

SD的核心工作就是不断给图片加噪,降噪的过程。(PS:站在学术角度这样讲不太对,但是好理解呀!手动狗头 🐶)

原理分析 接下来我们分析一下SD在整个过程中都是如何完成这些步骤的。注意这里我们不说论文,还是通过例子让大家了解。

查看一下下面这个图片你认识吗?

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

 

请你大声喊出它的名字,没错,它就是猛兽侠,黑猩猩队长。哦,不对,不对。它是超级马里奥。

问题来了:这明显是一个像素风的,你是如何一眼就能够看出它是什么呢?

Tips: 你的大脑做出的反应就是不断的给图片进行了降噪。

但是通过上面这幅图片,我们知道了另外一件事情,假设如果我能够让图片先加噪,但是再添加的过程中,因为是我们人为的,所以我们保留这些图片中的重点信息,一直到这个图片完全变得我们不认识为止:

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

 

我们把这个过程称之为正向扩散 。看到最后一幅图的时候,你的眼睛还能看出来这个东西是个啥吗? 在这个过程中,我们做到加噪的过程。在不断添加噪点的过程中,我们会训练出来一个U-Net(noise predictor) 模型的东西。这个模型做的事情:

  • 选一张训练图片,比如一张猫的照片。
  • 生成随机噪声图像。
  • 通过一定次数的添加噪声图像的步骤来破坏这个训练图像。
  • 教 noise predictor 来告诉我们添加了多少噪音,通过调整它的权重和告诉它正确答案来完成。
  • Stable Diffusion 入门到实践教程(理论篇)

     

    训练后,我们有一个U-Net噪声预测器,能够估计添加到图像中的噪声。那么接下来的事情就是想办法给这个哥们进行降噪了。

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

     

    我们首先生成一个完全随机的图像,并要求噪声预测器告诉我们噪声。然后,我们从原始图像中减去这个估计的噪声。重复此过程几次。你会得到一只猫或一只狗的图像。

    问题1:耗时和耗算力

    问题产生原因

    假设我们现在需要绘制一幅图片,假设目前的图片大小是512 * 512的。

    这个图片中需要进行着色,然后再不同的色块中,我们通过rgb三原色进行着色。

    那么也就意味着我需要构建一个512 * 512 * 3 这么大的矩阵来存储我们每个色块的信息。

    这对于我们电脑而言,不管是CPU或者是GPU,普通的家用计算机读取这个786432的色块信息应该是很简单的。但是我们现在需要做的是,需要计算这些色块的信息,正常情况下是可以进行计算的。但是这里就会出现两个问题:

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

    解决办法 拉低维度。维度越高,计算量越大。那么如果能够将维度降低是不是就能提升运算速度了呢?

    这个就有点像我们编码的时候用到的稀疏矩阵和稠密矩阵互换。

    回过来也有点像我现在写文章或者是讲课的过程:

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

     

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

    • 编码器
    • 解码器

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

     

    这里注意一件事:它并没有去改变原本的图像信息,它是在一个Latent Space(潜空间)中进行的。

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

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

    一直到这里,我们都无法确定我们给定的提示词到底是做什么的呢?

    运行过程

    我们正常情况下在使用SD的时候后,大致流程(如果不是我们自己训练的大模型,比如我们下载目前比较火的Lora模型进行):

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

    运行步骤分析

    第一步:模型的作用

    在这个过程中,模型就是别人已经训练好的计算过程以及权重文件信息以及流程。

    这个模型库能够帮助我们后续找到对应的参考的图片信息。能够帮助我们快速出图。

    第二步:提示词的作用

    提示词分为正向提示词和负面提示词。在MJ中一般是不适用负面提示词的,但是在SD中负面提示词对于出图的效果有一定的正向作用。

    因为这里需要解析提示词,所以很重要的一个步骤就是就是需要将文本信息转换为计算机可以识别的Token。需要完成的功能就是分词等操作。

    比如你写的提示词是 agril,dreambeach。

    那么会将这些词进行拆分 。通过CLIP 标记器进行标记化。没错这个标记器就是Web-UI下的CLIP。

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

    女孩会被分析为一个数字,然后这个数字会对应到模型库中的一个指定的资源。这个资源中包含了全是可以对应上的信息。

    CLIP做的事情就是完成了文字的transfermer。这个和GPT是一致的。

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

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

     

    当我们输入一些提示词信息之后,然后选择采样方法以及随机种子,其实做的事情如下:

    • 第一步:通过你设置的随机种子,生成一张潜空间的图片,注意-1代表每次都是随机,所以我们需要复制别人设置好的seed。

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

    • 第二步:噪声预测器 U-Net 将潜在噪声图像和文本提示作为输入,并预测噪声。然后生成一个新的图像

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

    • 第三步:从潜在图像中减去潜在噪声。这将成为新的潜空间的图像。

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

    • 第四步:步骤 2 和 3 重复一定数量的采样步骤,例如 20 次。这个次数就是迭代步数。那这里采样步骤就是如何计算新的随机图片。这里的有很多策略。而这些策略就是采样方法。

    • 第五步:最后VAE的解码器将潜在图像转换回像素空间。这是运行稳定扩散后获得的图像。

    总结

    综合一下在整个SD的流程中,大致有三个比较重要的内容。图片借鉴了@飞鸟白菜。重新绘制了一下 哈哈。

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

    相关文章

    班迪录屏怎么取消截图水印设置
    班迪录屏怎么改存储位置
    bandicam录制的视频默认存储在哪
    网易云音乐电脑怎么设置播放器样式
    酷狗音乐如何创建歌单
    酷狗音乐如何单曲循环播放

    发布评论