当前位置:AIGC资讯 > AIGC > 正文

Stable diffusion不同模型变量的work pipeline:checkpoint、lora、vae等等到底是怎么work together的?

SD里面有很多不同种类的模型参数,比如embedding、vae、checkpoint、hypernetwork、controlNet、clip还有lora,我看了很多博客,发现它们都是言语寥寥几句说什么改变风格,用于调整和改善生成图片的色彩之类的有点废话的废话。那么我这里从原理层面阐述这几个种类的参数模型在整个SD作图过程是怎么发挥作用的,这些不同的可调节的参数/模型是怎么work together的。

省流版:

声明:不一定对!这些都是本人从很多不同博客and论文整理理解的。

​OK,现在慢慢展开讲解。​

图书馆的比喻

首先第一部分我们先对这几个参数变量有一个感性认识。

模型checkpoint:把它想象成一个图书馆。书名是“token”或您在提示中输入以获取图像的关键字之一。这本书的实际内容包括“bias”或与令牌相关的需要注意的功能列表,以及“weight”,这有点像关于如何对这些功能执行操作以使它们更像令牌的说明。

打个比方:SD生成一张随机噪声,去图书馆,拿出与提示中第一个标记匹配的书,在书本说要寻找的随机噪声中寻找特征,然后根据书上的说明进行小的改动。然后,它对提示中的其他关键字重复该过程,然后一遍又一遍地重复此过程,直到将随机噪声转换为图像。

因此,使用 Dreambooth 或类似工具进行微调的模型文件就像通过复制旧库中的所有书籍来创建一个新库,但更改一些书籍及其说明以更好地适应您训练它的内容。

embedding,如text inversion,就像向现有库添加一本额外的书。它不像为您的主题浏览和重做整个库那样“强大”或彻底......但它对资源的消耗较少,并且不涉及一个全新的库......只是一本书。

Hypernetwork有点像卡片目录。但是,卡片目录不是将您定向到特定的书,而是为图书馆中的每本书列出一个列表,并且为每本书提供附加说明。因此,与其只是去拿书并做它的说明......计算机转到卡片目录,拉出该书的卡片,去拿这本书,然后按照书籍说明和卡片的说明进行操作。

Lora理解就是针对不同人群开发的图书室,按照她/他不同口味定制的图书室,帮他/她找图书。

这里credit to reddit。(只有lora部分是我定义的hhh)

SD的基本原理

The Illustrated Stable Diffusion – Jay Alammar – Visualizing machine learning one concept at a time. (jalammar.github.io)

贴博客是因为它解释得很清楚很好了。

其次要了解 Stable Diffusion 的工作原理是生成随机噪声,并一步一步地更改噪声,以尝试并努力获得与提示一致的图像。

work like this

text2img 和img2img

text2img

    2.img2img

现在才进入正题!

有以上img2img、text2img的流程可以看到,基本结构就是encoder+diffusion+decoder的流程。

这是解释以上过程的论文的流程图。

Checkpoint就是记录某个训练周期这整个diffusion/可能加上encoder decoder 的参数。

vae就是 encoder decoder的参数,在SDXL等大型模型里 vae要配对 不然容易出现 中间diffusion过程正常 后面最后decode的时候花屏现象。

接下来看ControlNet。

这里的unet结构就是上面论文图中4个QKV的两片甲板的。

左上这个prompt 进入text encoder 在每个模块上加入text information (token embeddings) 。这里embedding 模型就是这么用的咯,像字典一样。对token取对应的embedding。

Time encoder 是为了记录noise amount,第几步step。

右边是controlnet 插入。

LoRA模型的训练逻辑是首先冻结SD模型的权重,然后在SD模型的U-Net结构中注入LoRA模块,并将其与CrossAttention模块结合,并只对这部分参数进行微调训练。  也就是以上的sd encoder block 和sd decoder block 的权重参数进行调整。

这张图形象画出Unet。CrossAttnDownBlock2D模块就是这里SD encoder block;CrossAttnDownBlock2D模块就是这里SD decoder block。

其中CrossAttnDownBlock2D模块的主要结构如下图所示。

text condition(也就是ControlNet那张结构图中的text encoder输出部分text embeddings)将通过CrossAttention模块嵌入进来,key和value是text embeddings。此时Attention的query是UNet的中间特征.。也就是说在text2img情况下利用cross attention完成text和image信息注意力集合。以上公式中序列S1 为text embedding;S2为图像信息,增噪的图像 。

Lora则是将公式中的权重Wq Wk Wv 以添加支路计算反向传播变量进行重新设置。

推理阶段:正常使用W = W0+BA来更新模型权重。lora模型中每层的权重包含3个部分,分别为lora_down.weight 、 lora_up.weight 和 alpha。其中down和up分别为lora模型的上下层权重分别对应了B和A权重,alpha也是一个可学习的参数。lora模型每层的权重可表示为:

w = alpha ∗ down ∗ up

hypernetwork 通常是一个简单的神经网络:一个带有 dropout 和 activation 的完全连接的线性网络。

也就是上面说的 S1 text embedding进行预处理。

总结一张图

checkpoint就是某个训练时刻的全部参数,是Stable Diffusion 模型训练过程中定期保存的状态快照。

好啦,应该解释完全了,不知道对不对,请大家多多指教!

更新时间 2024-02-29