本教程针对有一定深度学习基础的开发者,详细讲解如何使用LoRA轻量化微调Stable Diffusion模型,实现自定义艺术风格的图像生成。从环境搭建、数据集制作到训练配置、推理验证,全程提供可落地的实操步骤,帮助你快速打造专属风格的图像生成模型。
学习步骤
环境搭建与依赖配置
1. 创建并激活conda虚拟环境:
conda create -n sd-lora python=3.10
conda activate sd-lora
2. 安装PyTorch及CUDA依赖(根据自身CUDA版本调整):
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
3. 安装Diffusers、Transformers等核心库:
pip install diffusers[training] transformers accelerate datasets peft evaluate tensorboard
4. 验证环境:运行python -c "import torch; print(torch.cuda.is_available())",输出True则环境配置成功。自定义风格数据集准备
1. 数据集要求:收集20-50张目标风格的高清图像(分辨率建议512×512),例如梵高风格油画、国风插画等;
2. 数据集结构:创建文件夹`custom_style_dataset`,将图像放入其中,同时为每张图像创建对应的文本描述文件(如image01.txt),内容为图像的风格描述(例如"a painting in Van Gogh's starry night style");
3. 加载数据集:使用Hugging Face Datasets库加载本地数据集,代码示例:
```python
from datasets import load_dataset
dataset = load_dataset("imagefolder", data_dir="custom_style_dataset")
```
4. 数据预处理:添加图像缩放、归一化等预处理步骤,确保输入符合模型要求。LoRA微调参数配置
1. 选择LoRA微调策略:LoRA通过冻结主模型权重,仅训练低秩适配层,大幅降低显存占用;
2. 配置LoRA参数:设置r=8(秩大小)、lora_alpha=16、lora_dropout=0.05,针对Stable Diffusion的UNet部分进行微调;
3. 训练参数设置:设置学习率为1e-4,批次大小batch_size=4,训练轮数num_train_epochs=5,梯度累积步数gradient_accumulation_steps=2;
4. 日志与保存配置:指定模型保存路径`./lora-custom-style`,开启TensorBoard日志记录。执行LoRA微调训练
1. 使用Diffusers提供的训练脚本:下载官方train_text_to_image_lora.py脚本(可从Hugging Face Diffusers仓库获取);
2. 运行训练命令:
```bash
accelerate launch train_text_to_image_lora.py \
--pretrained_model_name_or_path=runwayml/stable-diffusion-v1-5 \
--dataset_name=./custom_style_dataset \
--output_dir=./lora-custom-style \
--resolution=512 \
--train_batch_size=4 \
--num_train_epochs=5 \
--learning_rate=1e-4 \
--lr_scheduler="cosine" \
--lr_warmup_steps=0 \
--validation_prompt="a cat in Van Gogh's starry night style" \
--seed=42
```
3. 监控训练过程:通过TensorBoard查看损失曲线,验证生成图像的风格变化。微调模型推理与效果验证
1. 加载微调后的LoRA模型:
```python
from diffusers import StableDiffusionPipeline
import torch
pipe = StableDiffusionPipeline.from_pretrained("runwayml/stable-diffusion-v1-5", torch_dtype=torch.float16).to("cuda")
pipe.load_lora_weights("./lora-custom-style")
```
2. 生成自定义风格图像:
```python
prompt = "a dog in Van Gogh's starry night style"
image = pipe(prompt).images[0]
image.save("custom_style_dog.png")
```
3. 效果对比:分别用原始模型和微调后的模型生成相同prompt的图像,对比风格差异,调整训练轮数或数据集优化效果。模型导出与快速部署
1. 导出LoRA权重:将训练好的LoRA权重导出为单独的.safetensors文件,方便在其他平台使用;
2. 搭建Gradio演示界面:
```python
import gradio as gr
def generate_image(prompt):
image = pipe(prompt).images[0]
return image
iface = gr.Interface(fn=generate_image, inputs="text", outputs="image", title="自定义风格图像生成器")
iface.launch()
```
3. 部署到云端:可将Gradio应用部署到Hugging Face Spaces或阿里云ECS,实现公网访问。
Stable Diffusion LoRA微调实战全流程
一、环境搭建与依赖配置
1. 创建并激活conda虚拟环境:
conda create -n sd-lora python=3.10
conda activate sd-lora
2. 安装PyTorch及CUDA依赖(根据自身CUDA版本调整):
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
3. 安装Diffusers、Transformers等核心库:
pip install diffusers[training] transformers accelerate datasets peft evaluate tensorboard
4. 验证环境:运行python -c "import torch; print(torch.cuda.is_available())",输出True则环境配置成功。
二、自定义风格数据集准备
1. 数据集要求:收集20-50张目标风格的高清图像(分辨率建议512×512),例如梵高风格油画、国风插画等;
2. 数据集结构:创建文件夹`custom_style_dataset`,将图像放入其中,同时为每张图像创建对应的文本描述文件(如image01.txt),内容为图像的风格描述(例如"a painting in Van Gogh's starry night style");
3. 加载数据集:使用Hugging Face Datasets库加载本地数据集,代码示例:
from datasets import load_dataset
dataset = load_dataset("imagefolder", data_dir="custom_style_dataset")4. 数据预处理:添加图像缩放、归一化等预处理步骤,确保输入符合模型要求。
三、LoRA微调参数配置
1. 选择LoRA微调策略:LoRA通过冻结主模型权重,仅训练低秩适配层,大幅降低显存占用;
2. 配置LoRA参数:设置r=8(秩大小)、lora_alpha=16、lora_dropout=0.05,针对Stable Diffusion的UNet部分进行微调;
3. 训练参数设置:设置学习率为1e-4,批次大小batch_size=4,训练轮数num_train_epochs=5,梯度累积步数gradient_accumulation_steps=2;
4. 日志与保存配置:指定模型保存路径`./lora-custom-style`,开启TensorBoard日志记录。
四、执行LoRA微调训练
1. 使用Diffusers提供的训练脚本:下载官方train_text_to_image_lora.py脚本(可从Hugging Face Diffusers仓库获取);
2. 运行训练命令:
accelerate launch train_text_to_image_lora.py \ --pretrained_model_name_or_path=runwayml/stable-diffusion-v1-5 \ --dataset_name=./custom_style_dataset \ --output_dir=./lora-custom-style \ --resolution=512 \ --train_batch_size=4 \ --num_train_epochs=5 \ --learning_rate=1e-4 \ --lr_scheduler="cosine" \ --lr_warmup_steps=0 \ --validation_prompt="a cat in Van Gogh's starry night style" \ --seed=42
3. 监控训练过程:通过TensorBoard查看损失曲线,验证生成图像的风格变化。
五、微调模型推理与效果验证
1. 加载微调后的LoRA模型:
from diffusers import StableDiffusionPipeline
import torch
pipe = StableDiffusionPipeline.from_pretrained("runwayml/stable-diffusion-v1-5", torch_dtype=torch.float16).to("cuda")
pipe.load_lora_weights("./lora-custom-style")2. 生成自定义风格图像:
prompt = "a dog in Van Gogh's starry night style"
image = pipe(prompt).images[0]
image.save("custom_style_dog.png")3. 效果对比:分别用原始模型和微调后的模型生成相同prompt的图像,对比风格差异,调整训练轮数或数据集优化效果。
六、模型导出与快速部署
1. 导出LoRA权重:将训练好的LoRA权重导出为单独的.safetensors文件,方便在其他平台使用;
2. 搭建Gradio演示界面:
import gradio as gr
def generate_image(prompt):
image = pipe(prompt).images[0]
return image
iface = gr.Interface(fn=generate_image, inputs="text", outputs="image", title="自定义风格图像生成器")
iface.launch()3. 部署到云端:可将Gradio应用部署到Hugging Face Spaces或阿里云ECS,实现公网访问。