【数字人】4、RAD-NeRF | 通过解耦 audio-spatial 编码来实现基于 NeRF 的高效数字人合成

news2025/1/9 2:32:13

在这里插入图片描述

文章目录

    • 一、背景
    • 二、方法
      • 2.1 问题定义
      • 2.2 Decomposed audio-spatial encoding module
      • 2.3 Pseudo-3D Deformable Module 用于控制 torso
      • 2.4 训练细节
    • 三、效果
      • 3.1 实验设置
      • 3.2 对比

论文:Real-time Neural Radiance Talking Portrait Synthesis via Audio-spatial Decomposition

代码:https://github.com/ashawkey/RAD-NeRF

项目:https://me.kiui.moe/radnerf/

贡献:

  • 提出了一个分解音频-空间编码模块,以有效地用两个低维特征网格建模固有高维度的音频驱动面部动态。
  • 提出了一个轻量级伪 3D 可变形模块,进一步提高在合成与头部运动同步的自然躯干运动时效率。
  • 本文框架比以前工作快 500 倍,并且渲染质量更好,并支持各种明确控制说话人像,例如头部姿势、眨眼和背景图像。

一、背景

Audio-driven 的说话人合成任务有很多应用场景,所以近年来的研究也比较多

有很多方法是基于 landmark 和 meshs 来作为面部结构的先验信息,也就是会借助中间表达特征,很依赖中间特征的效果。

NeRF 能够重建逼真的 3D 场景,NeRFace[19] 首次将 3DMM 引入 NeRF 来控制 head,还有一些方法 [22,32,46] 直接使用声音特征来控制 NeRF,不使用中间特征。但这些方法有一个通病就是很慢,例如 AD-NeRF 在 3090 GPU 上合成一个 450x450 大小的图像帧需要耗时 12s,远远低于实时 25FPS 的要求,且训练一个人需要大概一天的时间,限制了其实际使用。

为了提升效率,一个很直观的方法就是借鉴最近 NeRF 提效的解决方法 [9,10,31,37,45,49,62]。总的来说,就是降低 MLP 大小的同时在一个显示的可训练的网格结构中来保存 3D 场景特征。

之前很耗费资源的 MLP 前向传播就被一个线性插值取代了,同样能得到每个 3D 位置点的信息,但这种静态场景的方法不能直接用于动态说话人的合成。

从静态扩展到动态主要的问题:

  • 如何使用 grid-based NeRF 来同时高效的表达空间和语音信息?
    • audio 特征一般被编码成 64 维向量,然后送入包含 3D 空间坐标的 MLP 中,然而,在基于网格的设置中引入额外的音频维度进行线性插值,将导致指数级的计算复杂性增长
    • 当我们试图增加更多维度(比如音频)到NeRF模型时,可能会遇到计算复杂性指数级增长的问题。这是因为每新增一个维度,都会使得我们需要在空间中插值的数据点数量成倍增加。
    • 例如,在二维空间中,如果你想在每个方向上有10个插值点,那么你总共需要100个数据点。但如果你想在三维空间做同样的事情,那么你就需要1000个数据点。
    • 这就意味着随着我们添加更多的维度(如音频),所需进行插值和处理的数据量将迅速增大。这不仅会显著提高计算要求,并且可能超出现有硬件能力范围内处理。
    • 此外,在高纬度空间进行插值也存在其他挑战:例如,“诅咒”的问题。“诅咒”指出,在高纬度空间中, 数据变得稀疏, 这使得利用统计方法或者机器学习方法变得非常困难。
  • 有效的模拟躯干部分的运动也比较难,之前的方法或使用一个 3D 辐射场等,昂贵且复杂

本文如何做的:

  • 本文提出了一个实时 audio-spatial 解耦的方法,能够对 audio-driven 的说话人合成进行高效训练和实时推理
  • 作者利用了 grid-based NeRF 表达方式,将其优秀的静态场景建模能力引入了动态音频驱动的建模中
  • 主要的贡献点在于,将高维度的音频驱动说话人的特征分解到了三个低维可学习的特征网格中。即为了建模动态头部,作者将 audio 和 spatial 的特征表达分解到了两个 grid,虽然作者保持静态 3D 空间坐标不变,但音频动态性被编码到了低维坐标。此外,作者还证明了可以被划分成两个单独的更低维度特征网格,而不是在一个更高纬度特征网格内查询音频和空间坐标, 这进一步降低了插值成本. 这种分解后的音频-空间编码使得用于对话头部建模的NeRF变得更加高效。
  • 关于躯干部分,作者发现躯干运动涉及的拓扑变化较少,于是提出了一个轻量级的伪 3D 可变形模块来用 2D 特征网格建模躯干。

Grid-based NeRF:

  • NeRF(Neural Radiance Fields)是一种用于3D重建的深度学习方法,它通过对三维空间中的点进行颜色和密度建模,从而可以从任何角度渲染出逼真的2D图像。
  • Grid-based NeRF 是对传统 NeRF 方法的一种改进。在传统的 NeRF 中,神经网络会为每个 3D 空间中的点分配一个颜色和密度值。然而,这种方法在处理大型场景时可能会遇到内存限制问题。
  • Grid-based NeRF 解决了这个问题。它通过将 3D 空间划分成一个网格,并仅在网格顶点上评估神经网络来优化内存使用情况。然后, 通过插值技术得到网格之间任意位置点的颜色和密度值. 这样就可以处理更大规模场景, 同时保持了较高精度.

总结一下主要区别:

  • 内存使用:Grid-based NeRF优化了内存使用情况,使其能够处理更大规模场景。
  • 计算效率:由于只需在网格顶点上评估神经网络,并利用插值技术获取其他位置信息, Grid-based NeRF提高了计算效率。
  • 精确性:尽管采用了简化方式,在许多应用中, Grid-based NeRF还是能够保持较高精确性。

二、方法

在这里插入图片描述

2.1 问题定义

1、NeRF

NeRF 是使用 5D coordinates 来表达 3D 场景,也就是一个函数 F : x,d → σ , c F: \text{x,d} \to \sigma,\text{c} F:x,dσ,c,假设一个 ray 从 o 出发,沿着方向 d 行进,则在沿着射线顺序采样的点 x i = o + t i d \text{x}_i=\text{o}+t_i \text{d} xi=o+tid 处来查询 F F F 来计算密度和颜色。

颜色:

在这里插入图片描述

2、Dynamic NeRF:

动态场景相比静态场景而言,会增加一些额外的条件,如当前时间 t。

之前的方法主要有两种解决方式:

  • 1:使用 deformation-base 方法来在每个位置学习一个 deformation 和 time step,然后加到位置上去。但该类方法不适用于局部运动建模,如唇部运动。但可以用来建模肩膀。
  • 2:使用 Modulation-based 方法,直接将时间 t 引入 NeRF,和位置、方向一起训练。这类方法可以用了建模头部。

在这里插入图片描述

3、Audio-driven Neural Radiance Talking Portrait

合成说话人的一般通用格式如下,一般使用 3-5 分钟有连续音频和固定机位拍摄的特定场景的视频

对每帧图片进行预处理:

  • 对 head、neck、torso、background 进行语义分割
  • 抽取 2D facial landmarks,包括眼部和唇部
  • 使用 face-tracking 来估计 head pose 参数

对声音处理:

  • 使用 Automatic Speech Recognition (ASR) model 来提取声音特征

在这里插入图片描述

4、Grid-based NeRF

近期的 Grid-based NeRF 就是使用 3D feature grid encoder 将将静态场景的 3D 空间信息进行编码。

3D feature grid encoder:

在这里插入图片描述

这种处理能加速训练和推理,为实时处理 3D 场景带来了可能

2.2 Decomposed audio-spatial encoding module

1、Audio-spatial Decomposition

之前的隐式 NeRF 方法 [22,32] 通常将 audio 信号会直接编码到高维特征,然后和空间高维特征 concat

但是这样对于 grid-based NeRF 来说,很昂贵,所以本文作者提出了解耦的方式

  • 首先,将高维语音特征压缩到低维语音坐标 x a ∈ R D \text{x}_a \in R^D xaRD,且 D ∈ [ 1 , 2 , 3 ] D \in [1,2,3] D[1,2,3],很小。实现方式是使用 x a = MLP(a, f) \text{x}_a = \text{MLP(a, f)} xa=MLP(a, f)

  • 然后,将 audio-spatial grid encoder 解耦成 两个 grid encoder 来分别对 audio 和 spatial 进行编码,然后 concat 起来即可:

    在这里插入图片描述

2、控制眨眼

眨眼对真实的数字人合成也很重要

但是由于眨眼和声音没有很大的关系,很多之前的方法都忽略了眨眼,本文提出了一个方法来控制眨眼,如图 2。

  • 首先,计算 eye area 在整个面部的占比,然后使用这个占比(通常为 0% ~ 0.5%)作为一维 eye feature e e e
  • 然后,使用 eye feature 作为 NeRF 的 condition,来加入 NeRF 的训练

在这里插入图片描述

3、整体 head 表达

当得到了下面几个特征时,就可以使用一个 small MLP 来预测 density 和 color 了:

  • spatial feature f f f
  • audio feature g g g
  • eye feature e e e
  • latent appearance embedding i i i

在这里插入图片描述

然后就可以使用公式 1 的方式来进行体渲染来得到每个位置的颜色,并合成 head

在这里插入图片描述

2.3 Pseudo-3D Deformable Module 用于控制 torso

在这里插入图片描述

2.4 训练细节

1、最大占用网络的修剪

在提高 NeRF效率的过程中,常见的一种技术是维护一个占用网格来修剪射线采样空间。这在静态场景下非常直接,因为占用网格也是静态的,我们可以使用一个三维网格来存储它。但对于动态场景,占用值还取决于动态条件,这就需要额外的维度。然而,更高维度的占用网格更难以存储和管理,并且会导致模型大小和训练时间大幅增加。

作者发现,在处理说话头部模型时(即人物头部根据音频进行相应动作的模型),由音频变化引起的占有率变化通常很小并且可以忽略不计。因此,他们提出了一种新方法:不是为每个音频条件都单独设置一个占有率网格,而是设定一个最大占有率网格来覆盖所有可能出现的音频条件。

具体实施过程中,在训练阶段从数据集中随机抽取各种音频条件,并记录下最大值作为最大占有率。这样做只需要使用三维网格就能存储所有可能出现情况下的最大值,并且能够成功地修剪不同音频条件下射线采样空间。

2、Loss 函数

颜色 loss 为 MSE loss:

在这里插入图片描述

使用 cross entropy loss 来优化 pixel transparency(像素透明度 α \alpha α)为 0 或 1,权重为 0.001

在这里插入图片描述

对于 audio 特征,理想情况下其应该只对面部区域起作用,在非面部区域的值应该为 0,所以作者使用 L1 正则化来约束,优化的目标是让其在非面部区域的值为 0(如 hair 和 ear),即不会闪烁,面部区域是使用 2D 关键点来定位的。

权重为 0.1
在这里插入图片描述

3、fine-tuning lips

高质量的唇部运动对于说话人的合成很重要,作者发现,只使用 pixel-wise MSE loss 很难对唇部进行很好的建模

所以,作者提出使用 patch-wise structural loss(如 LIPIS loss[63]),也就是基于面部关键点,在 lips 区域选择 patch,对唇部进行进一步 finetune,finetune 的整体 loss 如下。

权重为 0.01

在这里插入图片描述

三、效果

3.1 实验设置

  • head 训练 20000 step,finetune lip 5000 step,每个 step 有 256x256 rays
  • 每个 ray 采样 16 个点

3.2 对比

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

【前端学习】—变量类型和计算(五)

【前端学习】—变量类型和计算(五) 一、JS中使用typeof能得到哪些类型 字符串(String):表示文本数据,用单引号或双引号括起来。 数字(Number):表示数值数据,包括整数和浮点数。 布尔值(Boolean):表示真或假(true或false)的逻辑值。 空值(Null):表示一个空…

echarts的markline警标线(一条/多条)的使用

echarts之markLine(可以设置特定阈值线(警戒线)) 一条线写法 series: [{name: Fake Data,type: line,showSymbol: false,data: data,markLine: {symbol: [none, none], // 去掉箭头label: {show: false,position: start,formatter: {b}},data: [{name: 阈值,yAxis: 200}],line…

[备忘]WindowsLinux上查看端口被什么进程占用|端口占用

Windows上 查看端口占用&#xff1a; netstat -aon|findstr <端口号> 通过进程ID查询进程信息 tasklist | findstr <上一步查出来的进程号> 图例&#xff1a; Linux 上 查看端口占用&#xff1a; netstat -tuln | grep <端口号> lsof -i:<端口号&…

Canvas绘图学习笔记:画笔的路径与状态

beginPath beginPath表示开始一个路径&#xff0c;我们在上一章画弧的时候用到过好多次&#xff0c;他的API非常简单&#xff1a; context.beginPath(); 开始路径有2层意思&#xff0c;一个就是本次绘制的起点是新的&#xff08;不再是上次结束的点了&#xff09;&#xff0…

诈骗分子投递“大闸蟹礼品卡”,快递公司如何使用技术手段提前安全预警?

目录 快递公司能不能提前识别&#xff1f; 如何通过技术有效识别 为即将带来的双十一提供安全预警 金秋十月&#xff0c;正是品尝螃蟹的季节。中秋国庆长假也免不了走亲访友&#xff0c;大闸蟹更是成了热门礼品。10月7日&#xff0c;演员孙艺洲发布微博称&#xff0c;“收到…

优思学院|质量保证是什么?提高产品和服务质量的关键方法

在当今竞争激烈的市场中&#xff0c;企业需要确保他们的产品和服务能够满足客户的期望。质量保证是实现这一目标的关键。本文将探讨质量保证的重要性&#xff0c;以及提高产品和服务质量的方法。 1. 了解质量保证的概念 质量保证是指一系列的活动和措施&#xff0c;旨在确保产…

STM32 裸机编程 03

MCU 启动和向量表 当 STM32F429 MCU 启动时&#xff0c;它会从 flash 存储区最前面的位置读取一个叫作“向量表”的东西。“向量表”的概念所有 ARM MCU 都通用&#xff0c;它是一个包含 32 位中断处理程序地址的数组。对于所有 ARM MCU&#xff0c;向量表前 16 个地址由 ARM …

Databend 开源周报第 115 期

Databend 是一款现代云数仓。专为弹性和高效设计&#xff0c;为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务&#xff1a;https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展&#xff0c;遇到更贴近你心意的 Databend 。 聚合索引 Data…

再现ORA-600 4000故障处理---惜分飞

有一个10g的库&#xff0c;由于redo损坏导致无法正常recover成功 正常途径无法open成功,尝试强制打开库 Wed Oct 18 11:23:25 2023 alter database open resetlogs Wed Oct 18 11:23:25 2023 RESETLOGS is being done without consistancy checks. This may result in a corr…

端到端测试(End-to-end tests)重试策略

作者&#xff5c;Giuseppe Donati&#xff0c;Trivago公司Web测试自动化工程师 整理&#xff5c;TesterHome 失败后重试&#xff0c;是好是坏&#xff1f; 为什么要在失败时重试所有测试&#xff1f;为什么不&#xff1f; 作为Trivago&#xff08;德国酒店搜索服务平台&…

Cesium Vue(四)— 物体(Entity)的添加与配置

1. 添加标签和广告牌 // 添加文字标签和广告牌var label viewer.entities.add({position: Cesium.Cartesian3.fromDegrees(113.3191, 23.109, 750),label: {text: "广州塔",font: "24px sans-serif",fillColor: Cesium.Color.WHITE,outlineColor: Cesium.…

什么是美颜SDK?解析主播直播美颜SDK的技术原理与应用

当下&#xff0c;越来越多的主播和内容创作者依赖直播平台来与观众互动、分享内容和实时传达信息。然而&#xff0c;为了在激烈的竞争中脱颖而出&#xff0c;许多主播需要借助美颜技术来提高他们的外貌吸引力。这就引入了主播直播美颜SDK&#xff0c;一个结合了技术原理与应用的…

链表 oj2 (7.31)

206. 反转链表 - 力扣&#xff08;LeetCode&#xff09; 我们通过头插来实现 将链表上的节点取下来&#xff08;取的时候需要记录下一个节点&#xff09;&#xff0c;形成新的链表&#xff0c;对新的链表进行头插。 /*** Definition for singly-linked list.* struct ListNode…

2024年湖北建筑安全员abc三类人员考试新题库考试题库

2024年湖北建筑安全员abc三类人员考试新题库考试题库 湖北三类人员建筑安全员ABC证新题库是存在的&#xff0c;因为安管系统老更新&#xff0c;每次更新后&#xff0c;新题库&#xff08;重点题库&#xff09;就会有所变化。新题库主要是针对考试的&#xff0c;提高考试合格率…

基于selenium的pyse自动化测试框架

介绍&#xff1a; pyse基于selenium&#xff08;webdriver&#xff09;进行了简单的二次封装&#xff0c;比selenium所提供的方法操作更简洁。 特点&#xff1a; 默认使用CSS定位&#xff0c;同时支持多种定位方法&#xff08;id\name\class\link_text\xpath\css&#xff09;…

新工控机的基本配置过程

我们50水球上的工控机使用的是&#xff1a;英特尔 NUC10i7FNH 迷你电脑&#xff08;通过查看铭牌获知&#xff09;。对应官网&#xff1a; https://www.intel.cn/content/www/cn/zh/support/products/188811/intel-nuc/intel-nuc-kits/intel-nuc-kit-with-10th-generation-inte…

【temu】分析拼多多跨境电商Temu数据分析数据采集

Temu是拼多多旗下跨境电商平台&#xff0c;于2022年9月1日在美国、加拿大、新加坡、中国台湾、中国香港等市场上线。本文作者从销售额、销量、产品分布等方面&#xff0c;对Temu产品进行了分析&#xff0c;一起来看一下吧。 item_get获得商品详情item_review获得商品评论列表it…

线上购药小程序的崭新时代:医疗与科技的完美结合

在当今数字化时代&#xff0c;医疗和科技的融合已经催生了许多创新的解决方案&#xff0c;其中线上购药小程序正是医疗与科技完美结合的杰出代表。在这篇文章中&#xff0c;我们将一起探讨如何使用现代技术来创建一个简单的线上购药小程序原型&#xff0c;以展示医疗和科技的崭…

Mysql 约束,基本查询,复合查询与函数

文章目录 约束空属性约束默认值约束zerofill主键约束自增长约束唯一键约束外键约束 查询select的执行顺序单表查询排序 updatedelete整张表的拷贝复合语句group by分组查询 函数日期函数字符串函数数学函数其他函数 复合查询合并查询union 约束 空属性约束 两个值&#xff1a…

springcloud之项目实战服务治理

写在前面 在这篇文章 我们已经搭建完成了优惠券模块的单体版本&#xff0c;为了向微服务化迈出坚实的一步&#xff0c;这部分来看下服务治理的内容&#xff0c;并在我们的项目中引入服务治理&#xff0c;下面我们就开始吧&#xff01; 源码 。 1&#xff1a;什么是&#xff…