建设考试网站首页,阿里云网站备案后,阿里巴巴1688官网,c2c网站免费建设温馨提示
关于本文#xff1a;
本文你可以学习到完整的不使用webui借助lora和dreambooth微调Stable Diffusion的全过程。
手把手教你微调Stable Diffusion生成优弧#xff0c;但是半失败版#x1f602;
关于训练#xff1a; 单卡32GV100进行的微调#xff0c;因为一些…温馨提示
关于本文
本文你可以学习到完整的不使用webui借助lora和dreambooth微调Stable Diffusion的全过程。
手把手教你微调Stable Diffusion生成优弧但是半失败版
关于训练 单卡32GV100进行的微调因为一些训练策略显存只需要16G就够了。 训练用时一个半小时多一点点。根据自己显卡量力而行。 搞环境
先搞个虚拟环境
conda create -n youhu
conda activate youhu scipy
进入虚拟环境了。开搞。 因为我们是使用DreamBooth对Stable Diffusion进行微调所以先把Diffusion Model的库搞下来。
git clone https://github.com/huggingface/diffusers.git
下载成功之后你现在会看到多出来一个diffuser文件。 然后进入到这个文件夹了里。开始安排环境
pip install -e . 进入examples/dreambooth目录继续安排环境的依赖包
pip install -r requirements_sdxl.txt
pip install bitsandbytes xformers
配置一下accelerate的环境
accelerate config default 数据集
接下来就是准备几个你小子的图。放到examples/dreambooth目录下。 准备脚本
打开vim写个脚本代码下拉可以直接复制。
这个脚本是使用你刚才的图片通过Dreambooth微调Stable Diffusion模型。 export MODEL_NAME./stable-diffusion-xl-base-1.0
export INSTANCE_DIRyh
export OUTPUT_DIRlora-trained-xl
# export VAE_PATHmadebyollin/sdxl-vae-fp16-fixpython train_dreambooth_lora_sdxl.py \--pretrained_model_name_or_path$MODEL_NAME \--instance_data_dir$INSTANCE_DIR \--output_dir$OUTPUT_DIR \--instance_promptupper_body, 1 boy, glasses, youhu, nixiaozi \--resolution1024 \--train_batch_size1 \--gradient_accumulation_steps4 \--learning_rate1e-5 \--lr_schedulerconstant \--lr_warmup_steps0 \--max_train_steps500 \--validation_promptyouhu, nixiaozi \--validation_epochs25 \--seed0 \--enable_xformers_memory_efficient_attention \--gradient_checkpointing \--use_8bit_adam \# --mixed_precisionfp16 \# --pretrained_vae_model_name_or_path$VAE_PATH \
这里解释一下。这个脚本的主要目的是配置和运行一个Stable Diffusion模型的训练过程包括模型的参数设置、数据路径、学习率、批处理大小等。你可以根据自己的需求修改这些参数然后运行脚本来训练模型。 export MODEL_NAMEstabilityai/stable-diffusion-xl-base-1.0设置了一个名为 MODEL_NAME 的环境变量该变量指定了预训练模型的名称或路径。 export INSTANCE_DIRyh设置了一个名为 INSTANCE_DIR 的环境变量该变量指定了实例数据的目录或路径。 export OUTPUT_DIRlora-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_prompta photo of youhu设置了实例提示描述了输入数据的内容。 --resolution1024指定了训练过程中使用的分辨率。 --train_batch_size1指定了训练时的批量大小。 --gradient_accumulation_steps4指定了梯度累积的步数。 --learning_rate1e-5指定了学习率的初始值。 --lr_schedulerconstant选择了学习率调度器的类型这里是常数学习率。 --lr_warmup_steps0指定了学习率预热的步数。 --max_train_steps500指定了最大训练步数。 --validation_promptyouhu, ni xiao zi设置了验证提示描述了用于验证的输入数据的内容。 --seed0设置了随机种子以确保训练的可重复性。 --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 其他解决方法 给你服务器上搞个梯子开全局 本地缓存模型上传到服务器缓存
开始训练
bash train.sh 然后就等着他进度条就行了 到这样就是训练完了 开始生成
还是在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.0pipe DiffusionPipeline.from_pretrained(base_model_id, torch_dtypetorch.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_steps50).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_dtypetorch.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_steps50).images[0]通过管道生成一张图片。这里的字符串p是生成图片的提示而num_inference_steps25表示推理步骤的数量。image.save(f优弧{i}.png)将生成的图片保存为优弧{i}.png文件其中i是当前循环的索引号。
然后就是生成过程 结果图 发个勉强能看的。 失败原因分析 训练集不足且图片差异较大分辨率过低这个是主要原因。 以及训练过程和验证过程prompt差异较大 没换VAE因为madebyollin/sdxl-vae-fp16-fix实在是用不了。 这个模型本身效果就一般。
以上种种原因导致最后效果不尽人意。
毕竟别人用五张高清柯基训练出了比较好的柯基图。
训练集 结果 这里直接将该软件分享出来给大家吧~
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资料我已经打包好需要的点击下方添加即可前往免费领取