AI短剧系列 | 第 5 天:角色与画风一致性——LoRA 训练与角色设定入门

在前几天的内容里,我们已经聊清了 AI 短剧从剧本到成片的整体流水线,也把本地 GPU、云 GPU 和工具选型梳理了一遍。今天开始进入整个系列里最”劝退”、但也最决定成片质感的一环:角色与画风一致性

如果你用过文生图工具跑短剧素材,一定遇到过这种崩溃瞬间:第一镜的主角是个短发少年,第二镜就变成了长发大叔,第三镜连衣服都换了。分镜之间的割裂感,会让观众一秒出戏。想在 ComfyUI、MiniMax H3、LTX 2.3 这些平台上做出能看的短剧,第一步不是学复杂节点,而是先解决”同一个角色怎么长成同一张脸、同一套画风”这个问题。

AI短剧 第5天

一、核心概念:为什么 AI 画不出”同一个人”

要理解一致性,先理解扩散模型的本质。Stable Diffusion 这类文生图模型,是根据提示词在潜空间里”去噪”生成图像。它没有”记忆”上一次生成结果的能力,每次都是从随机噪声出发。所以哪怕你把提示词一字不改,两次生成的人物五官、发型、服装都会有差异。

解决思路有两个方向:

  1. 约束生成:用 ControlNet、参考图(Reference/IPAdapter)等方式,把人物的姿态、轮廓、五官特征”压”进生成过程。
  2. 注入知识:用 LoRA 等轻量微调技术,把某个特定角色或画风的特征”烧”进模型权重,让模型在生成时自带这个角色的记忆。

对短剧这种”一个角色要反复出现几十上百次”的场景,LoRA 是性价比最高的方案。它体积小(通常几十到几百 MB)、训练快(几十分钟到几小时)、效果稳定,是角色一致性的主力工具。

二、LoRA 是什么

LoRA(Low-Rank Adaptation,低秩适配)是一种模型微调技术。它不改动原模型的大权重,而是在旁边挂一个”低秩矩阵”补丁,训练时只更新这个小补丁,推理时再把它合并进来。

用配置文件来理解它的加载逻辑(ComfyUI 中通过 LoraLoader 节点挂载):

# LoRA 加载配置示例(ComfyUI workflow JSON 片段)
{
  "type": "LoraLoader",
  "inputs": {
    "model": ["...", 0],
    "clip": ["...", 1],
    "lora_name": "char_xiaoyu_v2.safetensors",
    "strength_model": 0.85,
    "strength_clip": 0.85
  }
}

strength_modelstrength_clip 分别控制 LoRA 对图像生成模型和文本编码器的影响强度。强度过高会导致过拟合(角色僵硬、背景也糊),过低则一致性不足,通常 0.6~0.9 之间取平衡。

三、实战步骤:从角色设定到 LoRA 训练

第 1 步:先做角色设定卡

在训练之前,先写一份”角色圣经”。角色设定卡越清晰,训练素材越好挑,后期生成也越稳定。一份合格的角色卡长这样:

角色设定卡(示例)
- 角色名:林小羽(AI短剧《逆光》男主)
- 年龄/性别:22 岁,男
- 发型:黑色短发,三七分,额前碎发
- 五官:剑眉,单眼皮,鼻梁高挺,左眉尾有一颗小痣
- 服装:藏青色连帽卫衣 + 黑色工装裤 + 白色板鞋
- 配色:主色藏青、黑、白,辅色浅灰
- 画风:半写实国漫,光影偏电影感
- 固定道具:银色耳机(常挂脖子)

第 2 步:准备训练集

训练集质量决定 LoRA 上限。一个角色建议准备 15~30 张高质量图,要求:

  • 同一角色,多角度(正面、侧面、半侧)、多表情、多景别(特写、半身、全身)
  • 背景尽量干净,避免杂物干扰
  • 分辨率统一(如 512×768 或 768×1024),格式 JPG/PNG

用 Python 脚本做基础预处理(重命名、检查分辨率):

import os
from PIL import Image

src = "./train_images"
dst = "./dataset/5_char_xiaoyu"
os.makedirs(dst, exist_ok=True)

for i, fname in enumerate(sorted(os.listdir(src))):
    if not fname.lower().endswith((".jpg", ".png", ".jpeg")):
        continue
    img = Image.open(os.path.join(src, fname))
    if img.width < 512 or img.height < 512:
        print(f"跳过低分辨率: {fname} ({img.width}x{img.height})")
        continue
    # 统一重命名为 序号_角色名
    ext = os.path.splitext(fname)[1]
    out = os.path.join(dst, f"{i:03d}_char_xiaoyu{ext}")
    img.save(out)
    print(f"处理完成: {out}")

第 3 步:打标签(Caption)

打标签就是给每张图写描述。角色一致性训练通常采用”去掉角色特征、保留通用描述”的策略——把人物共性特征写进触发词,把单张图的姿势、背景等变量写进标签,这样模型才能把”触发词 = 这个角色”绑定住。

# 触发词设计(关键!)
触发词:xiayu_character   # 一个独一无二的词,训练时反复出现

# 标签示例(单张图)
xiayu_character, 1boy, black short hair, dark blue hoodie, 
standing, front view, simple background, looking at viewer

触发词不能和常见词冲突(不要用 “girl”、”boy” 这种),最好是自造词,避免污染模型已有语义。

第 4 步:训练 LoRA

以流行的 Kohya 系列训练脚本(sd-scripts)为例,核心训练命令如下:

#!/bin/bash
accelerate launch ./sd-scripts/train_network.py 
  --pretrained_model_name_or_path="./models/sd_xl_base_1.0.safetensors" 
  --train_data_dir="./dataset/5_char_xiaoyu" 
  --resolution="1024,1024" 
  --network_module="networks.lora" 
  --network_dim=64 
  --network_alpha=32 
  --learning_rate="1e-4" 
  --max_train_steps=2000 
  --save_every_n_steps=500 
  --output_dir="./output/char_xiaoyu" 
  --output_name="char_xiaoyu_v2" 
  --mixed_precision="bf16" 
  --save_precision="bf16"

几个关键参数解释:

  • network_dim / network_alpha:LoRA 的秩和缩放,dim=64、alpha=32 是常见起点,角色类任务可以适当提高 dim。
  • learning_rate:1e-4 是安全起点,过高容易过拟合,过低练不动。
  • max_train_steps:训练步数,角色 LoRA 一般 1000~3000 步,配合 save_every_n_steps 多存几个中间版本,方便挑最优。

第 5 步:在 ComfyUI 中验证

训练完成后,把 .safetensors 放进 ComfyUI 的 models/loras 目录,用最简单的工作流验证触发词是否生效:

{
  "prompt": "xiayu_character, 1boy, dark blue hoodie, black short hair, half body, cinematic lighting, high quality",
  "negative_prompt": "lowres, bad anatomy, extra fingers, deformed, watermark",
  "steps": 28,
  "cfg": 7.0,
  "sampler": "DPM++ 2M Karras",
  "lora": "char_xiaoyu_v2.safetensors",
  "lora_strength": 0.85
}

如果不同随机种子下,人物脸型、发型、服装都稳定,说明 LoRA 训练到位;如果还飘,就加大 strength 或增加训练步数重训。

四、常见问题

Q1:角色 LoRA 会不会污染画风?

会。如果你训练时 20 张图全是同一种画风,模型会把”画风”也绑进触发词里。想要角色和画风解耦,就训练两个 LoRA:一个角色 LoRA、一个画风 LoRA,分别用不同数据集训练,生成时按需叠加。

Q2:训练素材可以只用 AI 生成的图吗?

可以,但要注意。用 AI 生成的图当训练集,角色五官容易”平均化”,丢失辨识度。建议真人/手绘素材为主,AI 图为辅,或者用 AI 图做”数据增强”而非主体。

Q3:为什么触发词没生效,出来的是别的人?

大概率是训练集数量不足、触发词没充分绑定,或训练步数不够。检查:触发词是否唯一、每张图标签是否都包含触发词、训练步数是否跑满。

Q4:MiniMax H3 和 LTX 2.3 需要自己训练 LoRA 吗?

不需要。MiniMax H3 内置了全自动导演和角色一致性控制,通过上传参考图或角色设定就能锁定形象;LTX 2.3 更擅长视频运动与镜头,角色一致性可借助首帧参考图实现。本系列后面会分别展开讲。

五、总结

今天我们把”角色与画风一致性”这个短剧制作的核心痛点拆开了:理解了扩散模型为什么天然”失忆”,认识了 LoRA 的原理,并完整走了一遍”角色设定卡 → 训练集准备 → 打标签 → 训练 → ComfyUI 验证”的闭环。

记住一个心法:一致性不是靠提示词”祈祷”出来的,而是靠角色设定 + 触发词 + LoRA 训练体系撑起来的。 工具会变,但这套方法论在任何平台上都通用。

下一期(第 6 天)我们就正式进入 ComfyUI 的世界,从安装、界面到节点式工作流,把这座”自由度高但门槛也不低”的创作工厂彻底摸透,为后续的角色一致性、视频生成打下实操基础。


下期预告:AI短剧系列 | 第 6 天:ComfyUI 入门——安装、界面与节点式工作流基础

微信二维码
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片快捷回复

    暂无评论内容