Skip to content

图像 LoRA 训练

图像 LoRA = 给基础模型(SD / Flux)插一个「记忆模块」,让它学会画特定角色、风格或物体。本页讲的是图像生成领域的 LoRA 训练——与 LLM 的 LoRA 微调(详见LLM 微调)是同名不同领域的应用。前置阅读:扩散模型、主流图像生成模型对比。

想象基础模型是一本通用画册——什么都会画一点,但对任何特定主题都只是「大致还行」。现在你想让它精通画你的原创角色「小明」:

  • 不训练= 每次画小明,结果都不一样,长相随机。
  • 全量微调(DreamBooth)= 把整本画册重写一遍来记住小明——效果好但代价巨大(需要修改模型全部参数,显存需求高、容易遗忘其他能力)。
  • LoRA= 不改原画册,而是夹一本小笔记在画册里。笔记只记小明的关键特征(发型、瞳色、服装),推理时翻开笔记叠加上去。笔记很轻(几十 MB vs 基础模型几 GB),可以准备很多本(角色笔记、风格笔记、材质笔记),按需替换或叠加。

为什么 LoRA 是图像社区的主流方案? 因为它轻量(训练快、文件小)、可叠加(多 LoRA 混搭)、不破坏底模(用完即换),完美适配社区分享和创作需求。

LoRA(Low-Rank Adaptation,Hu et al. 2021)的核心数学思想:模型微调时,权重变化矩阵 delta-W 是低秩的——可以用两个小矩阵的乘积 A x B 来近似。训练时只训练 A 和 B 两个小矩阵(参数量远小于原始权重),推理时将 delta-W = A x B 叠加到基础模型权重上。

在图像生成领域,LoRA 作用于 U-Net / Transformer 的 Cross-Attention 层权重。rank(秩)参数控制 A 和 B 的维度——rank 越大,表达能力越强但文件越大、过拟合风险越高。

完整的图像 LoRA 训练分为四步:

第一步:准备数据集。 收集 20~30 张目标图像(角色/风格/概念)。图像应涵盖不同角度、光照、背景——多样性帮助模型学到核心特征而非死记特定照片。分辨率统一(通常 512x512 或 1024x1024)。

第二步:打标签(Captioning)。 每张图像配一个文本描述。关键是设置触发词(trigger word)——一个特殊标记(如 xyz_chibi)让模型把这个概念绑定到这个词上。标签可以手动写,也可以用自动标注工具(BLIP-2 / WD14 Tagger / JoyCaption)批量生成后人工修正。

第三步:训练 LoRA 权重。 用 kohya-ss / sd-scripts / ai-toolkit 等训练脚本,在基础模型上训练 LoRA 矩阵。训练过程本质是 DreamBooth + LoRA——用数据集图像和标签微调注意力层,损失函数与标准扩散训练一致(预测噪声 MSE)。

第四步:加载到基础模型生成。 训练完成后得到一个 .safetensors 文件(通常 10~300 MB),加载到 SD/Flux/ComfyUI 中,在 prompt 里加入触发词即可生成目标概念。

参数典型值说明
rank / dim8~128LoRA 矩阵的秩。832 适合风格 LoRA,64128 适合角色/概念 LoRA
learning rate1e-4 ~ 1e-3学习率,过高过拟合、过低学不会。通常配 cosine 衰减
training steps1000~3000总训练步数。数据量 x 重复次数 / batch_size,过多会过拟合
batch size1~4每步训练的图像数。显存有限时设 1
正则化图像可选防止过拟合的负样本(如训练角色时用通用人物图做正则化)
resolution512 / 768 / 1024训练分辨率,需匹配底模原生分辨率
  • 风格 LoRA:学会某种画风(水彩、油画、二次元、像素画)。触发词激活后整张图变为目标风格。通常 rank 较低(16~32),训练数据为同风格的不同构图图像。
  • 角色 LoRA:学会画特定角色(VTuber 形象、游戏角色、原创 OC)。触发词激活后能从不同角度、姿态画同一个角色。通常 rank 较高(64~128),训练数据为同一角色的多角度多姿态图像。
  • 概念 LoRA:学会画特定物体或概念(某款汽车、某类建筑、某种材质)。介于风格和角色之间。

以下是用 kohya-ss 的 sd-scripts 训练 LoRA 的核心命令(实际使用时通过 TOML/JSON 配置文件传入):

# train_lora.py 的核心参数(通过命令行或配置文件传入)
# 训练 SDXL LoRA 的概念命令示例
config = {
"base_model": "stabilityai/stable-diffusion-xl-base-1.0", # 基础模型
"train_data_dir": "./dataset/images", # 数据集目录(含图像+标签)
"output_dir": "./output", # LoRA 权重输出目录
"network_dim": 32, # rank/dim 秩,角色 LoRA 建议 64-128
"network_alpha": 16, # alpha 控制 LoRA 权重缩放,通常 = dim/2
"learning_rate": 1e-4, # 学习率,配合 cosine 衰减
"max_train_steps": 2000, # 总训练步数
"resolution": 1024, # 训练分辨率,匹配 SDXL 原生
"train_batch_size": 1, # 批量大小,显存有限时设 1
"save_every_n_epochs": 1, # 每个 epoch 存一次检查点
"trigger_word": "xyz_oc", # 触发词,绑定目标概念
}
print(f"配置完成,开始训练 {config['trigger_word']} 的 LoRA")
# 实际执行: accelerate launch sd-scripts/sdxl_train_network.py --config config.toml
  • 数据质量决定一切:20 张清晰、多样、构图丰富的图像远好过 100 张重复、模糊的图像。角色 LoRA 至少包含正面/侧面/背面、不同表情、不同光照。
  • 触发词要独特:用 xyz_oc、sks_chibi 这类不存在于训练语料中的无意义词作为触发词,避免与基础模型已有概念冲突。
  • 过拟合的信号:训练步数过多时,LoRA 只会复现训练图像而无法泛化(生成结果像训练集的复制粘贴)。遇到时减少 steps 或降低 learning rate。
  • 保存中间检查点:每 500 步存一个检查点,训练完后逐个对比生成效果,选最佳的——不是步数越多越好。
  • 正则化图像(Regularization Images):训练角色 LoRA 时,加入一些通用人物图像作为正则化数据,防止模型把「人」的概念整体偏移到训练角色上——这叫”概念漂移”。
  • LoRA 可以叠加:ComfyUI 和 WebUI 支持同时加载多个 LoRA——风格 LoRA + 角色 LoRA + 材质 LoRA 混搭使用,各自调权重比例。
  • AI 角色设计(VTuber 皮套):为虚拟主播训练专属角色 LoRA,确保每次生成都保持一致的角色外观,用于直播封面、周边插画、表情包制作。
  • 品牌风格统一:企业训练「品牌视觉风格 LoRA」,让所有 AI 生成的营销素材保持统一的色彩和风格调性。
  • 产品摄影风格:电商团队训练「某品牌商品摄影风格 LoRA」,批量生成统一风格的商品图,替代昂贵的外景拍摄。
  • 艺术家风格模仿:训练特定画师风格的 LoRA(如水彩风格、厚涂风格),在创作中快速应用该画风——注意版权与伦理边界。
  • 游戏角色一致性:游戏团队为每个 NPC/角色训练 LoRA,确保在概念设定、过场插画、宣传图中角色外观统一。
  • 个人 IP 创造:个人创作者训练自己的卡通形象 LoRA,在各种 AI 生图场景中复用,打造个人品牌。
类库语言说明
kohya-ss / sd-scriptsPython最主流的 LoRA 训练工具集,支持 SD/SDXL/Flux,参数配置灵活
ai-toolkitPythonInstinct 的 LoRA 训练工具,简化配置流程,对 Flux 支持好
OneTrainerPython统一训练框架,支持 LoRA/DreamBooth/全量微调,GUI 界面
ComfyUI LoRA 训练节点PythonComfyUI 内的训练节点,可在工作流中完成训练
BLIP-2 / WD14 TaggerPython自动图像标注工具,批量生成训练用标签
Civitai在线LoRA 模型分享社区,海量训练好的 LoRA 可直接下载使用
术语英文解释
秩rank / dimLoRA 低秩矩阵的维度,控制表达能力和文件大小
触发词Trigger Word绑定训练概念的特殊标记词,推理时在 prompt 中使用以激活 LoRA
正则化Regularization用额外数据防止过拟合和概念漂移的技术
概念ConceptLoRA 学习的目标主题(角色/风格/物体)
DreamBoothDreamBooth全量微调方法,训练整个 U-Net 权重(LoRA 是其轻量版)
文本反转Textual Inversion / Embedding另一种轻量微调方法,只训练一个词嵌入向量(比 LoRA 更轻但能力更弱)
概念漂移Concept Drift训练特定概念后模型对相关通用概念产生偏移的现象
低秩适应LoRA (Low-Rank Adaptation)用低秩矩阵分解近似权重更新的高效微调方法
权重分解低秩适应DoRALoRA 改进方法,将权重分解为方向和大小分别适应,相同 rank 下效果更好
LyCORISLyCORIS社区开发的多类型适配器框架,支持在多种网络层上灵活配置 LoRA/IA3 等适配器
量化低秩适应QLoRA先将底模量化到低精度再训练 LoRA 适配器,大幅降低训练显存需求
  • Hu et al. “LoRA: Low-Rank Adaptation of Large Language Models” (ICLR 2022):LoRA 原始论文,提出低秩矩阵分解的参数高效微调方法,虽起源于 NLP 但被图像社区广泛采用。
  • Ruiz et al. “DreamBooth: Fine Tuning Text-to-Image Diffusion Models for Subject-Driven Generation” (CVPR 2023):DreamBooth 论文,提出用少量图像微调扩散模型来学习特定主题,是图像 LoRA 训练的方法论基础。
  • kohya-ss sd-scripts 文档:kohya-ss/sd-scripts GitHub 仓库——最主流的图像 LoRA 训练工具集,文档详尽,涵盖 SD/SDXL/Flux 的 LoRA、DreamBooth 训练全流程。

2024 年 Black Forest Labs 发布 Flux.1(基于 DiT 架构,详见 DiT 架构)后,LoRA 社区迅速迁移。Flux 的 Transformer 架构使得 LoRA 可以作用于 Attention 的 Q/K/V/O 投影矩阵以及 MLP 层,相比 SD 的 U-Net Cross-Attention 有更大的优化空间:

  • Flux Schnell LoRA:针对 Flux.1-schnell(4 步快速推理版本)优化的 LoRA,训练步数大幅减少,适合快速风格定制。
  • 更高分辨率训练:Flux 原生支持 1024×1024 以上分辨率,LoRA 训练也随之提升到 1024 甚至 1536 基准,细节保真度更高。
  • DoRA(Weight-Decomposed Low-Rank Adaptation):2024 年提出的 LoRA 改进方法,将权重矩阵分解为方向(direction)和大小(magnitude)两个分量分别适应,在相同 rank 下比标准 LoRA 效果更好,收敛更快。
  • LoRA-XS / LyCORIS:社区发展的变体——LoRA-XS 只训练更少的层以追求极致轻量;LyCORIS 支持在 Attention、FFN、Conv 等多种层类型上灵活配置 LoRA/IA3/OFT 等多种适配器,适合复杂定制需求。
  • OneTrainer 统一框架:2025 年逐渐成熟的统一训练框架,在单一 GUI 中支持 LoRA、DreamBooth、全量微调,并自动适配 SD/SDXL/Flux 等不同底模,大幅降低了训练门槛。
  • AI 自动标注管线:JoyCaption、WD14 Tagger v3 等自动标注工具在 2025 年显著提升标签质量,结合智能裁剪和多样性采样,使得”从原始图片到训练就绪数据集”的管线高度自动化。
  • 多概念 LoRA:在单次训练中学习多个概念(如多个角色),通过不同的触发词分别激活。社区发展了概念调度(concept scheduling)和正则化策略来减少多概念之间的干扰。
  • 风格+角色联合训练:在角色 LoRA 训练集中混入风格标注,使一个 LoRA 同时编码角色外观和特定画风——减少推理时叠加多 LoRA 的复杂度。
  • 量化训练(QLoRA):将底模量化到 4-bit/8-bit 后再训练 LoRA 适配器,使得在消费级显卡(如 RTX 4090, 24GB 显存)上训练 Flux 级别的 LoRA 成为可能。