写作与公文
训练角色 LoRA 实现跨图像角色一致性(数据集准备…
当需要为角色生成大量保持一致的图像时,准备数据集并配置 FLUX/SDXL LoRA 训练。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 49/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 85/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
训练角色 LoRA 实现跨图像角色一致性通用
解决思路
- 判断是否该训练:需要跨多张图像绝对一致、或构建角色系列/长期项目时训练 LoRA;一次性快速生成或只有 1-5 张参考图时用零样本(InstantID/PuLID);测试概念时先用零样本,确定投入再训练。
- 按流水线执行:1) 数据集准备(收集/生成 15-30 张参考图,预处理裁剪缩放并多样化风格,用触发词+描述打标);2) 配置训练(选择 Kohya/AI-Toolkit/FluxGym,按模型类型设超参,配置 checkpoint);3) 训练(监控 loss 曲线,每 250-500 步保存 checkpoint);4) 评估(用相同 prompt 测试每个 checkpoint,检查身份准确度、灵活性、过拟合,选出最佳 checkpoint);5) 集成(复制到 ComfyUI models/loras/,更新角色档案的触发词与强度,在全流程中测试)。
- 数据集图像要求:数量最少 10-15 张、最佳 20-30 张、最多 50+;分辨率最低 512x512、最佳 1024x1024;格式 PNG 或高质量 JPEG,最佳 PNG。
- 内容多样性检查清单:多角度(正面、3/4、侧面、背面);多种表情(中性、微笑、严肃、大笑等);不同光照(影棚、自然、戏剧性);多样背景(或透明/纯色);多套服装/场景;部分特写、部分中景;若来自 3D 渲染则加入风格变体。
- 预处理 3D 渲染:直接训练 3D 渲染会固化“3D”美学;先用 img2img 配合不同风格 prompt 生成风格变体,按 60% 风格变体 + 40% 原始渲染混合,以学习身份而非风格。风格 prompt 示例:"photorealistic portrait, dslr photo"、"oil painting portrait"、"digital illustration"、"pencil sketch"、"watercolor portrait"。
- 打标规则:触发词必须始终作为第一个词使用唯一 token(如 sage_character、ohwx_sage、sks_person),避免 woman、redhead、character 等过于通用的词;caption 结构为 {trigger}, {subject type}, {clothing}, {pose}, {setting}, {lighting}, {style};不要描述面部特征(让模型自己学),如避免 "woman with green eyes, freckles, auburn hair, defined cheekbones",改为 "sage_character, woman, indoor portrait, wearing blue sweater";要描述其他一切:服装、姿势、背景、光照、表情。
- 文件夹结构:dataset/{character_name}/{repeats}_{trigger_word}/,内含 001.png + 001.txt、002.png + 002.txt 等;文件夹命名如 10_sage_character 表示每张图每个 epoch 重复 10 次。
- FLUX LoRA(AI-Toolkit,推荐)配置:network.type=lora,linear=16(角色用 16-32),linear_alpha=16(FLUX 中 alpha=rank);train.batch_size=1,gradient_accumulation_steps=4,steps=1500(FLUX 收敛更快),lr=4e-4(高于 SDXL),optimizer=adamw8bit,dtype=bf16;datasets.resolution=[1024],caption_ext="txt";sample.sample_every=250,prompts 如 "{trigger}, photorealistic portrait"。FLUX 训练注意:比 SDXL 快 2-3 倍收敛,1000-2000 步通常足够,注意过拟合(质量过早进入平台),标准需 24GB VRAM,SimpleTuner 用 NF4 量化可降至 9GB。
- SDXL LoRA(Kohya_ss,成熟方案)配置:pretrained_model="RealVisXL_V5.0.safetensors",network_dim=32(rank 16-64),network_alpha=16(通常为 dim/2),resolution="1024,1024",train_batch_size=1,gradient_accumulation_steps=4,learning_rate=0.0001(1e-4),lr_scheduler="cosine_with_restarts",lr_scheduler_num_cycles=3,max_train_epochs=10,optimizer_type="AdamW8bit",mixed_precision="bf16",enable_bucket=true,min_snr_gamma=5。
- 步数计算:total_steps = (images x repeats x epochs) / batch_size;SDXL 目标 1500-3000 步;示例:20 张图 x 10 重复 x 5 epoch / 1 = 1000 步。
- 低显存训练(FluxGym / SimpleTuner,12-16GB VRAM):use_8bit_adam=true,gradient_checkpointing=true,cache_latents_to_disk=true,max_data_loader_n_workers=0,train_batch_size=1,gradient_accumulation_steps=8,quantize_base_model=nf4(仅 SimpleTuner)。
- 评估协议:对所有 checkpoint 使用相同 prompt 测试,如 Prompt 1 "{trigger}, photorealistic portrait, neutral expression"、Prompt 2 "{trigger}, photorealistic portrait, smiling, outdoor"、Prompt 3 "{trigger}, wearing formal suit, standing, office"、Prompt 4 "a person standing in a park"(不带触发词,不应产生该角色)。
- 质量指标:好的训练——仅凭触发词即可识别角色、能响应不同 prompt/场景、不会总是产生相同姿势/表情、Prompt 4 不产生该角色;过拟合迹象——无论 prompt 如何都是相同姿势/表情、输出中出现训练背景、忽略服装/场景 prompt、Prompt 4 产生该角色(过强)。
- 最佳 epoch 选择:若 sample_every=250 且 1500 步,checkpoint 250 通常欠拟合,500-750 常是 FLUX 的最佳点,1000-1500 可能过拟合;目视比较并选择身份与 prompt 灵活性平衡最好的 checkpoint。
- 训练后集成:1) 将最佳 checkpoint 复制到 {ComfyUI}/models/loras/;2) 更新角色档案,如 lora: {trained: true, model_file: "sage_character_flux.safetensors", trigger_word: "sage_character", best_strength: 0.8};3) 在全流程中测试:LoRA(0.7-0.9)+ PuLID/IP-Adapter(0.5-0.7);4) 在角色的 generation_history 中记录成功设置。
- 结合 LoRA 与零样本方法:以 LoRA 作为基础身份,零样本用于增强;流程为 [Load Checkpoint] → [Load LoRA (0.7-0.9)] → [Apply PuLID/IP-Adapter (0.5-0.7)] → [Generate];两者权重都调低可避免冲突并强化身份。
- 故障排查:LoRA 未激活——检查触发词拼写,确保在 KSampler 之前加载;角度下身份漂移——数据集中加入更多角度变化,降低 network_dim;过拟合——减少 epoch、增加数据集、降低 network_dim;风格污染——改进 caption 多样性,不要在 caption 中描述风格;质量差/伪影——检查训练图像压缩,降低 LR。
- 参考:references/lora-training.md 为完整参数参考,references/models.md 为训练工具下载链接,projects/ 中的角色档案含触发词与参考图。
适用边界 · 注意事项
- 一次性快速生成或只有 1-5 张参考图时,应使用零样本(InstantID/PuLID)而非训练 LoRA。
- 仅测试概念、尚未确定投入时,先用零样本,确定后再训练。
- 显存不足且未使用量化/低显存配置时,不适合直接训练 FLUX LoRA。