切换主题

在 ComfyUI 里训练自己的 LoRA:数据集、打标、训练与验证

Easton editorial illustration: central LoRA trainer module, stack of varied character dataset image cards, output safetensors file tile

"kohya-ss/sd-scripts 提供 Stable Diffusion、SDXL、SD3 和 FLUX.1 等模型的 LoRA 训练脚本与训练文档。"

你手里有 20 张原创角色图,想训成 LoRA 让之后随便出图都是它。

数据集准备好了,打标工具也下载了,参数照着网上的截图填,但训完一用就崩:同样一个角色,换背景脸就变了;打标里混了”墙面”、“地板”这些背景词,训出来不管什么场景都带着那堵墙;LR 设了 1e-3,过拟合,细节崩成一团;dim/alpha 照抄 32/1,结果 alpha=1 dim=32 强度只有 0.03,训练强度被压到 3%。

这篇不讲”一次就能成功”,只给你一条从数据集准备、打标、参数配方、过拟合判断到 ComfyUI 验证的实战路线。


数据集准备:要多少张、什么样的图

训练 LoRA 的第一步不是打开训练工具,而是判断你手里的素材够不够、适不适合。

训练目标决定数据量

你想训什么,直接决定了要多少张图。

角色 LoRA:15-30 张起步,高质量素材(清晰、分辨率统一、背景干净)可以少到 10 张;想训到换场景也能认出来,至少要有不同背景、不同角度的素材。

画风 LoRA:比角色要求更多,通常 50-100 张,因为画风包含的元素比单一角色更复杂(笔触、色调、构图习惯)。数据不够时,只能训出”有些像”,换张新图就没了。

物体/服装 LoRA:类似角色,15-30 张,重点是物体的主要特征要清楚(正面、侧面、细节特写)。

数据集质量判断表

不是数量够了就能训。素材质量不够,训出来的 LoRA 会把背景、光影、瑕疵一起学进去。

训练目标数量起步分辨率背景其他要求
角色 LoRA15-30 张(高质量可 10 张)统一分辨率(512×512 或 1024×1024)干净背景或至少多样化,避免同一场景重复不同角度、表情、姿势
画风 LoRA50-100 张与目标底模一致(SD1.5→512,SDXL→1024)不强制干净,但风格要一致同一作者或同一系列作品
物体 LoRA15-30 张统一分辨率干净背景更好,多样化也能接受不同视角、细节特写

质量判断优先级:分辨率统一 > 背景(角色)> 角度/细节多样性。分辨率不一致会导致训练时 resize 算法差异,训出来的细节模糊。

分辨率、背景、预处理

分辨率统一:训练时所有素材会被 resize 到同一尺寸,如果素材原始分辨率差异大(有的 512,有的 2048),resize 后细节会不一致。建议预处理时统一 crop 到目标分辨率。

背景处理:角色 LoRA 最容易踩的坑是背景词混进打标。如果 20 张图里有 15 张都是”在房间里”,打标工具会自动给”墙面”、“地板”这些词,训出来的 LoRA 会把背景一起学进去。预处理时要么选背景干净的素材,要么手动校验打标(见下一节)。

预处理流程:

  1. 筛选素材(清晰、分辨率接近、特征明显)
  2. Crop 到统一分辨率(用 Photoshop、GIMP 或脚本批量处理)
  3. 去掉背景词混入风险高的素材(同一背景重复超过 5 张)

打标与触发词:怎么给数据集写标签

打标不是”丢给工具自动跑一遍就行”,自动打标会把背景词、次要特征一起塞进去,直接影响 LoRA 的可用性。

打标工具选择

常用打标工具:

工具特点适用场景ComfyUI 支持
WD14 TaggerStable Diffusion 生态常用,基于 Danbooru 标签体系,适合角色/动漫风格角色 LoRA、动漫画风Image-Captioning-in-ComfyUI 提供节点
Florence2Microsoft 的视觉模型,自然语言描述式,适合写实风格写实角色、物体ComfyUI 有节点支持
BLIP图像描述模型,自然语言输出,适合写实/场景写实画风、场景ComfyUI 支持

WD14 Tagger 是角色 LoRA 最常用的,但缺点是会把背景词(“simple background”、“white wall”)自动塞进标签。Florence2 更适合写实风格,输出是自然语言描述而不是标签列表。

触发词格式与放置

触发词格式:建议用稀有词或自定义组合,避免与现有模型标签冲突。常见格式:

  • sks charname(sks 是 Stable Diffusion 早期常用的稀有词前缀)
  • xyz_character_name(自定义前缀)
  • my_char_001

触发词放在哪里:

  1. 每张图的打标文件(.txt 或 .caption)开头写触发词,后面接属性词
  2. 训练参数里可以单独设触发词字段(某些训练脚本支持),但不是必须,只要打标文件里有就行

要不要包含触发词:必须。如果打标里没有触发词,模型不知道”这张图对应哪个概念”。触发词的权重来自训练时的重复出现(每张图都有),训完后生成时用触发词才能激活 LoRA。

手动校验核心属性

自动打标后,至少要手动检查三个点。

背景词混入:角色 LoRA 里如果背景词(“wall”、“floor”、“bedroom”)高频出现,训出来换背景就崩。手动删除或替换成 “simple background”。

触发词缺失:确认每张图的打标开头都有触发词。

核心属性遗漏:角色有标志性特征(发型、配色、服装),如果自动打标漏了,手动补进去。

手动校验不是”每张图逐字检查”,而是用文本工具(如 grep、Excel)扫一遍高频词,看到异常就针对性处理。


训练工具边界:ComfyUI 训练的本质是什么

ComfyUI 能训练 LoRA,但训练主体不是 ComfyUI 自己。

kohya-ss/sd-scripts 是训练主体

实际执行训练的是 kohya-ss/sd-scripts(GitHub 上 Stable Diffusion LoRA 训练的事实标准后端)。几乎所有”训 LoRA”工具,包括 Kohya GUI、AI-Toolkit、ComfyUI 的训练节点,底层都调用这套脚本。

ComfyUI 侧的训练节点(如 FluxTrainer、Lora-Training-in-Comfy)只是包装层:

  • FluxTrainer(Kijai 开发):封装 sd-scripts,支持 FLUX、SDXL、SD3 LoRA 训练,在 ComfyUI 里提供节点接口
  • Lora-Training-in-Comfy:同样封装 kohya 脚本,支持 SD1.5/SDXL

核心边界:ComfyUI 训练节点不提供”最优参数”,默认值只是示例。FluxTrainer 作者在 README 里明确说”最优参数请查 kohya 原仓库”,不要迷信节点的默认配置。

训练路径对比

路径优点缺点适用人群
kohya-ss GUI(桌面应用)参数界面完整、社区教程多需单独安装、界面复杂想完整掌控参数的用户
ComfyUI 训练节点(FluxTrainer 等)在 ComfyUI 里直接跑、流程统一实验性质、默认参数不保证最优已用 ComfyUI 出图、想集成训练流程
kohya-ss 原始脚本(命令行)最新功能、完整参数控制命令行门槛高有训练经验、想调最优参数

最优参数查哪里

不要只靠教程截图或节点默认值。最优参数以 kohya-ss/sd-scripts 原仓库为准:

  • 训练脚本 README 里有不同底模(SD1.5/SDXL/FLUX)的推荐参数区间
  • GitHub Issues/Discussions 里有社区经验(如 network alpha 讨论 #1093)

训练参数(LR、dim/alpha、step)会随底模、数据集规模变化,没有”一套参数通吃”的答案。


参数配方表:想训什么,主要参数怎么设

参数配方不是”照抄就成功”,而是给你一个起步值,按效果和过拟合症状微调。

network dim 与 alpha 的关系

network dim(rank):LoRA 权重矩阵的秩,决定 LoRA 的表达能力。dim 越高,能学到的细节越多,但训练成本(显存、时间)也越高。

network alpha:阻尼系数,控制学习率的有效强度。alpha < dim 时,学习率会被压缩。

关系公式:训练强度 = alpha / dim

例子:

  • alpha=16, dim=32 → 强度 16/32=0.5,学习率只发挥一半
  • alpha=32, dim=32 → 强度 1,无阻尼,学习率发挥全部
  • alpha=1, dim=32 → 强度 1/32≈0.03,学习率被压到 3%,基本训不动

常见踩坑:照抄 dim=32 alpha=1 的截图,结果 alpha 太小,训练强度被压到极低,训出来不像。

建议:

  • 起步用 alpha=dim(无阻尼)或 alpha=dim/2(轻度阻尼)
  • 如果 alpha < dim,相应调高学习率(例如 alpha=16 dim=32,LR 可以设到 8e-4 而不是 4e-4)

学习率、step、epoch 起步值

参数角色 LoRA 起步画风 LoRA 起步说明
学习率(unet LR)4e-41e-4起步值,需按过拟合症状调;alpha < dim 时要相应提高
学习率(text encoder LR)5e-5 或 1e-55e-5 或更低触发词学习,通常比 unet LR 低一个数量级
step1000-20002000-3000按 epoch 反推;观察过拟合症状决定是否提前停
epoch10-2020-30按 step 和数据集大小反推;角色小数据集(15-30 张)epoch 可以少

step vs epoch:step 是训练总步数,epoch 是”完整跑一遍数据集”的次数。step = 数据集大小 × epoch × batch size。小数据集(15 张)epoch 设 20,实际只有几百步;大数据集(100 张)epoch 设 20,实际几千步。

底模选择

训练 LoRA 的底模决定兼容性:

底模训练分辨率生成时兼容底模显存需求(起步)
SD1.5512×512SD1.5 及衍生模型约 8GB(fp16 + gradient checkpointing)
SDXL1024×1024SDXL 及衍生模型约 12GB(fp16 + 梯度检查点)
FLUX.11024×1024 或更高FLUX.1 系列约 24GB(未节省),节省后约 10GB

截至 2026:FLUX 训练节点支持还在实验阶段,最优参数以 kohya 原仓库为准。

起步参数配方表

训练目标dimalphaunet LRtext encoder LRstep/epoch 起步底模
角色 LoRA(SD1.5)32 或 12832 或 1(alpha=1 需调高 LR)4e-45e-51000-2000 step / 10-20 epochSD1.5
角色 LoRA(SDXL)1281 或 1284e-45e-51500-2500 step / 10-20 epochSDXL
画风 LoRA(SD1.5)128 或 256128 或 11e-45e-5 或更低2000-3000 step / 20-30 epochSD1.5

表格里是起步值,不是”最优答案”。按过拟合症状(见下一节)调整。


过拟合与欠拟合:怎么判断、怎么修

训练参数设错了,训出来的 LoRA 会过拟合(细节崩成一团)或欠拟合(不像)。

过拟合症状

外观:

  • 细节崩成一团,细节边缘模糊或扭曲
  • 只认训练数据里的场景/姿势,换背景、换角度就崩
  • 训练数据里的瑕疵(噪点、水印)也被学进去

触发词响应:

  • 过强,生成时无法用权重控制(weight 降到 0.3 还是像训练数据)
  • 不加触发词也会出现训练数据里的特征(说明 LoRA 把特征刻到模型里了)

欠拟合症状

外观:

  • 不像训练目标,细节弱或缺失
  • 触发词响应弱或无响应

换背景测试:

  • 基本不变,说明 LoRA 没学到主要特征

过拟合/欠拟合对照表

症状过拟合欠拟合修复方向
外观细节细节崩成一团、只认训练数据不像、细节弱过拟合:降 LR、减 step;欠拟合:升 LR、加数据
换背景测试一换就崩(背景被学进去)基本不变(没学到特征)过拟合:检查打标里是否混入背景词;欠拟合:检查触发词是否在打标里
触发词响应过强、无法控制弱或无响应过拟合:降 LR、减 dim;欠拟合:升 LR、加数据、调高 dim
weight 范围降到 0.3 还是像训练数据升到 1.0 才勉强有点像过拟合:提前停训练、减 step;欠拟合:继续训练或加数据

修复方向优先级

过拟合:

  1. 先降学习率(LR 降低 50%)
  2. 减少 step 或提前停训练
  3. 检查打标是否混入背景词、次要特征
  4. 调低 dim(如果 dim 设置很高)

欠拟合:

  1. 升学习率(LR 提高 50%)
  2. 加数据(数据集不够时最常见)
  3. 检查触发词是否在打标里(触发词缺失会导致模型不知道学什么)
  4. 调高 dim(如果 dim 设置太低)

显存需求与低显存路径:RTX 3060 能训吗

显存不够不是绝对不能训,但要取舍:降低分辨率、用显存节省技术、接受更长训练时间。

最低显存需求

底模最低显存(fp16 + gradient checkpointing)显存节省后节省项
SD1.5约 8GB约 6GB(随低 dim、量化)低 dim、gradient checkpointing、fused backward pass
SDXL约 12GB约 10GB(随节省项)低 dim、gradient checkpointing、fused backward pass、量化
FLUX约 24GB(未节省)约 10GB(随 fused backward pass)fused backward pass、低 dim、量化

约 24GB→10GB 来自 sanj.dev 2025 指南(fused backward pass),实际值随节省项和数据集变化。

显存节省技术

fused backward pass:合并反向传播步骤,降低显存峰值。约 24GB→10GB(SDXL/FLUX)。

gradient checkpointing:牺牲速度换显存,训练时间增加约 30%,显存降低约 30%。

低 dim:dim 越低,LoRA 权重矩阵越小,显存占用越低。角色 LoRA 起步可以用 dim=32 而不是 128。

量化(fp16/bf16):默认用 fp16 或 bf16,不用 fp32(显存翻倍)。

低显存取舍表

显存能训什么取舍建议路径
6GBSD1.5 角色 LoRA低 dim(32)、gradient checkpointing、时间长SD1.5 起步,接受慢训练
8GBSD1.5 角色/画风 LoRA低 dim、gradient checkpointingSD1.5 默认显存节省即可
10GBSDXL 角色 LoRAfused backward pass、低 dimSDXL 可训,接受节省项
12GB+SDXL 画风 LoRA、FLUX(实验)fused backward pass、低 dimSDXL 默认显存节省,FLUX 实验性

显存不够时,优先用 SD1.5 而不是 SDXL/FLUX。SD1.5 的训练门槛低,显存节省成熟。


ComfyUI 验证流程:训完怎么在 ComfyUI 里测

训完 LoRA 不是”生成一张图看看像不像就行”,要系统性验证:触发词响应、细节还原、换背景测试。

加载 LoRA

在 ComfyUI 里用 Load LoRA 节点加载训练好的 .safetensors 文件:

  • 节点路径:Load LoRA(ComfyUI 内置节点)
  • 参数:LoRA 文件路径、weight(强度,建议从 0.5 起步,按效果调)

配 prompt 模板

验证用的 prompt 要包含触发词和核心属性:

  • 触发词:开头写触发词(如 sks charname
  • 属性词:训练目标的主要特征(发型、配色、服装),从打标里提取高频词
  • 场景词:换背景测试时替换场景词(“in a forest”、“at night”)

例子:

sks charname, blonde hair, blue eyes, white dress, simple background

换背景测试:

sks charname, blonde hair, blue eyes, white dress, in a forest, at sunset

扫 weight 范围

生成时调 LoRA weight,扫一个范围验证响应:

  • weight=0.3:轻微影响,看是否还有控制空间
  • weight=0.5:起步值,看是否像训练目标
  • weight=1.0:全强度,看是否过拟合(细节崩、无法控制)

如果 weight 降到 0.3 还是像训练数据,说明过拟合;升到 1.0 才勉强有点像,说明欠拟合。

验收清单

验收项合格标准不合格时修复方向
触发词响应weight 0.5 时有明显特征,weight 0.3 时可控无响应→检查打标触发词;过强→降 LR、减 step
细节还原主要细节(发型、配色、服装)清晰可见细节崩→过拟合,降 LR;细节弱→欠拟合,升 LR
换背景测试换场景后特征不变,只背景变化换背景就崩→打标混入背景词,检查并删除
权重可控性weight 0.3-1.0 范围内特征可调不可控→过拟合,降 LR、减 step

下一步与延伸阅读

训完 LoRA 后,下一步是:

使用 LoRA:加载、权重、叠加、触发词控制,ComfyUI LoRA 实战:加载、权重、叠加与角色一致性

模型选型:底模决定 LoRA 兼容性,shape mismatch 教训,Stable Diffusion 模型选型:底模决定 LoRA 兼容性

Prompt 模板:验证 LoRA 效果,触发词 + 属性词组合,Stable Diffusion Prompt 模板:验证 LoRA 效果

不重训的一致性路线对比:

  • FLUX.1 Kontext:不重训也能让角色一致,适合不想训 LoRA 或数据不够的场景
  • InstantID、IPAdapter FaceID:另一条人脸一致性路线,不训 LoRA 用参考图直接控制

如何训练并验证自己的 LoRA

从训练目标、数据集、打标和参数起步,完成训练后在 ComfyUI 中检查触发词响应、细节还原和背景泛化。

⏱️ 预计耗时: 4 小时

  1. 1

    步骤 1: 确定训练目标和底模

    先决定训练角色、画风还是物体,并选择 SD1.5、SDXL 或 FLUX.1;训练底模决定生成时的兼容范围。
  2. 2

    步骤 2: 筛选并统一数据集

    保留清晰、主体明确且角度与背景有变化的素材,按目标底模裁剪到一致的训练分辨率。
  3. 3

    步骤 3: 自动打标并人工修标

    用合适的打标器生成 caption,再检查高频背景词、核心属性和每张图的触发词。
  4. 4

    步骤 4: 设置起步参数

    根据训练目标设置 dim、alpha、学习率、step 或 epoch,并把表格数值当作可复现的起点,而不是标准答案。
  5. 5

    步骤 5: 保存中间 epoch

    按固定间隔保存权重,方便从多个训练阶段选择泛化更好、未过拟合的版本。
  6. 6

    步骤 6: 在 ComfyUI 固定条件验证

    使用相同 prompt、seed、采样器和尺寸,扫描 0.3、0.5、1.0 等权重并测试不同背景。
  7. 7

    步骤 7: 按症状调整

    过拟合时优先降低学习率或训练步数并检查背景标签;欠拟合时检查触发词、数据量、学习率和 dim。

常见问题

训练一个 LoRA 要准备多少张图?
角色 LoRA 可从 15-30 张起步,高质量素材有时 10 张也能开始;画风通常需要 50-100 张,物体 LoRA 常用 15-30 张。应先保证清晰度、背景和角度多样性。
network dim 和 alpha 怎么设?
dim 决定 LoRA 的容量,alpha 用于缩放权重。常见起点是 alpha 等于 dim 或 dim 的一半;alpha 低于 dim 时,要结合学习率、步数和实际验证结果一起调整。
LoRA 学习率怎么定?
角色 LoRA 的 U-Net 学习率可从 4e-4 附近测试,画风可从 1e-4 附近测试,文本编码器通常更低。它们只是起点,必须通过中间 epoch 和过拟合症状来回调。
显存不够怎么训练 LoRA?
优先选择 SD1.5、较低 dim、混合精度和 gradient checkpointing;SDXL 或 FLUX.1 还可按训练脚本支持情况使用块交换、量化等节省项,但会增加训练时间或影响结果。
能直接在 ComfyUI 里训练 LoRA 吗?
可以使用 ComfyUI-FluxTrainer 或其他训练节点,但它们本质上封装训练脚本,且部分实现仍属实验性质。参数和兼容性应以对应节点及 kohya-ss/sd-scripts 的当前说明为准。
SDXL 和 FLUX.1 的 LoRA 训练有什么不同?
两者使用不同架构、文本编码器和训练脚本,显存需求及参数也不同。训练得到的 LoRA 应与相应模型家族配套使用,不能只按文件格式判断兼容性。

14 分钟阅读 · 发布于: 2026年8月28日 · 修改于: 2026年8月28日

评论

使用 GitHub 账号登录后即可评论

Easton BlogEaston Blog