这几天大家都在用stable-diffusion搭载novelai的模型疯狂搓术式生成老婆,我也跟着潮流体验了一下,但是试了很多次却发现无法生成我喜欢的某个冷门角色(比如说姬坂乃爱)。很多人表示只要描述的够详细就能生成想要的角色。我尝试了很多,但终究无法生成心目中的乃爱小姐,因此去详细阅读了原本的github界面的文档,发现了一个非常重要的功能,这个功能支持我们对特定的图片进行针对训练!
使用了乃爱小姐的描述生成的完全不像乃爱的图片
原本的文档在此,熟悉英文的同学可以自己学习:
https://github.com/AUTOMATIC1111/stable-diffusion-webui/wiki/Textual-Inversion
那么这篇专栏主要就是介绍如何训练自己想要的角色tag以及特定的画风,我先在此声明:训练功能对显存要求及其之高,大概保底需要7-8G左右的显存,笔者使用的显卡是quadro RTX6000 24G,训练时常态使用大约9G显存。
接下来就是正片
需要准备的物品:一组你想用来训练角色/画风的图片
为了使用这个功能,我们首先要进入webui的Textual Inversion选项卡,进入之后是这个样子的
创建词条和数据预处理
训练
这个界面一共有三块,容我一一解释。
第一块是create a new embedding,这一块是用来创建你自己的词条的,
Name可以随意填写(之后你生成图片的时候就是用这个name当作tag),我为了不撞词条所以一般用带下划线的名字(这里用的是yj_amamiya)。
Initialzation text是你初始化这个词条的描述,Initialzation text是训练的起点,比如我要训练乃爱,这里就是对乃爱的描述 blonde hair,green eyes,red bow,red ribbon,long hair 如果用其他的角色或者画风,这里就换成那个角色或者画风的描述。
numbers of vectors per token,可以理解为你的tag中包含的信息量,这个参数与你所提供的数据集有关,建议100张以下的图片的数据集最好不要调到3以上,可能会出现过拟合的现象(比如无法给角色换衣服或者换表情。)
第二块是preprocess images,这一块是用来预处理你的数据的,因为它的模型输入只能是512*512的图片,而我们收的图大部分都不是这个大小的,所以必须要先进行一次数据预处理。
Source Directory是原图片的文件夹,把你收的图片全部放在这个文件夹里就可以了。
Destination Directory是你预处理之后的图片的输出位置,这个可以随便选一个地方。
Create clipped copies是每张图片都输出一个镜像,在图片非常少的时候可以选择这个选项(低于20张)。Split oversized images into two是对于过大的图片进行剪切,这个建议选择,因为如果不选的话就会对你的图片进行拉伸,会变得非常不好看。
Use BLIP caption as filename是使用自动标注图片的模型。这里说明一下,一般来说图片是要提前标注好tag的,如果不勾选这个选项就在文件名上手动标注tag。勾选这个选项,程序就会下载一个自动标注的包,然后对你原图片全部进行自动标注,具体效果如下。
自动标注的效果
补充:人工标注的话,你只要把文件名改成你对图片描述的tag就可以了,同时不要勾选Use BLIP caption as filename
第三块是Training,这里就是我们的训练模块了。
embedding是你要训练的tag,这里拉下选项框选择上面创建的新词就可以了
learning rate建议使用默认的参数(如果觉得收敛太慢的话可能可以调高一些)
Dataset Directory直接复制上文的Destination Directory就可以了。
Log directory是你训练log的输出文件夹,这里使用默认的就可以,之后你可以进入stable-diffusion-webui/textual_inersion文件夹就可以看log文件了
Prompt template file是你输入给模型的模板文件,这里建议训练角色的时候使用subject_filewords.txt,训练画风的时候使用style_filewords.txt
Max steps是你训练的步数,这里建议设置在10000(算力不够的话至少设置在4000)。
最后两个选项是你每训练多少步输出一次log和参数,这里设置成默认的就行。如果设置步数太高,导致出现了过拟合现象,你可以到textual_inversion文件夹里找到之前步数的pt文件替换就可以了
设置好了参数之后就可以快乐的训练了
出现这个界面就说明成功开始训练了
补充:训练是可以随时打断的,在训练的时候按下interrupt键就可以,而且也支持断点训练,换句话说可以训练到2000steps试一下效果,再训练到5000steps试一下效果,这些都是没问题的。
如果训练的差不多了之后就可以到txt2img和img2img进行生成了,使用方法是在tag里添加你刚才训练的Name
使用方法
注意在使用的时候要添加角色原本的特征,这样输出的角色更加稳定。
最后是分享你的pt文件和使用别人的pt文件的方法
你训练得到的所有pt文件都存储在stable-diffusion-webui/embeddings文件夹下
如果是分享你已经训练好的pt文件,就把这个文件夹里的pt文件分享给其他人,如果是使用别人的pt文件,就拖入到这个文件夹后重启程序,如果显示了
就说明读取pt完成了,之后就可以快乐的创建自己喜欢的角色的色图了!
最后分享一张我生成的最喜欢的乃爱 作者:fmlong https://www.bilibili.com/read/cv19040576?from=search&spm_id_from=333.337.0.0 出处:bilibili
研究了一下,想试试能否用AI绘制出独特且相貌保持连续性的游戏角色。
于是用Textual Inversion+自制数据集训练了6、7种不同的相貌作为脸部基因。
之后在输入给AI的文字中,即可通过改变训练好的几个相貌tag的比例权重,融合出现实里不存在,同时在系列图片里长相可以保持一致的角色啦!
以下是一些实现出来的结果,希望大家喜欢!也许未来设计新的游戏角色就可以从这种方法来入手。。。
另外这次用到的AI是我通过特调比例用多个模型(Stable Diffusion + Waifu Diffusion + 其他的一些开源模型)融合出来的自定义模型~
这样AI生成的作品有绘画质感的同时,还会保留一些写实的画风。
AI画画常涉及到以下三种模型:Textual Inversion Embedding, Hypernetwork, Dreambooth。它们三者之间有什么异同呢?各自有什么特定,适合什么用途,以及如何设置训练参数呢?本文将为大家初步解惑。
Textual Inversion:
它根据模型引用给定的图像并选择最匹配的图像。做的迭代越多越好。通过寻找一个 latent 空间来描述一个近似训练图的复杂概念,并将该空间分配给关键字。
模型文件小,~30KB
通常不能捕获物品细节,擅长风格转换
使用时无需 load 模型
可在 prompt 中同时使用多个 embeddings
可被用于 negative prompt
可作用于 Dreambooth,hypernetwork 等任意 .ckpt 模型,无需 merge
本地训练时对于性能要求不高
以 PNG 文件格式分享,安全
在 prompt 中非常敏感,通常需要按正确的顺序放置,且权重“恰到好处”
Hypernetwork:
它会改变图像的整个输出,而无需在提示中调用它来浪费您宝贵的令牌,它可以在您的设置选项卡中进行设置,该选项卡将自动应用于您的所有图像。
模型文件适中,~87MB
适合学习较大的概念,如艺术风格、某些小众物品
在较低训练步数就能看到一些结果,训练较容易
对于模型已经熟悉的概念,可以快速训练,且如果出现重叠,理论上可以继承和增强其概念
不需要太大的显存
COMMANDLINE_ARGS=--deepdanbooru
对“高”学习率非常敏感,需要通过一组精心调整的步进学习率进行调整
要求尽量不要偏离你训练过的 prompt
非常排斥其他模型,因为权重很大程度上取决于模型的其余部分
Textual Inversion vs. Hypernetwork
Textual Inversion 作为扩展当前模型的迷你“模型”。解析 prompt 时,关键字会利用嵌入来确定要从中提取哪些标记及其相关权重。训练只是找出代表源材料所需的正确标记。
这可以通过以下方式证明:
从 prompt 中消耗 "vectors per token" 所设置的标记
易于在 prompt 中描述的主题(vintage white fur, a certain shape and colored glasses, eye color, fur shagginess, three toes, etc.)会产生更好的结果
几乎不可能在 prompt 中描述的主题(four ears, half are shaped one way, the other half another, middle eye, tusks, neckbeard tufts, etc. brown fur, vintage white muzzle and chest marking)非常难嵌入到输出
相反,Hypernetwork 是用另一种迷你“模型”来扩展模型。它作为一个整体应用于最后的外层,使您能够有效地重新调整模型。它能有效地修改 prompt 中出现的内容并进入图像,从而有效地放大/修改其效果。
Dreambooth:
它将给定内容插入到输出中,缺点是如果你用 Dereambooth,它会用训练图替换所有相似的对象。模型通过N步学习,学会给定图像与新关键字之间的关系;此关键字在标记化后,将类似于 latent 空间。
模型文件大,2-4GB
适于训练人脸,宠物和物件
使用时需要 load 模型
可以与其它模型 merge 后形成混合模型,但成功率不高
本地训练时需要高显存,>=12GB
以 .ckpt 文件格式分享,要注意查毒
Textual Inversion vs. Dreambooth
Textual Inversion 从 SD 已知的内容中挖掘给定的输入。Dreambooth 将所需内容插入到输出中。那么在实践中有什么区别呢?
Textual Inversion 不会在系统中插入“新数据”,它只提供更好的向导以便找到所需内容。Dreambooth 需要插入且只插入所需的内容。
Textual Inversion 可以用来从模型内部找到更多相似的东西;使得近似内容图像成为可能,而 Dreambooth 则无法“想象”出类似的事物以填补缺失的信息。
Textual Inversion训练参数:
"learning_rate": 5e-4
"scale_lr": True
"max_train_steps": 1000
"train_batch_size": 1
"gradient_accumulation_steps": 1
Hypernetwork训练参数:
0.000005:1000,0.0000025:10000,0.00000075:20000,0.0000005:30000,0.00000025:-1:
from 0 steps to 1000 steps, use a learning rate of 0.000005
from 1001 steps to 10000 steps, use a learning rate of 0.0000025
from 10001 steps to 20000 steps, use a learning rate of 0.00000075
from 20001 steps to 30000 steps, use a learning rate of 0.0000005
from 30001 steps on, use a learning rate of 0.00000025.
These values definitely need to be better tuned, as I'm still not sure if they can be bumped up higher without incurring any penalties.
Dreambooth训练参数:
高学习率和过多的训练步骤将导致过度拟合(换句话说,无论提示如何,模型只能从训练数据生成图像)。
低学习率和过少的步骤会导致学习不足,这是因为模型无法生成训练过的概念。
物件:400步,2e-6
人脸:1200步,1e-6或2e-6
参考信息:
https://www.reddit.com/r/StableDiffusion/comments/xqi1t4/textual_inversion_versus_dreambooth/
https://www.reddit.com/r/StableDiffusion/comments/z8w5z2/the_difference_between_dreambooth_models_and/
https://www.reddit.com/r/StableDiffusion/comments/xjlv19/comparison_of_dreambooth_and_textual_inversion/
https://wandb.ai/psuraj/dreambooth/reports/Dreambooth-training-analysis--VmlldzoyNzk0NDc3#textual-inversion-and-dreambooth
https://ericri.medium.com/ai-art-of-me-textual-inversion-vs-dreambooth-in-stable-diffusion-5e54bb2b881
https://rentry.org/sd-e621-textual-inversion
https://rentry.org/hypernetwork4dumdums
https://blog.paperspace.com/dreambooth-stable-diffusion-tutorial-1/
https://blog.paperspace.com/dreambooth-stable-diffusion-tutorial-part-2-textual-inversion/ 作者:X-IMG实验室 https://www.bilibili.com/read/cv20323216 出处:bilibili