基于LoRA进行Stable Diffusion的微调

该文介绍了如何基于LoRA优化算法对StableDiffusion模型进行微调,使用LambdaLabs的Pokemon数据集,通过conda创建环境,下载并配置模型与数据,然后提供微调命令及参数设置。训练完成后,利用微调后的模型进行推理并保存结果图像。最后,部署WebUI展示模型并解决部署过程中遇到的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基于LoRA进行Stable Diffusion的微调

数据集

本次微调使用的数据集为: LambdaLabs的Pokemon数据集

使用git clone命令下载数据集

git clone https://huggingface.co/datasets/lambdalabs/pokemon-blip-captions

数据集一共883条样本,包含两个部分:image(图)和 text(文),如下图所示。
在这里插入图片描述

模型下载

git clone https://huggingface.co/runwayml/stable-diffusion-v1-5

环境配置

# 创建一个新的conda环境
conda create -n diffusers python==3.10
# 激活conda环境
conda activate diffusers
# 下载模型仓库
git clone https://github.com/huggingface/diffusers
# 进入diffusers目录
cd diffusers
# 进行安装
pip install .
cd examples/text_to_image
# 安装环境所需的包
pip install -r requirements.txt

微调过程

微调时只需要使用以下命令运行 train_text_to_image_lora.py 文件即可。需要根据下载的路径文件地址对相应的参数进行修改,如 MODEL_NAME、DATASET_NAME 等;也可以根据GPU资源调整相应的参数,如 train_batch_size、gradient_accumulation_steps 等。

export MODEL_NAME="/data/sim_chatgpt/stable-diffusion-v1-5"
export OUTPUT_DIR="./finetune/lora/pokemon"
export DATASET_NAME="./pokemon-blip-captions"

nohup accelerate launch --mixed_precision="fp16"  train_text_to_image_lora.py \
  --pretrained_model_name_or_path=$MODEL_NAME \
  --dataset_name=$DATASET_NAME \
  --dataloader_num_workers=8 \
  --resolution=512 --center_crop --random_flip \
  --train_batch_size=2 \
  --gradient_accumulation_steps=4 \
  --max_train_steps=7500 \
  --learning_rate=1e-04 \
  --max_grad_norm=1 \
  --lr_scheduler="cosine" --lr_warmup_steps=0 \
  --output_dir=${OUTPUT_DIR} \
  --checkpointing_steps=500 \
  --validation_prompt="Totoro" \
  --seed=1337 \
  >> finetune_log0725.out 2>&1 &

备注:参数设置参考这里,去掉了
export HUB_MODEL_ID=“pokemon-lora”
–push_to_hub
–hub_model_id=${HUB_MODEL_ID}
–report_to=wandb
样本数据量为883,这里设置了train_batch_size为2,max_train_steps为7500,
显存占用约11个G,训练时长约8个小时左右。
在这里插入图片描述
显存占用情况如下:
在这里插入图片描述

推理

微调完成后,可以使用下面代码进行推理。

from diffusers import StableDiffusionPipeline
import torch
model_path = "./finetune/lora/pokemon"
pipe = StableDiffusionPipeline.from_pretrained("/data/sim_chatgpt/stable-diffusion-v1-5", torch_dtype=torch.float16)
pipe.unet.load_attn_procs(model_path)
pipe.to("cuda")

prompt = "A pokemon with green eyes and red legs."
image = pipe(prompt, num_inference_steps=30, guidance_scale=7.5).images[0]
image.save("pokemon.png")      

代码运行后,会生成一个 pokemon.png 的图片,如下图所示。
在这里插入图片描述

WebUI部署

git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui

需要将原模型文件以及微调后的lora模型文件放到 ~/stable-diffusion-webui/models/Stable-diffusion 下

cp -r /data/sim_chatgpt/stable-diffusion-v1-5/v1-5-pruned.safetensors ~/stable-diffusion-webui/models/Stable-diffusion/v1-5-pruned.safetensors
mkdir ~/stable-diffusion-webui/models/Lora
cp -r ~/diffusers/examples/text_to_image/finetune/lora/pokemon/* ~/stable-diffusion-webui/models/Lora/

执行下面代码,即可完成部署。

./webui.sh --no-download-sd-model --xformers --no-gradio-queue

报错:

RuntimeError: Couldn’t install gfpgan.

解决办法:

python -m pip install https://github.com/TencentARC/GFPGAN/archive/8d2447a2d918f8eba5a4a01463fd48e45126a379.zip --prefer-binary --user

报错:

ERROR: No matching distribution found for tb-nightly

解决:阿里源没有tb-nightly这个包,更换成阿里源即可。

pip config set global.index-url https://mirrors.aliyun.com/pypi/simple

在这里插入图片描述

参考:
https://huggingface.co/blog/lora
https://huggingface.co/blog/zh/lora
https://github.com/AUTOMATIC1111/stable-diffusion-webui

### LoRA微调Stable Diffusion的方法及教程 #### 原理概述 Low-Rank Adaptation (LoRA) 是一种高效的模型参数调整方法,通过仅更新低秩矩阵来实现对大模型的快速微调。这种方法显著减少了训练所需的计算资源和时间成本[^1]。 在 Stable Diffusion 的上下文中,LoRA 主要用于优化扩散模型中的权重更新过程。具体来说,它不会直接修改原始模型的权重,而是引入一组额外的小型可学习参数(即低秩分解矩阵),这些参数可以高效存储并应用于推理阶段。 --- #### 实现流程 以下是基于现有工具链使用 LoRAStable Diffusion 进行微调的主要技术细节: ##### 1. 安装依赖环境 为了支持 LoRA 训练脚本运行,需安装必要的 Python 库以及特定框架的支持模块。通常情况下,推荐使用 `sd-scripts` 或其他社区开发的简化界面工具包完成配置工作[^2]。 ```bash pip install torch transformers accelerate diffusers datasets safetensors xformers git clone https://github.com/cloneofsimo/lora.git cd lora && pip install -r requirements.txt ``` 上述命令下载了官方或第三方维护的相关仓库文件,并设置了基础运行条件以便后续操作顺利开展。 ##### 2. 数据准备 高质量的数据集对于生成效果至关重要。用户可以根据实际需求收集图片素材或者利用公开可用数据源构建自定义类别样本集合。每张图像应附带描述性的文本标签作为输入提示词(phrases),从而引导网络理解目标概念特征。 例如,在目录结构方面建议遵循如下模式组织资料: ``` dataset/ ├── image_001.jpg ├── caption_image_001.txt # 内容为对应照片解释说明文字串 ├── ... └── image_nnn.png ``` ##### 3. 配置超参与启动训练进程 借助图形化管理面板如 PySide6 构建的应用程序能够极大地方便初学者上手实践。下面列举了一些关键设置项供参考选用: | 参数名称 | 含义 | |------------------|--------------------------------------------------------------------------------------| | learning_rate | 学习率大小决定了梯度下降速度,默认值可能设为较小数值比如 \(5e^{-6}\). | | rank | 控制增量部分维度规模;较低等级有助于节省内存消耗但可能会牺牲一定精度表现. | | num_train_epochs | 总迭代轮次数量直接影响收敛程度及时长安排 | 执行样例指令片段展示如何加载预处理后的实例参与正式环节: ```python from train_lora import parse_args, main args = parse_args() args.pretrained_model_name_or_path = "runwayml/stable-diffusion-v1-5" args.instance_data_dir = "./datasets/my_custom_set/" main(args) ``` 此处需要注意路径指向本地已准备好材料所在位置以及其他关联选项赋值准确性。 ##### 4. 导出成果评估性能 当整个周期结束后会保存最终版适配器权重至指定地址下。此时可以通过加载它们到原生架构上来验证改进之处是否满足预期标准。 --- ### 注意事项 尽管 LoRA 技术具备诸多优势特性,但在某些复杂场景里仍可能存在局限性。因此务必充分测试各种可能性组合方案找到最佳平衡点。 ---
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值