手把手教你微调Stable Diffusion

温馨提示

关于本文:

本文你可以学习到完整的不使用webui借助lora和dreambooth微调Stable Diffusion的全过程。

手把手教你微调Stable Diffusion生成优弧,但是半失败版😂

关于训练:

单卡32GV100进行的微调,因为一些训练策略显存只需要16G就够了。

image.png

训练用时一个半小时多一点点。根据自己显卡量力而行。

image.png


搞环境

先搞个虚拟环境:

conda create -n youhu

conda activate youhu scipy

进入虚拟环境了。开搞。

image.png

因为我们是使用DreamBooth对Stable Diffusion进行微调,所以先把Diffusion Model的库搞下来。

git clone https://github.com/huggingface/diffusers.git

下载成功之后你现在会看到多出来一个diffuser文件。

image.png

然后进入到这个文件夹了里。开始安排环境

pip install -e .

image.png

进入examples/dreambooth目录,继续安排环境的依赖包:

pip install -r requirements_sdxl.txt

pip install bitsandbytes xformers

配置一下accelerate的环境

accelerate config default

image.png

数据集

接下来就是准备几个你小子的图。放到examples/dreambooth目录下。

image.png

image.png

准备脚本

打开vim写个脚本,代码下拉可以直接复制。

这个脚本是使用你刚才的图片通过Dreambooth微调Stable Diffusion模型。

image.png

export MODEL_NAME="./stable-diffusion-xl-base-1.0"
export INSTANCE_DIR="yh"
export OUTPUT_DIR="lora-trained-xl"
# export VAE_PATH="madebyollin/sdxl-vae-fp16-fix"python train_dreambooth_lora_sdxl.py \--pretrained_model_name_or_path=$MODEL_NAME  \--instance_data_dir=$INSTANCE_DIR \--output_dir=$OUTPUT_DIR \--instance_prompt="upper_body, 1 boy, glasses, youhu, nixiaozi" \--resolution=1024 \--train_batch_size=1 \--gradient_accumulation_steps=4 \--learning_rate=1e-5 \--lr_scheduler="constant" \--lr_warmup_steps=0 \--max_train_steps=500 \--validation_prompt="youhu, nixiaozi" \--validation_epochs=25 \--seed="0" \--enable_xformers_memory_efficient_attention \--gradient_checkpointing \--use_8bit_adam \# --mixed_precision="fp16" \# --pretrained_vae_model_name_or_path=$VAE_PATH \

这里解释一下。这个脚本的主要目的是配置和运行一个Stable Diffusion模型的训练过程,包括模型的参数设置、数据路径、学习率、批处理大小等。你可以根据自己的需求修改这些参数,然后运行脚本来训练模型。

  1. export MODEL_NAME="stabilityai/stable-diffusion-xl-base-1.0":设置了一个名为 MODEL_NAME 的环境变量,该变量指定了预训练模型的名称或路径。

  2. export INSTANCE_DIR="yh":设置了一个名为 INSTANCE_DIR 的环境变量,该变量指定了实例数据的目录或路径。

  3. export OUTPUT_DIR="lora-trained-xl":设置了一个名为 OUTPUT_DIR 的环境变量,该变量指定了模型训练结果的输出目录或路径。

  4. python train_dreambooth_lora_sdxl.py 命令,它实际执行了模型训练的操作。以下是命令中的参数和选项的解释:

    • --pretrained_model_name_or_path=$MODEL_NAME:指定了预训练模型的名称或路径,使用了之前设置的 MODEL_NAME 环境变量。

    • --instance_data_dir=$INSTANCE_DIR:指定了实例数据的目录或路径,使用了之前设置的 INSTANCE_DIR 环境变量。

    • --output_dir=$OUTPUT_DIR:指定了模型训练结果的输出目录或路径,使用了之前设置的 OUTPUT_DIR 环境变量。

    • --instance_prompt="a photo of youhu":设置了实例提示,描述了输入数据的内容。

    • --resolution=1024:指定了训练过程中使用的分辨率。

    • --train_batch_size=1:指定了训练时的批量大小。

    • --gradient_accumulation_steps=4:指定了梯度累积的步数。

    • --learning_rate=1e-5:指定了学习率的初始值。

    • --lr_scheduler="constant":选择了学习率调度器的类型,这里是常数学习率。

    • --lr_warmup_steps=0:指定了学习率预热的步数。

    • --max_train_steps=500:指定了最大训练步数。

    • --validation_prompt="youhu, ni xiao zi":设置了验证提示,描述了用于验证的输入数据的内容。

    • --seed="0":设置了随机种子,以确保训练的可重复性。

    • --enable_xformers_memory_efficient_attention:启用了XFormers模块的内存效率注意力机制。

    • --gradient_checkpointing:启用了梯度检查点,以减少内存使用。

    • --use_8bit_adam:使用了8位Adam优化器,这可以提高训练速度。

    • 最后两行的注释部分是选项的注释, Stable Diffusion原装VAE存在数值不稳定的问题,因此hugging face官方一般都推荐换一个VAE模型。但是推荐的那个VAE模型实际使用起来有冲突,会一直报错。所以这里还是使用原装VAE吧。

缓存模型

接下来还不能直接运行。因为墙的原因,你的服务器没办法直接从抱抱脸上直接下载模型。所以我的建议是:

examples/dreambooth目录下建一个文件夹stable-diffusion-xl-base-1.0

image.png

其他解决方法:

  1. 给你服务器上搞个梯子,开全局

  2. 本地缓存模型,上传到服务器缓存

开始训练

bash train.sh

image.png

然后就等着他进度条就行了:

image.png

到这样就是训练完了:

image.png

开始生成

还是在examples/dreambooth目录下,搞一个python文件,我这里叫generate.py

直接复制下边的代码即可。

from diffusers import DiffusionPipeline
import torchlora_model_id = './lora-trained-xl/pytorch_lora_weights.safetensors'
base_model_id = "./stable-diffusion-xl-base-1.0"pipe = DiffusionPipeline.from_pretrained(base_model_id, torch_dtype=torch.float16)
pipe = pipe.to("cuda")
pipe.load_lora_weights(lora_model_id)prompt = ["youhu, ni xiao zi","youhu","ni xiao zi","ni xiao zi, youhu","a photo of youhu", "a photo of ni xiao zi"]for p in prompt:image = pipe(p, num_inference_steps=50).images[0]image.save(f"{p}.png")
  1. from diffusers import DiffusionPipeline:从diffusers模块导入DiffusionPipeline类。这个类提供了一个管道,用于执行扩散过程,这是生成图片的关键步骤。

  2. import torch:导入PyTorch库,这是一个用于深度学习的开源库。

  3. lora_model_id = './lora-trained-xl/pytorch_lora_weights.safetensors':定义一个变量来存储预训练模型的权重文件路径。

  4. base_model_id = "./stable-diffusion-xl-base-1.0":定义一个变量来存储基础模型的路径。

  5. pipe = DiffusionPipeline.from_pretrained(base_model_id, torch_dtype=torch.float16):使用基础模型的路径加载预训练的扩散管道,并设置数据类型为float16。

  6. pipe = pipe.to("cuda"):将管道移动到GPU设备上进行计算。

  7. pipe.load_lora_weights(lora_model_id):加载预训练模型的权重到管道中。

  8. prompt = ["youhu, ni xiao zi","youhu","ni xiao zi","ni xiao zi, youhu","a photo of youhu", "a photo of ni xiao zi"]:定义一个列表,包含了多个生成图片的提示。

  9. for p in prompt::对提示列表进行遍历,每次循环处理一个提示。

    • image = pipe(p, num_inference_steps=50).images[0]:通过管道生成一张图片。这里的字符串p是生成图片的提示,而num_inference_steps=25表示推理步骤的数量。
    • image.save(f"优弧{i}.png"):将生成的图片保存为优弧{i}.png文件,其中i是当前循环的索引号。

然后就是生成过程:

image.png

结果图

image.png

发个勉强能看的。😂

image.png

失败原因分析:

  1. 训练集不足,且图片差异较大,分辨率过低(这个是主要原因)。

  2. 以及训练过程和验证过程prompt差异较大

  3. 没换VAE(因为madebyollin/sdxl-vae-fp16-fix)实在是用不了。

  4. 这个模型本身效果就一般。

以上种种原因导致最后效果不尽人意😂。

毕竟别人用五张高清柯基,训练出了比较好的柯基图。

训练集:

image.png

结果:

image.png

这里直接将该软件分享出来给大家吧~

1.stable diffusion安装包

随着技术的迭代,目前 Stable Diffusion 已经能够生成非常艺术化的图片了,完全有赶超人类的架势,已经有不少工作被这类服务替代,比如制作一个 logo 图片,画一张虚拟老婆照片,画质堪比相机。

最新 Stable Diffusion 除了有win多个版本,就算说底端的显卡也能玩了哦!此外还带来了Mac版本,仅支持macOS 12.3或更高版本

在这里插入图片描述

2.stable diffusion视频合集

我们在学习的时候,往往书籍源码难以理解,阅读困难,这时候视频教程教程是就很适合了,生动形象加上案例实战,一步步带你入坑stable diffusion,科学有趣才能更方便的学习下去。

在这里插入图片描述

3.stable diffusion模型下载

stable diffusion往往一开始使用时图片等无法达到理想的生成效果,这时则需要通过使用大量训练数据,调整模型的超参数(如学习率、训练轮数、模型大小等),可以使得模型更好地适应数据集,并生成更加真实、准确、高质量的图像。

在这里插入图片描述

4.stable diffusion提示词

提示词是构建由文本到图像模型解释和理解的单词的过程。可以把它理解为你告诉 AI 模型要画什么而需要说的语言,整个SD学习过程中都离不开这本提示词手册。

在这里插入图片描述

5.SD从0到落地实战演练

在这里插入图片描述

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名SD大神的正确特征了。

这份完整版的stable diffusion资料我已经打包好,需要的点击下方添加,即可前往免费领取!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/834862.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【leetcode】数学位数题总结

涉及题型:两数相加问题、大数溢出等 相加问题 根据题意定义rs的数据结构判断是存储方式是正序还是逆序,如果是正序需要反转 比如 123 12 135是正序, 321 21 135是逆序反转的方式:对于可以从后往前遍历的(如字符串…

高效工作之软件系统——数据结构登记表

数据结构模板 开发完软件系统后,往往需要进行一些登记——《软件系统数据结构登记表》 然后软件项目有60个表左右,难道需要手动录入,那肯定不可能 工欲善其事必先利其器!go。。。同事给的模板是下图 效果图 于是想到 之前使用…

【mysql】mysql导入导出数据详解

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

初中都没念完的我,是怎么从IT这行坚持下去的...

大家好,我是一名二线(伪三线,毕竟连续两年二线城市了)的程序员。 现阶段状态在职,28岁,工作了10年左右,码农从事了5年左右,现薪资9k左右。如文章标题所说,初二辍学&…

AVL树的原理及其实现

文章目录 前言了解AVL树AVL树的特点AVL树的节点调整方案右单旋为什么要右单旋呢?右单旋代码 左单旋为什么要左单旋?左单旋代码 左右双旋左右双旋之后平衡因子的情况左右双旋代码实现 右左双旋右左双旋代码: 简单测试 前言 回顾我们对于二叉搜…

Altman确认:神秘Chatbot非GPT-4.5,OpenAI搜索引擎即将上线

🚀 Altman确认:神秘Chatbot非GPT-4.5,OpenAI搜索引擎即将上线 摘要:近日,Sam Altman在哈佛大学的演讲中确认,引发广泛猜测的gpt2-chatbot并非OpenAI即将发布的下一代模型GPT-4.5。与此同时,关于…

亚信安慧AntDB:解锁数智化的新时代

亚信安慧AntDB的融合实时的特性使得它在数据库领域独树一帜。传统的数据库系统往往只能追求数据的准确性和一致性,但在实际的业务场景中,这些特性并不能满足企业的需求。AntDB的出现打破了传统束缚,为企业带来了全新的数据处理方式&#xff0…

低代码审计作业平台:引领企业实现审计高效革命

随着信息化时代的深入发展,审计工作面临着前所未有的挑战与机遇。传统的审计方式往往繁琐复杂,效率低下,已无法满足现代企业对高效、准确、智能的审计需求。在这样的背景下,审计作业低代码平台应运而生,以其独特的优势…

B/S模式的web通信(高并发服务器)

这里写目录标题 目标实现的目标 服务器代码(采用epoll实现服务器)整体框架main函数init_listen_fd函数(负责对lfd初始化的那一系列操作)epoll_run函数do_accept函数do_read函数内容补充:http中的getline函数 详解do_re…

【C++初阶】第十站:vector 中通用函数的模拟实现

目录 vector中的三个重要迭代器 默认成员函数 构造函数(无参构造) 构造函数(函数模板) 构造函数(带有默认参数) size_t int 拷贝构造函数 赋值重载 析构函数 迭代器相关函数 begin和end 容量和大小相关函数 size capacity resize 修改容器内容相关函数 reser…

不想让Win系统更新,那就让它暂停一万年

按照下图所示进行操作 winR 输入 regedit,进入注册表编辑器 随后依次点击 HKEY_LOCAL_MACHINE ⬇ SOFTWARE ⬇ Microsoft ⬇ WindowsUpdate ⬇ UX ⬇ Settings 最后在右侧空白处 文件类型 新建DWORD(32位)值(D) 命名…

PyQt5的布局管理

文章目录 1.垂直布局和水平布局垂直布局(QVBoxLayout):水平布局(QHBoxLayout): 2. 布局中的addStrech2.1 我们首先看只有一个Strech的情况,比较容易理解2.2 两个Strech2.3 多个Strech 3.栅格布局…

FPGA HDMI Sensor无线航模摄像头

FPGA方案,接收摄像头sensor 图像数据后,通过HDMI输出到后端 客户应用:无线航模摄像头 主要特性: 1.支持2K以下任意分辨率格式 2.支持多种型号sensor 3.支持自适应摄像头配置,并补齐输出时序 4.可定制功能&#xff…

OpenHarmony 实战开发(南向)-Docker编译环境搭建

Docker环境介绍 OpenHarmony为开发者提供了两种Docker环境,以帮助开发者快速完成复杂的开发环境准备工作。两种Docker环境及适用场景如下: 独立Docker环境:适用于直接基于Ubuntu、Windows操作系统平台进行版本编译的场景。 基于HPM的Docker…

【ArcGIS Pro微课1000例】0058:玩转NetCDF多维数据集

一、NetCDF介绍 NetCDF(network Common Data Form)网络通用数据格式是由美国大学大气研究协会(University Corporation for Atmospheric Research,UCAR)的Unidata项目科学家针对科学数据的特点开发的,是一种面向数组型并适于网络共享的数据的描述和编码标准。NetCDF广泛应…

【Java】Java中栈溢出的常见情况及解决方法

人不走空 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌赋:斯是陋室,惟吾德馨 目录 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌…

Linux实验二:文件IO操作

目录 一、实验目的二、实验内容三、实验环境四、参考代码五、实验步骤步骤1. 编辑程序源代码test2.c步骤2. 编译源代码test2.c步骤3. 编辑源文件alice.txt步骤4. 运行程序test2 六、实验结果七、实验总结 一、实验目的 1、掌握Linux中系统调用、文件描述符的基本概念&#xff…

docker-compose管理jenkins

1.安装docker和compose 1.docker 更新系统:yum update 安装依赖项:yum install -y yum-utils device-mapper-persistent-data lvm2 配置镜像源:yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce…

5.12母亲节营销攻略:TikTok助力出海品牌赢得用户心

母亲节,作为一个全球性的节日,不仅是表达对母亲的感激之情的时刻,也是品牌们展示创意、赢得用户心的黄金机会。2024母亲节将至,如何利用TikTok在母亲节这一特殊时刻进行营销,赢得用户的心,成为出海品牌必须…

AWS-TGW同区域多vpc打通

同区域vpc打通方案配置 跨区域参考另一个博客 点我跳转 vpc110.30.0.0/16实例110.30.4.178 vpc2172.31.0.0/16实例2172.31.43.180 1. 新建tgw 默认配置即可 2.创建挂载,两个vpc打通就需要创建2个挂载 3. 观察tgw的路由规则 等待挂载完全创建完成后,会…