视频深度伪造检测:时序一致性分析——眨眼、唇语同步、微表情

你大概听过一个数据:成年人平均每分钟眨眼 15~20 次。这个数字太普通了,普通到没人会拿它当身份特征。但 2018 年,有一批研究者就是靠数眨眼次数,把一批“AI 换脸”视频抓了出来。

AI technology illustration

当时 DeepFake 刚刚火起来,大家还在争论“假脸到底哪里不像真的”。有人说是皮肤纹理,有人说是边缘锯齿,但我和大多数人一样,一开始以为破绽在“画质”——缩略图都能看出来?后来才知道,最省事的破绽是——几乎不眨眼。

为什么?因为当时的换脸算法,把视频当成一张张独立的图片来处理。模型不认识前后帧,也不知道一个人刚刚眨过眼。它只负责把一张脸的表情换掉,结果就是:前 5 秒都没眨一次眼。你能盯着屏幕五分钟不眨眼吗?正常人不能,但 AI 能。

假脸为什么不眨眼?——深度伪造的“逐帧”原罪

早期的 DeepFake 本质是一个自编码器。训练时,你给模型看大量 A 的脸和 B 的脸,让它学会把一个人的脸部特征编码成向量,再解码成另一个人。换脸时,模型把 A 的表情、姿态“搬”到 B 的骨架上。但这个过程是对每一帧单独做的。

每一帧都是一次独立的前向推理。模型不知道这一帧之前发生了什么,更不知道这一帧之后会发生什么。所以它产出的“脸”,在单帧上是清晰的,但放到时间轴上就露馅了:眨眼频率异常、嘴唇和音频对不上、微表情僵硬。

眨眼检测:从“平均频率”到“生理节律”

那篇揭穿眨眼问题的论文,标题叫 In Ictu Oculi(在眨眼之间)。作者用了一个很朴素的思路:先训练一个模型识别眼睛是睁开还是闭合,然后统计一段视频里闭合状态的时长。

  1. 对每一帧检测人脸,裁出眼部区域。
  2. 判断眼睛是开还是闭,得到一个布尔序列。
  3. 计算“眨眼周期”和“眨眼频率”,跟正常人对比。

正常人的眨眼并不是均匀的:你说话时减少,读屏时更少,紧张时增多。但早期换脸视频的眨眼模式几乎是“随机点缀”,甚至一整个视频只有一两次。这个统计异常非常醒目,所以当时看视频不需要看脸,看眼睛就行。

这个方法很准,但也很脆。后来的 DeepFake 很快就学会了加眨眼——你只要在生成过程中加入一个“随机眨眼”的噪声就行。从那以后,单靠眨眼频率就把假脸抓出来,就不太现实了。于是我开始想:那唇语呢?

唇语同步:嘴巴是最大的破绽

还有一个更明显的时序不一致,是声音和嘴型不同步。换脸算法往往会让人物的口型与音频错位,尤其是当人物在说话时。你可能会想,这算什么高深技术,我直接看口型和字幕不就行了?问题是,检测不是靠人眼盯,而是靠算法算时间偏移。

一个常用的检测思路是:单独提取音频特征和唇部运动的视觉特征,用互相关函数计算它们之间的时间对齐程度。真实视频中,语音和唇动几乎严格锁定,偏移一般在几十毫秒内。而伪造视频往往会有数百毫秒的错位。

不过,这里有个反讽:为了让音频和嘴型同步,造假者通常会使用像 Wav2Lip 这样的生成模型。这类模型能把嘴唇区域重新生成,使其和音频尽量对齐。结果是,音画同步的破绽被补上了,但重新生成的嘴唇区域会留下“伪影”——四周的纹理变得模糊、牙齿的形状不稳定。这时候检测的人就要从“同步性”转向“生成痕迹”。

时序特征 早期检测方法 被绕过的原因 现在的替代思路
眨眼 统计频率/周期 生成时加入随机眨眼 分析眨眼时眼部肌肉运动模式
唇语同步 音画时间偏移 Wav2Lip 等唇形生成模型 检测重绘区域的像素伪影
微表情 特征点轨迹异常 使用更多训练视频/对抗训练 Transformer 建模长距离运动关系

微表情:更难伪造的时序指纹

微表情指的是持续只有几十到几百毫秒的、非常细微的面部动作。比如嘴角微微下撇、眉毛轻微上挑。深伪检测里的“微表情”往往不是心理学意义上的微表情,而是指短时间段内肌肉运动的微妙规律。

我最早以为,检测微表情就是放大镜看细节。后来我发现,单个像素级别的纹理不够,因为每一帧都可以被修得完美。真正的破绽在运动模式:一个正常微笑的嘴部运动曲线是平滑的,而伪造的嘴部运动可能会出现跳变——因为生成器对每一帧独立处理,导致相邻帧之间运动不连续。

2019 年有一篇论文叫 FaceForensics++,它系统对比了多种换脸算法的“眨眼、头部姿态、嘴部运动”等指标。结论是:不同算法的时序伪影不同,但都有一个共同点——短时运动曲线的高频分量异常。通俗点说,真实脸部的运动是“肉感”的,假脸的运动是“机械”的。

当造假者学会了“睁眼”——时序检测的攻防战

下面这段可能让很多做检测的人丧气:我们今天聊的眨眼、唇语同步、微表情,都已经不是可靠的孤证。

在造假者社区,用 GAN 生成假视频时加上随机眨眼已经是标配。唇形同步有专门的神经网络。微表情?只要训练数据足够多,生成器也能学会模仿大部分常见微表情。

这让我想起自己做过的一个小实验。我想验证一个假视频检测模型,结果在最新生成的 DeepFake 上失效了。原因是那个模型仍然只依赖眨眼频率这一维特征。后来我明白:时序一致性检测不能只看一个“点”,要看一个“场”——多个时序特征之间的关系,比如眨眼是否影响了随后的表情,嘴型变化是否和头部转动匹配,这些跨特征的长程依赖才是伪造者难以同时模拟的。

现代时序一致性检测到底在看什么?

现在真正有效的时序方法,方向已经升级到三个层次:

  • 长程时序建模:用循环网络或 Transformer 对连续几百帧的运动序列建模,检测突然的“跳变”或者“信息泄漏”。比如有的方法会把视频切成片段,看相邻片段间的身份特征是否漂移。
  • 跨模态对齐:同时分析音频、表情、头部姿态、眨眼、呼吸等信号,计算它们之间的相互预测误差。真实视频中,说话时的嘴型、喉结移动和语音有复杂的耦合关系,同时伪造所有通道的耦合几乎不可能。
  • 生成痕迹的时序稳定性:把检测从“内容”转向“生成器指纹”。每个 GAN 都会留下固定的频谱痕迹,这些痕迹在每一帧都存在,但在时间轴上的分布可能不均匀。通过分析这种不均匀性可以识别伪造。

所以,回到开头的问题:数眨眼能抓 DeepFake 吗?能,但只能抓“远古版本”的 DeepFake。今天再看到一张不眨眼的假脸,反而可能是造假者故意留下的破绽——因为最新方法已经把时序一致性做得很好,这个“破绽”也变成了用来说明“这是新产品”的炫耀。

技术永远是猫鼠游戏。作为检测者,能做的就是不断把时间尺度拉长,从单帧到序列,再到跨模态的时空耦合。这条路没有终点,也不该有。

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

赞 (0)
上一篇 2天前
下一篇 2天前

相关推荐