【论文阅读】Diffused Heads: Diffusion Models Beat GANs on Talking-Face Generation

Diffused Heads: 扩散模型在说话人脸生成方面击败GANs

paper:[2301.03396] Diffused Heads: Diffusion Models Beat GANs on Talking-Face Generation (arxiv.org)

code:MStypulkowski/diffused-heads: Official repository for Diffused Heads: Diffusion Models Beat GANs on Talking-Face Generation (github.com)

来源:2023.7 WACV

总结:一种自回归扩散模型,输入:身份图像+音频序列。能够产生头部运动、眨眼等面部表情,并保留给定的背景。在两个不同的数据集上评估了该模型,在表现力和平滑性方面都取得了最先进的结果。

1. 介绍

现有方法在创建自然面部外观、保持真实表情和动作方面仍然存在困难,同时在生成过程中仍需要额外的监督。GANs 在语音驱动视频合成中的缺点:

  1. 首先,GAN 的训练困难,需要广泛的架构搜索和参数调整才能收敛。基于 GAN 的面部动画方法的训练稳定性可以通过使用额外的指导,如面具或引导帧来指导生成过程来改善。然而,这使它们局限于面部再现的应用,并降低了产生头部动作和面部表情的能力。
  2. 此外,GAN 的训练通常会导致模态崩溃,即生成器无法生成覆盖整个数据分布支持的样本,而是只学习生成几个唯一的样本 [1]。
  3. 最后,现有的一次性基于 GAN 的解决方案在生成视频时存在面部变形问题,特别是在生成具有大幅头部运动的视频时。这通常通过切换到少数帧方法(即使用几帧或短视频片段)或依赖预训练的面部验证模型来解决,这些模型作为保持身份一致性的参考。

针对这些问题提出了Diffused Heads——基于帧的扩散模型。生成的头部自然移动,同时保持主体身份和嘴唇同步。

  • 使用去噪扩散概率模型[15, 23],采用变分方法,不需要稳定化判别器[27, 45, 50, 51]。
  • 为了消除不自然序列的问题,引入了运动帧(见第 4.2 节),指导视频的创建。
  • 为了保持语音和生成帧之间的一致性,使用从预训练时间模型提取的音频嵌入注入到模型中。
  • 最后,引入了一种简单修改的损失函数,以保持嘴唇运动的一致性。

贡献总结如下:

  1. 是首个基于扩散模型的说话人脸生成的解决方案。
  2. 在扩散模型中增加了运动帧和音频嵌入,以保持生成图像的一致性。
  3. 泛化能力强,可保持身份帧和音频录音的来源不变。

2. 背景

正向扩散:

 前向过程的一个性质是,只需一步就可获得中间状态:

这个性质帮助更有效地训练模型。

只有当模型知道前向扩散过程从哪里开始时,才能学习如何将xT去噪到基础数据点中。因此可以在x0上附加条件q(xt−1|xt),使其易于处理。利用贝叶斯定理得到:

与VAE框架类似,定义近似q(xt−1|xt): 

ϵθ(xt, t)是模型对高斯噪声的预测,应用于x0,以获得xt。而ν是模型的一个额外输出。

[23]中的Nichol和Dhariwal提出分别使用Lsimple和Lvlb训练μθ和Σθ:

其中L0是[15]中提出的离散高斯分布。LT被省略是因为q没有可训练的参数,而pθ(xT)是高斯先验。所有其他的项都是两个高斯分布之间的Kullback-Leibler散度,可以写成闭合形式。

用一个具有跨层连接和注意力层的2D UNet[34],来预测噪声ϵθ(xt, t)和方差Σθ(xt, t)。时间步长t的信息通过相应的时间嵌入ψ(t)和组归一化(GN)来输入:

其中hs和hs+1是UNet的连续隐藏状态,(ts, tb) = MLP(ψ(t)),其中MLP是由线性层组成的浅层神经网络。

3. 方法

为了实现更平滑和更具表现力的结果,通过运动帧(第4.2节)和音频嵌入(第4.3节)在过去的运动和未来的表情中注入额外的信息。额外的唇同步损失(第4.4节),使模型更多地关注嘴部区域。

图2。训练步骤。一次去噪一帧,使用身份和运动帧,以及从预训练音频编码器中提取的音频嵌入。身份帧告诉模型感兴趣的人脸是什么,运动帧用来保留人脸的运动。

3.1 训练

训练一个扩散模型来学习从视频中提取的帧的分布。过程如图2所示。从训练集随机采样一个视频X = {X(1),…, x(n)},和视频中的任一帧x(k)。视频总帧数为n。除了标准的扩散模型的输入(时间步t、噪声x(k)t),为了保持源图像身份,将x(k)t和身份帧xId进行channel-wise:

xId是从x中随机选择的。在训练过程中随机选择恒等帧而不是x(0),使模型熟悉更多种类的帧作为输入,从而提高鲁棒性。

为了添加时间信息,我们根据视频中的帧数将相应的音频序列拆分为长度相等的块。然后,使用来自[45]的音频编码器在LRW[4]数据集上进行预训练,音频块被编码成音频嵌入Y = {Y(1),…y (n)}。

3.2 运动帧

即使音频编码器向模型提供了时间信息,也不足以生成平滑的视频。为了克服这个问题并保持运动,对于目标帧x(k),引入运动帧,其中mx是运动帧的数量,c是对其所有参数在通道维度上的连接操作。消融研究发现mx的最佳值为2。

为了使模型对样本初始化具有鲁棒性,使用xId作为缺失运动帧的替代品。将运动帧加入到式(15)中,得到模型直接输入的最终形式:

3.3 Speech conditioning

将音频嵌入y(k)中的信息注入,将式(14)修改为:

其中。利用时间编码和音频嵌入的信息来移动和缩放UNet的隐藏状态。

与运动帧相比,在采样期间,运动帧只能用于已经处理过的帧,我们可以事先获取整个语音。因此引入了运动音频嵌入,从过去和未来的音频片段中获取信息。定义为通过连接选定的音频嵌入而创建的向量: ({y (k−my),…, y(k),…, y(k+my)}),其中my是来自一侧的额外音频嵌入的数量。

3.4 Lip sync loss

作者没有用显式损失函数来促进口型同步。扩散头适用于帧,而不是序列,因此基于序列的损失不能用。更重要的是,在扩散模型训练期间,目标是预测在帧上的噪声。从预测噪声返回到初始x0,这需要应用感知损失,在单个步骤中不够准确,并且在更多步骤中计算效率低下。

作者的解决方案:额外的口型损失Lls。在训练期间,利用面部landmark来裁剪嘴巴区域周围的每一帧,并最大限度地减少该区域的噪声预测:

其中\epsilon\epsilonθ分别表示裁剪版本的GT和预测噪声。该过程如图3所示。在唇形缺失的情况下,模型更加注重唇形与音频嵌入的同步,提高了采样视频的整体感知能力。用一个恒定的λls来加权ls,这个λls利用了模型对嘴巴区域和框架其余部分细节的关注。最终优化目标为:

图3。除了在Lsimple中最小化GT噪声λ与预测噪声ϵθ(xt, t)之间的L2距离外,还利用目标帧的landmark来最小化 裁剪的GT噪声λ与相应的预测面积λ θ(xt, t) 之间的口型同步损失Lls。

3.5 sampling

对于采样,只需要从讲话视频中提取身份帧和音频嵌入。

通过用身份帧的副本初始化 x(0) Motion 来启动视频生成。每一帧都是根据方程(6)中变分后验定义的扩散模型的去噪过程进行采样的。在每一步之后,用合成的帧替换最新的运动帧。y(k) Motion 遵循与训练过程中相同的步骤。

生成单帧需要相当长的时间,因为它需要模型对所有扩散时间步 {1, . . . , T} 进行预测。为了加快该过程,作者用r time step respacing的方法将采样时间缩短了5倍。

由于模型逐帧合成序列,错误都会在后续步骤中累积。

为了强制模型从身份帧中获取更多关于人外观的信息,将每个运动帧转换为灰度图像。这应该使模型更难提取身份特征(如颜色),同时推动它寻找运动信息。发现这种解决方案在具有大量参与者的更复杂数据集上效果良好。

4. 实验

评估数据集:CREMA,LRW。

训练细节:在128x128分辨率的视频上训练的。使用与[6]中提出的相同的UNet[34]架构。使用256-512-768通道作为输入块,每个通道有2个ResNet[12]层。实验的早期阶段,我们发现添加更多的注意力层会降低生成帧的质量。因此,我们在中间块中只使用具有4个头部和64个头部通道的注意层。

局限性:生成视频的长度有限。由于我们不提供任何额外的姿态输入或头部运动的视觉指导和模型自回归生成帧,它无法保持质量序列长于8-9秒。此外,与其他生成模型相比,扩散模型的生成时间较长,无法实时应用。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

R:简易的Circos图

library(grid) library(circlize) library(RColorBrewer) library(ComplexHeatmap) setwd("C:/Users/fordata/Downloads/Circos") # 创建颜色调色板 coul <- colorRampPalette(brewer.pal(9, "Set3"))(12) # 读取基因组数据 genome <- read.table(ci…

贪心算法(两个实例)

例一&#xff1a;调度问题 问题&#xff1a;由n项任务&#xff0c;每项任务的加工时间已知&#xff0c;从零时刻开始陆续加入一台机器上去加工&#xff0c;每个任务完成的时间是从0时刻到任务加工截至的时间。 求总完成时间&#xff08;所有任务完成时间最短计划方案&#xf…

PostMan测试文件上传

后端代码 package com.example.backend.controller;import cn.hutool.core.io.FileUtil; import cn.hutool.core.util.StrUtil; import com.example.backend.common.Result; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.*; import org…

Python Web开发记录 Day9:Django part3 用户管理

名人说&#xff1a;莫道桑榆晚&#xff0c;为霞尚满天。——刘禹锡&#xff08;刘梦得&#xff0c;诗豪&#xff09; 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 1、数据库准备2、用户列表3、新建用户4、编辑用…

科研学习|论文解读——美国政治经济中的权力:网络分析(JASIST, 2019)

论文原题目 Power in the U.S. political economy: A network analysis 摘要 美国政治经济的许多特征产生于大型政治和经济机构之间的互动&#xff0c;然而我们对它们的互动性质和这些机构之间的权力分配知之甚少。在本文中&#xff0c;对总部设在美国的组织的网络进行了详细的…

学习shell脚本

文章目录 什么是shell脚本为什么要学习shell脚本第一个脚本编写与执行 简单的shell脚本练习简单案例脚本的执行方式差异(source、sh script、./script) 如何使用shell脚本的判断式利用test命令的测试功能利用判断符号[ ]shell脚本的默认变量($0、$1...) shell脚本的条件判断式利…

2.3 物理层设备

2.3 物理层设备 &#xff08;一&#xff09;中继器 产生原因 由于存在损耗&#xff0c;在线路上传输的信号功率会逐渐衰减&#xff0c;衰减到一定程度时将造成信号失真&#xff0c;因此会导致接收错误。 中继器的功能 对信号进行再生和还原&#xff0c;对衰减的信号进行放大…

VMware Worksation 问题

几个晚上在虚拟机装了好多东西&#xff0c;配置mysql&#xff0c;配置docker、Git工具等等&#xff0c;可能废寝忘食导致太困强制关了虚拟机&#xff0c;结果第二天晚上回来发现打不开&#xff0c;心态直接崩了。 问题&#xff1a; 疯狂百度告知要删除后缀为.lck的文件夹及文件…

网络爬虫丨基于scrapy+mysql爬取博客信息

文章目录 写在前面实验描述实验框架实验需求 实验内容1.安装依赖库2.创建Scrapy项目3.配置系统设置4.配置管道文件5.连接数据库6.分析要爬取的内容7.编写爬虫文件 运行结果写在后面 写在前面 本期内容&#xff1a;基于scrapymysql爬取博客信息并保存到数据库中 实验需求 ana…

如何快速搭建物联网工业云平台

随着物联网技术的快速发展&#xff0c;物联网工业云平台已经成为推动工业领域数字化转型的重要引擎。合沃作为专业的物联网云服务提供商&#xff0c;致力于为企业提供高效、可靠的物联网工业云平台解决方案。本文将深入探讨物联网工业云平台的功能、解决行业痛点的能力以及如何…

每日OJ题_简单多问题dp⑦_力扣123. 买卖股票的最佳时机 III

目录 力扣123. 买卖股票的最佳时机 III 状态机分析 解析代码 力扣123. 买卖股票的最佳时机 III 123. 买卖股票的最佳时机 III 难度 困难 给定一个数组&#xff0c;它的第 i 个元素是一支给定的股票在第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。你最多可以…

D 咖智能饮品机入驻万达,引领时尚饮品新潮流!

近日&#xff0c;D 咖智能饮品机正式入驻万达广场&#xff0c;为广大消费者带来全新的时尚饮品体验。作为国内领先的智能饮品设备品牌&#xff0c;D 咖智能饮品机以其多样化的口味选择、便捷的操作方式和个性化的定制服务&#xff0c;受到了众多消费者的喜爱。 D 咖智能饮品机提…

基于Verilog的简易CPU设计

前言 本篇文章将简单讲解CPU之间各部分的功能及接线&#xff0c;并提供Verilog模拟CPU的各个组成部分。该CPU可以完成一些操作&#xff0c;如&#xff1a;加减法&#xff0c;与或&#xff0c;指令跳转等&#xff0c;最后提供testbench用于测试该CPU的工作情况是否符合预期。 C…

浏览器如何进行静态资源缓存?—— 强缓存 协商缓存

在平时使用浏览器排查问题的过程中&#xff0c;我们有时会看到浏览器网络请求中出现304状态码&#xff0c;那么是什么情况下出现304呢&#xff1f;下面是关于这一现象的解释&#xff1a; 浏览器如何进行静态资源缓存&#xff1f;—— 强缓存 & 协商缓存 状态码 304浏览器如…

Rust写一个wasm入门并在rspack和vite项目中使用(一)

rust打包wasm文档 文档地址 安装cargo-generate cargo install cargo-generate 安装过程中有问题的话手动安装cargo-generate下载地址 根据自己的系统下载压缩包&#xff0c;然后解压到用户/.cargo/bind目录下&#xff0c;将解压后的文件放到该目录下即可。 创建wasm项目 …

校园闲置物品租售系统|基于springboot框架+ Mysql+Java+B/S架构的校园闲置物品租售系统设计与实现(可运行源码+数据库+设计文档)

推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 目录 前台功能效果图 管理员功能登录前台功能效果图 ​编辑 用户功能模块 商品购买管理 卖家功能模块 商品…

[密码学]OpenSSL实践篇

背景 最近在写Android abl阶段fastboot工具&#xff0c;需要我在Android代码中实现一些鉴权加解密相关的fastboot命令&#xff0c;里面用到了OpenSSL。我们先来实践一下OpenSSL在Linux系统中的指令。 OpenSSL官方网站&#xff1a;OpenSSL 中文手册 | OpenSSL 中文网 1. 查看…

m3u8,一个超酷的 Python 库!

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com 大家好&#xff0c;今天为大家分享一个超酷的 Python 库 - m3u8。 Github地址&#xff1a;https://github.com/globocom/m3u8 在网络视频传输中&#xff0c;HLS&#xff08;HTTP Live Streaming&#xff09;是一…

2.vscode 配置python开发环境

vscode用着习惯了,也不想再装别的ide 1.安装vscode 这一步默认已完成 2.安装插件 搜索插件安装 3.选择调试器 Ctrl Shift P&#xff08;或F1&#xff09;&#xff0c;在打开的输入框中输入 Python: Select Interpreter 搜索&#xff0c;选择 Python 解析器 选择自己安…

科研绘图一:箱线图(添加贝赛尔曲线)

R语言绘图系列—箱线图贝赛尔曲线 &#xff08;一&#xff09;: 科研绘图一&#xff1a;箱线图&#xff08;添加贝赛尔曲线&#xff09; 文章目录 R语言绘图系列---箱线图贝赛尔曲线&#xff08;一&#xff09;: 科研绘图一&#xff1a;箱线图&#xff08;添加贝赛尔曲线&…