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

"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 会把背景、光影、瑕疵一起学进去。
| 训练目标 | 数量起步 | 分辨率 | 背景 | 其他要求 |
|---|---|---|---|---|
| 角色 LoRA | 15-30 张(高质量可 10 张) | 统一分辨率(512×512 或 1024×1024) | 干净背景或至少多样化,避免同一场景重复 | 不同角度、表情、姿势 |
| 画风 LoRA | 50-100 张 | 与目标底模一致(SD1.5→512,SDXL→1024) | 不强制干净,但风格要一致 | 同一作者或同一系列作品 |
| 物体 LoRA | 15-30 张 | 统一分辨率 | 干净背景更好,多样化也能接受 | 不同视角、细节特写 |
质量判断优先级:分辨率统一 > 背景(角色)> 角度/细节多样性。分辨率不一致会导致训练时 resize 算法差异,训出来的细节模糊。
分辨率、背景、预处理
分辨率统一:训练时所有素材会被 resize 到同一尺寸,如果素材原始分辨率差异大(有的 512,有的 2048),resize 后细节会不一致。建议预处理时统一 crop 到目标分辨率。
背景处理:角色 LoRA 最容易踩的坑是背景词混进打标。如果 20 张图里有 15 张都是”在房间里”,打标工具会自动给”墙面”、“地板”这些词,训出来的 LoRA 会把背景一起学进去。预处理时要么选背景干净的素材,要么手动校验打标(见下一节)。
预处理流程:
- 筛选素材(清晰、分辨率接近、特征明显)
- Crop 到统一分辨率(用 Photoshop、GIMP 或脚本批量处理)
- 去掉背景词混入风险高的素材(同一背景重复超过 5 张)
打标与触发词:怎么给数据集写标签
打标不是”丢给工具自动跑一遍就行”,自动打标会把背景词、次要特征一起塞进去,直接影响 LoRA 的可用性。
打标工具选择
常用打标工具:
| 工具 | 特点 | 适用场景 | ComfyUI 支持 |
|---|---|---|---|
| WD14 Tagger | Stable Diffusion 生态常用,基于 Danbooru 标签体系,适合角色/动漫风格 | 角色 LoRA、动漫画风 | Image-Captioning-in-ComfyUI 提供节点 |
| Florence2 | Microsoft 的视觉模型,自然语言描述式,适合写实风格 | 写实角色、物体 | ComfyUI 有节点支持 |
| BLIP | 图像描述模型,自然语言输出,适合写实/场景 | 写实画风、场景 | ComfyUI 支持 |
WD14 Tagger 是角色 LoRA 最常用的,但缺点是会把背景词(“simple background”、“white wall”)自动塞进标签。Florence2 更适合写实风格,输出是自然语言描述而不是标签列表。
触发词格式与放置
触发词格式:建议用稀有词或自定义组合,避免与现有模型标签冲突。常见格式:
sks charname(sks 是 Stable Diffusion 早期常用的稀有词前缀)xyz_character_name(自定义前缀)my_char_001
触发词放在哪里:
- 每张图的打标文件(.txt 或 .caption)开头写触发词,后面接属性词
- 训练参数里可以单独设触发词字段(某些训练脚本支持),但不是必须,只要打标文件里有就行
要不要包含触发词:必须。如果打标里没有触发词,模型不知道”这张图对应哪个概念”。触发词的权重来自训练时的重复出现(每张图都有),训完后生成时用触发词才能激活 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-4 | 1e-4 | 起步值,需按过拟合症状调;alpha < dim 时要相应提高 |
| 学习率(text encoder LR) | 5e-5 或 1e-5 | 5e-5 或更低 | 触发词学习,通常比 unet LR 低一个数量级 |
| step | 1000-2000 | 2000-3000 | 按 epoch 反推;观察过拟合症状决定是否提前停 |
| epoch | 10-20 | 20-30 | 按 step 和数据集大小反推;角色小数据集(15-30 张)epoch 可以少 |
step vs epoch:step 是训练总步数,epoch 是”完整跑一遍数据集”的次数。step = 数据集大小 × epoch × batch size。小数据集(15 张)epoch 设 20,实际只有几百步;大数据集(100 张)epoch 设 20,实际几千步。
底模选择
训练 LoRA 的底模决定兼容性:
| 底模 | 训练分辨率 | 生成时兼容底模 | 显存需求(起步) |
|---|---|---|---|
| SD1.5 | 512×512 | SD1.5 及衍生模型 | 约 8GB(fp16 + gradient checkpointing) |
| SDXL | 1024×1024 | SDXL 及衍生模型 | 约 12GB(fp16 + 梯度检查点) |
| FLUX.1 | 1024×1024 或更高 | FLUX.1 系列 | 约 24GB(未节省),节省后约 10GB |
截至 2026:FLUX 训练节点支持还在实验阶段,最优参数以 kohya 原仓库为准。
起步参数配方表
| 训练目标 | dim | alpha | unet LR | text encoder LR | step/epoch 起步 | 底模 |
|---|---|---|---|---|---|---|
| 角色 LoRA(SD1.5) | 32 或 128 | 32 或 1(alpha=1 需调高 LR) | 4e-4 | 5e-5 | 1000-2000 step / 10-20 epoch | SD1.5 |
| 角色 LoRA(SDXL) | 128 | 1 或 128 | 4e-4 | 5e-5 | 1500-2500 step / 10-20 epoch | SDXL |
| 画风 LoRA(SD1.5) | 128 或 256 | 128 或 1 | 1e-4 | 5e-5 或更低 | 2000-3000 step / 20-30 epoch | SD1.5 |
表格里是起步值,不是”最优答案”。按过拟合症状(见下一节)调整。
过拟合与欠拟合:怎么判断、怎么修
训练参数设错了,训出来的 LoRA 会过拟合(细节崩成一团)或欠拟合(不像)。
过拟合症状
外观:
- 细节崩成一团,细节边缘模糊或扭曲
- 只认训练数据里的场景/姿势,换背景、换角度就崩
- 训练数据里的瑕疵(噪点、水印)也被学进去
触发词响应:
- 过强,生成时无法用权重控制(weight 降到 0.3 还是像训练数据)
- 不加触发词也会出现训练数据里的特征(说明 LoRA 把特征刻到模型里了)
欠拟合症状
外观:
- 不像训练目标,细节弱或缺失
- 触发词响应弱或无响应
换背景测试:
- 基本不变,说明 LoRA 没学到主要特征
过拟合/欠拟合对照表
| 症状 | 过拟合 | 欠拟合 | 修复方向 |
|---|---|---|---|
| 外观细节 | 细节崩成一团、只认训练数据 | 不像、细节弱 | 过拟合:降 LR、减 step;欠拟合:升 LR、加数据 |
| 换背景测试 | 一换就崩(背景被学进去) | 基本不变(没学到特征) | 过拟合:检查打标里是否混入背景词;欠拟合:检查触发词是否在打标里 |
| 触发词响应 | 过强、无法控制 | 弱或无响应 | 过拟合:降 LR、减 dim;欠拟合:升 LR、加数据、调高 dim |
| weight 范围 | 降到 0.3 还是像训练数据 | 升到 1.0 才勉强有点像 | 过拟合:提前停训练、减 step;欠拟合:继续训练或加数据 |
修复方向优先级
过拟合:
- 先降学习率(LR 降低 50%)
- 减少 step 或提前停训练
- 检查打标是否混入背景词、次要特征
- 调低 dim(如果 dim 设置很高)
欠拟合:
- 升学习率(LR 提高 50%)
- 加数据(数据集不够时最常见)
- 检查触发词是否在打标里(触发词缺失会导致模型不知道学什么)
- 调高 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(显存翻倍)。
低显存取舍表
| 显存 | 能训什么 | 取舍 | 建议路径 |
|---|---|---|---|
| 6GB | SD1.5 角色 LoRA | 低 dim(32)、gradient checkpointing、时间长 | SD1.5 起步,接受慢训练 |
| 8GB | SD1.5 角色/画风 LoRA | 低 dim、gradient checkpointing | SD1.5 默认显存节省即可 |
| 10GB | SDXL 角色 LoRA | fused backward pass、低 dim | SDXL 可训,接受节省项 |
| 12GB+ | SDXL 画风 LoRA、FLUX(实验) | fused backward pass、低 dim | SDXL 默认显存节省,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: 确定训练目标和底模
先决定训练角色、画风还是物体,并选择 SD1.5、SDXL 或 FLUX.1;训练底模决定生成时的兼容范围。 - 2
步骤 2: 筛选并统一数据集
保留清晰、主体明确且角度与背景有变化的素材,按目标底模裁剪到一致的训练分辨率。 - 3
步骤 3: 自动打标并人工修标
用合适的打标器生成 caption,再检查高频背景词、核心属性和每张图的触发词。 - 4
步骤 4: 设置起步参数
根据训练目标设置 dim、alpha、学习率、step 或 epoch,并把表格数值当作可复现的起点,而不是标准答案。 - 5
步骤 5: 保存中间 epoch
按固定间隔保存权重,方便从多个训练阶段选择泛化更好、未过拟合的版本。 - 6
步骤 6: 在 ComfyUI 固定条件验证
使用相同 prompt、seed、采样器和尺寸,扫描 0.3、0.5、1.0 等权重并测试不同背景。 - 7
步骤 7: 按症状调整
过拟合时优先降低学习率或训练步数并检查背景标签;欠拟合时检查触发词、数据量、学习率和 dim。
常见问题
训练一个 LoRA 要准备多少张图?
network dim 和 alpha 怎么设?
LoRA 学习率怎么定?
显存不够怎么训练 LoRA?
能直接在 ComfyUI 里训练 LoRA 吗?
SDXL 和 FLUX.1 的 LoRA 训练有什么不同?
14 分钟阅读 · 发布于: 2026年8月28日 · 修改于: 2026年8月28日
ComfyUI 与 Stable Diffusion 专题:入门、工作流、模型选择与提示词
如果你是从搜索进入这篇文章,建议顺手补上上一篇或继续下一篇,这样更容易把同一主题读完整。
上一篇
ComfyUI 人物一致性:InstantID、FaceID 与 ReActor 怎么选
比较 InstantID、IPAdapter FaceID 与 ReActor 的生成阶段、模型依赖和适用边界,给出参考图要求、安装路径、调参排障及授权与模型许可提醒。
第 9 / 16 篇
下一篇
ComfyUI 区域提示词与多主体构图:Regional、Cutoff、Conditioning Combine 怎么用
用 Set Area、RegionalPrompt 与 Cutoff 控制 ComfyUI 多主体区域和属性,包含坐标、strength、mask 采样、ControlNet 组合及二次 pass 串色排查。
第 11 / 16 篇



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