前言
之前已经讲过SDXL_LORA,SD1.5_LORA训练过程,基本说的比较清楚了,有兴趣可以去看看,下面我将讲解一下SD1.5大模型的炼制。
SDXL_LORA:https://tian-feng.blog.csdn.net/article/details/132955577
SD1.5_LORA:https://tian-feng.blog.csdn.net/article/details/132133361
然而,Imagen 的模型和预训练的权重都不可用。所以最初的 Dreambooth 并不适用于稳定扩散。但后面 diffusers 实现了 Dreambooth 这一功能,并且完全适配了 Stable Diffusion。
模型炼制
数据准备
和LORA一样,裁剪成512x512的大小后打tag,数据处理参考之前文章,不赘述了,数据的多少根据你的任务来(真人,二次元,画风),先别急,最好听我把流程讲完,你再准备数据开始炼制。
二次元:20-50(建议抠图填白,脸部训练影响不大,不过自己可以试试,说不定效果更好)
真人:50-100张(建议抠图填白,加强脸部训练)
画风:1000往上
这只是参考区间,如果你的图片质量都是一级棒。那当然是越多越好,别强行为了数量把一些一般照片放进去,可能数量上去了,反而训练的很烂。
假设我来炼制一个真人模型,这是我的数据集,只是打个样
抠图后,赛博丹炉下有两个文件夹,分别是裁剪后的人物和脸型
之后把你的底膜准备好,与你图片炼制风格相近的,之后一起压缩上传百度网盘,这样是为了下载方便,因为你可以新建一个文件夹在Autodl和百度云盘共享一个空间,如果手动拖动文件到Autodl,那真是速度很慢;特别是大模型2个G,这个教程请看SDXL_LORA文章,这个不难,中文教程说的很明白了,一步步按他说的弄。
Autodl炼制
直接搜素dreambooth就出来了,立即创建
镜像名: Akegarasu/dreambooth-autodl/dreambooth-autodl:v3
打开终端,把系统盘的dreambooth-aki移动到数据盘中,因为系统只有30G,数据盘有50G,
mv /root/dreambooth-aki/ /root/autodl-tmp/ ipython kernel install --user --name=diffusers 下载diffusers内核等下测试用
点击ipynb文件训练脚本
直接方式:简单但上传速度一般
文件放置路径:模型文件直接放到model-sd,数据集图片直接放到instance-images,手动拖动即可
间接方式:需要建立共享空间但上传速度快
下载完文件在Autodl-tmp路径下
强调:最好都是压缩zip上传,解压指令如下
unzip /root/autodl-tmp/dreambooth-aki/文件名.zip
移动文件
数据集移动 mv /root/autodl-tmp/dreambooth-aki/文件名/* /root/autodl-tmp/dreambooth-aki/instance-images/ 模型移动 mv /root/autodl-tmp/dreambooth-aki/模型名 /root/autodl-tmp/dreambooth-aki/model-sd/
mv是move意思,把文件从源地址移动到目的地址
数据准备完毕
训练参数
autodl-tmp/dreambooth-aki/dreambooth-aki.ipynb
其实秋叶大佬讲的挺清楚了,基本改一下文件路径即可,直接一步步运行,不管我还是一步步讲一下
定义了一些模型转换文件和全局变量等等,直接Ctrl enter运行,
秋叶已经转换好了一个动漫底膜,在model-hf下,之前我们已经把真人底模放在了model-sd中,把model.safetensors改成自己底模的名字,运行后自动覆盖model-hf下文件
可以看到分完后,模型被拆解为文本编码器,分词器,unet,vae
bocchitherock改成一个自己命名的tag(但是不存在的英文单词),就像触发词一样,这样进行训练文本编码器会把这个词和你训练的图片画风挂钩,你的自定义tag更容易生成你训练图片的画风
-
Instance Image 你所训练的目标数据集。
-
Instance Prompt(就是自定义tag) 默认实现为全局共享一个 prompt, 就是把这个tag放到所有训练图片标签中
-
Class/Regularization Image 就是正则化,应该为 自动生成 即 auto-generated 的图像,用于检测 AI 的先验知识。不应该放任何非 AI 生成的图像。自动生成不用管
-
Class Prompt 就是根据你训练的人物写一个简单的tag,例如训练一个女孩模型,就是1girl再加点质量词
基本不用改动,运行
这两个不用改直接运行
# 常用参数 我就不一一讲了,有兴趣看看我sdxl_lora训练,参数讲的挺清楚了,没有的我讲一下 ## 最大训练步数 max_train_steps = 3000 #二次元步数3000-5000;真人5000-10000;画风那就使劲把 ## 学习率调整 learning_rate = 5e-6 #默认数值,根据训练loss调整, ## 学习率调整策略 ## ["linear", "cosine", "cosine_with_restarts", "polynomial", "constant", "constant_with_warmup", "cosine_with_restarts_mod", "cosine_mod"] lr_scheduler = "cosine_with_restarts" lr_warmup_steps = 100 train_batch_size = 1 # batch_size num_class_images = 20 # 自动生成的 class_images 数量 with_prior_preservation = True #训练人物开启;训练画风关闭 train_text_encoder = False # 训练文本编码器 use_aspect_ratio_bucket = False # 使用 ARB # 从文件名读取 prompt read_prompt_from_filename = False # 从 txt 读取prompt read_prompt_from_txt = False append_prompt = "instance" # 保存间隔 save_interval = 500 #没多少步保存,基本得1000以上要不你数据盘保存几个就满了 # 使用deepdanbooru use_deepdanbooru = False # 高级参数 resolution = 512 gradient_accumulation_steps = 1 seed = 1337 log_interval = 10 clip_skip = 1 sample_batch_size = 4 prior_loss_weight = 1.0 #越低则越难过拟合,但是也越难学到东西。 # 一种学习率调度策略,通常用于训练深度学习模型时的优化器。这个策略的主要思想是随着训练的进行, #逐渐减小学习率的大小,以帮助模型更好地收敛。 scale_lr = False scale_lr_sqrt = False # 同上 gradient_checkpointing = True pad_tokens = False debug_arb = False debug_prompt = False use_ema = False #only works with _mod scheduler restart_cycle = 1 last_epoch = -1
基本调这几个就行
Finetune基础学习率:3e-6;自动打标准确率:0.35以上
batch size:
-
小样本集(百张级别)3以内可以开scale/sqrt Ir
-
大样本集(千、万张)能开多大是多大
-
步数:百张左右1w步图片多的情况5 epoch以上
确定batch_size后就是调你的学习率了,运行
可以接着上次结果训练,第一次,不用运行,直接到启动训练运行完事
然后转换为ckpt文件,修改你output下保存的模型名,就可以转换了,运行
接下来就是测试了,可以大概看一下你的模型是否还行决定是否下载,但是和本地不太一样,可能效果差一点。修改测试的模型名,和上面一样
运行
总结
其实模型的炼制只是一部分,现在所有的大模型都是在原始模型基础上一步步进行微调,因为想重新自己炼制一个大模型,对于我们来说基本不可能,但是微调却让我们都能参与进来,可以看到,现在sd1.5的生态圈在不同作者的努力下,已经百花齐放;
模型创作者更像一个调酒师,就像之前看到的麦橘大佬所说,基于不同的大模型不同比例融合,如何融出一个更好的大模型,这点好像大家都知道,但是都不怎么说这个事,毕竟公开融合他人模型多多少少会有点问题,所以我也浅谈为止,以后有机会再细说把!!!
评论