【数字人】4、AD-NeRF | 使用 NeRF 来实现从声音到数字人人脸的直接驱动(ICCV2021)

news2024/11/17 2:49:02

在这里插入图片描述

文章目录

    • 一、背景
    • 二、方法
      • 2.1 适用于 talking head 的神经辐射场
      • 2.2 使用辐射场来进行体渲染
      • 2.3 独立 NeRF 表达
    • 三、效果

论文:AD-NeRF: Audio Driven Neural Radiance Fields for Talking Head Synthesis

代码:https://github.com/YudongGuo/AD-NeRF

出处:ICCV2021

贡献:

  • 提出了基于 NeRF 的 talking head 生成, 不借助中间特征,不会导致信息丢失(消融实验也证明了这种直接映射的方式能更准确的捕捉唇部运动)
  • 使用两个解耦的分支来分别对 head 和 torso 建模,能保证生成的结果更自然
  • 能够进行姿态控制和替换背景,这个功能很实用

一、背景

Audio-driven 的说话人合成方法可以看成从 audio 到 visual face 的跨模态的特征映射

之前的很多方法都使用的 GAN,比如利用 3D face 或 2D landmark 作为中间表征,来对声音信号和面部形变作为中间桥梁,进行更简单的建模

但这样也会导致很多信息丢失,可能会让生成的面部形变和原始的声音信号之间缺乏正确的联系,为了避免一些误关联,很多方法只对嘴部建模,保持头部不动。

为了解决现有方法的问题,本文作者提出了基于 NeRF 的方法——AD-NeRF

  • 使用 audio-driven 神经辐射场来建模 cross-modal 的特征映射,且不使用额外的中间表达
  • 作者不使用 3D face 或 2D landmark 来对面部建模,而是直接使用 NeRF 来表达 talking head 的场景,同时考虑了 head 和 body 的运动
  • 本文方法由于使用的事逐点建模的方法,所以比 GAN-based 的方法效果更好,质量更高,更保真

二、方法

在这里插入图片描述

总体框架如图 1,输入使用的是一个视频序列:

  • 首先,对每帧进行 parsing map 提取,对声音进行特征提取
  • 然后,分别建模隐式函数来建模声音和 head 的关系、torso 的关系
  • 最后,使用得到的颜色和密度进行渲染,得到 talking head

2.1 适用于 talking head 的神经辐射场

作者使用的是 conditional 神经辐射场来生成 talking heads,使用 audio 作为 condition

NeRF 其实就是一个映射函数,输入声音、3D 空间位置、每个位置的方向,输出该位置的颜色和密度(此处还额外的将每个声音 a 对应的 semantic feature 作为输入,semantic feature 在这里应该就是相邻 16 帧的信号)

在这里插入图片描述

Semantic audio feature

为了从声音信号中抽取到更有意义的语义信息,作者使用了 DeepSpeech 模型为每个 20ms 的 audio clip 来预测出 29-d feature code

本文中,连续的 audio feature 会送入时序的卷积网络来提出噪声信号,也就是使用从当前帧左右相邻的 16 帧的声音得到的特征 a ∈ R 16 × 19 a \in R^{16 \times 19} aR16×19 来表达当前时刻的声音信号。

2.2 使用辐射场来进行体渲染

使用 F θ F_{\theta} Fθ 得到了颜色和密度后,可以使用体渲染的方法来得到每个位置的颜色和密度

每个 ray r(t) \text{r(t)} r(t) 映射到某个位置上的期望的颜色为:

在这里插入图片描述

2.3 独立 NeRF 表达

作者对 head 和 torso 分别进行训练,因为两者的运动方式是不同的。

在这里插入图片描述

  • 第一步,使用现有的方法来将图片分成三部分:static background、head、torso
  • 第二步,对 head 区域训练 F h e a d F^{head} Fhead,训练该步骤时,只将 head 当做前景,其他的都当做背景(包括 torso),会使用 head pose Π \Pi Π 。一个 ray 的最后一个采样点被认为是落在背景上的
  • 第三步,对 head 进行 render,重建好的 head 和 background 会合起来,被当做背景
  • 第四步,对训练 F t o r s o F^{torso} Ftorso

三、效果

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

​蔚来 V2G:带你重新了解如何参与构建新型电力系统

8 月 23 号,蔚来低调的在官方社区社区内发布了一条推文,推文为 「蔚来参与全国最大规模 V2G 需求响应」。 而车网互动验证中心(简称 e-Park)的 V2G 试验,在江苏无锡正式启动。 本次响应时间为 30 分钟,50 台电动车送电近 2000kW…

25.1 MySQL SELECT语句

1. SQL概述 1.1 SQL背景知识 1946年, 世界上诞生了第一台电脑, 而今借由这台电脑的发展, 互联网已经成为一个独立的世界. 在过去几十年里, 许多技术和产业在互联网的舞台上兴衰交替. 然而, 有一门技术却从未消失, 甚至日益强大, 那就是SQL.SQL(Structured Query Language&…

【软件工程】简单讲讲设计模式七大原则,以及代码简单举例

给自己一个目标,然后坚持一段时间,总会有收获和感悟! 学软件或计算机专业的同学应该都会接触到一门课程《软件工程》,七大设计原则属于软件工程中的重要知识点。 目录 一、软件工程1.1、提供指导和规范1.2、确保软件质量1.3、提高…

【经验分享】解决vscode编码问题

目录 先看一下我遇到的问题和你们的一不一样 下面是我查到的解决办法: 简单点说就是 我们看看解决后的效果 先看一下我遇到的问题和你们的一不一样 我一开始以为就是编码问题。 下面是我查到的解决办法: 这个错误提示看起来仍然是中文乱码。可能是由于…

Flink学习之旅:(二)构建Flink demo工程并提交到集群执行

1.创建Maven工程 在idea中创建一个 名为 MyFlinkFirst 工程 2.配置pom.xml <properties><flink.version>1.13.0</flink.version><java.version>1.8</java.version><scala.binary.version>2.12</scala.binary.version><slf4j.ver…

Java构建Web项目

对无底线服务型的系统&#xff0c;业务代码和界面代码脚本化是及其重要的。一是脚本化能确保部署本地就是再用的代码&#xff0c;不存在为每个项目管理代码的问题。然后脚本化不需要人为编译和投放程序库。极大的简化维护难度和成本。能不能脚本化直接决定了能否全面铺开运维&a…

流量新玩法:微信问一问了解一下

来自一位不断探索的营销人的问题&#xff1a;微信“问一问”引流&#xff0c;一个问答引流1000精准粉&#xff0c;是不是真的&#xff1f;如果是真的&#xff0c;那该怎么做呢&#xff1f; 微信的问一问功能&#xff0c;支持图文回答&#xff0c;也支持用视频去回答&#xff0c…

Java使用javah命令:‘javah‘ 不是内部或外部命令,也不是可运行的程序或批处理文件。

前提是已安装jdk&#xff0c;配置JDK环境变量&#xff0c;并成功输出下图&#xff1a; 但在命令行窗口使用javah&#xff0c;找不到该命令&#xff1a; 原因&#xff1a;新版的Java不使用javah的命令了&#xff0c;而是使用javac -h 用法&#xff1a; javac -h <directory&…

低代码系列——可视化编辑器

前端社区里&#xff0c;低代码/无代码是被讨论的火热赛道。它通过用最少量的编程代码去开发应用程序&#xff0c;从而提高效率。由此&#xff0c;许多企业都在使用低代码平台进行业务的开发和升级。低代码平台可以大幅简化编码过程&#xff0c;并且可以快速构建定制化的应用程序…

C++ - 类型转换 - static_cast - reinterpret_cast - const_cast - dynamic_cast

目录 类型转换 C语言当中的类型转换 为什么C需要四种类型转换 &#xff08;讲解volatile关键字&#xff09; C强制类型转换 static_cast reinterpret_cast const_cast dynamic_cast&#xff08;动态转换&#xff09; RTTI 类型转换 C语言当中的类型转换 其实在 C语言当…

从理论到实践,实时湖仓功能架构设计与落地实战

在上篇文章中&#xff0c;我们向大家解释了为什么实时湖仓是当前企业数字化转型过程中的解决之道&#xff0c;介绍了实时计算和数据湖结合的应用场景。&#xff08;“数据驱动”时代&#xff0c;企业为什么需要实时湖仓&#xff1f;&#xff09; 在这篇文章中&#xff0c;我们…

使用Gitlab构建简单流水线CI/CD

什么是Gitlab Gitlab实质上是一套DevOps工具 目前看起来&#xff0c;Gitlab属于是内嵌了一套CI/CD的框架&#xff0c;并且可以提供软件开发中的版本管理、项目管理等等其他功能。 这里需要辨别一下Gitlab和Github Gitee的区别。 GIthub大家都很熟悉了&#xff0c;一般大家都会…

探索DeFi世界,MixGPT引领智能金融新时代

随着区块链技术的迅猛发展&#xff0c;DeFi&#xff08;去中心化金融&#xff09;正成为金融领域的新宠。在这个充满活力的领域里&#xff0c;MixTrust站在创新的前沿&#xff0c;推出了一款引领智能金融新时代的核心技术——MixGPT。 MixGPT&#xff1a;引领智能金融体验的大型…

Rust逆向学习 (1)

文章目录 Hello, Rust Reverse0x01. main函数定位0x02. main函数分析line 1line 2line 3line 4~9 0x03. IDA反汇编0x04. 总结 近年来&#xff0c;Rust语言的热度越来越高&#xff0c;很多人都对Rust优雅的代码和优秀的安全性赞不绝口。对于开发是如此&#xff0c;对于CTF也是如…

208. 开关问题 - 异或方程组

208. 开关问题 - AcWing题库 我们可以找每一个开关由哪些开关掌控&#xff0c;每一个开关的值设为动过为1&#xff0c;没动过为0 再看当前开关的状态与结果的状态是否一致&#xff0c;一致为0&#xff0c;说明掌控这个开关的开关门的异或值为0&#xff0c;不一致则为1&#xf…

彻底理解操作系统与内核的区别!

通用底盘技术 Canoo公司有一项核心技术专利&#xff0c;这就是它们的通用电动底盘技术&#xff0c;长得是这个样子&#xff0c;非常像一个滑板&#xff1a; 这个带轮子、有电池、能动的滑板已经包含了一辆车最核心的组件&#xff0c;差的就是一个外壳。这个看起来像滑板的东西…

【MATLAB源码-第50期】基于simulink的BPSK调制解调仿真,输出误码率。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 1. Bernoulli Binary: 这个模块生成伯努利二进制随机数&#xff0c;即0或1。这些数字表示要传输的原始数字信息。 2. Unipolar to Bipolar Converter: 此模块将伯努利二进制数据从0和1转换为-1和1&#xff0c;这是BPSK调制的标…

AN动画基础——缓动动画

【AN动画基础——影片剪辑滤镜】 基础动画缓动动画缓动原理实例应用 本篇内容&#xff1a;了解曲线原理 重点内容&#xff1a;缓动动画 工 具&#xff1a;Adobe Animate 2022 基础动画 我们先做一个非缓动的效果的动画。 绘制一个矩形设置成元件—图形&#xff0c;30帧插入关…

SpringMVC源码分析(四)请求流程分析

a、http请求是怎么被Controller接受处理&#xff0c;然后返回结果的&#xff1f; 发出HTTP请求后&#xff0c;跳过网络层的东西&#xff0c;当被应用服务器Tomcat接受的时候。在Tomcat中存在一个servlet容器&#xff0c;它负责管理所有的servlet&#xff0c;包括SpringMVC的核…

MySQL绕过WAF实战技巧

一、前言 本人喜欢遇到好的东西&#xff0c;乐于分享&#xff0c;关注freebuf有段时间了&#xff0c;写过两篇文章&#xff0c;每次写写文章&#xff0c;不仅仅是为了挣点稿费。而是通过此平台能够认识一些安全圈的小伙伴&#xff0c;互相学习&#xff0c;共同进步。在安全行业…