数字人解决方案VividTalk——音频驱动单张照片实现人物头像说话的效果

news2024/11/17 7:55:46

前言

VividTalk是一项由南京大学、阿里巴巴、字节跳动和南开大学共同开发的创新项目。该项目通过结合单张人物静态照片和一段语音录音,能够制作出一个看起来仿佛实际说话的人物视频。项目的特点包括自然的面部表情和头部动作,口型能够同步,同时支持多种语言和不同风格,如真实风格、卡通风格等。
在这里插入图片描述
VividTalk是一个通用的一次性音频驱动的说话头部生成框架,旨在通过音频作为输入信号,驱动任意面部图像的生成。该技术具有广泛的应用场景,包括虚拟化身、视觉配音和视频会议等。为了最大程度地增加生成视频的逼真度,VividTalk考虑了非刚性面部表情组件和刚性头部组件的建模。

技术挑战与方法创新:

  1. 面部表情运动建模: VividTalk采用了3D面部可塑模型(3DMM)作为中间表示,相较于稀疏的面部标志点,3DMM能够更详细地建模各种表情。然而,面部表情的混合形状分布差异导致了音频和面部运动之间的一对多映射问题。VividTalk通过使用混合形状和3D顶点,以及基于多分支变压器的网络,充分利用长期音频上下文,解决了这一挑战。

  2. 刚性头部运动建模: 对于刚性头部运动,由于与音频关系较弱,建模更加困难。VividTalk将这个问题视为离散和有限空间中的代码查询任务,并建立了可学习的头部姿势代码本,具有重构和映射机制。这创新性地解决了从音频中生成合理头部姿势的挑战。

VividTalk框架的两阶段流程:

  1. 音频到网格生成(第一阶段):

    • 使用混合形状和3D顶点作为中间表示,提供全局粗略运动和细粒度嘴唇运动的描述。
    • 基于多分支变压器的网络,充分利用长期音频上下文,建模音频与中间表示的关系。
  2. 网格到视频生成(第二阶段):

    • 建立可学习的头部姿势代码本,用于合理地从音频中学习刚性头部运动。
    • 将学习到的两个运动应用于参考身份,得到驱动网格。
    • 渲染内部面部和外部面部的投影纹理,全面建模运动。
    • 使用双分支运动VAE建模密集运动,逐帧合成最终的视频。

通过这一创新方法,VividTalk能够生成高质量、逼真的音频驱动的说话头部视频,为虚拟化身和其他应用领域提供了新的可能性。

实现流程

音频驱动的说话头像生成旨在根据音频信号生成面部图像。在早期的研究中,一些尝试以端到端的方式生成视频的方法已经出现。然而,最近的研究采用了多阶段的框架,将音频映射到中间表示,如3DMM系数和面部关键点,以更好地建模运动。相较于这些方法,VividTalk的方法采用混合形状和顶点作为中间表示,分别建模粗略运动和细粒度运动,从而实现了唇同步和更逼真的说话头像视频生成。

视频驱动的说话头像生成主要关注将源演员的动作转移到目标对象上,也被称为面部再现。这一领域的方法通常分为两类:特定主体和通用主体。特定主体方法能够生成高质量的视频,但由于无法扩展到新的主体,其应用受到一定限制。近期,一些通用主体的方法试图解决这个问题,并取得了显著的成功。与这些方法相比,VividTalk的任务更为挑战性,因为VividTalk需要以音频作为输入来驱动图像,而不依赖于任何运动的先验知识。

实现方法

VividTalk介绍了一种方法,可以根据音频序列和参考面部图像生成具有多样化面部表情和自然头部姿势的说话头像视频。该方法由两个级联阶段组成,分别是音频到网格生成和网格到视频生成。文章还介绍了3D可塑模型和数据预处理的基础知识,并描述了总体框架的训练策略。
在这里插入图片描述

1.处理前期预备

3D变形模型:VividTalk的方法使用基于3d的(混合形状和顶点)而不是基于2d的信息作为说话头生成的中间表示。在3DMM中,三维脸型可以表示为:
在这里插入图片描述
数据预处理:VividTalk的模型只需要使用视听同步数据集进行训练。并进行预处理。

2.音频到网格生成

VividTalk的目标是根据输入音频序列和参考面部图像生成3d驱动网格。VividTalk首先利用FaceVerse重建参考面部图像。接下来,然后从音频中学习非刚性面部表情运动和刚性头部运动来驱动重构网格。为此,提出了一个多分支BlendShape和顶点偏移生成器以及一个可学习的头部姿态码本。
在这里插入图片描述
BlendShape和顶点偏移生成器。学习一个通用的模型来生成准确的嘴部运动和具有特定风格的面部表情,这在两个方面具有挑战性:1)第一个挑战是音频-动作相关问题。由于音频信号与口腔运动最相关,因此很难从音频中模拟非口腔运动;2)从音频到面部表情运动的映射自然具有一对多的属性,这意味着相同的音频输入可能有多个正确的运动模式,导致没有个人特征的mean face现象。为了解决音频-运动相关问题,使用混合形状和顶点偏移作为中间表示,其中混合形状提供了全局的粗面部表情运动,唇相关顶点偏移提供了局部的细粒度嘴唇运动。对于平均脸问题,提出了一种基于多支路变压器的生成器来单独建模每个部分的运动,并注入特定主题的风格以保持个人特征。
在这里插入图片描述
在这里插入图片描述
使用预训练的音频提取器来提取上下文化的语音表示。为了表示个人特定的风格特征,使用预训练的3D人脸重建模型从参考图像中提取身份信息α,并将其编码为风格嵌入z风格。然后,将音频特征A和嵌入个人风格的z风格添加并馈送到基于多分支Transformer的体系结构中,其中两个分支生成混合形状,在粗粒度上建模面部表情运动,第三个分支生成唇部相关的顶点偏移,在细粒度上补充唇部运动。请注意,为了更好地建模时间依赖性,在预测当前运动时,将学习到的过去运动作为网络的输入,可以表示为:

在这里插入图片描述
训练完成后,可以得到具有非刚性面部表情运动的驱动网格。
可学习的头部姿势码本。头部姿势是影响视频真实性的另一个重要因素。但是,直接从音频中学习并不容易,因为它们之间的关系很弱,会导致不合理和不连续的结果。提出将该问题作为一个离散且有限的头姿空间中的代码查询任务,并精心设计了两阶段的训练机制,第一阶段构建丰富的头姿码本,第二阶段将输入音频映射到码本以生成最终结果,如图4所示。
在这里插入图片描述
在重建阶段,任务是构建一个上下文头部姿态码本和能够从Z解码真实头部姿态序列的解码器。采用由编码器、解码器和码本组成的VQ-VAE作为主干。首先,计算相对头部位姿,并将其编码为潜码。然后,使用一个元素量化函数q(·)来得到zq,将Z´中的每一项Z´映射到它最近的码本条目Z k:
在这里插入图片描述
最后,基于Z q,由解码器D给出重构的相对头部位姿P * r 1:f,如下所示:
在这里插入图片描述
在映射阶段,专注于构建一个网络,该网络可以将音频映射到前一阶段学习的码本,以生成自然和连续的头部姿势序列。为了更好地模拟时间连续性,提出了一种基于自注意和跨模态多头注意机制的变压器自回归模型Φ map。具体来说,Φ map以音频序列A、个人风格嵌入z风格和初始头姿P 0为输入,输出中间特征z -,从码本z量化为z - q,然后由预训练的解码器D解码:
在这里插入图片描述
注意,码本Z和解码器D在映射训练阶段被冻结。
到目前为止,非刚性的面部表情动作和刚性的头部姿势都已经学会了。现在,可以通过将学习到的头部刚体位姿应用到M´nr网格上,得到最终的驱动网格M´d:
在这里插入图片描述

3. 网格到视频生成

提出了一个双分支运动vae来模拟二维密集运动,并将其作为生成器的输入来合成最终的视频。
在这里插入图片描述
将三维区域运动直接转换为二维区域运动是困难和低效的,因为网络需要寻找两个区域运动之间的对应关系才能更好地建模。为了减少网络的学习负担并获得进一步的性能,借助投影纹理表示在二维域中进行这种转换。

为了渲染3D网格的投影纹理,首先将3D人脸的平均形状在x、y、z轴上归一化为0−1,得到类似于RGB的三个通道的归一化坐标码NCC,可以看作是人脸纹理的一种新的表示:

在这里插入图片描述
然后采用Z-Buffer对投影的三维内表面纹理PT进行NCC上色渲染。然而,由于3DMM的限制,不能很好地对外表面区域进行建模。为了更好地对跨帧运动建模,使用对图像进行解析,得到外脸区域纹理PT out,如躯干和背景,将其与PT in结合如下:
在这里插入图片描述
如图5所示,在面部分支中,参考投影纹理PT ref和驱动投影纹理PT d被连接并馈入Encoder,随后是MLP,后者输出2D面部运动图。为了进一步增强嘴唇运动和更准确地建模,还选择了与嘴唇相关的地标并将其转换为高斯图,这是一种更紧凑和有效的表示。然后,沙漏网络将高斯图的减除作为输入,输出一个二维的唇形运动,该唇形运动将与面部运动连接并解码为密集运动和遮挡图。
最后,根据之前预测的密集运动图对参考图像进行变形,得到变形后的图像,并将变形后的图像作为与遮挡图一起的生成器的输入,逐帧合成最终的视频。

4.训练策略

训练分为两个阶段:音频到网格和网格到视频。训练过程中,BlendShape和Vertex Offset Generator受到重建损失的监督。
在这里插入图片描述
在Learnable Head Pose Codebook的训练中,使用了直通梯度估计器。
在这里插入图片描述
在网格到视频阶段,使用了基于预训练VGG-19网络的感知损失和特征匹配损失。

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

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

相关文章

搞明白手机卡的合约期和优惠期才能避免很多坑!

很多朋友注销流量卡时才发现自己的套餐有合约期无法注销,尤其是联通和移动,那么什么是合约期呢?合约期和优惠期又有什么不一样呢?下来答案来了。 其实,目前很多在网上办理的大流量卡都是有合约期的,尤其是移…

05. 交换机的基本配置

文章目录 一. 初识交换机1.1. 交换机的概述1.2. Ethernet_ll格式1.3. MAC分类1.4. 冲突域1.5. 广播域1.6. 交换机的原理1.7. 交换机的3种转发行为 二. 初识ARP2.1. ARP概述2.2. ARP报文格式2.3. ARP的分类2.4. 免费ARP的作用 三. 实验专题3.1. 实验1:交换机的基本原…

JSP仓储管理系统myeclipse定制开发SQLServer数据库网页模式java编程jdbc

一、源码特点 JSP仓储管理系统系统是一套完善的web设计系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库 ,系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发,数据库为SQLServer2008&#x…

小白水平理解面试经典题目LeetCode 455 Assign Cookies【Java实现】

455 分配cookies 小白渣翻译: 假设你是一位很棒的父母,想给你的孩子一些饼干。但是,你最多应该给每个孩子一块饼干。 每个孩子 i 都有一个贪婪因子 g[i] ,这是孩子满意的 cookie 的最小大小;每个 cookie j 都有一个…

非内积级联学习

1.首页推荐非内积召回现状 非内积召回源是目前首页推荐最重要的召回源之一。同时非内积相比于向量化召回最终仅将user和item匹配程度表征为embeding内积,非内积召回仅保留item embedding,不构造user显式表征,而是通过一个打分网络计算用户-商…

142. 环形链表 II(力扣LeetCode)

文章目录 142. 环形链表 II题目描述解题思路判断链表是否有环如果有环,如何找到这个环的入口 c代码 142. 环形链表 II 题目描述 给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 如果链表中有某个…

thinkadmin操作栏审核通过(操作确认),审核驳回(录入信息)

录入信息页面 {extend name="../../admin/view/main"}{block name=content} <style>textarea {font-size: 16px;padding: 10px;border: 1px solid #ccc;

格子表单GRID-FORM | 嵌套子表单与自定义脚本交互

格子表单/GRID-FORM已在Github 开源&#xff0c;如能帮到您麻烦给个星&#x1f91d; GRID-FORM 系列文章 基于 VUE3 可视化低代码表单设计器嵌套表单与自定义脚本交互 新版本功能 &#x1f389; 不觉间&#xff0c;GRID-FORM 已经开源一年&#xff08;2023年1月29日首次提交…

蓝桥杯---加法变乘法

我们都知道:123 ….. 491225&#xff0c;现在要求你把其中两个不相邻的加号变成乘号,使得结果为2015 比如&#xff1a;123 ... 10*1112 ... 27*2829 ... 492015 就是符合要求的答案. 请你寻找另外一个可能的答案,并把位置靠前的那个乘号左边的数字提交(对于示例,就是 提交10)…

inode生命周期

1.添加inode到inode cache链表 当inode的引用计数器i_count为0后&#xff0c;会调用iput_final去释放 static void iput_final(struct inode *inode) {struct super_block *sb inode->i_sb;const struct super_operations *op inode->i_sb->s_op;unsigned long sta…

07.领域驱动设计:了解3种常见微服务架构模型的对比和分析

目录 1、概述 2、整洁架构 3、六边形架构 4、三种微服务架构模型的对比和分析 5、从三种架构模型看中台和微服务设计 5.1 中台建设要聚焦领域模型 5.2 微服务要有合理的架构分层 5.2.1 项目级微服务 5.2.2 企业级中台微服务 5.3 应用和资源的解耦与适配 6、总结 1、概…

云计算底层技术、磁盘技术揭秘虚拟化管理、公有云概述

查看本机是否具备虚拟化支持 硬件辅助虚拟化 处理器里打开 虚拟化Inter VT-x/EPT 或AMD-V 构建虚拟化平台工具软件包 yum 与 dnf Yum和DNF都是用于管理Linux系统中的软件包的工具&#xff0c;但它们在许多方面存在一些差异。以下是一些可能的区别&#xff1a; 依赖解…

Qt|QPushButton控件讲解

前提 按钮分为了四种状态&#xff1a;常态、聚焦、按下、禁用 前一段时间更新了MFC框架下CButton的自绘。因为MFC框架下的按钮限制性很高&#xff0c;所以只能由自绘实现各种风格&#xff0c;但是QT框架完美的解决了这个问题&#xff0c;我们只需要了解如何调用&#xff0c;就…

Doris简介及单机部署(超详细)

文章目录 一、Doris简介1、Doris介绍2、Doris架构 二、Doris单机部署&#xff08;Centos7.9&#xff09;1、下载Doris2、准备环境3、安装部署3.1 创建存储目录3.2 配置 FE3.3 启动 FE3.4 查看 FE 运行状态3.5 配置 BE3.6 启动 BE3.7 添加 BE 节点到集群3.8 查看 BE 运行状态3.9…

elementui中的tree自定义图标

需求&#xff1a;实现如下样式的树形列表 自定义树的图标以及点击时&#xff0c;可以根据子级的关闭&#xff0c;切换图标 <el-tree :data"treeList" :props"defaultProps"><template #default"{ node, data }"><span class&quo…

C++PythonC# 三语言OpenCV从零开发(7):图像的阈值

文章目录 相关链接前言阈值阈值使用代码PythonCCsharpcsharp代码问题 总结 相关链接 C&Python&Csharp in OpenCV 专栏 【2022B站最好的OpenCV课程推荐】OpenCV从入门到实战 全套课程&#xff08;附带课程课件资料课件笔记&#xff09; OpenCV一个窗口同时显示多张图片 …

C++提取ICO图标(PE文件资源提取)

最近需要写一个提取EXE或者DLL图标资源的功能, 网上找了很久, 要么功能不好用, 最后结果如下: 1.很多是加载为HICON句柄后转换为图片保存, 全损画质..., 2.后来找了个还能用的, 详见 https://github.com/TortoiseGit/TortoiseGit/blob/master/src/Utils/IconExtractor.cpp …

【Axure教程0基础入门】04交互动效基础

04交互动效基础 1.Axure交互事件的基本概念 &#xff08;1&#xff09;交互动效Interaction 原型图中&#xff0c;原件与页面的动态效果&#xff08;dynamic behaviors&#xff09;。 &#xff08;2&#xff09;交互动效的构成 目标&#xff08;target&#xff09;&#xff1a;…

Windows系统本地安装Wnmp服务并结合内网穿透公网远程访问

目录 前言 1.Wnmp下载安装 2.Wnmp设置 3.安装cpolar内网穿透 3.1 注册账号 3.2 下载cpolar客户端 3.3 登录cpolar web ui管理界面 3.4 创建公网地址 4.固定公网地址访问 结语 作者简介&#xff1a; 懒大王敲代码&#xff0c;计算机专业应届生 今天给大家聊聊Windows…

我用Rust开发Rocketmq name server

我是蚂蚁背大象(Apache EventMesh PMC&Committer)&#xff0c;文章对你有帮助给Rocketmq-rust star,关注我GitHub:mxsm&#xff0c;文章有不正确的地方请您斧正,创建ISSUE提交PR~谢谢! Emal:mxsmapache.com 1. Rocketmq-rust namesrv概述 经过一个多月的开发&#xff0c;终…