Skip to content

什么是文本反转?

文本反转:使用几张反映特定概念的图片来教授基础模型关于特定概念的新词汇。 * 这个概念可以是:一个姿势,一个艺术风格,一个纹理等等。 * 这个概念不一定要在现实世界中真实存在。例如,你可能见过许多生成的图像,其负面提示(np)包含了标签“EasyNegative”。这是一个在一堆被认为质量较差的图像上训练的人工概念。 * 它不会丰富模型。如果你的基础模型仅仅是训练在苹果图像上,然后你试图用大约20张香蕉的图像教会模型单词“香蕉”,那么最好的情况是,当你要求一个香蕉时,你的模型会给你一个长长的黄色苹果。当然,你可以用1000多张苹果的图像让模型近似一个香蕉,但这真的值得吗?;)

训练的结果是一个.pt.bin文件(前者是原作者使用的格式,后者是diffusers库使用的格式),其中包含了嵌入。这些文件可以与其他生成艺术家共享。

使用预训练的嵌入

将嵌入放入embeddings目录中,并在提示中使用其文件名。你不需要重新启动程序就可以让它工作。

例如,这是我在WD1.2模型上训练的Usada Pekora的嵌入,使用了53张图片(119张增强),进行了19500步训练,每个标记设置了8个向量。

它生成的图片: grid-0037

usada pekora的肖像
步骤:20,采样器:Euler a,CFG缩放:7,种子:4077357776,尺寸:512x512,模型哈希:45dee52b

你可以在一个提示中组合多个嵌入: grid-0038

usada pekora的肖像,mignon
步骤:20,采样器:Euler a,CFG缩放:7,种子:4077357776,尺寸:512x512,模型哈希:45dee52b

在使用嵌入时要非常小心所使用的模型:它们在你训练时使用的模型上效果很好,但在不同的模型上效果不太好。例如,这是上述嵌入和vanilla 1.4稳定扩散模型的效果: grid-0036

usada pekora的肖像
步骤:20,采样器:Euler a,CFG缩放:7,种子:4077357776,尺寸:512x512,模型哈希:7460a6fa

训练嵌入

文本反转选项卡

实验性支持在用户界面中训练嵌入。 - 创建一个新的空嵌入,选择包含图像的目录,在其上训练嵌入 - 这个功能非常原始,使用时要自担风险 - 我能够在训练动漫艺术家风格时复现我在其他仓库中得到的结果,经过几万步的训练 - 使用半精度浮点数工作,但需要实验来看结果是否一样好 - 如果你有足够的内存,最好使用--no-half --precision full来运行 - 有一个用于自动运行图像预处理的UI部分。 - 你可以中断和恢复训练而不会丢失任何数据(除了AdamW优化参数,但似乎没有现有的仓库保存这些参数,所以普遍认为它们不重要) - 不支持批量大小或梯度累积 - 不应该使用--lowvram--medvram标志来运行这个功能。

参数解释

创建嵌入

  • 名称:创建的嵌入的文件名。在引用嵌入时,您也将在提示中使用此文本。
  • 初始化文本:创建的嵌入将最初用此文本的向量填充。如果您创建了一个名为"zzzz1234"的单向量嵌入,并使用"tree"作为初始化文本,在没有训练的情况下使用它在提示中,那么提示"a zzzz1234 by monet"将产生与"a tree by monet"相同的图片。
  • 每个标记的向量数量:嵌入的大小。该值越大,您可以将有关主题的更多信息放入嵌入中,但同时也会从提示允许的单词中减去更多的单词。使用稳定扩散,您在提示中有75个标记的限制。如果您在提示中使用一个具有16个向量的嵌入,那么您将有75-16=59的空间。根据我的经验,向量的数量越大,获得良好结果所需的图片数量也越多。

预处理

这将从一个目录中获取图像,对其进行处理以准备进行文本反转,并将结果写入另一个目录。这是一个方便的功能,如果您愿意,您可以自己预处理图片。 - 源目录:包含图像的目录 - 目标目录:结果将被写入的目录 - 创建翻转副本:对于每个图像,还写入其镜像副本 - 将过大的图像拆分为两个:如果图像太高或太宽,则将其调整大小,使短边与所需分辨率匹配,并从中创建两个可能相交的图片。 - 使用BLIP标题作为文件名:使用询问者的BLIP模型将标题添加到文件名中。

训练嵌入

  • 嵌入:从此下拉列表中选择要训练的嵌入。
  • 学习率:训练速度。将此参数设置得太高的危险是,如果设置得太高,可能会破坏嵌入。如果在训练信息文本框中看到Loss: nan,那意味着训练失败,嵌入已经失效。使用默认值,这种情况不应发生。可以使用以下语法在此设置中指定多个学习率:0.005:100, 1e-3:1000, 1e-5 - 这将在前100步中使用0.005的学习率进行训练,然后在1000步之前使用1e-3的学习率,然后在最后使用1e-5的学习率。
  • 数据集目录:包含用于训练的图像的目录。它们都必须是正方形的。
  • 日志目录:样本图像和部分训练嵌入的副本将被写入此目录。
  • 提示模板文件:文本文件,每行一个提示,用于训练模型。有关可以在其中执行的操作,请参见textual_inversion_templates目录中的文件。可以在训练时使用以下标签:
  • [name]:嵌入的名称
  • [filewords]:来自数据集中图像的文件名的单词。有关更多信息,请参见下文。
  • 最大步数:在完成此数量的步骤后,训练将停止。一步是指向模型展示一个图片(或一个批次的图片,但目前不支持批处理),并用于改进嵌入。如果您中断训练并在以后的日期恢复训练,步数将保留。
  • 将带有嵌入的图像保存为PNG块:每次生成图像时,它将与最近记录的嵌入组合并保存到image_embeddings中,以一种既可以共享为图像,又可以放入嵌入文件夹并加载的格式。
  • 预览提示:如果不为空,将使用此提示生成预览图片。如果为空,则将使用训练中的提示。

filewords

[filewords]是用于提示模板文件的标签,允许您将文件名中的文本插入到提示中。默认情况下,会删除文件的扩展名,以及文件名开头的所有数字和破折号(-)。因此,文件名000001-1-a man in suit.png将变为提示的文本a man in suit。文件名中的文本格式保持不变。

可以使用选项文件名单词正则表达式文件名连接字符串来更改文件名中的文本:例如,使用单词正则表达式=\w+和连接字符串=,,上述文件将生成此文本:a, man, in, suit。正则表达式用于从文本中提取单词(它们是['a', 'man', 'in', 'suit', ]),连接字符串(,)放置在这些单词之间以创建一个文本:a, man, in, suit

还可以创建一个与图像相同的文件名的文本文件(000001-1-a man in suit.txt),并在其中放置提示文本。文件名和正则表达式选项将不会被使用。

第三方仓库

我成功地使用以下存储库训练了嵌入:

其他选项是在colabs上进行训练和/或使用diffusers库,但我对此一无所知。

在线查找嵌入

  • Github友好地要求我删除这里的所有链接。

超网络

超网络是一种新颖的概念,可以在不触碰任何权重的情况下对模型进行微调。

目前训练超网络的方法是在文本反转选项卡中进行。

训练方式与文本反转相同。

唯一的要求是使用非常非常低的学习率,例如0.000005或0.0000005。

Dum Dum指南

一位匿名用户编写了一份带有图片的超网络使用指南:https://rentry.org/hypernetwork4dumdums

在训练时从VRAM中卸载VAE和CLIP

设置选项卡上的此选项允许您节省一些内存,但会降低预览图片生成的速度。