【论文阅读】Speech Driven Video Editing via an Audio-Conditioned Diffusion Model

DiffusionVideoEditing:基于音频条件扩散模型的语音驱动视频编辑

code:GitHub - DanBigioi/DiffusionVideoEditing: Official project repo for paper "Speech Driven Video Editing via an Audio-Conditioned Diffusion Model"

paper:[2301.04474] Speech Driven Video Editing via an Audio-Conditioned Diffusion Model (arxiv.org)

目录

1 介绍

2 背景

3 方法

4 实验

5 结论 


1 介绍

本文提出一种使用去噪扩散模型进行端到端语音驱动视频编辑的方法。给定一个说话的人的视频和一个单独的听觉语音记录,嘴唇和下巴运动被重新同步,而不依赖于中间结构表示,如面部特征点或3D人脸模型。

在CREMA-D视听数据集上提供了基线模型。这是第一项证明和验证将端到端去噪扩散模型应用于音频驱动视频编辑任务的可行性的工作。

贡献:

  • 一种新颖的非结构化端到端方法,用去噪扩散模型进行音频驱动视频编辑。网络中以语音为条件,并训练它逐帧修改面部,使唇部和下颌运动与条件音频信号同步。

  • 分别使用GRID [14]和CREMA-D [6]数据集训练了单个说话人和多个说话人的概念验证模型,在未见过的说话人上进行测试时取得了强有力的验证结果。

    • 展示了我们方法在视频编辑任务上的适用性,并通过条件修复策略实现了竞争性的结果,该策略从先前的帧和音频谱嵌入中收集信息,生成当前帧。。

2 背景

2.1. 音频驱动的视频生成

音频驱动的视频生成方法,根据是否使用基于音频驱动的面部结构表示来进行分类。

与前者相关的方法,共同之处在于:将中间的结构表示作为输入传递给单独的神经渲染模型,通常将其作为图像到图像转换任务进行训练,生成最终的逼真图像帧。

另一方面,非结构化/端到端方法利用潜在特征学习图像重建技术以端到端的方式从输入的语音信号和参考图像/视频生成逼真的视频序列。尽管当前的端到端方法在输出分辨率质量上不及结构化方法,但有很大的改进空间,特别是通过利用扩散模型合成高质量样本并保持良好的模式覆盖/多样性能力。

2.2 扩散模型

扩散模型也被应用于相关的说话人生成任务,其中[Diffused heads: Diffusion models beat gans on talking-face generation.]是与我们工作同时进行的一种方法。

扩散模型是一类生成概率模型,包括两个步骤:1)前向扩散过程,在一系列时间步中稳定添加小量随机高斯噪声,直到数据成为标准高斯分布的样本。2)反向扩散过程,训练一个去噪模型,在一系列时间步中逐渐去除噪声,来恢复数据的结构。经过训练的模型可以从随机高斯噪声中采样信息,并在一系列时间步骤中逐渐去噪以获得所需的输出。

由于扩散模型是在单一损失下进行训练,且不依赖于鉴别器,它们在训练过程中更加稳定,不会遭受GAN训练中常见的模式崩溃和梯度消失等问题。与GAN相比,扩散模型产生高质量的输出样本并展现了更好的模式覆盖。但是,由于需要在相同样本上多次运行反向扩散过程以完全去噪,扩散模型的采样速度较慢。

3 方法

3.1 扩散过程

扩散模型有两个步骤,一个是数据逐渐被破坏的正向扩散过程,另一个是学习到的重建数据的逆扩散过程,用于训练和推理。对图像和语音特征进行降噪U-Net,将目标帧的被屏蔽部分降噪到所需的输出中。

3.2 模型架构

图1. pipeline。虚线左侧表示训练过程,右侧表示推理过程。表示连接运算符。当前帧通过前向扩散过程,计算噪声并添加到面部的遮挡区域,得到噪声帧Yt(方程3)。然后,将前一帧和身份帧按通道连接,形成一个大小为128x128x9的特征,并直接传递给U-Net。音频特征和噪声水平信息通过条件残差块输入到U-Net中,如方程7所述。

在推理过程中,从噪声图像Yt中移除预测的噪声,得到去噪图像Yt−1。然后,将前一帧和身份帧连接到Yt−1上,重复此过程,直到图像完全去噪(方程6)。

 

将音频驱动的视频编辑问题构建为有几个关键变化的条件修复任务。视频编辑必须为网络提供上下文信息来指导生成过程。为此,我们将条件步骤分为两个类别:基于帧和基于音频的条件

基于帧的条件:对于给定帧yi,我们的模型输入三个图像:

  1. 要修复的当前遮挡噪声帧
  2. 视频序列中的前一帧y(i−1)
  3. 一个恒定的身份帧y0

方法是自回归的,逐帧操作。前一帧的作用是确保连续帧之间时间稳定。身份帧的作用是在生成过程中不偏离目标身份,这在自回归模型中经常发生。在训练多个身份的情况下,它对于模型泛化性至关重要。这三个帧按通道连接起来,以[128x128x9]的形式传入U-Net中,如图1左侧所示。

基于音频的条件:对于视频序列(y0,...,yn),存在一个对应的、从原始语音信号提取出的音频频谱特征序列(spec0,...,spec2n)。每个音频特征跨越40毫秒窗口,每20毫秒重叠。为了将音频信息提供给网络,我们从(spec2i−2到spec2i+2)中提取一个音频窗口,跨越120毫秒,表示为zi,并围绕当前视频帧yi居中。这样做是为了在窗口内捕获前后帧的音频信息,以确保对爆炸音("p、t、k、b、d、g")的唇部运动的准确生成,考虑到这些唇部运动在声音产生之前发生。我们使用条件残差块将这些信息引入U-Net,该块根据音频和噪声水平嵌入,调整U-Net的隐藏状态,遵循[Diffused heads: Diffusion models beat gans on talking-face generation]的方法进行缩放和偏移:

其中hs和hs+1表示U-Net的连续隐藏状态,

,MLP表示具有一些线性层,由SiLu()激活函数分隔的浅层神经网络,GN是组归一化层。如图1所示。

U-Net的设置:本文使用[Diffusion models beat gans on image synthesis.]描述的256x256 U-Net架构的轻量级128x128版本,省略了类别条件机制。

与[Palette: Image-to-image diffusion models.]类似,通过将前一帧和身份帧连接到遮挡帧上,来训练模型生成所需的帧。通过在U-Net内的条件残差块中发送音频特征,来驱动面部动画,详细描述见[Diffused heads: Diffusion models beat gans on talking-face generation. a]。表1中列出了与U-Net配置相关的所有细节。

我们训练了两个模型,一个是在GRID数据集的身份S1上训练的单说话人模型,另一个是在CREMA-D数据集的训练集上训练的多说话人模型。区别是是否使用注意力机制。

在实验过程中,我们发现在多说话人模型中使用注意力机制,对其泛化性至关重要。训练使用了4个32GB V100 GPU,每个GPU的批处理大小为40。

3.3 数据处理

3.3.1 数据集

使用了GRID [14]和CREMA-D [6]音频-视觉语音数据集。

3.3.2 音频预处理

从GRID和CREMA-D数据集中的每个视频中提取音频文件,并将其重采样为16KHz。从音频中计算重叠的梅尔频谱特征,使用n-fft 2048、窗长640、跳长320和256个梅尔频带。根据这些值,1秒钟的音频特征具有[50,256]的形状,与视频帧序列对齐。

3.3.3 视频预处理

首先,对每个视频帧进行以面部为中心的128x128像素裁剪。将视频中的面部与规范化的面部对准,并使用7帧的平滑窗口来完成,根据[End-to-end speech-driven facial animation with temporal gans]的方法。原因:去除任何无关的背景,减小图像大小以便于更快的训练和收敛速度。

最初的实验使用了256x256的图像尺寸,但是模型的训练成本太高。可以在我们的解决方案之上应用诸如[Learning trajectory-aware transformer for video superresolution]的视频超分辨率技术,以获得高分辨率的样本。

接下来,对面部的矩形区域遮罩。使用现成的面部特征点提取器[Mediapipe: A framework for building perception pipelines.]提取面部特征点坐标,以确定下颌的位置。根据这些信息,遮罩了面部的矩形区域,覆盖了鼻子下方的区域,如图1所示。这个面部遮罩是在训练时动态应用到数据加载器中的帧上计算和应用的。

在训练过程中,使用矩形面部遮罩来隐藏说话人的下颌线是至关重要的。这是因为网络很容易捕捉到唇部和下颌运动之间的强相关性,从而完全忽略语音输入。通过隐藏下颌线,迫使模型仅基于伴随的语音学习生成唇部运动。由于扩散过程依赖于单一损失函数,应用矩形面部遮罩是防止 基于帧的输入 主导 语音输入 的最简单方法。

3.3.4 音频-视频对齐

如前文第3.2节所述,给定一个帧序列(y0,...,yn),存在一个对应的从原始语音信号提取出的音频频谱特征序列(spec0,...,spec2n)。每个音频特征跨越40毫秒窗口,每20毫秒重叠。对于任何给定的帧Yi,它与(spec2i−2到spec2i+2)所覆盖的音频特征对齐。为了对齐第一个和最后一个视频帧,只需在它们各自的音频特征的开头和结尾附加静音。

选择音频窗口时,太大会导致网络无法使用最有意义的信息,太小可能无法为网络生成由爆炸音引起的更复杂的唇部运动提供足够的上下文。

4 实验

 

4.1 评估指标

计算SSIM(结构相似性指数)[74]、PSNR(峰值信噪比)和FID(Frechet Inception Distance)[23]分数,以衡量生成帧的整体质量。我们还计算CPBD(累积概率模糊检测)[46]分数以及SyncNet [13, 50]的置信度(LSE-C)和距离(LSE-D)分数。在计算图像质量指标时,为了保持公平性,我们尽可能只计算生成图像的部分。

4.2 单说话人模型

使用GRID音频-视觉语料库的身份S1上的数据来训练单说话人模型。总共有1000个视频,每个视频大约3秒钟,总共约50分钟的音频-视觉内容用于训练。我们使用950个视频对模型进行训练,并保留了其中的50个用于测试。训练895个Epochs。

在该模型的上/下采样块中没有使用注意力层,只在U-Net的中间块中使用了注意力层。这样做是为了节省训练时间。但是为了获得更好的结果,建议在多说话人模型中使用注意力层。

4.3 多说话人模型

在CREMA-D数据集的所有身份上训练了多说话人模型。训练735个Epochs。我们对训练多说话人模型进行了一些关键变化。首先,在32x32分辨率以及中间块中使用了自注意力层。其次,切换到余弦噪声计划,并减少了模型在训练过程中采用的扩散步骤数目至1000。最后,将通道倍增数减少为[1,2,3]。还尝试了在上/下采样块中没有注意力的模型训练。该模型甚至无法收敛到训练集身份。推测将U-Net中使用的内部通道数量从64增加到128或256将显著改善结果,并且可以通过更长时间的训练来提高性能。

4.4 结果讨论

表2显示了我们的模型在未见测试集上与文献中其他方法进行比较时的得分结果。

多说话人模型对未见说话人的泛化效果很好,在图像质量指标上得分很高,在SSIM和CPBD方面除Wav2Lip外,超过了所有其他方法。单说话人模型也取得了类似强大的结果。我们认为这是因为扩散模型具有对复杂、高维数据分布建模的能力,使其能够学习数据集的统计特性,并生成与训练集中相似的图像。此外,由于扩散模型在训练过程中逐渐去除目标图像中的噪声,这可能有助于它生成更平滑、更视觉上令人愉悦的结果,而不像基于GAN的模型一样一次性生成帧。

在SyncNet [13]置信度(LSE-C)和距离(LSE-D)得分方面的评估中,我们的多说话人结果与文献中的其他流行方法相媲美,略优于MakeItTalk,但低于EAMM。 PC-AVS和Wav2Lip得分最高。值得注意的是,它们的方法明显优于真实数据。我们认为这是因为所有其他方法都经过特别训练,以优化惩罚模型对不良唇部同步情况的损失函数。在PC-AVS和Wav2Lip的情况下,它们都依赖于强大的唇部同步判别器,鼓励模型根据语音生成清晰、明确的唇部运动。

我们的方法没有使用这样的损失函数或判别器,在训练过程中固有地学习了语音与唇部运动之间的关系。因此,虽然我们在未见说话人上的唇部同步得分较低,但我们提供了一种新颖的方法来完成任务,因为我们并没有明确训练模型改善唇部同步。

值得注意的是,我们的单说话人模型在上述同步指标上表现非常好,这使我们推测,通过花更多的时间学习数据分布,我们的多说话人模型在理论上也可以达到类似的结果。

在推断过程中,我们注意到多说话人模型有时难以在整个生成过程中保持一致的身份,尤其是如果原始视频中存在头部姿势的极端变化。这是由于小错误的累积,因为我们的方法在推断时完全是自回归的,完全依赖于先前生成的帧和身份帧来修改当前帧。图2突出了一个失败的实例,而且这种现象在我们提供的一些视频中也很明显。我们推测可以通过以下三种方式缓解这个问题:1)在训练期间,在前一帧上引入小量的面部扭曲,以模拟在生成过程中自然发生的扭曲。这将促使模型查看身份帧以进行修正。2)简单地延长模型的训练时间。3)在像VoxCeleb或LRS这样的具有不受限制条件的训练集中训练更多样化的说话人数据。

当用新的音频替换网络在训练过程中见过的身份进行测试时,该模型能够实现良好的唇部同步,并且在测试未见身份时出现的身份偏差明显减小,或者在视频过程中根本不会发生。我们的单说话人模型中也不存在这个问题。

多说话人模型对说话者音量和语调非常敏感,特别是当面对来自未见说话者的语音时。当说话者大声喊叫或清晰地对着麦克风说话时,唇部运动非常准确,看起来同步良好。当音量较低时,说话者似乎在咕哝,完整的唇部运动范围没有正确生成。通过分析同步度量指标,我们得到了证实,使用被标记为“愤怒”或“快乐”的音频生成的视频比呈现“悲伤”,“恐惧”或“失望”情绪的视频得分显著更高。我们怀疑这是因为我们在条件网络中使用了谱特征嵌入,而使用预训练的语音识别音频编码器可以缓解或显著降低这种影响。这是因为这些模型通常经过训练,从语音中提取内容,忽略被认为是无关的音调和语气等信息。

5 结论 

未来工作

模型速度和野外训练:扩散模型的训练和采样速度都很慢。单说话人模型每个Epoch的训练时间约为6分钟,而多说话人模型为40分钟。曾尝试在潜空间中进行训练以加快训练速度,但是样本质量下降,因此在像素空间中操作。改进模型的训练速度对我们来说是首要任务,这将使我们能够在更大、更多样化的“野外”数据集上进行训练,如VoxCeleb [45]或LRS [12]。

外观一致性:正如之前讨论的,我们的多说话人模型在未见身份上生成的外观有时会与原始外观有所偏差。我们将探索这种效果是由于训练不充分还是训练数据集的多样性不足。

语音条件:计划探索使用更广泛的语音特征作为模型条件的潜力,例如尝试不同大小的窗口在计算谱特征时,或者使用预训练的音频编码器,如Wav2Vec2 [3]、Whisper [52]或DeepSpeech2 [1]。相信结合这些特征可能会提高我们模型的唇部同步性能,并生成更逼真、表现力更强的唇部运动。

结论

结果展示了去噪扩散模型在捕捉音频和视频信号之间复杂关系以及为语音驱动的视频编辑任务生成具有准确唇部运动的连贯视频序列方面的多功能性。

限制:与其他公开可用的语音和视频数据集相比,CREMA-D数据集相对较小,这限制了我们方法在其他领域的推广能力。此外,我们的方法需要大量的计算资源和时间来进行训练。这对于实时应用程序或大规模数据集的训练是一个挑战。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/324672.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于YOLOv8深度学习的苹果叶片病害智能诊断系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战

《博主简介》 小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍感谢小伙伴们点赞、关注! 《------往期经典推…

软件测试|如何使用selenium处理iframe富文本输入框

简介 在网页开发中,富文本框是常见的元素,用于输入富文本内容,如富文本编辑器或邮件编辑器。如果我们要使用Python和Selenium进行自动化测试或操作这种富文本框,可能会遇到一些挑战。本文将详细介绍如何使用Python和Selenium来向…

GoZero微服务个人探究之路(零)个人对微服务产生原因的思考,对前三篇的补充

为什么产生了微服务架构--必要性 这里我觉得看GoZero作者写的博文就可以有很好的体会 具体的,他画了这一张图(以电商后台系统为例子) 所以,我个人产生了如下思考 1.业务逻辑越来越复杂,层层嵌套,分解成微…

基于SSM的驾校信息管理系统设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue、HTML 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是…

快速前端开发02-CSS快速入门

CSS快速入门 1.CSS案例1.1 内容回顾1.2 案例:二级菜单1.2.1 划分区域1.2.2 搭建骨架1.2.3 Logo区域1.2.4 菜单部分 1.3 案例:顶部菜单 二级菜单小结 1.4 案例:推荐区域1.4.1 划分区域1.4.2 搭建骨架1.4.3 案例的实现小结 2. CSS知识点2.1 ho…

Puppeteer让你网页操作更简单(1)屏幕截图

网页自动化设计爬虫工具 中就使用了Puppeteer进行对网页自动化处理,今天就来看看它是什么东西! 我们将学习什么? 在本教程中,您将学习如何使用JavaScript自动化和抓取 web。 为此,我们将使用Puppeteer。 Puppeteer是一个Node库API,允许我们控制无头Ch…

修改和调试 onnx 模型

1. onnx 底层实现原理 1.1 onnx 的存储格式 ONNX 在底层是用 Protobuf 定义的。Protobuf,全称 Protocol Buffer,是 Google 提出的一套表示和序列化数据的机制。使用 Protobuf 时,用户需要先写一份数据定义文件,再根据这份定义文…

最新情侣飞行棋源码完全解析+搭建教程:让爱情在游戏中升温!

游戏玩法 摇筛子自动走棋:再也不用手动掷骰子,轻轻一点,棋子自动前进。让游戏更加轻松愉快。任务挑战:每个格子都藏有不同的任务。这些任务既有趣又挑战性,需要你们共同思考、协作完成。当然,你们也可以选…

URL编码_解码详解

当 URL 路径或者查询参数中,带有中文或者特殊字符的时候,就需要对 URL 进行编码(采用十六进制编码格式)。URL 编码的原则是使用安全字符去表示那些不安全的字符。 安全字符:指的是没有特殊用途或者特殊意义的字符。 URL基本组成 …

linux终端查看文件

ls 命令:ls 命令用于列出当前目录下的文件和子目录。默认情况下,它以字母顺序列出文件和目录的名称。例如,要列出当前目录下的所有文件和目录,可以运行以下命令: ls ls -l 命令:ls -l 命令以长格式显示文件…

S-DES加密算法的分析与代码实现(C语言)

目录 基本概念 打印函数 子密钥生成 初始化必要数组 获取初始密钥k 获取初始密钥k的十个二进制位 获取PC-1 转换字符数组至整型数组 利用PC-1改变数组K中元素的排列顺序 拆分元素顺序改变后的数组K 拆分后数组元素向左循环位移 将左移后的数组合并 获取PC-2 获取…

矩阵行列式的四大应用

目录 一. 介绍 二. 行列式的基本性质 2.1 单位阵的行列式 2.2 交换行位置的行列式 三. 矩阵求逆与行列式 四. 体积与行列式 五. 矩阵主元与行列式 六. 解方程与矩阵行列式 七. 小结 一. 介绍 行列式可以反应矩阵的很多性质,比如可以求矩阵的逆&#xff0c…

vue el-table 多选框回填

主要代码: //选中列,所有列,表名toggleSelection(selectRows, totalRows, tablename) {this.$refs.table.clearSelection();if (selectRows.length > 0) {this.$nextTick(() > {selectRows.forEach(item > {totalRows.forEach(item1 > {if (…

ucloud轻量云(wordpress)配置ssl

ucloud 轻量云(wordpress)配置ssl 1、上传ssl证书到/usr/local/software/apache/conf,这里的文件名和内容与ucloud控制台下载下来的文件名和内容保持一致 2、修改httpd.conf文件 vim /usr/local/software/apache/conf/httpd.conf 找到下面两行,去掉注…

【极光系列】springboot集成redis

【极光系列】springboot集成redis tips:主要用于快速搭建环境以及部署项目入门 gitee地址 直接下载源码可用 https://gitee.com/shawsongyue/aurora.git模块:aurora_rediswindow安装redis安装步骤 1.下载资源包 直接下载解压:https://pa…

【深入剖析Java】「重塑技术功底」攻破Java技术盲点之剖析注解技术的实现原理和开发指南

攻破Java技术盲点之剖析注解技术的实现原理和开发指南 什么是Annotation注解Annotation的定义Annotation的作用Annotation不会影响程序代码的执行什么是metadata(元数据)Annotation和Annotation类型AnnotationAnnotation类型注解的分类(参数个…

C++|29.纯虚函数/接口(待完成)

纯虚函数是一种特殊的虚函数。 普通的虚函数允许子类的同名函数对其进行重写,同时普通的虚函数本身是可以单独进行使用的。 而纯虚函数是一个空壳,强制要求所派生的类在继承的过程中必要将该虚函数进行实现。 如上图,纯虚函数只需要在vir…

汇编和c++初学,c++字符串加整型,导致的字符串偏移

从汇编角度分析"helloworld"1 “helloworld”1对应 mov dword ptr [a],1 mov eax,dword ptr [a] add eax,offset string "helloworld" (03CCCBCh)eax地址偏移加了1, lea ecx,[test]最终取的内存偏移地址&#xf…

解决vscode中导入的vue项目tsconfig.json文件首行标红问题

问题描述 vscode中导入的vue项目tsconfig.json文件标红,文件中第一行 { 处标红 问题分析 项目中自定义的tsconfig.json文件与vscode本身会自动进行JavaScript的语义检查发生冲突,而tsconfig.json文件无法覆盖vscode本身的javascript检查,故…

跨境电商如何开数百个账号窗口?多窗口同步功能了解一下!

还在为管理众多店铺账号头疼?那你可就得了解一下多窗口同步这个功能了。想必很多卖家都遇到过需要同时打开多个窗口分别进行同步操作的问题,但有不少人不知道怎么做,今天龙哥就来为大家揭秘如何实现一键多窗口同步,掌握了技巧就会…