StableDiffusion/NAI DreamBooth自训练全教程

2023-10-26

原文: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

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

StableDiffusion/NAI DreamBooth自训练全教程 的相关文章

随机推荐

  • 【面试系列】反转链表II

    题意 原题链接 思路 先找到 L R L R L R 由于我们是翻转区间 L R
  • eclipse 下面的folder,source folder,package的区别与作用

    首先明确一点 folder source folder package都是文件夹 既然是文件夹 那么任何的文件都可以往这三种文件夹下面的放 1 他们的区别 folder就是普通的文件夹 它和我们window下面使用的文件夹没有任何区别 so
  • Java 面试知识点合集

    一 基础篇 1 1 java基础 1 面向对象的特征 封装 继承 多态 1 封装 属性能够描述事物的特征 方法能够描述事物的动作 封装就是把同一类事物的共性 包括属性和方法 归到同一类中 方便使用 封装的好处有 隐藏数据及实现细节 对每个属
  • web_servlet总结

    1 Web流程 1 1软件架构 1 C S 客户端 服务器端 cs架构建立在专用的网络上 一般面向相对固定的用户群 它可以对权限进行多层次校验 提供了更安全的存取模式 对信息安全的控制能力很强 2 B S 浏览器 服务器端 bs架构建立在广
  • 服务器千兆网络显示10,win10系统如何查看网卡是千兆还是百兆

    现在的很多新主板配备的都是千兆网络接口 可以更好的满足大宽带用户需求 但是对于win10系统用户来说 并不知道要如何查看网卡是千兆还是百兆 其实方法很简单 现在给大家分享一下win10系统查看网卡是千兆还是百兆的具体解决方法 方法一 1 在
  • 【 ST-LINK\ ST-LINK Utility下载,烧录,批处理操作\命令行】

    必看 必看 必看 下面概述了以下几个烧录软件下载安装 写程器接线 批处理操作内容较多耐心看完 J Falsh 可以称得上目前主流 能烧录目前80 主流芯片 STM32 ST LINK Utility ST系列芯片烧录超方便 ST系列 ST全
  • uview u-input 点击清除按钮,数据清空但视图未清空

    问题描述 点击 uview 的 u input 输入框自带的清除按钮 v model 绑定的数据清空了 但是输入框内还显示着之前的数据 解决方案 将 v model 绑定的值写到 data 初始变量中声明 原始代码
  • pandas的Excel文件读写(一)——组件要求与文件读取

    一 组件要求 实现pandas的Excel文件读写 除了安装pandas外 还需要安装下列组件 1 xlrd 从指定的xls格式文件中读取数据 2 xlwt 写入数据到指定的xls格式文件 3 openpyxl 支持xlsx格式文件的读写
  • 视频下载算法分析

    import random import re import time import requests from Crypto Cipher import AES from Crypto Util Padding import pad fr
  • centos7最小化安装发现没ifconfig命令解决方法

    1 安装的最小化版mini没有ifconfig这个命令 解决方法 yum y install net tools 出现图中错误 怀疑系统还不能上网导致 尝试ping114 114 114 114 如下图 果然不能ping通 的确是网络不通
  • CausalEGM安装使用

    1代码来源 github https github com SUwonglab CausalEGM tree main src pip Tutorial for Python Users CausalEGM documentation 安装
  • 2022.6.27小记

    1 不同页面件间锚点跳转 vue实现不同页面间锚点跳转 半塘潮汐的博客 CSDN博客 不同页面使用锚点 2 vue监听页面滚动距离 mounted window addEventListener scroll this handleScro
  • 玩转Mixly – 3、Arduino AVR编程 之 控制

    以下内容源自Mixly官方技术文档 https mixly readthedocs io zh CN latest Arduino AVR 02Control html 控制 控制类别中包括了时间延迟 条件执行 循环执行 获取运行时间 初始
  • java初中级面试题(SSM+Mysql+微服务(SpringCloud+Dubbo)+消息队列(RocketMQ)+缓存(Redis+MongoDB)+设计模式+搜索引擎(ES)+JVM

    目录 基础篇 一 Get 和 Post 的区别 二 Java 多态的具体体现 三 StringBuffer StringBuilder String 区别 四 和 equals 区别 五 重写 equals 需要重写 hashCode 吗
  • 二叉树:深度优先遍历与广度优先遍历(及其Python实现)

    二叉树 深度优先遍历与广度优先遍历 及其Python实现 本问记录二叉树的深度优先遍历算法和广度优先遍历算法的特点及其python实现 1 深度优先遍历 深度优先遍历算法包括先序遍历 中序遍历和后续遍历 1 1 深度优先遍历顺序 我们根据下
  • iOS进阶_密码学进阶(一.对称加密算法简介)

    加密算法 HASH 散列函数 不可逆 密码 识别 文件 识别 以下两种加密算法 都是可逆的 明文 gt 加密 gt 密文 密文 gt 解密 gt 明文 对称加密 传统加密算法 加密和解密使用同一个 密钥 密钥的保密工作就非常的重要 密钥会定
  • 我们在囧途之程序员转型记

    http blog csdn net shenyisyn article details 8485181 注 本文使用第一人称 原型取材于周围同事或民间 不代表作者本人 我在一个只有10人不到的小网络公司 我们公司的业务实在是单一的不能再单
  • FCGI协议的header解析

    FCGI协议的heade比较简单只有8个字节 其C语言定义格式如下 typedef struct unsigned char version 版本 unsigned char type 操作类型 unsigned char requestI
  • 多线程中内核对象人工重置和自动重置的区别

    在多线程编程中 要创建内核对象可以有两个选择 即可以将内核对象创建为人工重置方式 也可以创建为自动重置方式 人工重置方式的时候 一旦内核对象得到通知 所有等待该内核对象的线程都变为可调度线程 等待CPU分配时间 如果程序没有主动将该内核置为
  • StableDiffusion/NAI DreamBooth自训练全教程

    原文 StableDiffusion NAI DreamBooth自训练全教程 知乎 在正式教程之前 聊聊dreambooth的发展 帮大家理清一下思绪 dreambooth发展史 画了张图帮助大家理解dreambooth的发展史 drea