日拱一卒:SD 模型优化方案对比

1,529 阅读4分钟

前言

SD 模型调校目前有四种主流的优化方法,分别是 DreamBooth,Text Inversion,LoRA 和 Hypernetworks,他们的原理是什么,应该如何选用呢?本文内容主要来自知乎的分享文章,而这篇文章总结的是 YouTube 上的这个视频,强烈推荐看一遍原视频。 【笔记】Stable Diffusion模型优化入门级介绍 - LoRA vs Dreambooth vs Textural Inversion vs Hypernetworks

一个好的模型随便出的图,可能会比你费劲心血、测试修改上百遍的 Prompt 所输出的结果还要好。

一图流对比

几种模型训练方法本质上与 SD 本身的去噪原理是一致的,只不过他们作用的地方不一样:

  • 有些是直接作用到模型上(DreamBooth)
  • 有些是作用在文本编码的向量上(Text Inversion)
  • 有些是在模型的分层中加入自己的处理层(LoRA)
  • 有些是通过训练一个新的网络来生成要插入模型中的分层(HyperNetwork)。

www.reddit.com/r/StableDif…

well-researched-comparison-of-training-techniques-lora-v0-vl01e5grs6ca1.png

原理介绍

DreamBooth

训练效果最好,内存占用大,训练速度慢

DreamBooth 训练已有的 difussion 模型直到其理解新的概念,产物仍然是大模型,通常产物很大,其训练过程大概是:

  • 准备 3~5 张某一主题的训练样本,比如下图中的柯基,以及与其相关的关键词 SKS。
  • 根据训练样本分别添加 n-1 步噪声和 n 步噪声分别生成一张不怎么嘈杂的图和一张比较嘈杂的图。
  • 将 n 步噪声图和一组关键词(SKS)相关的向量输入给 SD 模型,再通过 VAE 解码出图。
  • 将解码出来的图和 n-1 步图进行比对,通过损失函数对模型进行梯度更新,让模型逐渐学习到引导词 SKS 和柯基图之间的关联关系。
  • 下次当这些关键词和一张噪声图再出现时就可以一层一层去噪生成柯基图了。

截屏2023-04-26 00.16.07.png

Textual Inversion

训练效果好,内存占用极小,训练速度较慢

创建一个特殊的理解了新概念的文本嵌入(可以理解为概念所对应的 text embedding 的权重),通常文件很小,几十 kb 左右。

其训练过程和上面 DreamBooth 一致,唯一的区别是,在比较训练结果后,**Gradient Update **将作用于SKS在语言处理模型中对应的参数向量(Embedding Vector)上。 截屏2023-04-26 00.16.27.png

LoRA

训练效果好,内存占用小,训练速度快

LoRA 通过去噪训练过程在原有模型的基础之添加额外的中间层,并梯度更新这些中间层的参数权重,其大小通常文件在几十或者几百 MB左右,远远小于 DreamBooth 动辄几个G 的大小。

要理解 LoRA 首先要理解模型分层的概念,目前 AI 模型其神经网络大多有许多的计算层叠加而成,上一层的结果输入给中间层,输出再给下一个中间层,最终生成结果。 image.png LoRA 尝试通过在模型分层中添加自己的中间层来解决 DreamBooth 要重新生成一个大模型的问题: image.png 其训练过程和上面的模型训练过程类似,其不同点在于梯度更新的权重在 LoRA 额外添加到大模型的中间层上。 截屏2023-04-26 00.16.40.png

Hypernetoworks

训练效果一般,内存占用小,训练速度慢

训练过程与 LoRA 类似,与 LoRA 不同的是,Hypernetwork 是一个单独的神经网络模型,该模型用于输出可以插入到原始 Diffusion 模型的中间层。文件大小也和 LoRA 类似,几百兆级别。

通过训练得到一个新的神经网络模型,该模型能够向原始 SD 模型中插入合适的中间层及对应的参数,从而使输出图像与输入指令 SKS 之间产生柯基犬概念的关联关系。这种间接生成的方式不是特别有效率,因而使用的效果看上去没有直接使用 LoRA 训练来的要好。 截屏2023-04-26 00.16.50.png

如何选择

几种模型的对比如下:

  • 效果上: DreamBooth > LoRATextual Inversion > Hypernetoworks

  • 内存占用上: Textual Inversion >> HypernetoworksLoRA >> DreamBooth

  • 训练速度上: LoRA > DreamBooth > Textual Inversion > Hypernetoworks

    综上所述:

  • 使用模型:推荐 DreamBooth LoRA Textual Inversion

  • 训练模型:推荐 LoRA``DreamBooth Textual Inversion

    Hypernetoworks 目前可以不用考虑,慢慢会被其他模型优化方法所取代。