Stable Diffusion 系列教程 - 6 Dreambooth及训练

news/2024/7/10 20:30:14 标签: stable diffusion, dreambooth, 训练, finetune

Stable-Diffusion、Imagen等文生图大模型已经具备了强大的生成能力,假设我们的Prompt为 [Cyberpunk Style],SD或许能很快画出赛博朋克风格的一幅画。但你作为一个不知名的人,不能奢求SD在训练的时候把你自己想要的风格也加进去吧?这时就需要我们能自己个性化调整一下原始的基础大模型。我们日常所用的底模的参数量是巨大的,自己训练是完全不可能的(训练整个Stable-Diffusion-1.4大概要15万GPU小时。Dreambooth是谷歌的一种微调模型的方案。LORA是Dreambooth的一个简化版。通常来说Dreambooth对于一些比较抽象的或者泛指的概念来说性能是比LORA好很多的,对数据集的宽容度更高(比如天空背景,妆容等),LORA更适合于一个确定的事物。Dreambooth的训练和LORA基本上是一致的,唯一的不同就是Dreambooth不需要预处理。

DreamBooth方法是对整个扩散模型进行的微调。经过DreamBooth微调后的大模型能够同时对我们自己想要的风格和它过去已有的风格进行认知。为什么叫微调?比如你要教小朋友乘法,你不可能为了让他学会,就打印几千几万道所有的题目让他做。也就是说我们希望大模型能够在很小的代价下(几张图像)学习。请注意,这对于DreamBooth来说是不会产生过拟合的,因为大的扩散模型会在不丢失原有的参数以及不对小样本过拟合的情况下,将新的信息整合进入其输出域中。


训练

DB训练画风有100张左右的数据集就能出相当不错的效果,超过300张的话意义就不是很大了,除非是你想在训练画风的同时训练大量角色或服饰等等。虽说DB训练对数据集比较宽容,再加上由于自带分桶训练也不需要对数据集进行裁剪,但还是需要进行一些筛选来确保数据集本身有较高质量。在挑选数据集图片时,如果可以的话,尽量选择一手图片而非截图,截图多多少少会存在失真,这些失真也会被当成特征被学进去,进而反应在产出的图片上。

训练脚本:秋叶大佬的训练器(WebUI的更新会导致插件版的训练频繁出现问题,秋叶大佬的训练器本质上运行的是Kohya_ss GUI脚本,秋叶大佬将其进行了汉化,并做了很多的防呆机制

数据集的准备参考《Stable Diffusion 系列教程 - 3》

模型种类选择:sd-dreambooth

底模路径:选择自己喜欢的底模

VAE:也是根据自己的选择

训练集路径:参考《Stable Diffusion 系列教程 - 3》,需要在填写的路径下面再建立一个子文件夹,命名格式为重复次数_文件名。这里的重复次数乘以下面的最大训练轮数相当于插件版的epochs。

reg_data_dir正则化数据集路径:用不到,留空。

reg_data_dir正则化先验损失权重:用不到,留空。

resolution分辨率:不用管,只要保证下面的enable_bucket分桶训练使能就行,dreambooth训练不会固定分辨率。所谓的分桶即训练时脚本会根据不同的长宽比例的图像数据自动分组训练

min_bucket_reso,max_bucket_reso,bucket_reso_steps:max_bucket_reso可以设为1280,其他的可以默认,也可以根据个人喜好。如果你的显存低于12g,那就建议不要使用DB来训练了,或者去租个在线训练。如果你的显存只有12g,那么训练时就老老实实选择768以下的分辨率吧。 

保存设置:保存精度FP16和BF16是半精度保存(2G左右),float是全精度保存(4G左右)。我喜欢选择float。其他可根据自己喜好设置。

训练相关参数:最大epoch一般设置为200,对应的保存频率为40。批次大小设1(DB训练本身很慢,动不动十几个小时,从这里抠速度意义不大,设大了反而容易波动)。stop_next_encoder_training:控制AI对我们对数据集中打的标的认识程度,低了AI会对打的标不敏感,高了容易过拟合。这个值的计算公式:敏感程度×图像数量×max_train_epoch,比如308张图,40%的敏感度,则stop_next_encoder_training=308×0.4×200=24640。最后两项梯度检查不管,空着就行。

随后的这些除了红框基本保持默认:

此外,还有一项keep_tokens:打标后有一大堆tag,tag越靠前ai对其的学习权重越高。打乱tag机制有助于更好的进行训练。但有些tag我们不希望AI降低对它的学习权重,那这里就可以通过这个参数来保证前几个参数不会被打乱。

 对于噪声设置:噪声会影响原始画风的还原度,留空不填。

高级选项:种子是玄学,默认就行。Clip skip根据自己喜好。

速度优化选项:mixed_precision选择fp16即可。bf16不够稳定。其他参数默认即可。

点击训练,就可以跑起来啦:


http://www.niftyadmin.cn/n/5309611.html

相关文章

【好书推荐】ReactJS实践入门

作者简介 Chris Minnick是一位多产的作家、博主、培训师、演说家和Web工程师。他创立的WatzThis?公司,一直致力于寻找更好的方法向初学者教授计算机和编程技能。 Chris拥有超过25年的全栈开发经验,他也是一名教龄超过10年的培训师&#xff0c…

PLC水箱液位控制、神经网络、PID模糊控制等Factory IO仿真

水箱液位控制的PLC仿真程序。TIA Portal V17 中的代码。该水箱在 Factory IO 3D 仿真软件中建模,将控制算法写入PLC,与Factory IO联合仿真进行实验。项目包括一个简单的自动化系统、一个带有两个泵的液罐和一个液位传感器。从 HMI 中,我们可以…

从《数据库索引设计与优化》看mysql索引设计

很久之前写的一篇文章,主要是结合mysql45讲和《数据库索引设计与优化》讨论索引设计的,拿出来分享下。 选用什么引擎 对于INSERT_SELECT型数据库,如果没有事务的要求,更倾向于选择MyISAM。 因为InnoDB会维护更多的数据&#xff…

Apollo 9.0搭建问题记录

虚拟机安装 可以看这个:https://blog.csdn.net/qq_45138078/article/details/129815408 写的很详细 内存 为了学习 Apollo ,所以只是使用了虚拟机,内存得大一点(128G),第一次,就是因为分配内…

双指针:反向扫描和同向扫描

双指针的应用场景 双指针(又称为尺取法)是算法竞赛中常用的一个优化技巧,用来解决序列的区间问题。 我们一般用 i 和 j 分别扫描区间,i 和 j 有如下两种扫描方向 反向扫描:i 和 j 方向相反,i 从头到尾,j 从尾到头,在中间相会 同向扫描:i 和 j 方向相同,都从头到尾…

【linux学习】重定向

目录 重定向标准输出、标准输入和标准错误标准输出重定向标准错误重定向将标准输出和标准错误重定向到同一个文件处理不想要的输出标准输入重定向 管道过滤器uniq-报告或者忽略文件中重复的行wc-打印行数、字数和字节数grep-打印匹配行head/tail 打印文件的开头部分/结尾部分te…

Spring之单元测试

Spring提供了一个运行器&#xff0c;可以读取配置文件&#xff08;或注解&#xff09;来创建容器。 1 整合Junit5 1.1 引入依赖 <dependencies><!--spring context依赖--><!--当你引入Spring Context依赖之后&#xff0c;表示将Spring的基础依赖引入了-->…

二进制介绍

十进制转相应进制 (十进制)231 转 八进制 除八取余法 从下而上取余 231/828 ....7 28/83.......4 3/80........3 (十进制)231(八进制)0o347 (十进制)231 转 16进制 除十六取余法 从下而上取余 231/1614......7 14/160..........14 (十进制) 231(十六进制)0xe7 (十进制)231.3 转…