什么是文本反演?
文本反演:通过几张反映特定概念的图像,教基础模型新的词汇。
这个概念可以是:一个姿势、一种艺术风格、一种纹理等。这个概念不一定要在现实世界中实际存在。例如,您可能见过许多生成的图像,其负面提示(np)包含标签“EasyNegative”。这是一个基于大量某人认为质量差的图像训练出来的人造概念。
它不会丰富模型。如果您的基础模型仅训练在苹果图像上,而您尝试用大约20张香蕉图像教模型“banana”这个词,那么—最多—您的模型在您请求香蕉时会给您长长的黄色苹果。当然,您可以使用1000多张图像让模型大致模拟出香蕉,但这真的值得吗?😉
训练的结果是一个.pt或.bin文件(前者是原作者使用的格式,后者是diffusers库使用的格式),其中包含了嵌入。这些文件可以共享给其他生成艺术家。
使用预训练的嵌入
将嵌入放入嵌入目录,并在提示中使用其文件名。您无需重新启动程序即可使其生效。
例如,这里是我在WD1.2模型上用53张图片(119张增强)训练19500步,设置每个标记8个向量的Usada Pekora的嵌入。
生成的图片: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
请非常小心您在使用嵌入时所使用的模型:它们在训练时使用的模型上效果很好,而在不同的模型上效果不好。例如,这里是上述嵌入和1.4稳定扩散模型的原始图:grid-0036
Usada Pekora的肖像
步骤:20,采样器:Euler a,CFG尺度:7,种子:4077357776,大小:512x512,模型哈希:7460a6fa
训练嵌入
文本反演标签
用户界面中对训练嵌入的实验性支持。
创建一个新的空嵌入,选择包含图像的目录,并在其上训练嵌入
该功能非常原始,请自行承担风险
在经过几万步的训练后,我能够重现我在其他仓库中训练动漫艺术家作为风格的结果
可使用半精度浮点数,但需要实验以确定结果是否同样好
如果您有足够的内存,最好使用–no-half --precision full选项运行
用户界面部分可以自动运行图像预处理。
您可以中断并恢复训练而不会丢失任何数据(除了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目录中的文件以了解如何使用这些文件。训练风格时使用style.txt,训练对象嵌入时使用subject.txt。文件中可以使用以下标签:
[name]:嵌入的名称
[filewords]:数据集中图像文件名中的单词。详见下文。
最大步数:完成这么多步后训练将停止。一步是显示给模型一张图片(或一批图片,但目前不支持批处理),并用其改进嵌入。如果中断训练并在以后恢复,步数将保留。
将嵌入的图像保存在PNG块中:每次生成图像时,它都会与最近记录的嵌入结合并以可以共享为图像的格式保存到image_embeddings目录中,并可以放入您的嵌入文件夹中加载。
预览提示:如果不为空,此提示将用于生成预览图片。如果为空,将使用训练中的提示。
文件词
[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),并将提示文本放在那里。文件名和正则表达式选项将不被使用。
第三方仓库
我成功使用以下仓库训练嵌入:
nicolai256
lstein
其他选项是使用colabs和/或diffusers库进行训练,这些我不了解。
在线查找嵌入
Github已请求我删除所有链接。
超网络
超网络是一种不接触模型任何权重的微调模型的新颖概念。
当前训练超网络的方法是在文本反演标签中。
训练工作与文本反演相同。
唯一的要求是使用非常低的学习率,如0.000005或0.0000005。
哑哑指南
一位匿名用户编写了带有图片的超网络使用指南:https://rentry.org/hypernetwork4dumdums
训练时卸载VAE和CLIP
设置标签上的此选项允许您在训练时节省一些内存,但会以预览图片生成速度较慢为代价。