StableDiffusion/NAI DreamBooth自训练全教程

在正式教程之前、聊聊dreambooth的发展、帮大家理清一下思绪

dreambooth发展史

画了张图帮助大家理解dreambooth的发展史

dreambooth发展史1.dreambooth论文方法公开官方介绍:它就像一个照相馆,但一旦捕捉到主体,就可以在你的想像所及之处融入它的身影。功能特性:主体重构、文本指导的视图合成、外观修改和艺术渲染(同时保留主体的关键特征)。google research团队基于自家imagen模型研发、而不是stable diffusion模型2.diffusers 代码实现了Dreambooth这一功能 并且适配了stable diffusion 模型diffusers 是一个提供跨模态的预训练扩散模型 基于pytorch实现的推理和训练扩散模型的模块化工具箱 (cli命令行程序 (可以通俗理解为没有gui的sd-webui) 通过终端 命令行参数 及脚本变量 与程序交互))3.后续的解决方案都是围绕封装优化diffusers dreambooth训练流程而开展(用shell和python脚本来对diffuser dreambooth使用流程封装自动化).主要有以下三种autodl 封装环境及自动化脚本 colab (需pro付费套餐) sd-webui 插件 (不稳定)

综合搭建成本、以及训练质量和使用者心智负担、目前调研下来推荐、基于autodl上提供的公开镜像来创建实例进行训练 (https://github.com/CrazyBoyM/dreambooth-for-diffusion)

训练全流程教程

在本次教程中 Webui 不再是主战场 主角是 diffusers, 我们要通过调整运行时的命令行参数 或是直接在python和shell脚本修改变量来实现训练参数的调整、直接在服务器上修改相应的shell和python脚本执行训练(没有Web客户端gui)

基建准备

autodl(没有账号的先去注册一个 新用户注册会送十块钱 足够大家训练几次Dreambooth 了AutoDL-品质GPU租用平台-租GPU就上AutoDL) 点击镜像链接 CodeWithGPU | 能复现才是好算法拉镜像(镜像预装了所有训练所需依赖 并且内置了stable- diffusion 1.5 和 novel ai 模型 nd 使我们只需专注于训练上) 创实例 (最好是3090或者A5000) 创建过程大概几分钟左右
远程连接上刚才创建的服务器 (下面介绍两种方式 任选一种)新手: autodl中 控制台下 ->快捷工具-> jupyterlab 有代码基础的 :vscode 远程连接 SeASnAkE:VSCode远程开发指南路径调整 把dreambooth-for- diffusion 文件夹移到autodl-tmp(数据盘)中终端有运行路径这个概念 确保运行路径(# 前面的那一串)为dreambooth-for-diffusion

模型转换

挑选要训练的ckpt模型文件 转成diffusers权重(两者格式不同、ckpt相当于把好几个文件权重打包)(镜像内置了stable- diffusion 1.5模型(三次元) 和 nai 模型(二次元) )终端输入以下命令 进行转换
转换后模型结构python tools/ckpt2diffusers.py \ –checkpoint_path=./ckpt_models/nd_lastest.ckpt \ –dump_path=./model \ –vae_path=./ckpt_models/animevae.pt \ –original_config_file=./ckpt_models/model.yaml \ –scheduler_type=”ddim”

数据集准备

./datasets/test是原始图片数据文件夹,请上传你的图片数据并进行更换数据集展示(5张) 裁剪为512×512 切图网站: BIRME – Resize multiple images (Online & Free)
同 hybernetwork embedding一样、 Dreambooth训练集也要用clip或deepdanbooru标注特征 镜像作者内置了deepdanbooru 所以可以在终端输入以下命令来使用 (如果三次元可用webui中的clip预处理 或手动打标 见之前hn教程里的说明: SeASnAkE:NovelAI hypernetwork 自训练教程)python tools/label_images.py –path=./datasets/test2 (将–path=后面换成你数据集的存放路径)

设置训练参数

调整参数 train_object.sh 中作相应修改(见下图中#注释 没有注释的参数字段默认帮你配置了常用的参数 不用改也能跑)class nameinstant_prompt学习率 (默认)步数 (默认)
修改test_prompts_object.txt文件 第一行改成上图中 instance_prompt值 第二行改成 class_prompt值

开始训练

终端中输入 sh train_object.sh 回车开始训练(每次用dreambooth训练一个主体时 会先根据上面设置的class_prompt值生成先验知识图库(黑话:古法炼治)所以前十分钟在生成同类别伪图 之后才开始正式训练)

测试效果

查看 训练时生成的 测试图

测试结果图镜像 test_model.py 提供简单的 txt2img功能打开dreambooth-for-diffusion/test_model.py文件修改其中的model_path和prompt,然后执行以下测试

会生成一张图片 在左侧test-1、2、3.png
决定是否继续训

(如何以某个节点开始继续训练)

MODEL_NAME值修改为你准备继续训的模型节点路径

修改 train_object.sh 要训练与上次相同的特定物体/人物,所以之前生成的先验图库继续沿用无需删除

如下图注释掉rm -rf $CLASS_DIR/*这一行(前面加#即可)

自行根据镜像里的说明文档调整其他参数

终端中输入 sh train_object.sh 回车开始继续训练

转换diffusers官方权重为ckpt检查点文件

终端中输入 python tools/diffusers2ckpt.py ./new_model(换成你挑选的模型文件夹 例如new_model-Step-xxx) ./ckpt_models/newModel.ckpt 回车 上述代码添加–half 保存float16半精度,权重文件大小会减半(约2g),效果基本一致

至此训练顺利完成、开始传送装载

把 DreamBooth 训练出的 .ckpt 文件传到 webui 的models\Stable-diffusion目录里,在 webui 的左上角切换到即可使用。

等待镜像加载完成,就可以通过在prompt里输入你之前指定的标志符(例如本教程中使用的为 <lucycyber> )来让ai在生成图像中加入你之前训练的主体

效果展示

txt2img

融入景观

埃菲尔铁塔
富士山

风格迁移

img2img (可搭配其他模型 和 hypernetwork 进一步调整图像质量和细节)

此处以封面出图过程为例 下面是dreambooth训练模型直出原图、然后进行一系列调整

inpaint + loopback 修改细节 (不知道为啥训的衣服老是破破烂烂的…)

搭配其他模型 和 hypernetwork 调整

成品

参考链接

dreambooth论文:https://dreambooth.github.io/

diffusers dreambooth文档:https://github.com/huggingface/diffusers/tree/main/examples/dreambooth

镜像作者文档:https://github.com/CrazyBoyM/dreambooth-for-diffusion

ai-draw文档:https://stable-diffusion-book.vercel.app/train/DreamBooth/

相关文章

    THE END
    喜欢就支持一下吧
    点赞8 分享
    评论 抢沙发
    头像
    欢迎您留下宝贵的见解!
    提交
    头像

    昵称

    取消
    昵称表情代码图片

      暂无评论内容