引言
在日常生活中,人们可能遇到音画不同步的糟糕配音电影,或是视频通话中嘴形与声音对不上的尴尬情况。这些同步问题不仅令人烦恼,更是视频制作、广播和实时通信领域的实际挑战。SyncNet研究论文正面解决了这一难题,它提出了一种巧妙的自监督方法,无需任何手动标注,即可自动检测并修复音视频同步问题。尤其令人称赞的是,同一模型在修复同步问题之外,还能在嘈杂环境中识别出正在说话的人——这一切都通过学习唇部动作与语音之间的自然关联来实现。
核心应用
通过训练后的卷积神经网络(ConvNet)输出,可以执行多项至关重要的下游任务,包括确定视频中的唇音同步误差、在多面孔场景中检测说话人以及唇读。在开发唇音同步误差应用时,如果同步偏移量落在-1到+1秒的范围内(此范围可调整,但通常足以满足电视广播音视频的需求),即视频滞后音频或反之,模型便能精确测定偏移量。例如,若测定结果显示音频滞后视频200毫秒,这意味着视频比音频超前200毫秒,此时通过将音频向前移动200毫秒,可以将同步偏移问题调整至接近零,从而实现音视频同步(若偏移量在此-1到+1秒的范围之内)。
自监督训练方法
SyncNet的训练方法采用自监督模式,这意味着整个过程无需人工标注或手动贴标签。模型训练所需的正样本对和负样本对均在没有人工干预的情况下生成。该方法假定所使用的数据在初始时已是同步的(音视频匹配),因此同步的音视频对自然形成正样本。而负样本对的创建,则是通过将音频片段人为地向前或向后移动若干秒,使其与视频不同步来实现。这种方法的优势在于,只要源数据本身是同步且无同步问题的,就可以获取几乎无限量的数据用于训练,从而轻松生成正负样本对。
网络架构:双流卷积神经网络
SyncNet的架构由两个独立的流组成:一个音频流和一个视频流,通俗来说,整个架构被分为两个分支。两个流都期望接收0.2秒的输入:音频流处理0.2秒的音频数据,视频流则处理0.2秒的视频数据。音频流和视频流的网络架构均基于卷积神经网络(CNN),它们都预期接收二维数据。对于视频(帧/图像),CNN的应用是自然而然的;而对于音频,SyncNet同样训练了一个基于CNN的网络。视频数据及其对应的音频数据在被送入各自的CNN架构之前,会首先进行相应的数据预处理。
音频数据预处理
音频数据预处理过程将原始的0.2秒音频转换为一个13×20的MFCC(梅尔频率倒谱系数)矩阵。其中,“13”代表与该音频块相关的离散余弦变换(DCT)系数,它们构成了音频的特征;“20”则表示时间方向上的样本数,因为MFCC的采样频率为100赫兹,所以在0.2秒内会生成20个样本,每个样本的DCT系数由13×20矩阵的一列表示。这个13×20的矩阵被作为输入送入CNN音频流。网络最终输出的是一个256维的嵌入向量,代表了这段0.2秒的音频。
视频数据预处理
视频预处理阶段,CNN模型期望的输入是111×111×5(宽×高×时间)的灰度图像数据,其中包含5帧尺寸为111×111的嘴部图像。在25帧每秒(fps)的视频速率下,0.2秒恰好对应5帧。原始的0.2秒视频经过预处理,以25fps的速率转换为111x111x5的格式,然后被送入CNN网络。网络输出一个256维的嵌入向量,作为这段0.2秒视频的表示。
音频预处理通常比视频预处理更简单、复杂性更低。从原始源视频中选择0.2秒的视频片段及其对应音频时,目标是获取一个仅包含一个说话人且在此0.2秒内没有场景变化的视频片段。任何不符合此条件的数据在当前阶段均被视为不适宜模型使用。因此,模型对视频数据进行预处理,包括场景检测、人脸检测和人脸跟踪,然后裁剪出嘴部区域,并将视频的所有帧/图像转换为111×111的灰度图像,将其输入到CNN模型。同时,对应的音频部分被转换为13×20的矩阵,输入到音频CNN。在此过程中,人脸数量超过一个的片段会被拒绝;由于在处理流程中应用了场景检测,0.2秒的片段中不会出现场景变化。最终,模型获得的数据是一个包含音频和单个说话人的视频,这满足了数据处理管道的初步需求。
联合嵌入空间学习
SyncNet模型学习一个联合嵌入空间,这意味着音频嵌入和视频嵌入将被映射到同一个通用嵌入空间中。在这个联合嵌入空间里,同步的音视频嵌入会彼此靠近,而不同步的音视频嵌入则会彼此远离。因此,同步音视频嵌入之间的欧氏距离会较小,反之则较大。
损失函数与训练优化
SyncNet使用的损失函数是对比损失(Contrastive Loss)。对于一个正样本对(即同步的0.2秒音视频示例),音频嵌入和视频嵌入之间的欧氏距离的平方应最小化;如果该距离过高,则会施加惩罚。因此,对于正样本对,模型会最小化欧氏距离的平方;而对于负样本对,则最小化max(margin – 欧氏距离, 0)²。
模型通过去除数据中的误报(false positives)来优化训练数据。原始数据可能仍包含误报(即噪声数据),去除这些误报的方法是:首先使用噪声数据对SyncNet进行初步训练,然后移除那些未能通过特定阈值的正样本对(这些样本被标记为同步的音视频正样本对)。这种精炼步骤能够过滤掉可能由配音视频、背景说话人干扰或原有同步误差等情况造成的噪声数据(误报)。
推理与应用
在SyncNet网络训练完成后,便可进行推理,并分析从训练模型中得出的实验结果。
测试数据中包含正负音视频样本对。模型的推理结果应是:对于测试数据中的正样本对,输出较低的值(最小欧氏距离);对于负样本对,则输出较高的值(最大欧氏距离)。这构成了一种模型实验或推理结果。
确定偏移量也是模型训练后的一种实验,或者说是一种应用。模型输出的结果将是具体的偏移量,例如“音频超前200毫秒”或“视频超前170毫秒”,即确定视频或音频滞后的同步偏移值。这意味着,根据模型确定的偏移量进行调整,能够修复同步问题,使原本不同步的片段变得同步。
如果根据偏移值调整音视频能够解决同步问题,则表明模型成功;反之则为失败(前提是对于给定视频,在计算欧氏距离的范围内,存在同步音频,即固定视频(0.2秒)与在-x到+x秒范围(x=1秒)内滑动采样的不同音频块(每个0.2秒)之间的距离)。源视频片段的同步偏移量可以通过计算单个0.2秒视频片段的同步偏移值来确定,也可以通过对源片段中多个0.2秒样本进行平均来确定,然后给出平均偏移同步值。后者比前者更稳定,并且测试数据基准也证明,取平均值是更稳定、更优的同步偏移值确定方法。
模型给出的偏移量会附带一个置信度分数,称之为音视频同步置信度分数。例如,可能会表述为“源片段存在偏移,音频超前视频300毫秒,置信度分数为11”。因此,了解此置信度分数如何计算至关重要,可通过一个示例进行说明。
实际案例:偏移量与置信度分数计算
假设存在一个总时长10秒的源视频片段,并且已知该片段的同步偏移是音频超前视频300毫秒。接下来,将展示SyncNet如何被用于确定此偏移量。
模型选取十个0.2秒的视频片段,记作v1, v2, v3……v10。
现在,以v5为例,解释其同步分数和置信度分数的计算方式,其余9个视频片段的计算过程与此类似。
源视频片段:总时长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秒)
- 步长:100毫秒
- 窗口数量:21个
窗口1: 3500-3700毫秒 → 距离 = 14.2
窗口2: 3600-3800毫秒 → 距离 = 13.8
窗口3: 3700-3900毫秒 → 距离 = 13.1
………………..
窗口8: 4200-4400毫秒 → 距离 = 2.8 ← 最小值(音频提前300毫秒)
窗口9: 4300-4500毫秒 → 距离 = 5.1
………………..
窗口20: 5400-5600毫秒 → 距离 = 14.5
窗口21: 5500-5700毫秒 → 距离 = 14.9
v5的同步偏移量 = -300毫秒(音频超前视频300毫秒)
v5的置信度分数 = 中位数(约12.5) – 最小值(2.8) = 9.7
因此,对于v5,300毫秒偏移量的置信度分数为9.7。SyncNet计算置信度分数的方法是:固定v5片段下,所有窗口(或音频块)距离的中位数减去所有窗口中的最小距离。
同样,每个其他视频片段都有一个偏移值及其关联的置信度分数。
- v1 (0.3-0.5秒): 偏移量 = -290毫秒, 置信度 = 8.5
- v2 (1.2-1.4秒): 偏移量 = -315毫秒, 置信度 = 9.2
- v3 (2.0-2.2秒): 偏移量 = 0毫秒, 置信度 = 0.8 (静音时段)
- v4 (3.1-3.3秒): 偏移量 = -305毫秒, 置信度 = 7.9
- v5 (4.5-4.7秒): 偏移量 = -300毫秒, 置信度 = 9.7
- v6 (5.3-5.5秒): 偏移量 = -320毫秒, 置信度 = 8.8
- v7 (6.6-6.8秒): 偏移量 = -335毫秒, 置信度 = 10.1
- v8 (7.4-7.6秒): 偏移量 = -310毫秒, 置信度 = 9.4
- v9 (8.2-8.4秒): 偏移量 = -325毫秒, 置信度 = 8.6
- v10 (9.0-9.2秒): 偏移量 = -295毫秒, 置信度 = 9.0
对这些偏移量进行平均(忽略置信度较低的v3):(-290 – 315 – 305 – 300 – 320 – 335 – 310 – 325 – 295) / 9 = -305毫秒。
如果包含所有10个片段并根据置信度进行加权平均,最终偏移量约为-300毫秒(音频超前视频300毫秒)。这就是源片段偏移量的计算方式。
重要提示 – 必须根据置信度分数进行加权平均,或者移除置信度较低的样本,否则将导致:
简单平均(包含静音片段)– 错误结果:(-290 – 315 + 0 – 305 – 300 – 320 – 335 – 310 – 325 – 295) / 10 = -249.5毫秒。这与真实的300毫秒相去甚远!
这表明,论文中通过平均多个样本实现了99%的准确率,而仅使用单个样本时准确率只有81%。适当基于置信度的过滤或加权能够有效消除误导性的静音样本。
多人物场景中的说话人识别
同步分数还有一个重要应用是多人物场景中的说话人识别。当场景中出现多张人脸但只听到一个人的声音时,SyncNet会针对每张人脸和同一音频流计算同步置信度。与对单个面孔进行时间滑动音频不同,模型同时评估所有面孔,将每个面孔的嘴部动作与当前音频进行比较,以生成置信度分数。正在说话的面孔自然会产生高置信度(强烈的音视频相关性),而静止的面孔则会产生低置信度(无相关性)。通过对10到100帧的测量结果进行平均,可以滤除眨眼或运动模糊造成的瞬时误差,这与同步检测中处理静音时段的方法类似。
结论
SyncNet展示了有时最好的解决方案来源于对问题本身的全新思考。它无需繁琐的手动标注同步错误,而是巧妙地利用了大多数视频内容最初是正确同步的假设,将普通视频转化为无限的训练数据集。其美妙之处在于其简洁性:训练两个卷积神经网络(CNN)创建嵌入,使同步的音视频对自然地聚集在一起。通过对多个样本进行平均,SyncNet实现了99%的准确率,并且能够处理从广播电视到YouTube视频等各种内容,证明了其卓越的鲁棒性。无论是进行后期制作中的同步修复,还是开发下一代视频会议应用程序,SyncNet背后的原理都为大规模解决现实世界的音视频对齐问题提供了实用的蓝图。
