论文阅读:You said that?

这篇博客介绍了如何使用Speech2Vid模型将声音直接转化为与音频同步的视频帧。模型通过学习音频和目标脸部的联合嵌入来生成视频,主要由音频编码器、身份编码器和图像解码器组成。训练过程中,使用了VoxCeleb和LRW数据集,并利用预训练的VGG-M网络来提取身份特征。尽管进行了正面化处理,但为了解决对齐问题,还引入了一个去模糊模块。模型通过L1损失进行优化,训练时使用不同时间点的图像作为输入,以生成单帧视频,而不需要严格的时间连续性约束。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[toc】

前言

  • 以往的输出往往都需要借助中间形式, landmarks, 3d models, 这是一个从声音直接映射到视频的方法, 输入是声音和图像, 输出是一段视频。
  • 关键思想是学习到target face 和 speech segment的joint embedding, 这个embedding可以被用于产生和音频同步的帧。

Dataset

整个流程如下:
在这里插入图片描述
这里canonical face就类似正面化的脸部, 如下图:
在这里插入图片描述
这里需要用到一些变换, 因为输入的人脸要变正, 通过放缩, 旋转和平移实现相似变换。这里变换的是鼻子眼睛啥的, 嘴部没有变化。为了保留嘴部运动信息。
在这里插入图片描述

在这里插入图片描述
使用了VoxCeleb和LRW数据集, 用DLIB检测landmarks。 作者还提到SyncNet提供了视频中音频和视觉面部序列的联合嵌入, 可以确定好几个人中是谁在讲话, 同时还可以纠正语音同步错误, 我寻思LRW数据集也不用这么折腾····
在这里插入图片描述

The Speech2Vid Model

论文中提出的model叫Speech2Vid, 测试时给定两个输入, 音频段, frontal headshot(应该是比较正面的人脸), 结构如下:
在这里插入图片描述
这个decoder叫talking face image decoder, 对于给定的输入, model生成了最能代表音频的一系列帧, 该模型通过在音频序列上滑动0.35秒的窗口, 逐帧生成视频。

音频的处理

使用MFCC, 只是用了12个, 0.35s的音频被组合在一起, 采样率是100Hz所以共有35个时间步, 所以输入可以看成12*35的heatmap, 每个列代表特征
在这里插入图片描述

identity

对identity encoder的输入是1121123的静止图像, 后来还用多个cat起来的作为输入, 比如1121125

架构解析

在这里插入图片描述
主要有三个模块:audio encoder,the identity encoder, and the image decoder, 这三个是同步训练的。

  • Audio encoder是一些卷积层, 然后到256维的向量
  • Identity encoder, 理想情况下应该可以提取出识别面部的独特feature, 所以使用了在VGG Face dataset上预训练的VGG-M 网络, 数据集包括2.6百万张2.6K个不同的身份图像。固定CNN的权重,学习fc层的参数, 然后到256维的向量。
  • Image decoder, 解码器把音频和image编码后cat的向量作为输入, 然后通过反卷积层

在这里插入图片描述
网络具有两个跳过连接,以帮助保留目标标识的定义特征 - 这是通过将编码器激活与网络图中显示的位置的解码器串联来完成的。

这是在解码的过程中也输入了图片的信息,也就是解码器输入部分编码器的隐层会有好效果

使用L1 loss
在这里插入图片描述

Training

监督图像取0.35s采样窗口的视频中间帧, 输入的image是从不同的时间点随机选取的, 当输入是多张图片时, 就随机从同一个视频中采样多张图片。

  • 这是个单帧生成的网络, 没有什么时间连续上的约束, 当然因为它0.35s对应一帧, 也不用太强的时间约束。
Deblurring module

在这里插入图片描述
有10个卷积层, 和ReLu层以及残差模块。 这里提到虽然之前正面化了, 但是输入, ground truth和生成的图像对应并不完美, 所以只用了CNN而不是generator network
输出的结果类似锐化后的:
在这里插入图片描述

### Python 'str' object has no attribute 'titie' AttributeError 解决方案 在 Python 中,当尝试调用一个字符串对象的不存在的方法时,会抛出 `AttributeError` 异常。根据问题描述,错误信息为 `'str' object has no attribute 'titie'`,这表明代码中尝试调用了一个名为 `titie` 的方法,而该方法并不存在于字符串对象中[^1]。 正确的字符串方法应为 `title()`,用于将字符串中的每个单词的首字母大写。以下是一个示例代码展示如何正确使用 `title()` 方法: ```python # 错误示例 text = "hello world" result = text.titie() # 错误:'titie' 不是有效的字符串方法 print(result) # 正确示例 text = "hello world" result = text.title() # 正确:使用 title() 方法 print(result) # 输出: Hello World ``` #### 原因分析 错误的根本原因是拼写错误,将 `title()` 方法错误地拼写为 `titie()`。Python 是区分大小写的语言,因此任何拼写错误都会导致程序无法识别该方法,从而抛出 `AttributeError` 异常[^1]。 #### 解决方法 1. 检查代码中所有字符串方法的拼写,确保与官方文档中的方法名称完全一致。 2. 使用集成开发环境(IDE)或代码编辑器(如 PyCharm、VS Code),这些工具通常会高亮显示拼写错误或未知属性。 3. 在调试时,可以使用内置的 `dir()` 函数列出字符串对象的所有可用方法,以确认方法名称是否正确。例如: ```python print(dir(str)) ``` #### 注意事项 如果仍然遇到类似问题,可以参考以下步骤进行排查: - 确认所使用的 Python 版本支持该方法。例如,某些方法可能在特定版本中才被引入。 - 确保字符串对象未被重新赋值为其他类型,否则可能导致意外的行为。 ### 示例代码 以下是一个完整的示例,展示如何正确使用 `title()` 方法以及如何排查拼写错误: ```python # 示例:正确使用 title() 方法 text = "hello world" try: result = text.title() # 正确的字符串方法 print("Correct Output:", result) except AttributeError as e: print("Error:", e) # 示例:排查拼写错误 incorrect_method = "titie" if incorrect_method not in dir(str): print(f"Error: '{incorrect_method}' is not a valid string method.") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

live_for_myself

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值