Learning Dynamic Facial Radiance Fields for Few-Shot Talking Head Synthesis 笔记

news2024/11/25 0:48:50

Learning Dynamic Facial Radiance Fields for Few-Shot Talking Head Synthesis 笔记

摘要

Talking head synthesis is an emerging technology with wide applications in film dubbing, virtual avatars and online education. Recent NeRF-based methods generate more natural talking videos, as they better capture the 3D structural information of faces. However, a specific model needs to be trained for each identity with a large dataset. In this paper, we propose Dynamic Facial Radiance Fields (DFRF) for few-shot talking head synthesis, which can rapidly generalize to an unseen identity with few training data. Different from the existing NeRF-based methods which directly encode the 3D geometry and appearance of a specific person into the network, our DFRF conditions face radiance field on 2D appearance images to learn the face prior. Thus the facial radiance field can be flexibly adjusted to the new identity with few reference images. Additionally, for better modeling of the facial deformations, we propose a differentiable face warping module conditioned on audio signals to deform all reference images to the query space. Extensive experiments show that with only tens of seconds of training clip available, our proposed DFRF can synthesize natural and high-quality audio-driven talking head videos for novel identities with only 40k iterations. We highly recommend readers view our supplementary video for intuitive comparisons. Code is available in https://sstzal.github.io/DFRF/.

会说话的头像合成是一项新兴的技术,在电影配音、虚拟化身和在线教育等领域有着广泛的应用。最近的基于NeRF的方法生成更自然的谈话视频,因为它们更好地捕获面部的3D结构信息。然而,需要针对具有大型数据集的每个身份训练特定模型。在本文中,我们提出了动态面部辐射场(DFRF)的几个镜头说话的头部合成,它可以快速推广到一个看不见的身份与少量的训练数据。与现有的直接将特定人的3D几何形状和外观编码到网络中的基于NeRF的方法不同,我们的DFRF条件在2D外观图像上的人脸辐射场来学习人脸先验。因此,面部辐射场可以灵活地调整到新的身份与几个参考图像。此外,为了更好地建模的面部变形,我们提出了一个可微的面部变形模块的音频信号变形的查询空间的所有参考图像。大量的实验表明,只有几十秒的训练剪辑可用,我们提出的DFRF可以合成自然和高质量的音频驱动的说话头部视频的新身份,只有40k迭代。我们强烈建议读者查看我们的补充视频,以进行直观的比较。代码可在www.example.com上获得https://sstzal.github.io/DFRF/。

GitHub:https://github.com/sstzal/DFRF

知识点

框架

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XpvxyoE0-1682325914139)(C:\Users\dell\AppData\Roaming\Typora\typora-user-images\image-20230424154122197.png)]

Overview of the proposed Dynamic Facial Radiance Fields (DFRF)所提出的动态面部辐射场(DFRF)的概述。

使用预训练的基于RNN的DeepSpeech模块来提取每帧音频特征。对于帧间一致性,进一步引入时间滤波模块[39]以计算平滑音频流图像流投影基于注意力的特征融合音频特征A,其可以表示为其相邻音频特征的基于自注意力的融合。以这些音频特征序列A为条件,我们可以学习音频-嘴唇映射。该音频驱动的面部辐射场可以表示为 ( c , σ ) = F θ ( p , d , A ) \quad(c,\sigma)=\mathcal{F}_{\theta}\left(p,d,A\right) (c,σ)=Fθ(p,d,A)

由于身份信息被隐式编码到面部辐射场中,并且在渲染时不提供显式身份特征,因此该面部辐射场是人特定的。对于每个新身份,都需要在大型数据集上从头开始优化。这导致昂贵的计算成本并且需要长的训练视频。为了摆脱这些限制,我们设计了一个参考机制,使训练有素的基础模型能够快速泛化到新的人员类别,只有一小段目标人员可用。图2中示出了这种基于参考的架构的概述。具体地,取N个参考图像 M = { M n ∈ R H × W ∣ 1 ≤ n ≤ N } M=\left\{M_n\in\mathbb{R}^{H\times W}\text{}|1\leq n\leq N\right\} M={MnRH×W∣1nN}及其对应的摄像机位置 { T n } \{T_n\} {Tn}作为输入,用一个两层卷积网络计算其像素对齐的图像特征 F = { F n ∈ R H × W × D ∣ 1 ≤ n ≤ N } F=\left\{F_n\in\mathbb{R}^{H\times W\times D}|1\leq n\leq N\right\} F={FnRH×W×D∣1nN},无下采样。在本工作中,特征尺寸D被设置为128,并且H、W分别表示图像的高度和宽度。多个参考图像的使用提供了更好的多视图信息。对于一个3D查询点 p = ( x , y , z ) ∈ P p=\left(x,y,z\right)\in\mathcal{P} p=(x,y,z)P,我们使用本征函数 { K n } \{K_n\} {Kn}和相机姿态 { R n , T n } \{R_n,T_n\} {RnTn}将其投影回这些参考的2D图像空间,并得到相应的2D坐标。使用 p n r e f = ( u n , v n ) \begin{matrix}p_n^{ref}=(u_n,v_n)\end{matrix} pnref=(un,vn)来表示第n幅参考图像中的2D坐标,该投影可以被公式化为:
p n r e f = M ( p , K n , R n , T n ) , (1) p_n^{ref}=\mathcal{M}(p,K_n,R_n,T_n),\tag1 pnref=M(p,Kn,Rn,Tn),(1)

其中 M \text{}\mathcal{M} M是从世界空间到图像空间的传统映射。然后,在舍入操作之后对来自N个参考的这些对应的像素级特征 { F n ( u n , v n ) } ∈ R N × D {\{F_n}(u_n,v_n)\}\in{\mathbb{R}^{N\times D}} {Fn(un,vn)}RN×D进行采样,并与基于注意力的模块融合,以获得最终特征 F ~ = A g g r e g a t i o n ( { F n ( u n , v n ) } ) ∈ R D \tilde{F}=A g g r e g a t i o n(\{F_{n}(u_{n},v_{n})\})\in\mathbb{R}^{D} F~=Aggregation({Fn(un,vn)})RD。这些要素网格包含有关身份和外观的丰富信息。使用它们作为我们的面部辐射场的附加条件,使得模型可以从几个观察到的帧快速概括为新的面部外观。该双驱动面部辐射场最终可以被公式化为:
( c , σ ) = F θ ( p , d , A , F ~ ) . (2) (c,\sigma)=\mathcal F_\theta\left(p,d,A,\tilde F\right).\tag2 (c,σ)=Fθ(p,d,A,F~).(2)

可微分面变形

我们将查询3D点投影回这些参考图像的2D图像空间,如等式(1)所示。(1)以得到经调节的像素特征。该操作基于NeRF中的先验知识,即从不同视点投射的相交光线应对应于相同的物理位置,从而产生相同的颜色。这种严格的空间映射关系适用于刚性场景,但说话的脸是动态的。说话时,嘴唇和其他面部肌肉会根据发音而运动。应用等式(1)直接在可变形的说话面部上可能导致关键点不匹配。例如,标准体积空间中的嘴角附近的3D点被映射回参考图像的像素空间。如果参考面示出不同的嘴部形状,则映射点可能远离期望的真实的嘴角。这种不准确的映射导致来自参考图像的不正确的像素特征条件,这进一步影响对说话嘴的变形的预测。

为了解决这个限制,我们建议一个audio-conditioned和3D逐点面变形模块 D η \mathcal{D}_{\eta} Dη。退化抵消 Δ o = ( Δ u , Δ v ) \Delta o=(\Delta u,\Delta v) Δo=(Δu,Δv)为每个投影点”在特定的变形,就像图像流图2所示。具体来说, D η \mathcal{D}_{\eta} Dη实现变形场与中长期规划三层,其中 η \eta η是可学的参数。回归抵消 Δ o \Delta o Δo,动态查询图像和参考图像之间的差异需要有效地利用。查询的音频信息反映了动态图像,而变形的参考图片可以看到通过 { F n } \{F_n\} {Fn}隐式的图像特征。因此,我们将这两个部分与查询3D点坐标P-起作为 D η \mathcal{D}_{\eta} Dη的输入。面变形的过程来预测补偿模块 D η \mathcal{D}_{\eta} Dη可以制定为:
Δ o n = D η ( p , A , F n ( u n , v n ) ) . (3) \Delta o_n=\mathcal{D}_\eta(p,A,F_n(u_n,v_n)).\tag3 Δon=Dη(p,A,Fn(un,vn)).(3)
然后,如图3所示,将预测的偏移 o n o_n on添加到 p n r e f p^{ref}_n pnref,如图3所示,以得到如图3所示的精确对应坐标 p n r e f ‘ p^{ref^{`}}_n pnref,以得到3D查询点 p p p,
p n r e f = p n r e f + Δ o n = ( u n ′ , v n ′ ) , ( where   u n ′ = u n + Δ u n    a n d    v n ′ = v n + Δ v n . ) (4) p_n^{ref}=p_n^{ref}+\Delta o_n=(u_n',v_n'),(\text{where}\ \ u'_n=u_n+\varDelta u_n\mathrm{\ \ and\ \ }v'_n=v_n+\varDelta v_n.)\tag4 pnref=pnref+Δon=(un,vn),(where  un=un+Δun  and  vn=vn+Δvn.)(4)
由于硬索引操作 F n ( u n ′ , v n ′ ) F_{n}({u_{n}}^{\prime},{v_{n}}^{\prime}) Fn(un,vn)不可微,因此梯度不能被反向传播到该扭曲模块。因此,我们引入了一个软指标函数来实现可微翘曲,其中每个像素的特征是通过双线性采样的特征插值其周围的点。以这种方式,可以端到端地联合优化变形场 D η \mathcal{D}_{\eta} Dη和面部辐射场 F θ \mathcal{F}_{\theta} Fθ。该软索引操作的可视化在图3中示出。对于绿点,其像素特征通过其四个最近邻居的特征通过双线性插值来计算。为了更好地约束该扭曲模块的训练过程,我们引入正则化项 L r L_r Lr以将预测偏移的值限制在合理的范围内以防止失真。
L r = 1 N ⋅ ∣ P ∣ ∑ p ∈ P ∑ n = 1 N Δ u n 2 + Δ v n 2 , (5) L_r=\dfrac{1}{N\cdot|\mathcal{P}|}\sum\limits_{p\in\mathcal{P}}\sum\limits_{n=1}^N\sqrt{\Delta u_n^2+\Delta v_n^2},\tag5 Lr=NP1pPn=1NΔun2+Δvn2 ,(5)

其中 P \mathcal{P} P是体素空间中所有3D点的集合, N N N是参考图像的数量。此外,我们认为,低密度的点更有可能是背景区域,应该有低变形偏移。在这些区域中,应施加更强的正则化约束。为了更合理的约束,我们将上述 L r L_r Lr改变为:

L r ′ = ( 1 − σ ) ⋅ L r , (6) L_r{'}=(1-\sigma)\cdot L_r,\tag6 Lr=(1σ)Lr,(6)
其中 σ \sigma σ表示这些点的密度。动态面部辐射场最终可以被公式化为:
( c , σ ) = F θ ( p , d , A , F ~ ′ ) , (7) (c,\sigma)=\mathcal F_\theta\left(p,d,A,\tilde F'\right),\tag7 (c,σ)=Fθ(p,d,A,F~),(7)
其中 F ~ = A g g r e g a t i o n ( { F n ( u n ′ , v n ′ ) } ) \tilde{F}=A g g r e g a t i o n(\{F_{n}(u'_{n},v'_{n})\}) F~=Aggregation({Fn(un,vn)})

利用该面部变形模块,可以将所有参考图像变换到查询空间,以更好地对说话面部变形进行建模。消融研究已经证明了该组件在产生更准确和音频同步的嘴部运动方面的有效性。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Q3iijfVI-1682325914139)(C:\Users\dell\AppData\Roaming\Typora\typora-user-images\image-20230424153431907.png)]

可微分面翘曲的可视化(Visualization of the differentiable face warping.)。查询3D点(紫色)被投影到参考图像空间(红色)。然后,学习偏移Δ o以将其扭曲到查询空间(绿色),其中其特征通过双线性插值来计算。

体渲染

体绘制用于对来自等式(7)的颜色c和密度σ进行积分转化成人脸图像。我们将背景、躯干和颈部部分一起作为渲染“背景”,并从原始视频中逐帧恢复。我们将每条射线的最后一个点的颜色设置为相应的背景像素,以渲染包括躯干部分的自然背景。这里,我们按照原始NeRF中的设置,在音频信号A和图像特征 F ′ ~ \tilde{F^{\prime}} F~的条件下,相机光线 r r r的累积颜色 C C C为:
C ( r ; θ , η , R , T , A , F ~ ′ ) = ∫ z n e a r z f a r σ ( t ) ⋅ c ( t ) ⋅ T ( t ) d t , (8) C\left(r;\theta,\eta,R,T,A,\tilde{F}'\right)=\int_{z_{near}}^{z_{far}}\sigma\left(t\right)\cdot c(t)\cdot T\left(t\right)dt,\tag8 C(r;θ,η,R,T,A,F~)=znearzfarσ(t)c(t)T(t)dt,(8)
其中 θ \theta θ η \eta η分别是面部辐射场 F θ \mathcal F_{\theta} Fθ和面部扭曲模块 D η \mathcal{D}_{\eta} Dη的可学习参数。 R R R是旋转矩阵, T T T是平移向量。 T ( t ) = e x p ( − ∫ z n e a r t σ ( r ( s ) ) d s ) T\left(t\right)=e x p\left(-\int_{z_{n e a r}}^{t}\sigma\left(r\left(s\right)\right)d s\right) T(t)=exp(zneartσ(r(s))ds)是沿着相机光线的积分透射率,其中 z n e a r z_{near} znear z f a r z_{far} zfar是相机光线的近边界和远边界。我们按照NeRF设计MSE损失为 L M S E = ∥ C − I ∥ 2 L_{MSE} =\left\|C-I\right\|^{2} LMSE=CI2,其中I是地面真值颜色。与方程中的正则化项耦合。(6),总损失函数可以公式化为:

L = L M S E + λ ⋅ L r ′ . (9) L=L_{MSE}+\lambda\cdot L_r{'}.\tag9 L=LMSE+λLr.(9)

效果

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

举个栗子~Tableau 技巧(253):让筛选器只显示全部以及需要的类别

用户反馈了一个需求:我的业务数据有很多类别,但其实经常查看的只有几个,Tableau 筛选器能不能设置一下,只显示全部和经常查看的那几个类别? 这个是可以实现的!如下示例,数据类别有:…

好用的思维导图软件有哪些

ProcessOn ,一款让“工具回归工具、让你回归你的"软件! 当“在线”成为当今时代的主流时、 如果让你选择一款好用的思维导图软件、 你希望Ta 是什么样的? ProcessOn! 它可以是你的待办清单、笔记工具、社区分享工具、PPT演…

vector(入门知识点)

目录 vector的介绍 ​编辑 例&#xff1a;遍历 拷贝&#xff1a; 初始化&#xff1a; 反向迭代器&#xff1a; 扩容&#xff1a; insert与erase vector的介绍 例&#xff1a;遍历 拷贝&#xff1a; 初始化&#xff1a; &#xff08;10个1&#xff09; vector<int>注意…

Jetpack Compose 中使用分页 API 调用的无限滚动

Jetpack Compose 中使用分页 API 调用的无限滚动 最近&#xff0c;我在DashCoin 的硬币屏幕上添加了一个带有分页 API 调用的无限滚动。它使浏览硬币列表变得非常困难&#xff0c;并且确实减少了初始加载时间&#xff0c;比以前少了。如果没有正确实施&#xff0c;实施无限滚动…

基数排序详解

本期内容是对之前排序内容的一部分补充&#xff0c;需要有一定的基础 (14条消息) 万字解析&#xff0c;带你深入掌握多种排序算法&#xff01;-C语言-CSDN博客 基数排序 基数排序&#xff08;Radix Sorting&#xff09;是和前面所述各类排序方法完全不相同的一种排序方法。从…

【C++】面试官:你小子,继承与多态的题你都会

文章目录 前言一、理论知识类二、编程题选择类 前言 上一篇文章我们详细了介绍了多态&#xff0c;用汇编一步一步的查看了多态的实现原理&#xff0c;讲解了这么多理论知识该做一些面试题了&#xff0c;这些面试题都是历年来大厂所出的笔试题&#xff0c;希望大家可以把我今天…

php动态密码和加密解密函数的使用(动态密码、Discuz核心函数AuthCode、任意输入密码验证)

php加密解密的使用 一、项目说明二、项目分析1.js外部文件2.HTML容器构建3.layui前端验证4.php后端验证封装函数密码验证规则strpos内置函数 三、经典的核心加密函数1.Discuz!开发之核心加密解密函数2.常用简单加密解密函数 一、项目说明 在开发大屏时&#xff0c;需要在前端输…

【Linux】4、Linux 的用户、用户组和权限等

目录 一、Linux 的 root 用户二、切换用户相关命令(1) su(2) sudo 三、用户和用户组(1) 用户组命令(2) 用户相关命令(3) 查看当前系统中有哪些用户和用户组 四、认识权限控制信息(1) 权限控制信息分析(2) chmod 命令(3) 权限的数字序号(4) chown 命令 一、Linux 的 root 用户 …

【Android入门到项目实战-- 6.2】—— 如何访问其他应用程序的数据?

目录 一、ContentResolver基本用法 如何查询&#xff1f; 如何向表中添加一条数据&#xff1f; 如何更新这条新添加的数据&#xff1f; 如何删除这条数据&#xff1f; 二、读取系统联系人 要想你的APP访问其他应用程序的数据&#xff0c;需要使用内容提供器&#xff0c;下面使…

Springboot结合线程池的使用

1.使用配置文件配置线程的参数 配置文件 thread-pool:core-size: 100max-size: 100keep-alive-seconds: 60queue-capacity: 1配置类 Component ConfigurationProperties("thread-pool") Data public class ThreadPoolConfig {private int coreSize;private int ma…

数据结构与算法(三):数论(树形结构、二叉树、二叉搜索树、红黑树、Btree、B+Tree、赫夫曼树、堆树)

数论&#xff08;树形结构、二叉树、二叉搜索树、红黑树、Btree、BTree、赫夫曼树、堆树&#xff09; 树形结构概念 在树形结构里面重要的术语&#xff1a; 结点&#xff1a;树里面的元素。 父子关系&#xff1a;结点之间相连的边 子树&#xff1a;当结点大于1时&#xff0…

19学习提升:gRPC源码中的那些优秀设计(上)

gRPC作为高性能的RPC框架,离不开它优雅的设计和编码,无论是作为一名底层开发者还是上层的业务开发者,能够写出一手好的代码一直都是决定自身水平高低的一个重要体现,如果想要达到一个较高层次的水平,离不开长时间的学习和训练以及不断的感悟,而一些优秀的开源软件和框架往…

Idea 配置 maven 离线使用

首先&#xff0c;项目中的依赖已经下载到本地仓库&#xff0c;在没有网络或者没办法连通公司的maven仓库时&#xff0c;需要配置离线使用。 1. 配置 setting.xml 在 maven 使用的 setting.xml 文件中&#xff0c;加入以下配置。 默认在 maven安装目录下的 conf 文件夹下 。 &…

Web安全 XSS靶场搭建(玩转整个XSS环境.)

Web安全 XSS靶场搭建 XSS又叫CSS&#xff08;Cross Site Script&#xff09;跨站脚本攻击&#xff0c;指的是攻击者在Web页面&#xff0c;插入恶意JS代码&#xff0c;当用户浏览该页之时&#xff0c;嵌入其中JS代码就会被执行&#xff0c;从而达到攻击的目的.&#xff08;包含&…

美颜sdk开发实践:如何构建美颜sdk功能?

美颜功能是现今很多应用中必不可少的一项功能。而要实现美颜功能&#xff0c;除了自己编写美颜算法外&#xff0c;还可以使用美颜sdk来实现。本文将介绍如何从零开始构建美颜功能&#xff0c;利用美颜sdk实现美颜效果。 一、简介 美颜sdk可以向用户提供多种美颜效果&#xff…

HopeHomi脚手架(五)远程调用Feign与Sentinel

代码示例 cloudB cloudA-api cloudA feign对象注册源码解析 FeignClientsRegistrar FeignClientsRegistrar实现了ImportBeanDefinitionRegistrar 当启动类自动扫描构造beanDefinition的时候&#xff0c;进行beanDefinition注册 ImportBeanDefinitionRegistrar回调registerB…

TryHackMe-Second(boot2root)

Second 排名第二并不是一件坏事&#xff0c;但在这种情况下并非如此。 端口扫描 循例nmap Web枚举 进到8000 注册个账号进去&#xff0c;没啥用 二次注入 虽然登录框那里没有sql注入&#xff0c;但是可以尝试注册个非法账户名尝试二次注入 登录进去之后使用单词计数器 说明…

【产品设计】RBAC权限设计

权限管理是B端中常见的话题&#xff0c;它规定了用户各自的角色和可使用的职能&#xff0c;也对数据的安全提供了保障。 权限管理是B端产品绕不开的话题&#xff0c;本文总结了我对权限管理的设计经验与设计方法&#xff0c;共分为4个部分&#xff1a; 权限管理的概念梳理RBAC…

部署LVS-DR群集

LVS-DR数据包流向分析 为了方便进行原理分析&#xff0c;将Client与群集机器放在同一网络中&#xff0c;数据包流经的路线为1-2-3-4 &#xff08;Client向目标VIP发出请求&#xff0c;调度器接收&#xff1b;director根据负载均衡算法选择realserver不修改也不封装IP&#xf…

【深度学习入门系列】径向基函数(RBF)神经网络原理介绍及pytorch实现(内含分类、回归任务实例)

文章目录 1 RBF神经网络1.1 简介1.2 步骤输入rbf层核函数中心点求解方法 输出 1.3 几个问题 2 分类2.0 数据集2.1 网络架构2.2 代码2.3 结果 3 回归3.0 数据集3.1 网络架构3.2 代码3.3 结果 4 代码&#xff08;可直接食用&#xff09; 众所周知&#xff0c;MATLAB工具箱里提供了…