你花了几分钟用 AI 生成了一段视频:夕阳下的海边,一个女孩回头冲你笑。前两秒,画面美得不像真的。但第三秒,她转过头来,鼻子变长了,眼睛从一个变成了两个。你再生成一遍,这次更离谱——她转头之后,直接换了一张脸。

这不是你的提示词写得不好,也不是模型没训练好。这是视频生成领域最臭名昭著的难题:时间一致性(temporal consistency)。简单说就是,同一个角色在视频里应该长得一样,但 AI 做不到。
为什么视频生成会“换脸”
要理解这个问题,你得先知道视频生成模型是怎么工作的。以目前主流的扩散模型为例,它从一团纯噪声开始,一步步去噪,最后得到一帧清晰的图像。视频不是一帧,而是几十上百帧。模型需要为每一帧都执行一次这样的去噪过程。
- 输入一段纯噪声视频,形状和最终输出一样。
- 模型预测每一帧的噪声,然后逐步“洗”出内容。
- 每一步去噪,模型都要决定每个像素该是什么颜色,而这个决定会参考前后几帧。
关键问题来了:如果每一帧都是独立从噪声里“洗”出来的,模型凭什么保证第 1 帧里的女孩和第 30 帧里的女孩是同一个人?
你可能会说:让模型在生成第 30 帧时参考一下前面 29 帧不就行了?理论上确实如此。但实际有两个绕不过去的坑。
- 上下文窗口有限。Transformer 注意力机制复杂度是 O(n²)。你给模型 30 帧,每帧拆成几百个 patch,计算量直接爆炸。所以模型通常只能看到前后几帧,再远的就“忘了”。
- 身份信息没有锚点。模型知道第 29 帧这个人的轮廓和动作,但它不知道这个人的脸具体长什么样。它只能猜,而猜就会出错。
漂移:每一帧错一点点,累积起来就是换脸
我最早以为,解决这个问题只需要把上下文窗口拉长。模型看到前面 100 帧,总该记住主角长什么样了吧?结果我错了。
后来我读到 OpenAI 的 Sora 技术报告,里面提到一个观察让我印象很深:Sora 虽然能生成 60 秒视频,但长时间片段中,物体依然会出现随时间演变、消失等问题。为什么?因为即使是长上下文,模型也没有一个“身份锚点”去约束每一帧。它只能在概率采样的惯性里漂移——每一帧都只轻微偏离一点,但累积起来,脸就彻底变了。
这就像你让一个人凭记忆画同一个场景 100 遍。每遍都和上一遍差一点点,画到第 100 遍时,画里的女孩已经变成另一个人。
这里面的数学直觉是:视频生成是一个逐步去噪的过程,每一步的采样都带随机性。模型对身份特征的记忆会在每帧之间传递,但传递是有损的。长上下文只是让传递路径变长,并没有让传递变成无损。
给视频装一个“锚点”
明白了问题根源,解决方案就清晰了:得让模型在生成每一帧时,都能看到一个固定的“参照物”。这个参照物可以是第一帧,也可以是一张独立的角色图。
目前主流路线有几条,我列了一个对比表:
| 方案 | 核心思路 | 一致性效果 | 成本 | 局限 |
|---|---|---|---|---|
| 时序注意力 | 在扩散模型里加跨帧注意力层 | 中 | 低 | 只管局部,长视频会漂移 |
| 参考图注入 | 用角色图或第一帧作固定参考,每帧都与它对齐 | 高 | 中 | 视角和动作变化大时失效 |
| 光流引导 | 用光流约束相邻帧像素运动 | 中高 | 高 | 遮挡和快速运动不友好 |
| 世界模型 | 像 Sora 一样学习物理规律和场景持久性 | 高 | 极高 | 数据和算力需求巨大 |
这里最值得展开的是参考图注入。我是看 AnimateAnyone 的论文 时想通这个思路的:它把一张角色参考图单独编码,然后在生成每一帧时,通过一个叫 ReferenceNet 的参考网络和跨注意力机制,让每一帧都去“看”这张图。这样角色特征变成了固定锚点,不会随帧数累积漂移。
你可能会问:那为什么不直接让每一帧复制参考图的脸?因为视频里的人在动,表情在变,视角在转。模型需要在“保持身份”和“跟随运动”之间找平衡。这比单纯复制难得多。
参考图注入的本质,是把“身份”从运动信息中分离出来。身份是稳定的,运动是变化的。模型只需要在生成运动的每一步,都记得回头看一眼身份锚点。
另一条路线是用光流。Stable Video Diffusion 这类模型会用 3D 卷积和光流损失 来约束相邻帧的像素运动。思路是:第 t 帧的某个像素,应该是第 t-1 帧的某个像素运动过来的,而不是凭空冒出来的。这能保证局部运动平滑,但对全局身份一致性的帮助有限。
Google 的 VideoPoet 走的是另一条路:用自回归模型统一处理图像和视频,先生成第一帧,再基于第一帧预测下一帧。这种方式天然地让每一帧都依赖前面的帧,但误差同样会累积。
为什么有些视频生成工具里,人物不看镜头就不太会变脸?
因为侧脸和背影包含的身份信息少,模型“犯错”的空间也小。一旦正对镜头,脸部细节多,模型需要精确生成眼睛、鼻子、嘴的相对位置,任何一个概率采样偏了,你都会觉得“换人了”。
时间一致性是不是只跟人脸有关?
不是。人脸只是最容易感知的。物体、服装、文字、场景结构都会漂移。比如角色身上的 logo,生成到后面可能就变形了。只不过人脸是人类视觉最敏感的区域,所以显得最突出。
更长的上下文窗口能彻底解决吗?
不能。更长的上下文窗口只是让模型“看”到更多帧,但模型依然没有“该保持不变的东西”的概念。它依然可能把上一帧的微小误差带到下一帧,累积成漂移。解决漂移需要显式的一致性约束,而不是隐式的上下文记忆。
进阶:Sora 怎么做时间一致性?
OpenAI 的 Sora 把视频切成时空 patch,用 transformer 统一处理。patch 携带位置信息,所以模型天然知道哪些 patch 属于同一物体。但 Sora 没有显式参考帧机制,它的时间一致性更多来自对物理世界的隐式理解。这也解释了为什么 Sora 的长视频依然会有轻微漂移。
时间一致性还没被解决,但边界在移动
回到开头的问题:AI 生成视频里的角色为什么上一帧和下一帧长得不一样?因为视频生成模型本质上是一个“每帧都在重新猜”的系统。时间一致性不是它天然具备的能力,而是需要额外机制去强行约束的目标。
当前的能力边界在哪?一句话:几秒的短视频已经基本解决,几十秒的中视频在简单场景下可用,但一涉及大幅运动、视角变换、多人交互,仍然会崩。Sora 这类世界模型给了一条更宏大的路——让模型学会“场景持久性”,但这条路的数据和算力门槛极高。
我的判断是:短期内,参考图注入和光流引导会是实用产品的标配;长期来看,只有真正让模型理解“世界不随帧数重建”,时间一致性才会从一个需要强行修补的短板,变成模型天然具备的属性。
原创文章,作者:guanweilu,如若转载,请注明出处:https://guanweilu.cn/article/220.html