模型训练 #

训练概述 #

训练 Stable Diffusion 模型可以让模型学习新的风格、角色或概念,实现个性化生成。

text
┌─────────────────────────────────────────────────────────────┐
│                      训练方法对比                            │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  方法          文件大小    显存需求    训练时间    灵活性    │
│  ─────────────────────────────────────────────────────────  │
│  DreamBooth    2-6GB      16GB+      数小时     高         │
│  LoRA          10-200MB   8GB+       数小时     高         │
│  Textual Inv.  ~20KB      8GB+       数小时     中         │
│  Full Finetune 2-6GB      24GB+      数天       最高       │
│                                                             │
│  推荐选择:                                                  │
│  ├── 个人用户: LoRA                                         │
│  ├── 专业用户: DreamBooth 或 LoRA                           │
│  └── 研究/企业: Full Finetune                               │
│                                                             │
└─────────────────────────────────────────────────────────────┘

训练准备 #

硬件要求 #

text
硬件配置建议:

最低配置(LoRA 训练):
├── GPU: NVIDIA RTX 3060 12GB
├── 内存: 16GB
├── 存储: 50GB SSD
└── 训练时间: 2-4 小时

推荐配置:
├── GPU: NVIDIA RTX 3080/3090/4090
├── 显存: 16GB+
├── 内存: 32GB
├── 存储: 100GB+ NVMe SSD
└── 训练时间: 1-2 小时

专业配置:
├── GPU: NVIDIA A100 或多卡
├── 显存: 40GB+
├── 内存: 64GB+
├── 存储: 500GB+ NVMe SSD
└── 训练时间: 30分钟-1小时

软件环境 #

text
软件准备:

1. Python 环境
   ├── 版本: Python 3.10
   ├── 虚拟环境: venv 或 conda
   └── CUDA: 11.8 或 12.x

2. 训练工具
   ├── kohya_ss (推荐,图形界面)
   ├── sd-scripts (命令行)
   ├── LoRA Trainer (WebUI 扩展)
   └── SimpleTuner (高级)

3. 依赖库
   ├── PyTorch 2.0+
   ├── diffusers
   ├── transformers
   └── accelerate

安装示例:
# 创建环境
conda create -n sd-train python=3.10
conda activate sd-train

# 安装 PyTorch
pip install torch torchvision --index-url https://download.pytorch.org/whl/cu121

# 克隆训练工具
git clone https://github.com/kohya-ss/sd-scripts
cd sd-scripts
pip install -r requirements.txt

数据集准备 #

数据收集 #

text
数据收集指南:

角色 LoRA:
├── 数量: 15-30 张
├── 要求:
│   ├── 不同角度(正面、侧面、背面)
│   ├── 不同表情
│   ├── 不同服装(可选)
│   └── 高清晰度
└── 避免:
    ├── 重复图片
    ├── 低质量图片
    └── 过度滤镜

风格 LoRA:
├── 数量: 50-200 张
├── 要求:
│   ├── 风格一致
│   ├── 内容多样
│   ├── 高质量作品
│   └── 不同主题
└── 来源:
    ├── 艺术作品集
    ├── 插画网站
    └── 自己创作

概念 LoRA:
├── 数量: 20-50 张
├── 要求:
│   ├── 主题一致
│   ├── 不同场景
│   └── 清晰展示概念
└── 示例:
    ├── 特定服装
    ├── 特定发型
    └── 特定姿势

图片预处理 #

text
预处理步骤:

1. 统一格式
   ├── 格式: PNG 或 JPG
   ├── 色彩空间: RGB
   └── 去除元数据(可选)

2. 调整分辨率
   ├── 最小边: 512px
   ├── 推荐: 512×512 或 768×768
   └── 保持比例或裁剪

3. 质量筛选
   ├── 清晰度检查
   ├── 去除模糊图片
   └── 去除重复图片

4. 文件命名
   ├── 有序命名
   └── 例: 001.png, 002.png, ...

批量处理工具:
├── Photoshop 批处理
├── ImageMagick
├── Python PIL
└── BRISQUE 质量评估

图片标注 #

text
标注方法:

1. 自动标注
   ├── 使用 BLIP/DeepDanbooru
   ├── 生成初步描述
   └── 人工审核修正

2. 手动标注
   ├── 每张图片对应 .txt 文件
   ├── 描述图片内容
   └── 包含触发词

3. 标注内容
   ├── 触发词(必需)
   ├── 主要特征
   ├── 背景描述
   └── 风格描述

标注示例:
┌─────────────────────────────────────────────────────────────┐
│  图片: character_001.png                                    │
│                                                             │
│  标注文件: character_001.txt                                │
│  内容:                                                      │
│  ohwx character, silver hair, blue eyes,                    │
│  white dress, standing in garden, anime style,              │
│  highly detailed                                            │
│                                                             │
│  ohwx character 是触发词                                    │
│                                                             │
└─────────────────────────────────────────────────────────────┘

自动标注命令:
# 使用 BLIP
python finetune/make_captions.py --batch_size 8 /path/to/images

# 使用 DeepDanbooru
python finetune/tag_images_by_wd14_tagger.py --batch_size 8 /path/to/images

LoRA 训练 #

训练参数 #

text
核心训练参数:

Network Rank (维度):
├── 含义: LoRA 矩阵的秩
├── 范围: 4-256
├── 常用: 32, 64, 128
├── 影响:
│   ├── 越大表达能力越强
│   ├── 文件越大
│   └── 训练越慢
└── 推荐: 32-64 (角色), 64-128 (风格)

Network Alpha:
├── 含义: 缩放因子
├── 通常设为 Rank 或 Rank/2
├── 影响: 学习强度
└── 推荐: 等于 Rank

Learning Rate (学习率):
├── 含义: 参数更新步长
├── 常用: 1e-4 (0.0001)
├── 范围: 1e-5 到 1e-3
└── 调整策略:
    ├── 损失不下降: 降低
    └── 学习太慢: 提高

Epochs (训练轮数):
├── 含义: 完整遍历数据集次数
├── 角色: 10-20
├── 风格: 20-50
└── 需要实验调整

Batch Size:
├── 含义: 每次训练的图片数
├── 常用: 1-4
├── 显存允许可增大
└── 推荐: 1-2 (显存有限)

kohya_ss 训练 #

text
kohya_ss 图形界面训练:

1. 启动界面
   python kohya_gui.py

2. 设置路径
   ├── 模型: 预训练模型路径
   ├── 数据: 训练数据路径
   └── 输出: LoRA 保存路径

3. 配置参数
   ├── 选择 LoRA 类型
   ├── 设置 Rank/Alpha
   ├── 设置学习率
   └── 设置 Epochs

4. 开始训练
   └── 点击开始按钮

推荐配置:
┌─────────────────────────────────────────────────────────────┐
│  角色 LoRA 配置:                                            │
│  ├── Base Model: SD 1.5                                     │
│  ├── Rank: 32                                               │
│  ├── Alpha: 32                                              │
│  ├── Learning Rate: 1e-4                                    │
│  ├── Epochs: 15                                             │
│  ├── Batch Size: 2                                          │
│  └── 图片数: 20                                             │
│                                                             │
│  风格 LoRA 配置:                                            │
│  ├── Base Model: SD 1.5                                     │
│  ├── Rank: 64                                               │
│  ├── Alpha: 32                                              │
│  ├── Learning Rate: 5e-5                                    │
│  ├── Epochs: 30                                             │
│  ├── Batch Size: 2                                          │
│  └── 图片数: 100                                            │
└─────────────────────────────────────────────────────────────┘

命令行训练 #

text
sd-scripts 命令行训练:

训练命令示例:
accelerate launch --num_cpu_threads_per_process 8 train_network.py \
  --pretrained_model_name_or_path="/path/to/model" \
  --train_data_dir="/path/to/data" \
  --output_dir="/path/to/output" \
  --output_name="my_lora" \
  --save_model_as=safetensors \
  --prior_loss_weight=1.0 \
  --max_train_epochs=15 \
  --learning_rate=1e-4 \
  --optimizer_type="AdamW8bit" \
  --mixed_precision="fp16" \
  --network_module=networks.lora \
  --network_dim=32 \
  --network_alpha=32 \
  --train_batch_size=2 \
  --save_every_n_epochs=5

参数说明:
├── pretrained_model_name_or_path: 基础模型路径
├── train_data_dir: 训练数据路径
├── output_dir: 输出路径
├── network_dim: Rank
├── network_alpha: Alpha
└── max_train_epochs: 训练轮数

DreamBooth 训练 #

DreamBooth 概述 #

text
DreamBooth 特点:

优势:
├── 效果更强
├── 学习更充分
├── 适合角色训练
└── 无需大量数据

劣势:
├── 文件大 (2-6GB)
├── 显存需求高
├── 训练时间长
└── 可能过拟合

适用场景:
├── 需要最强效果
├── 角色一致性要求高
└── 有足够硬件资源

DreamBooth 训练流程 #

text
DreamBooth 训练步骤:

1. 准备数据
   ├── 实例图片: 5-20 张
   ├── 类别图片: 自动生成或手动准备
   └── 实例提示词: "a [class] [identifier]"

2. 设置参数
   ├── Instance prompt: "a sks person"
   ├── Class prompt: "a person"
   ├── Prior loss weight: 1.0
   └── Learning rate: 1e-6 到 5e-6

3. 训练
   ├── 使用 diffusers 或 sd-scripts
   └── 监控损失曲线

4. 测试和调整
   ├── 生成测试图像
   ├── 检查过拟合
   └── 调整参数重新训练

训练命令示例:
accelerate launch train_dreambooth.py \
  --pretrained_model_name_or_path="runwayml/stable-diffusion-v1-5" \
  --instance_data_dir="/path/to/instance" \
  --class_data_dir="/path/to/class" \
  --output_dir="/path/to/output" \
  --instance_prompt="a sks person" \
  --class_prompt="a person" \
  --num_class_images=200 \
  --train_batch_size=1 \
  --gradient_accumulation_steps=1 \
  --learning_rate=1e-6 \
  --lr_scheduler="constant" \
  --max_train_steps=800

训练优化 #

防止过拟合 #

text
过拟合表现:
├── 训练图像被完全记住
├── 无法泛化到新场景
├── 生成结果僵硬
└── 缺乏变化

防止方法:

1. 减少训练步数
   ├── 降低 Epochs
   └── 早停策略

2. 增加数据多样性
   ├── 更多训练图片
   ├── 不同场景和角度
   └── 数据增强

3. 调整学习率
   ├── 降低学习率
   └── 使用学习率调度

4. 使用正则化
   ├── Prior loss
   └── Dropout

5. 监控验证集
   └── 定期测试泛化能力

提高训练效果 #

text
效果优化策略:

1. 数据质量
   ├── 高质量图片
   ├── 清晰标注
   └── 多样性

2. 参数调优
   ├── 网格搜索
   ├── 经验值参考
   └── 逐步调整

3. 学习率调度
   ├── Constant: 恒定
   ├── Cosine: 余弦衰减
   └── Linear: 线性衰减

4. 优化器选择
   ├── AdamW: 默认
   ├── AdamW8bit: 省显存
   └── DAdaptation: 自适应

5. 混合精度
   ├── FP16: 推荐
   ├── BF16: 新显卡
   └── 减少显存占用

显存优化 #

text
显存优化技巧:

1. 使用 8bit 优化器
   └── AdamW8bit

2. 梯度检查点
   └── --gradient_checkpointing

3. 混合精度训练
   └── --mixed_precision="fp16"

4. 减小 Batch Size
   └── 配合梯度累积

5. 使用 xformers
   └── --xformers

6. 降低分辨率
   └── 512×512 而非更高

配置示例:
├── Batch Size: 1
├── Gradient Accumulation: 4
├── Mixed Precision: fp16
├── Optimizer: AdamW8bit
└── Gradient Checkpointing: True

训练后处理 #

模型测试 #

text
测试流程:

1. 基础测试
   ├── 使用触发词生成
   ├── 检查特征是否学到
   └── 测试不同权重

2. 泛化测试
   ├── 不同场景
   ├── 不同风格
   └── 不同提示词组合

3. 对比测试
   ├── 与原模型对比
   ├── 与其他 LoRA 对比
   └── 评估改进效果

4. 问题诊断
   ├── 过拟合: 减少训练
   ├── 欠拟合: 增加训练
   └── 风格冲突: 调整权重

模型优化 #

text
模型优化方法:

1. 权重剪枝
   ├── 减小文件大小
   └── 可能损失质量

2. 合并模型
   ├── 与基础模型合并
   └── 方便分发

3. 多版本对比
   ├── 保存多个检查点
   ├── 选择最佳版本
   └── 不同场景用不同版本

4. 元数据添加
   ├── 添加触发词信息
   ├── 添加训练参数
   └── 方便使用

常见问题 #

训练失败 #

text
常见错误及解决:

CUDA Out of Memory:
├── 减小 Batch Size
├── 使用 8bit 优化器
├── 开启混合精度
└── 降低分辨率

NaN Loss:
├── 降低学习率
├── 检查数据质量
├── 使用 FP32
└── 检查标注文件

训练不收敛:
├── 调整学习率
├── 检查数据标注
├── 增加训练步数
└── 更换优化器

效果不佳 #

text
效果优化建议:

特征不明显:
├── 增加训练步数
├── 提高学习率
├── 增加 Rank
└── 检查触发词使用

过拟合:
├── 减少训练步数
├── 降低学习率
├── 增加数据多样性
└── 使用 Prior Loss

风格冲突:
├── 调整权重
├── 修改提示词
├── 使用不同基础模型
└── 重新训练

下一步 #

掌握训练技术后,继续学习:

最后更新:2026-04-05