破解AI唇语同步密码:SyncNet论文核心原理解析

发布于 2025-10-13 09:26
浏览
0收藏

译者 | 朱先忠

审校 | 重楼

简介

你有没有看过配音糟糕的电影,嘴唇动作和台词不同步?或者在视频通话中,对方的嘴型和声音不同步?这些同步问题不仅仅是烦人,而是视频制作、广播和实时通信中一个真正的问题。Syncnet论文(见“项目源码”一节)通过一种巧妙的自监督方法正面解决了这个问题,该方法可以自动检测并修复音视频同步问题,无需任何手动注释。特别酷的是,修复同步问题的同一个模型,通过学习嘴唇动作和语音之间的自然关联,也能识别出在拥挤的房间里是谁在说话。

核心应用程序

使用训练好的卷积神经网络的输出可以执行的下游任务具有重要的应用价值,包括确定视频中的唇形同步误差、在多人脸场景中检测说话者以及唇读。开发唇形同步误差应用程序时,如果同步偏移存在于-1到+1秒范围内(此范围可能有所不同,但通常足以满足电视广播音视频的需求),即视频滞后于音频或音频滞后于视频,时间范围为-1到+1秒,我们就可以确定偏移量。例如,假设音频滞后视频200毫秒,这意味着视频比音频领先200毫秒,在这种情况下,我们可以将音频向前移动200毫秒,从而使偏移同步问题接近于0;因此,它也可以用于使音视频同步(如果偏移量在我们在此处取的-1到+1秒范围内)。

自我监督训练方法

论文中提供的训练方法是自监督的,这意味着无需人工注释或手动标记;用于训练模型的正样本对和负样本对无需手动标记即可生成。此方法假设我们获得的数据已经同步(音频和视频同步);因此,我们已获得音频和视频同步的正样本对,并通过将音频偏移±几秒使其异步来制作音频和视频不同步的假样本对(用于训练网络的假样本对)。这样做的好处是,只要数据同步且源数据中没有同步问题,我们就可以拥有几乎无限量的数据进行训练,从而可以轻松地制作用于训练的正样本对和负样本对。

网络架构:双流CNN

谈到架构,它有两个流:音频流和视频流,或者用外行的话来说,该架构分为两个分支:一个用于音频,一个用于视频。两个流都需要0.2秒的输入;其中,音频流需要0.2秒的音频,视频流需要0.2秒的视频。音频和视频流的网络架构都是基于CNN的,需要2D数据。对于视频(帧/图像),CNN似乎很自然;但是,对于音频,也需要训练基于CNN的网络。对于视频和相应的音频,首先完成各自的数据预处理,然后将它们输入到各自的CNN架构中。

音频数据预处理

音频数据预处理——原始的0.2秒音频经过一系列步骤,得到一个13x20的MFCC矩阵。其中,13是与该音频块相关的DCT系数,代表该音频的特征;20是时间方向的,因为MFCC频率为100Hz,所以对于0.2秒,会有20个样本,每个样本的DCT系数由13x20矩阵的一列表示。13x20矩阵是CNN音频流的输入。网络的输出是一个256维的嵌入,表示0.2秒的音频。

视频数据预处理

视频预处理——此处的CNN期望输入尺寸为111×111×5(W×H×T),即5帧(h,w)=(111,111)的灰度口部图像。对于25fps的帧率,0.2秒相当于5帧。0.2秒的原始视频以25fps的帧率进行视频预处理,转换为111x111x5的图像,并输入到CNN网络。网络的输出是一个256维的嵌入向量,用于表示0.2秒的视频。

音频预处理比视频更简单,复杂度也更低。让我们了解如何从原始源中选择0.2秒的视频及其对应的音频。我们的目标是获得一个视频片段,其中0.2秒内只有一个人并且没有场景变化,只有一个人在0.2秒内说话。在此阶段,除此之外的任何内容对我们的模型来说都是坏数据。因此,我们对视频运行视频数据预处理,其中我们进行场景检测,然后进行人脸检测、人脸跟踪,裁剪嘴部并将视频的所有帧/图像转换为111×111的灰度图像并将其提供给CNN模型,相应的音频部分转换为13×20矩阵并提供给音频CNN。人脸数量>1的片段将被拒绝;由于我们在流程中应用了场景检测,因此0.2秒片段中没有场景变化。因此,我们最终得到的是一段有音频且视频中有一个人物的视频,这满足了数据管道的基本需求。

联合嵌入空间学习

网络学习一个联合嵌入空间,这意味着音频嵌入和视频嵌入将被绘制在一个共同的嵌入空间中。在联合嵌入空间中,同步的音频和视频嵌入彼此靠近,而不同步的音频和视频嵌入在嵌入空间中相距较远。同步的音频和视频嵌入之间的欧氏距离会更小,反之亦然。

损失函数和训练细化

使用的损失函数是对比损失。对于正样本对(例如,同步音频-视频0.2秒),音频和视频嵌入之间的欧氏距离平方应该最小;如果该值过高,则会受到惩罚。因此,对于正样本对,欧氏距离平方应最小化;对于负样本对,应最小化max(margin–欧氏距离,0)²。

我们通过移除数据中的假阳性来精炼训练数据。我们的数据仍然包含假阳性(噪声数据),首先在噪声数据上训练同步网络,然后移除那些未达到特定阈值的正样本对(标记为同步音视频正样本对),以此来移除假阳性。噪声数据(假阳性)的出现可能是由于配音视频、有人从后面说话、音视频不同步,或者这些因素在精炼步骤中被过滤掉了。

推理与应用

现在,神经网络已经训练完毕,让我们来讨论一下从训练模型中得出的推理和实验结果。

测试数据中存在音频-视频的正对和负对,因此我们的模型的推断应该为测试数据中的正对给出较低的值(最小欧氏距离),为测试数据中的负对给出较高的值(最大欧氏距离)。这是我们模型的一种实验或推断结果。

确定偏移量也是一种实验,或者说是我们训练好的模型推理的一种应用。输出将是偏移量,例如音频领先200毫秒或视频领先170毫秒——确定视频或音频滞后的同步偏移值。这意味着,调整模型确定的偏移量应该可以解决同步问题,并使片段从不同步变为同步。

如果通过偏移值调整音频视频可以解决同步问题,则意味着成功;否则,模型失败(假设在我们正在计算固定视频(0.2秒)和各种音频块(每个0.2秒,在-x到+x秒范围内滑动,x=1秒)之间的欧几里得距离的范围内的那个固定视频存在同步音频)。源剪辑的同步偏移可以通过计算源剪辑中1个0.2秒视频的同步偏移值来确定,也可以通过对源剪辑中的几个0.2秒样本进行平均然后给出平均偏移同步值来确定。后者比前者更稳定,测试数据基准也证明取平均值是更稳定、更好的告知同步偏移值的方法。

模型会给出与此偏移量相关的置信度分数,称为AV同步置信度分数。例如,假设源片段存在偏移量,音频领先视频300毫秒,置信度分数为11。因此,了解这个置信度分数的计算方法非常重要,让我们通过一个例子来理解。

实际示例:偏移量和置信度分数计算

假设我们有一个10秒的源片段,并且我们知道这个源片段有一个同步偏移,即音频领先视频300毫秒。现在我们来看看如何使用同步网络来确定这个偏移。

我们取十个0.2秒的视频作为v1,v2,v3……v10。

让我们了解如何计算v5的同步分数和置信度分数,并且所有10个视频片断/样本/块都会发生类似的情况。

源剪辑:共10秒

v1:0.3-0.5秒      [–]

v2:1.2-1.4秒      [–]

v3:2.0-2.2秒      [–]

v4:3.1-3.3秒      [–]

v5:4.5-4.7秒      [–]

v6:5.3-5.5秒      [–]

v7:6.6-6.8 秒      [–]

v8:7.4-7.6 秒      [–]

v9:8.2-8.4秒      [–]

v10:9.0-9.2秒      [–]

我们将v5作为一个时长0.2秒的固定视频。现在,我们将使用训练好的syncnet模型,计算多个音频块(将使用滑动窗口方法)与这个固定视频块之间的欧氏距离。具体方法如下:

v5的音频采样将在3.5秒到5.7秒(v5的±1秒)之间进行,这为我们提供了2200毫秒(2.2秒)的搜索范围。

设定重叠窗口参数如下:

  • 窗口大小:200毫秒(0.2秒)
  • 跳长(Hop length):100ms
  • 窗户数量:21

于是有如下结果数据:

Window 1:  3500-3700ms → Distance = 14.2

Window 2:  3600-3800ms → Distance = 13.8

Window 3:  3700-3900ms → Distance = 13.1

………………

Window 8:  4200-4400ms → Distance = 2.8  ← MINIMUM (audio 300ms early)

Window 9:  4300-4500ms → Distance = 5.1

………………

Window 20: 5400-5600ms → Distance = 14.5

………………

Window 21: 5500-5700ms → Distance = 14.9

v5的同步偏移=-300ms(音频领先视频300ms),Confidence_v5=中位数(~12.5)-最小值(2.8)=9.7

因此,300毫秒偏移的v5的置信度得分为9.7,这就是syncnet给出的置信度得分的计算方式,它等于固定v5的中位数(所有窗口或音频箱)-最小值(所有窗口或音频箱)。

类似地,每个其他视频箱都有一个偏移值和相关的置信度分数。

v1 (0.3-0.5s):   Offset = -290ms, Confidence = 8.5

v2 (1.2-1.4s):   Offset = -315ms, Confidence = 9.2  

v3 (2.0-2.2s):   Offset = 0ms,    Confidence = 0.8  (silence period)

v4 (3.1-3.3s):   Offset = -305ms, Confidence = 7.9

v5 (4.5-4.7s):   Offset = -300ms, Confidence = 9.7

v6 (5.3-5.5s):   Offset = -320ms, Confidence = 8.8

v7 (6.6-6.8s):   Offset = -335ms, Confidence = 10.1

v8 (7.4-7.6s):   Offset = -310ms, Confidence = 9.4

v9 (8.2-8.4s):   Offset = -325ms, Confidence = 8.6

v10 (9.0-9.2s):  Offset = -295ms, Confidence = 9.0

平均值(忽略低置信度v3)是:(-290–315–305–300–320–335–310–325–295)/9=-305ms

或者,如果包含所有10个基于置信度的加权平均:最终偏移≈-300ms(音频领先视频300ms):这就是计算源剪辑偏移的方式。

【重要提示】要么根据置信度得分进行加权平均,要么删除置信度较低的得分,因为不这样做会导致:

简单平均值(包括静音)–错误:(-290–315+0–305–300–320–335–310–325–295)/10=-249.5ms,这与真正的300ms相差甚远!

这解释了为什么该论文使用平均样本时准确率能达到99%,而使用单样本时准确率只有81%。适当的基于置信度的过滤/加权可以消除误导性的静默样本。

多人场景中的说话人识别

同步得分的另一个重要应用是多人场景中的说话人识别。当有多张人脸可见但只能听到一个人的声音时,Syncnet会根据同一条音频流计算每张人脸的同步置信度。我们并非针对一张人脸按时间顺序滑动音频,而是在同一时间点评估所有人脸——将每张人脸的口部动作与当前音频进行比较,以生成置信度得分。说话的人脸自然会产生较高的置信度(视听相关性强),而沉默的人脸则会产生较低的置信度(无相关性)。通过对10-100帧的测量结果进行平均,眨眼或运动模糊造成的瞬态误差会被滤除,类似于同步检测中处理静默期的方式。

结论

Syncnet证明,有时最佳解决方案源于彻底重新思考问题。它无需繁琐的手动标记同步错误,而是巧妙地利用了大多数视频内容一开始就同步正确的假设,将普通视频转化为无限的训练数据集。其妙处在于其简单易用:训练两个CNN,创建嵌入向量,使同步的音视频对自然地聚类在一起。该方法在对多个样本进行平均时准确率高达99%,并且能够处理从广播电视到各种YouTube视频的各种内容,事实证明它非常稳健。无论你是在后期制作中修复同步问题,还是构建下一代视频会议应用,Syncnet背后的原理都为大规模解决现实世界中的音视频对齐问题提供了实用蓝图。

项目源码和实施

  • 本文项目的GitHub实现:​SyncNet模型的Python实现
  • 官方项目页面​:Chung, Joon Son和Andrew Zisserman,《超越时空:野外自动唇形同步》;亚洲计算机视觉大会(ACCV),台北,中国台湾,2016年,第251-263页。Springer国际出版社;牛津大学工程科学系视觉几何团队。

译者介绍

朱先忠,51CTO社区编辑,51CTO专家博客、讲师,潍坊一所高校计算机教师,自由编程界老兵一枚。

原文标题:​The SyncNet Research Paper, Clearly Explained​,作者:Aman Agrawal

收藏
回复
举报
回复
相关推荐