Ai画画——Textual Inversion, Hypernetwork, Dreambooth三种模型训练心得

2023-05-16

这几天大家都在用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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ai画画——Textual Inversion, Hypernetwork, Dreambooth三种模型训练心得 的相关文章

随机推荐

  • OVN:dhcp-options分配网络的问题

    如果将逻辑逻辑网络接入路由器的网关地址分配了比如10 10 0 2 也就是这个网关地址已经配置了 xff0c 不能在继续分配给其他的虚拟机了 但是ovn在初始分配给私网下虚拟机IP地址时也会继续分配这个IP地址 xff0c 造成地址重复出现
  • 【深度解刨C语言】符号篇(全)

    文章目录 一 注释二 续行符与转义符1 续行符2 转义符 三 回车与换行四 逻辑操作符五 位操作符和移位操作符六 前置 43 43 与后置 43 43 七 字符与字符串八 和 1 四种取整方式2 取模与取余的区别和联系3 两边异号的情况1
  • 关于论文那点事——对抗样本

    学会读论文是一件读研期间必做的事 xff0c 已经读过好几篇 xff0c 但都是浅读 xff0c 读完后发现啥也没记住 xff0c 总想着等我有需要我再去细读文章 xff0c 但如果你连自己研究方法的各种理论和方法都没有基础了解的话 xff
  • 论文那些事—Learning Deep Features for Discriminative Localization

    1 摘要 背景 论文主要针对图片中不同类别物体定位的弱监督学习问题 xff0c 提出了基于分类网络的图片识别与定位 在分类模型中 xff0c 卷积层本身带有物体定位功能 xff0c 比如一个物体在左上角 xff0c 那么卷积之后的结果 fe
  • 2023年高频Java面试题集锦(含答案),让你的面试之路畅通无阻

    面试职位 xff1a Java后端开发工程师 在面试前三面真的有点急促 xff0c 一周内就面完了三次面试 xff0c 接着就开始无尽的等待 xff0c 整整等了三周左右 xff0c 终于完成了四面和HR面 整个过程还是比较曲折的 xff0
  • URL的标准格式

    URL的标准格式 scheme host port path query fragment 1 scheme xff1a 协议 2 host xff1a 主机 3 port xff1a 端口 4 path xff1a 路径 5 query
  • koa2获取用户ip

    调用下面方法即可获取 koa2 中 req 为 ctx req const getUserIp 61 req 61 gt return req headers 39 x forwarded for 39 req connection rem
  • Vim插件YouCompleteMe安装记录(号称最难装的Vim插件?)

    使用 PulginInstall 安装就不要想了 xff0c 如果你没有梯子的话 自己的 ssr 被封 xff0c 使用的同事的 ss xff0c 但是同事设置的加密方式在 linux 上的 ss 应用不支持 好吧 xff0c 直接上过程
  • 低显存(4g)训练LoRA模型的一些经验+自训练四季夏目LoRA模型分享

    一 Lora简介 LoRA Low Rank Adaptation of Large Language Models 是微软研究员引入的一项新技术 xff0c 主要用于处理大模型微调的问题 目前超过数十亿以上参数的具有强能力的大模型 例如
  • docker无法删除<none>镜像

    1 1 进入root权限 2 3 sudo su 或 sudo i 4 5 2 停止所有的container xff08 这样才能够删除其中的images xff09 xff1a 6 7 docker stop docker ps a q
  • node(koa2)跨域与获取cookie

    欲做一个node 的网关服务 xff0c 通过 cookie 做信息传递 xff0c 选择框架 koa2 xff0c 这里简单记录跨域处理以及 cookie 获取 首先 xff1a 解决跨域问题 xff0c 使用 koa2 cros 来处理
  • 算法思考(1)别再用递归计算斐波那契数列了!

    曾经学习到递归时 xff0c 相信绝大部分人都使用过斐波那契数列来学习递归吧 当初我学习递归是老师还刻意让我们思考如何优化其性能 xff0c 于是我们加了一些变量 参数 用于传递数据减少内存消耗 xff0c 或者讲递归分割 xff0c 分割
  • 推荐几个好用串口调试、检测的工具

    Sscom xff1a 比较实用的 xff0c 类似有 xcom xff0c 友善串口调试 xff0c 野火调试工具 xff0c securecrt 不免费 UartAssist netAssist 是出自同门 xff0c 后者调试网络 x
  • 2021-11-17:virtualbox6+Ubuntu18.04,虚拟机与主机间ping不通问题解决方案

    虚拟机可以ping通主机 xff0c 但是主机ping不通虚拟机的解决方案 1 先要查看虚拟机以及主机防火墙是否都关闭 xff0c 虚拟机防火墙关闭方法 xff1a a sudo apt get install ufw 安装 b sudo
  • 学习 > SCI-Hub论文免费下载可用网址

    http tool yovisun com scihub
  • armbian各版本名称对照

    摘录自armbian官网 镜像文件名 Armbian 20 05 2 Orangepilite bullseye current 5 4 43 img Bionic 61 Ubuntu Bionic 18 04 LTS Disco 61 U
  • Linux内核学习笔记之进程切换(八)

    Linux通过时间片来控制每个任务的执行时间 xff0c 每经过一个时间片就触发一次切换 xff0c 通过不停的来回切换执行任务 xff0c 当切换速度很快的时候 xff0c 就像视觉暂留一样 xff0c 给用户造成一个任务并行效果的假象
  • UML--动态建模

    五 动态建模 所有系统均可表示为两个方面 xff1a 静态结构和动态行为 UML 提供图来描述系统的结构和行为 类图 xff08 class diagram xff09 最适合于描述系统的静态结构 xff1b 类 对象及它们之间的关系 而状
  • Clash of Clans

    Clash of Clans Days ago I notice that my Clash Royal Account has been destroyed and if I go back I can t play it so I do
  • Ai画画——Textual Inversion, Hypernetwork, Dreambooth三种模型训练心得

    这几天大家都在用stable diffusion搭载novelai的模型疯狂搓术式生成老婆 xff0c 我也跟着潮流体验了一下 xff0c 但是试了很多次却发现无法生成我喜欢的某个冷门角色 比如说姬坂乃爱 很多人表示只要描述的够详细就能生成