如何在SD中使用Embeddings
Embedding嵌入,也称为textual inversion文本倒置,是在 Stable Diffusion 中控制图像风格的另一种方法。在本文中,将说明什么是embedding,在哪里可以找到他们以及如何使用它们。
一、什么是embedding
embedding嵌入是文本倒置的结果,这是一种在模型中定义新关键字而不修改它的方法。该方法之所以受到关注,是因为它能够将新样式或对象注入到模型中但只需要 3 -5 个样本图像。
1、textual inversion文本倒置如何工作?
文本倒置的惊人之处不在于添加新样式或对象的能力——其他微调方法也可以做到这一点或做得更好。但是文本倒置它可以在不更改模型的情况下做到这些。
下面是原始论文中提到的文本倒置是怎样工作的:
首先,你为新对象或新样式定义一个不在模型中的新关键字。该新关键字将像提示中的任何其他关键字一样被token化(由数字表示)
然后将每个token转换为唯一的嵌入向量,供模型用于图像生成。
文本倒置找到最能代表新样式或新对象的新关键字的嵌入向量,而无需更改模型的任何部分。您可以将其视为在语言模型中寻找一种方法来描述新概念。
2、embedding案例
嵌入可用于新对象。下面是一个注入玩具猫的例子。请注意,新概念(玩具猫)可以与模型中的其他现有概念(船、背包等)一起使用。
嵌入也可以是一种新的样式。下面的示例显示了嵌入新样式并将样式转移到不同的上下文。
二、在哪里可以找到embedding
1、Hugging Face
Hugging Face 上的stable diffusion概念库(Stable Diffusion Concept Library),这是一个包含大量自定义入的资源库。
2、Civtai
Civtai,C站上也有很多的嵌入模型,你们可以通过筛选 textual inversion查看embedding模型。
三、如何使用embedding
1、Stable Diffusion Conceptualizer
Stable Diffusion Conceptualizer不需要下载就可以使用嵌入。
首先在概念库(Concept Library)中确定要测试的嵌入。假设你想使用这种 Marc Allante style,接下来,确定触发此样式所需的token。你可以在文件 token_identifier.txt 中找到它,即 <Marc_Allante> 。
在Stable Diffusion Conceptualizer输入框中输入<Marc_Allante> a dog ,将会形成独特的 Marc Allante 风格。
Web 界面的缺点是你不能使用不同模型的嵌入及更改任何参数。
2、Stable Diffusion Web UI
首先,从概念库下载一个名为 learned_embedds.bin的嵌入文件,点击下载按钮进行下载。
接下来,将文件重命名为你想要使用此嵌入的关键字。它必须是模型中不存在的东西,比如 marc_allante.bin 是个不错的选择。
将其放在 GUI 工作目录的 embeddings 文件夹中,stable-diffusion-webui/embeddings
重新启动界面。在启动终端中,你应该会看到如下消息:
Loaded a total of 1 textual inversion embeddings.
Embeddings: marc_allante
使用文件名作为提示词的一部分,比如说,
(marc_allante:1.2) a dog,然后我们就可以得到预期的风格
需要注意,即使少了一个字母,嵌入也不起作用。此外,不能将 v1 嵌入与 v2 的模型一起使用,反之亦然——它们使用两种不同的语言模型。
那如何确保你输入的正确性,有一个小技巧可以使用。在界面的垃圾桶和复制有个按钮,像小红书
选择它,你可以在文本倒置Textual Inversion的tab下看到你已经安装的所有的嵌入。
单击选择就可以直接将这个嵌入插入到提示词中。这个可以避免你自己输入错误的问题。
3、使用嵌入需要注意的事情
之前案例(marc_allante:1.2) a dog,增加了嵌入的强度。有可能是和Stable Diffusion Web UI加载嵌入的方式有关系,加强关键字的权重效果可能会更好一点。
下面是同一个种子但是权重不一样的示例:
更复杂的是,不同种子值所需的强度可能不同,可以利用XYZ表多刷几个,然后进行选择。
四、个人喜欢的embedding
1、wlop_style
如果你玩过 Stable Diffusion 基础模型,你会发现无论你怎么努力,都无法生成 wlop 的风格(wlop在很久之前抗议过,让SD从训练集把他的作品下掉)。因此你需要搭配自定义模型一起使用才可以做到这点。
wlop_style 嵌入能够渲染艺术家 wlop 的一些漂亮的插图风格。它需要与 SirVeggie 的wlop-any 自定义模型一起使用。
直接下载嵌入—wlop_style embedding
直接下载模型 – wlop-any model
如果你尝试一下,发现它根本不起作用,那么你需要调整提示词的强度。
请看一下上面图片的提示词:
正面提示词:(wlop_style :0.6) (m_wlop:1.4) woman wearing dress, perfect face, beautiful detailed eyes, long hair, birds
负面提示词:closed eyes, disfigured, deformed
wlop_style是嵌入的关键词, m_wlop是模型的关键词。
如果你不了解这些风格,也没有关系。你可以尝试去修改这两个关键词的权重。另外需要注意,有些对象不适用嵌入,你可以尝试一下wlop作品中的一些常见的对象。一般不生效,就是因为这个作者很少有产出这块的内容,然后模型没有学过,所以它不会。
2、Kuvshinov
Kuvshinov 是俄罗斯风格的插图。你可以将 kuvshinov
嵌入与 Stable Diffusion v1.4 一起使用。
请看一下上面图片的提示词:
正面提示词:(_kuvshinov:1), a woman with beautiful detailed eyes, highlight hair
负面提示词:disfigured, deformed
注意,这里作者已经将嵌入的名称重命名为_kuvshinov.bin
五、embedding、dreambooth、hypernetwork和LoRA的差别
微调稳定扩散模型的流行方法有以下几种:文本倒置textual inversion(嵌入embedding)、dreambooth 和hypernetwork超网络,LoRA-Low Rank Adaption低秩适配
嵌入定义了新的关键字来描述一个新的概念而不改变模型。嵌入向量存储在 .bin 或 .pt 文件中。它的文件非常小,通常不到 100 kB。
Dreambooth 通过对整个模型进行微调来注入新概念。文件大小是 Stable Diffusion 的典型文件大小,大约 2 – 4 GB。文件扩展名与其他型号相同,为ckpt。
Hypernetwork 是附加到 Stable Diffusion 模型去噪 UNet 上的附加网络。目的是在不改变模型的情况下微调模型。文件大小通常约为 100 MB。
LoRA采用的方式是向原有的模型中插入新的数据处理层,这样就避免了去修改原有的模型参数,从而避免将整个模型进行拷贝的情况,同时其也优化了插入层的参数量,最终实现了一种很轻量化的模型调校方法。它的文件一般在100-200MB左右。
六、embedding的优缺点
1、优点
嵌入的优点之一是它的体积小。文件大小100KB左右,甚至更小,那么将多个文件存储在本地存储中很简单。因为嵌入只是新的关键字,所以它们可以在同一张图像中一起使用。
2、缺点
嵌入的缺点是有时不清楚它应该与哪个模型一起使用。如果模型作者没说,你可以从 v1.4 或 v1.5 开始。你可能还需要考虑有没有用VAE的效果的差别。此外对于动漫风格,模型作者使用像 Anything v3 这样的动漫模型作为底模并不少见。
总的来说,使用嵌入比使用自定义模型更难一些。经常在使用的时候没办法达到模型作者演示的效果,需要不断地调整关键词的权重来抽卡。
翻译:@Hazel
原文链接:https://stable-diffusion-art.com/embedding/#Pros_and_Cons_of_using_embedding