SDXL角色一致性:我用LoRA训练的实战经验

> 📅 2026年6月2日 | 厦门 | 用AI画了3000张图后的碎碎念
---
背景
我做AI漫剧快半年了,最大的痛点一直是角色一致性——同一个角色在第一集和第10集长得不一样,观众吐槽说"这人怎么每集都在整容"。
去年试过用参考图+ControlNet,效果不稳定。今年开始用LoRA训练,终于解决了角色一致性问题。但LoRA训练的坑,比我想象的多得多。
---
为什么选LoRA而不是Dreambooth
| 维度 | LoRA | Dreambooth |
|------|------|------------|
| 训练时间 | 15-30分钟 | 1-2小时 |
| 模型大小 | 10-50MB | 2-6GB |
| 显存需求 | 6GB起步 | 12GB起步 |
| 过拟合风险 | 低 | 中-高 |
| 灵活度 | 高(可叠加多个LoRA) | 低(一个模型一个角色) |
| 适用场景 | 角色、风格、姿势 | 完整概念学习 |
| 我的选择 | ✅ 日常主力 | 偶尔用 |
---
我的LoRA训练流程
Step 1:准备训练集(最重要的一步)
``python
我的训练集检查脚本
import os
from PIL import Image
TRAIN_DIR = "./dataset/character_xiaomei"
MIN_SIZE = 768 # SDXL最低分辨率
bad_images = []
for fname in os.listdir(TRAIN_DIR):
if not fname.endswith(('.png', '.jpg', '.jpeg')):
continue
img = Image.open(os.path.join(TRAIN_DIR, fname))
w, h = img.size

issues = []
if w < MIN_SIZE or h < MIN_SIZE:
issues.append(f"尺寸太小({w}x{h})")
if img.mode != 'RGB':
issues.append(f"色彩模式: {img.mode}")

if issues:
bad_images.append((fname, issues))
if bad_images:
print(f"❌ 发现 {len(bad_images)} 张问题图片:")
for fname, issues in bad_images:
print(f" {fname}: {', '.join(issues)}")
else:
print("✅ 训练集检查通过!")
`
Step 2:打标(Caption)
打标是LoRA训练中最被低估的环节。我试了三种方式:
| 打标方式 | 效果 | 适用场景 |
|----------|------|----------|
| BLIP自动打标 | 一般,经常描述错误 | 快速原型 |
| WD14 Tagger | 较好,Booru风格标签 | 二次元角色 |
| 手动打标 | 最好,精准控制 | 重要角色 |
| 我的方式:自动+手动修正 | 性价比最高 | 日常使用 ✅ |
`bash
用WD14自动打标,然后手动修正
python tagger.py --dir ./dataset/character_xiaomei --threshold 0.35
手动修正关键标签:
添加触发词:ohwx woman, xiaomei_character
删除错误标签:1boy → 删除
补充特征:black hair, ponytail, red eyes, school uniform
`
Step 3:训练参数
`yaml
我的LoRA训练配置(kohya_ss)
pretrained_model: "stabilityai/stable-diffusion-xl-base-1.0"
resolution: 1024
batch_size: 2
max_train_steps: 1500
learning_rate: 0.0001
lr_scheduler: "cosine"
network_dim: 32
network_alpha: 16
save_every_n_steps: 300
`
---
关键经验
| 经验 | 说明 |
|------|------|
| 训练集质量 > 数量 | 15张高质量图 > 50张一般质量的图 |
| 多样性很重要 | 不同角度、表情、光照、背景都要有 |
| 别让背景太统一 | 如果所有图都是白底,LoRA会把白底也学进去 |
| 触发词要独特 | 用ohwx`这种稀有token,不要用常见词 |
| 训练步数别太多 | 我的经验是1200-1800步之间最好,超过2000容易过拟合 |
| 多个LoRA叠加注意权重 | 角色LoRA 0.8 + 风格LoRA 0.5 的组合最稳定 |
---
最终效果
训练了一个"小美"的角色LoRA后:
| 场景 | 训练前 | 训练后 |
|------|--------|--------|
| 正面脸部一致性 | 40%(经常变形) | 90% |
| 侧面/半侧面 | 20%(灾难级) | 75% |
| 不同表情 | 需要大量尝试 | 80%成功率 |
| 不同服装 | 改变服装后脸也变了 | 服装随便换,脸不变 |
| 与其他LoRA叠加 | 经常冲突 | 稳定共存 |
---
碎碎念
说实话LoRA这个东西,入门容易精通难。网上教程教你"准备20张图→丢进工具→点开始→完成",但实际上:
- 哪20张图?怎么选?怎么裁剪?
- 什么是好的打标?什么标签该加什么不该加?
- 参数怎么调?为什么同样的参数别人效果好你就不行?
这些问题教程里很少讲。我的经验是:先跑10个失败的LoRA,然后你自然就懂了。有些东西不踩坑是学不会的。
另外给大家一个建议——不要一开始就练真人。从二次元角色开始练,因为二次元的面部特征更规则、更标准化,AI学起来快得多。等二次元的练熟了,理解了参数的作用,再挑战真人角色。我一开始就是练真人,头两次训练结果惨不忍睹,浪费了两天时间。
目前我稳定维护着5个角色的LoRA,每周花大概2-3小时更新训练集和微调参数。这个投入对于AI漫剧创作者来说是必须的——角色一致性直接决定了观众会不会追下去。
---
🎨 分享AI绘画实战经验,不教你怎么入门的,教你入门之后怎么办。

在 AI人才库 查看完整页面