人物一致性生成:让同一个角色出现在不同场景和姿态下,为什么这么难

我最早入坑 AI 绘画的时候,花最多时间做的事不是调提示词,而是"追同一张脸"。

AI technology illustration

我用 Midjourney 精心生成了一个自己非常满意的角色——一个穿深色大衣、微卷短发的东方女人,构图、光影、氛围全都对了。然后我把场景描述从"城市街头"改成了"雪地"。出来的那个女人……完全变了一个人。五官不对,脸型不对,连眼神都变了。

我当时的反应和大多数人一样:是我的提示词写得不详细。于是我在提示词里加上"瓜子脸、高鼻梁、丹凤眼"。结果呢?出来的是另一个人。再改,又是一个人。那段时间我一度怀疑自己的中文水平不够好。

直到后来我开始认真研究图像生成的原理,才突然想明白:问题不在你的文字功夫,而是文字这套符号系统,压根就装不下一张脸。

一张脸的信息量,文字装不下

你凭一段文字能确认一个陌生人的长相吗?"三十多岁的中国男人",这句话在全中国有上亿个对应个体。你以为你在描述一个人,实际上你只是圈出了一个人群范围。

扩散模型生成图像时,文本提示词先被编码成词向量,再通过交叉注意力去影响图像特征。词向量的抽象级别太高了。"三十多岁的男人"这个词向量,指向的是一个"平均概念",而不是一张具体的脸。模型从平均概念出发,配合随机噪声,每次只能"掷"出一个符合大方向的样貌。掷出来的是谁,跟你是谁没有任何关系。

不信你做个实验:拿起你手机里某个朋友的照片,尝试用文字描述到让另一个人能认出来的程度。"圆脸、单眼皮、鼻梁不高、嘴唇略厚"够吗?远远不够。真正决定一张脸的是那些细节的排列组合:眉眼距、颧骨宽度、下颌角度、皮肉包着骨头的纹理。这些信息文字表达不了。

所以人物一致性的第一层难题,是扎在底层范式上的:身份的语义粒度,远小于一张脸的粒度。文本提示这条路,从根上就不具备锁定身份的能力。

DreamBooth 与 LoRA:把身份焊进模型参数

文字不行,那就让模型"看图"。

2022 年,Google Research 和波士顿大学提出了 DreamBooth。思路非常暴力:你给模型 3 到 5 张同一个人的照片,配上一个特殊标记词(比如 "sks person"),然后把扩散模型微调一遍。训练完之后,模型的参数里就刻进了这个人的长相。下次输入 "sks person",它就能以这个人为主角生成新画面。

效果确实惊艳。这是一条完全不同的路径:身份不再依赖任何即时条件,直接被写进了模型本身。代价也随之而来:每换一个新角色,都得重新训练一个模型。你想生成十个角色,就要训练十个模型,每个都要花几分钟到几十分钟的 GPU 时间,还要准备足质量的照片。

LoRA 的做法更轻一些。它不修改原模型,而是在旁边加一条低秩的小路,只更新这条小路的参数。一个角色一个 LoRA 文件,几十 MB,训练也快得多。但本质没变——每一个角色都需要一次独立的训练过程

这条路在离线创作场景还能接受,到了产品场景就卡死了:你不可能让用户上传三张自拍,然后排队等 15 分钟,只为了让 AI"记住"他的脸。产品要的是"上传一张图,立刻能用"。

IP-Adapter:参考图来了,但脸没进来

于是有了图像提示的思路:生成的时候直接丢给模型一张参考图,让它边看边画。

IP-Adapter 是这类方法的代表。它在扩散模型里加了一条独立的图像分支:参考图被编码成一个全局图像嵌入,然后在交叉注意力层单独注入,不再跟文本提示混在一起。文本管场景,图像管参考,思路干净漂亮。

但你如果真的用 IP-Adapter 去做人物一致性,会发现一个问题:它生成的画面风格很贴近参考图,但图中那个人的脸,不像。

原因出在编码器上。IP-Adapter 用的是 CLIP 的图像编码器。CLIP 是为了对齐图像和文本训练的,它理解的是"这张图的整体语义"——人物、场景、构图、风格。它不会专门去抠一张脸的五官比例和骨相。结果就是:参考图的信息进来了,但人脸的信息被淹没在全局语义里,并没有真正进来

后来社区也意识到了这一点,于是出现了 FaceID 之类的变体——把参考图换成人脸识别模型提取的人脸嵌入再喂进去。效果立刻上了一个台阶。这其实暗示了一件事:想锁住身份,你需要的人脸特征,必须来自专门学"人脸识别"的模型。

InstantID:替身份修一条专用车道

2024 年初,InstantID 把这个思路系统化了。它把参考图像拆成了两路:

  • 一路用类似 ArcFace 的人脸识别模型提取身份向量。这是一个 512 维的"身份指纹",同一个人的不同照片得到的向量非常接近,不同人的向量离得很远。
  • 另一路用人脸关键点检测提取五官结构——眼睛、鼻子、嘴的位置,头部朝向,脸型轮廓。这部分信息交给 ControlNet,控制生成图里人物的姿态和位置。

文本提示词则在旁边单独描述场景、服装、光线。三路条件各自独立,最后在扩散模型的注意力层汇合。单次生成大致是这样运行的:

  1. 参考图过一遍人脸识别模型,得到身份向量;向量经过一个小映射网络,变成注意力模块能认得的 "ID token"。
  2. 参考图再过一遍关键点检测,抽出五官位置和头部姿态;这些结构信息交给 ControlNet,决定人物在画面里的位置和姿势。
  3. 文本提示词单独负责场景、服装、动作、光线——回答"他在哪、在干嘛"。
  4. 三个条件在注意力层汇合,逐层去噪,最终生成一张长着这张脸、摆着这个姿势、待在这个场景里的图。

这个设计最妙的地方,是把"他是谁"和"他在哪、他什么姿势"彻底拆开了。ArcFace 的身份向量只负责脸的长相,关键点只负责摆姿势,文本只负责布置场景,互不干扰。

同一时期,腾讯的 PhotoMaker 走了另一条路:允许传多张参考图,把多张图里的人脸嵌入"堆叠"成一个更浑厚的 ID 表示。几张图的信息可以互补——一张正脸、一张侧脸、一张带表情的,合成后的身份表示比单张更稳。

我把这条技术演进路线拉成一张表:

方案 身份信息来源 需要训练? 身份保持能力
纯文本提示 文字描述 极弱,只能给出"人群方向"
DreamBooth 微调后的模型参数 是,每个角色重新训练 强,但成本极高
LoRA 低秩权重增量 是,每角色一个 LoRA 较强,成本明显更低
IP-Adapter CLIP 全局图像嵌入 弱,风格像了但脸不像
InstantID 人脸识别向量 + 结构关键点 强,单参考图即可
PhotoMaker 多图身份嵌入堆叠 强,多图更稳

还是很难,四个绕不过去的坎

现在你可能会说:问题不是已经被解决了吗?那你用 InstantID 连出 10 张图试试。第一张冷静,第二张微笑,第三张就变形了。真实使用中,人物一致性依然摇摇晃晃。原因有四个。

第一个坎,数据。同一个普通人的多视角图片,在互联网上几乎不存在。公开训练集里,"同人多图"数据大多来自娱乐圈——同一个艺人被拍了成千上万张照片。所以你拿明星测试,效果总是很好;拿自己手机拍的普通照片测试,效果立刻掉一截。不是模型偏爱明星,而是训练数据里"身份一致性"的信号,本身就主要由名人贡献。

第二个坎,身份和属性的边界。参考图里戴了副眼镜,模型很可能把眼镜当成身份的一部分。换成场景后眼镜被原样保留,或者生硬地消失。胡子、耳环、刘海、发色,这些边缘案例每天都在发生。对扩散模型来说,"这是天生的骨相"和"这是暂时的装扮"之间没有一条干净边界。它只能靠统计规律去猜,猜不中就崩。

第三个坎,保持与变化天然拧巴。一方面要"像",另一方面要"变"——换场景、换姿态、换表情。这两个信号在像素层面是对抗的。身份条件加得重,脸是稳了,但姿态僵硬、场景缺乏变化;身份条件减得轻,姿态和场景活了,但脸开始漂移。所有现有方法都只是在两个方向之间找一个折中点,没有谁能真正打破这个对抗。这也解释了为什么那种"同一角色连续出现在不同画面里"的长图,至今还是翻车重灾区。

第四个坎,评估指标会骗人。现在论文里衡量人物一致性,最常用的指标是 ArcFace 相似度。我最早也被这个指标骗过:跑实验,相似度 0.8,心想"稳了"。点开图一看,完全是另一张脸。为什么?因为 ArcFace 是做人脸识别的,它的任务是区分不同的人,找的是"最容易把两个人分开的特征",而不是你眼睛在意的所有脸部细节。

ArcFace 的 512 维向量到底在编码什么?

ArcFace 的训练目标可以概括为:把同一个人的两张脸向量拉近,把不同人的向量推远,并在角度空间里留出一个 margin。经过海量人脸数据的训练,这 512 维空间成了一个可靠的身份度量空间。但它的设计目标是"区分身份",而不是"还原一张脸的完整外观"。这就是为什么相似度分数高,不代表生成结果一定像。

下一波突破口,我押在 2D 之外

那现状的边界到底在哪?说句公道话:单张参考图、正面或轻微偏侧、光照正常的条件下,今天的工具已经能做得相当好。稍微大角度一点、表情夸张一点、或者要求角色左右转头,2D 方法的破绽就出来了——每一帧都是从零开始猜的,模型并没有一个稳定的"三维里的这个人"作为底子。

接下来两股力量,我判断都会来自 2D 之外。第一股是 3D:用三维人脸表征把身份真正"锁"在空间里,再换角度渲染,身份一致是天然的,不用每帧去猜。第二股是视频:一段连续视频本身就包含同一个人的大量视角、表情和姿态变化,这是比静态图文下标高质量得多的自动标注数据,足以训练出更稳的身份条件。

最后说点掏心窝的话。人物一致性生成之所以难,不是模型不够大、算力不够强,而是"身份"这个变量在当前的生成范式里,没有一个真正独立的位置。它要么被压缩在文本里,要么被混在参考图的全局语义里,直到我们用人脸识别模型替它修了一条专用车道,问题才被推进了一大截。这条车道会不会被 3D 重建和视频模型全面替代,我还没法下结论。但有一件事我已经确信了很久:只要你还在用文本生成图像,你就得接受——一个词,装不下一张脸

原创文章,作者:guanweilu,如若转载,请注明出处:https://guanweilu.cn/article/657.html

(0)
上一篇 11小时前
下一篇 11小时前

相关推荐