Stable Diffusion 训练流程概览
- 训练目标是让模型学会在“潜在空间”里从随机噪声逐步去噪,生成与文本描述一致的图像。整体流程包括:数据与文本编码、潜在空间映射、加噪与去噪训练、参数优化与EMA、验证与推理。训练通常在预训练权重基础上进行(如SD v1-4/v1-5),以降低门槛并加速收敛。
训练流程步骤
- 数据与文本编码
- 收集图像-文本对,图像统一到固定分辨率(常用512×512),做中心裁剪、随机翻转等增强;文本使用CLIP等编码器生成嵌入作为条件。
- 潜在空间映射
- 用VAE把图像编码为潜在表示 z(通道常为4,空间分辨率约为原图的 1/8),训练时主要在潜在空间加噪与去噪,提高效率。
- 噪声调度与加噪
- 选定噪声调度器(如DDPM/DDIM/LMS),在 T 个时间步内按调度系数逐步向潜在表示加噪,得到 x_t。
- 去噪训练(核心)
- 将潜在噪声 x_t、时间步 t、文本嵌入一起送入UNet预测噪声 ε_θ;优化目标是最小化预测噪声与真实噪声的均方误差(MSE):L = E[||ε − ε_θ(x_t, t, c_text)||²]。
- 参数优化与EMA
- 使用AdamW等优化器与学习率调度;启用EMA(指数移动平均)提升泛化与稳定性。
- 验证与推理
- 定期用验证集/生成样本检查过拟合与质量;推理时从高斯噪声出发,按调度逐步去噪生成图像,再用VAE解码回像素空间。
训练方式与资源要点
- 全量微调(Full Fine-tuning)
- 训练范围:更新UNet/文本编码器/VAE的大部分或全部参数;效果上限高,但资源消耗大。
- 资源建议:单卡显存常见需≥24GB(如 A100 等),配合混合精度 fp16、梯度累积、梯度检查点可显著降低显存占用。
- LoRA(Low-Rank Adaptation)
- 训练范围:仅训练注入的低秩矩阵,冻结原模型;模型增量通常几MB到几十MB,显存需求低(常见≥8–12GB可起步),适合风格/主体快速适配。
- DreamBooth
- 训练范围:少量样本(如3–5张主体图)个性化主体,同时做类别保真正则;显存需求较高,工程上常需≥16GB并精细调参。
- Textual Inversion(Embedding)
- 训练范围:学习一组“词向量”来表征新概念,不改动模型权重;轻量但表达力有限,复杂结构/新内容可能难以学到。
- 硬件与加速
- 推荐 NVIDIA GPU;使用xFormers优化注意力、Accelerate分布式/混合精度、gradient_checkpointing节省显存。
关键超参数与常用命令示例
- 常用超参数
- 分辨率:常用512×512(或768×768用于更高清任务)
- 批量与累积:如 batch_size=1 + gradient_accumulation_steps=4(显存不足时常用)
- 学习率:全量微调常见1e-5;LoRA常见1e-4
- 训练步数:小规模数据集可从1万–1.5万步起步观察效果
- 正则与加速:EMA、gradient_checkpointing、mixed_precision=fp16
- 进阶:如Min-SNR 加权(--snr_gamma)可加速收敛、提升稳定性
- 命令示例(全量微调,Hugging Face Diffusers)
- accelerate launch --mixed_precision="fp16" train_text_to_image.py \
--pretrained_model_name_or_path="CompVis/stable-diffusion-v1-4" \
--dataset_name="lambdalabs/naruto-blip-captions" \
--resolution=512 --center_crop --random_flip \
--train_batch_size=1 --gradient_accumulation_steps=4 \
--gradient_checkpointing --learning_rate=1e-5 \
--max_train_steps=15000 --use_ema --output_dir="sd-model-finetuned"
- 命令示例(LoRA 微调)
- accelerate launch --mixed_precision="fp16" train_text_to_image_lora.py \
--pretrained_model_name_or_path="CompVis/stable-diffusion-v1-4" \
--dataset_name="lambdalabs/naruto-blip-captions" \
--resolution=512 --train_batch_size=1 \
--learning_rate=1e-4 --num_train_epochs=100 \
--output_dir="sd-model-lora"
数据规范与训练技巧
- 数据规范
- 图像清晰、无水印,统一为RGB与固定分辨率(如512×512);文本简洁明确、与图像高度对应;建议做中心裁剪/随机翻转等增强;按8:2划分训练/验证集。
- 训练技巧
- 监控训练/验证损失曲线,若验证损失持续上升,考虑减小学习率、增强正则或提前停止;使用混合精度与梯度累积在有限显存下提升有效批量;必要时启用Min-SNR等策略改善收敛与质量。