当前位置:   article > 正文

StableDiffusion/NAI DreamBooth自训练全教程_stablediffusion dream booth

stablediffusion dream booth

原文: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上提供的公开镜像来创建实例进行训练 (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) 创建过程大概几分钟左右
  • 远程连接上刚才创建的服务器 (下面介绍两种方式 任选一种)
  • 路径调整
    • 把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"

数据集准备

  • 同 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 name
    • instant_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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/429944
推荐阅读
相关标签
  

闽ICP备14008679号