手把手教你微调Stable Diffusion

手把手教你微调Stable Diffusion

温馨提示

关于本文:

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

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

关于训练:

单卡32GV100进行的微调,因为一些训练策略显存只需要16G就够了。
www.zeeklog.com  - 手把手教你微调Stable Diffusion
训练用时一个半小时多一点点。根据自己显卡量力而行。
www.zeeklog.com  - 手把手教你微调Stable Diffusion

搞环境

先搞个虚拟环境:

conda create -n youhu

conda activate youhu scipy

进入虚拟环境了。开搞。

www.zeeklog.com  - 手把手教你微调Stable Diffusion

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

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

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

www.zeeklog.com  - 手把手教你微调Stable Diffusion

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

pip install -e .

www.zeeklog.com  - 手把手教你微调Stable Diffusion

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

pip install -r requirements_sdxl.txt

pip install bitsandbytes xformers

配置一下accelerate的环境

accelerate config default

www.zeeklog.com  - 手把手教你微调Stable Diffusion

数据集

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

www.zeeklog.com  - 手把手教你微调Stable Diffusion
www.zeeklog.com  - 手把手教你微调Stable Diffusion

准备脚本

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

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

www.zeeklog.com  - 手把手教你微调Stable Diffusion
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模型的训练过程,包括模型的参数设置、数据路径、学习率、批处理大小等。你可以根据自己的需求修改这些参数,然后运行脚本来训练模型。

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

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

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

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

www.zeeklog.com  - 手把手教你微调Stable Diffusion

其他解决方法:

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

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

开始训练

bash train.sh

www.zeeklog.com  - 手把手教你微调Stable Diffusion

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

www.zeeklog.com  - 手把手教你微调Stable Diffusion

到这样就是训练完了:

www.zeeklog.com  - 手把手教你微调Stable Diffusion

开始生成

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

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

from diffusers import DiffusionPipeline
import torch

lora_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")

from diffusers import DiffusionPipeline:从diffusers模块导入DiffusionPipeline类。这个类提供了一个管道,用于执行扩散过程,这是生成图片的关键步骤。

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

lora_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):使用基础模型的路径加载预训练的扩散管道,并设置数据类型为float16。

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

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

然后就是生成过程:

www.zeeklog.com  - 手把手教你微调Stable Diffusion

结果图

www.zeeklog.com  - 手把手教你微调Stable Diffusion

发个勉强能看的。😂

www.zeeklog.com  - 手把手教你微调Stable Diffusion

失败原因分析:

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

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

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

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

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

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

训练集:

www.zeeklog.com  - 手把手教你微调Stable Diffusion

结果:

www.zeeklog.com  - 手把手教你微调Stable Diffusion

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

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

www.zeeklog.com  - 手把手教你微调Stable Diffusion

1.stable diffusion安装包

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

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

www.zeeklog.com  - 手把手教你微调Stable Diffusion

2.stable diffusion视频合集

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

www.zeeklog.com  - 手把手教你微调Stable Diffusion

3.stable diffusion模型下载

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

www.zeeklog.com  - 手把手教你微调Stable Diffusion

4.stable diffusion提示词

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

www.zeeklog.com  - 手把手教你微调Stable Diffusion

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

www.zeeklog.com  - 手把手教你微调Stable Diffusion

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

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

www.zeeklog.com  - 手把手教你微调Stable Diffusion

Read more

在 Mac Mini M4 上本地跑大模型(Ollama + Llama + ComfyUI + Stable Diffusion | Flux)

在 Mac Mini M4 上本地跑大模型(Ollama + Llama + ComfyUI + Stable Diffusion | Flux)

Mac Mini M4 配备了苹果自家研发的 M1/M2/M4 芯片,具有强大的处理能力,能够支持本地跑一些大模型,尤其是在使用如 Ollama、Llama、ComfyUI 和 Stable Diffusion 这类 AI 相关工具时,性能表现非常好。本教程将指导你如何在 Mac Mini M4 上本地部署并运行这些大模型,涵盖从环境搭建到使用的全流程。 一、准备工作 1. 确保系统更新 确保你的 macOS 版本已更新到最新的版本(例如 macOS 13.0 以上),这将确保兼容性和性能。 安装 Homebrew(macOS 包管理工具) Homebrew 是 macOS 上非常流行的包管理工具,它帮助你方便地安装各种软件。在终端中输入以下命令来安装

Kafka ISR与AR深度解析:副本同步机制核心概念

Kafka ISR与AR深度解析:副本同步机制核心概念

Kafka ISR与AR深度解析:副本同步机制核心概念 * 一、核心概念定义 * 1.1 AR:分区的所有副本 * 1.2 ISR:与Leader保持同步的副本 * 1.3 官方定义 * 二、ISR的判定标准 * 2.1 同步的判断条件 * 2.2 关键参数 * 2.3 ISR的动态变化 * 三、ISR的核心作用 * 3.1 作用一:Leader选举的选民池 * 3.2 作用二:消息确认的基准 * 3.3 作用三:保证数据一致性 * 四、AR与ISR的关系图解 * 4.1 集合关系图 * 4.2 公式表示 * 4.

Docker 安装 Neo4j 保姆级教程

Docker 安装 Neo4j 保姆级教程 本教程适用于零基础用户,详细讲解如何在 Windows 或 Linux 环境下通过 Docker 安装并配置 Neo4j 图数据库。 Neo4j 官方 Docker 文档 1. 环境准备 * 已安装 Docker(Docker Desktop 官网) * Linux 和 Windows 均可 2. 创建挂载目录 在宿主机上新建以下目录,用于数据持久化和配置挂载(以 Linux 为例,Windows 可用资源管理器新建文件夹): mkdir -p /home/neo4j/data /home/neo4j/logs /home/neo4j/conf /home/

如何用腾讯云轻量应用服务器内置OpenClaw应用搭建OpenClaw并接入QQ、飞书机器人,下载skill,开启对话

如何用腾讯云轻量应用服务器内置OpenClaw应用搭建OpenClaw并接入QQ、飞书机器人,下载skill,开启对话

诸神缄默不语-个人技术博文与视频目录 如需OpenClaw下载安装、配置、部署服务可以联系:https://my.feishu.cn/share/base/form/shrcnqjFuoNiBPXjADvRhiUcB1B 我发现腾讯云买服务器可以用QQ钱包,这不得狠狠把我多年来抢的红包狠狠利用一下。 OpenClaw我之前玩了几天,现在把gateway关了,因为我感觉第一是感觉AI对于一些细微的执行逻辑还是绕不明白,而且API太慢了等得我着急,慢得我都不知道它是死了还是只是慢,不如我直接一个古法编程下去开发一个自己的工具。我本来是想拿OpenClaw当时间管理助手的,但是研究了一番感觉它作为整个人完整的时间/项目/文件系统/财务/生活管理助手的潜力还是很大的。但是,也就仅止于潜力了,跟OpenClaw绕记账怎么记实在是把我绕火大了……第二,正如网上一直宣传的那样,这玩意太耗token了,我的混元和Qwen免费额度几乎都秒爆,GLM也给我一下子烧了一大笔。我觉得这不是我的消费水平该玩的东西……主要我也确实没有什么用OpenClaw赚大钱的好idea。 但是我仍然觉得OpenClaw