生成模型 | 2024年新年新论文:audio2photoreal[正在更新中]

本博客主要包含了20240103新出的论文From Audio to Photoreal Embodiment: Synthesizing Humans in Conversations论文解释及项目实现~

论文题目:20240103_From Audio to Photoreal Embodiment: Synthesizing Humans in Conversations

论文地址:2401.01885v1.pdf (arxiv.org)

项目地址:facebookresearch/audio2photoreal: Code and dataset for photorealistic Codec Avatars driven from audio (github.com)

1.论文详解

论文提出了一个框架,用于生成逼真的化身,这些化身根据二元交互的对话动态做出手势。给定语音音频,输出个人手势运动的多种可能性,包括面部、身体和手部。方法背后的关键是将矢量量化的样本多样性优势与通过扩散获得的高频细节相结合,以产生更具动态性、表现力的运动。使用高度逼真的头像来可视化生成的动作,这些头像可以表达手势中的关键细微差别(例如冷笑和傻笑)。为了促进这一研究,论文引入了一个首创的多视图对话数据集,可以进行逼真的重建。实验表明,模型可以生成适当且多样化的手势,优于仅扩散和仅VQ的方法。此外,感知评估强调了照片级真实感(相对于网格)在准确评估对话手势中微妙运动细节方面的重要性。提供代码和数据集。

论文框架

 动作的生成主要包括了脸部,身体,

1.1.面部动作扩散模型

为了从语音输入中生成面部动作,提出基于语音条件的扩散模型,根据DDPM,正向噪音过程定义为

 - 表示了在给定前一个时间步的情况下,当前时间步的面部动作服从于一个高斯分布(正态分布)。这个模型可以根据先前的面部动作状态来预测当前的动作状态,这样就能够根据音频输入生成连贯的面部运动序列。

 F(0)近似表示清晰(无噪音)的面部表情编码序列F。在这里,τ ∈ [1, . . . , T˙] 表示正向扩散的步骤,而ατ ∈ (0, 1) 则遵循一个单调递减的噪声计划。当τ接近T˙时,采样F(T˙) ∼ N(0, I),即按照正态分布采样得到的清晰的面部动作序列。

接着,为了反向去噪,论文参考了[15, 30]的方法,定义了一个模型来从带有噪声的F(τ)中去除噪音,得到了F(0)的预测值。然后,可以通过将正向过程应用于预测的F(0)来获得反向过程的下一个步骤F(τ−1)。这种方法可以帮助还原面部动作的清晰版本,从而实现从噪声版本到清晰版本的逆向转换。

使用神经网络F来预测F(0)。公式中的F(F(τ); τ, A, L)表明F(0)的近似值,其中A是输入的音频特征,而L = (l1, . . . , lT)是根据[9]的预先训练的音频到唇部回归器的输出,但这里限制在唇部顶点而不是整个面部网格上。研究人员在30小时的内部三维网格数据上对唇部回归器进行了训练。每个lt ∈ Rdl×3表示给定音频A时在帧t上预测的dl个唇部顶点的集合。表2显示,在同时考虑唇部回归器输出和音频时,与仅考虑音频相比,显著提高了唇同步质量。扩散模型则是使用简化的ELBO(Evidence Lower Bound)目标进行训练,

训练过程中采用了一种无分类器指导的模型训练方法。他们通过在训练过程中以低概率随机地替换条件部分(A = ∅ 和 L = ∅)来实现这一点。为了结合音频和唇部顶点信息,他们使用了一个交叉注意力层。同时,时间步信息则通过一个特征逐层线性调制(FiLM)层来整合,具体示意如图4a所示。这种方法允许模型在训练过程中部分时间不使用音频和唇部顶点信息,从而更好地适应不完整的条件输入。

2.项目实现

 2.1.环境配置

git clone https://github.com/facebookresearch/audio2photoreal
cd audio2photorealpip install -r scripts/requirements.txt
sh demo/install.sh
sh scripts/download_prereq.sh
apt install ffmpeg# demo 
python -m demo.demo

 

2.2.数据集下载

论文中提出的模型中共包含四个人,PXB184RLW104TXB805, 和 GQS883,这里只下载一个

一个人的数据是1.1G.(地址)

# RLW104 数据集人ID
wget https://github.com/facebookresearch/audio2photoreal/releases/download/v1.0/RLW104.zip
unzip RLW104.zip -d dataset/
rm RLW104.zip

包含了语音文件,身体动作numpy文件,人脸numpy文件, 

  • audio.wav:包含 48kHz 原始音频(两个通道,1600*T 个采样点)的波形文件;通道 0 是与当前人相关的音频,通道 1 是与对话伙伴相关的音频。
  • body_pose.npy:运动骨架中关节角度的(T x 104)数组。并非所有关节都用 3DoF 表示。每个 104-d 向量可用于重建全身骨架。
  • face_expression.npy:(T x 256)面部编码数组,其中每个 256-d 向量可重建一个面部网格。
  • missing_face_frames.npy: 面部代码丢失或损坏的索引列表(t)。
  • data_stats.pth:每个人每种模式的均值和 std。

下载动作生成

每个人1.3G (地址

wget http://audio2photoreal_models.berkeleyvision.org/RLW104_models.tar
tar xvf RLW104_models.tar
rm RLW104_models.tar

 

要运行实际模型,您需要运行预训练模型并生成关联的结果文件,然后再对其进行可视化。

2.3.预训练模型

我们训练特定于人员的模型,因此每个人都应该有一个关联的目录。例如,对于 ,它们的完整模型应解压缩为以下结构。

每个人有 4 个模型,每个模型都有一个相关的 .args.json

  1. 输出 256 个基于音频的面部代码的人脸扩散模型
  2. 一种姿态扩散模型,可输出 104 次关节旋转,以音频和引导姿势为条件
  3. 以 1 fps 的音频为条件输出 VQ 令牌的引导 VQ 姿势模型
  4. 一个 VQ 编码器-解码器模型,用于矢量量化连续的 104 维姿态空间。

2.4.运行预训练模型

2.4.1.人脸生成

生成语法

python -m sample.generate --model_path <path/to/model> --num_samples <xsamples> --num_repetitions <xreps> --timestep_respacing ddim500 --guidance_param 10.0

参数说明

  • model_path :
  • num_samples:要生成的样本数。要对整个数据集进行采样,请使用 56(TXB805 除外,该数据集使用 58)。
  • num_repetitions:重复采样次数,即生成的序列总数为(num_samples * num_repetitions)。
  • timestep_respacing:扩散步长。格式始终为 ddim<number>。
  • guidance_param:条件对结果的影响程度。我通常使用的范围是 2.0-10.0,脸部倾向于更高。

 # 实例


python -m sample.generate  --model_path RLW104 --num_samples 56 --timestep_respacing ddim500  --guidance_param 10.0

使用提供的预训练模型生成人脸

# 可以打开audio2photoreal/checkpoints/diffusion/c2_face查看权重名称python -m sample.generate --model_path checkpoints/diffusion/c2_face/model000190000.pt --num_samples 10 --num_repetitions 5 --timestep_respacing ddim500 --guidance_param 10.0

 

 生成一个结果的numpy文件

 2.4.2.身体生成

与人脸生成相似,这里输入模型来生成引导姿势。

身体生成语法

python -m sample.generate --model_path <path/to/model> --resume_trans <path/to/guide/model> --num_samples <xsamples> --num_repetitions <xreps> --timestep_respacing ddim500 --guidance_param 10.0

实例: 

#确认路径 audio2photoreal/checkpoints/diffusion/下 和 /checkpoints/guide/c2_pose/checkpoints下参数 名称python -m sample.generate --model_path checkpoints/diffusion/c2_pose/model000190000.pt --resume_trans checkpoints/guide/c2_pose/checkpoints/iter-0135000.pt --num_samples 10 --num_repetitions 5 --timestep_respacing ddim500 --guidance_param 10.0

 同样,输出将保存到

查看结果

# 注意路径
python -m sample.generate --model_path checkpoints/diffusion/c2_pose/model000190000.pt --resume_trans checkpoints/guide/c2_pose/checkpoints/iter-0135000.pt --num_samples 10 --num_repetitions 5 --timestep_respacing ddim500 --guidance_param 10.0 --face_codes checkpoints/diffusion/c2_face/samples_c2_face_000190000_seed10_/results.npy --pose_codes checkpoints/diffusion/c2_pose/samples_c2_pose_000190000_seed10_guide_iter-0135000.pt/results.npy --plot

 如果出错,参考【PS2】

2.5.可视化

如果环境配置完成,可是实话完整数据集~

python -m visualize.render_anno --save_dir visualize/ --data_root dataset/RLW104 --max_seq_length 600

2.6.训练

训练四种可能的模型:

  • 1) 面部扩散模型,
  • 2) 身体扩散模型
  • 3) 身体 vq vae,
  • 4) 身体导向变压器。 唯一的依赖关系是

3) 是 4) 所必需的。所有其他模型都可以并行训练。

训练完这 4 个模型后,现在可以按照“运行预训练模型”部分生成样本并可视化结果。

通过传入标志来可视化相应的地面实况序列。--render_gt

 

PS

【PS1】 AttributeError: module 'cv2.dnn' has no attribute 'DictValue'

查看库pip list 中是否有

因为我的环境是在docker容器内 ,所以要下载opencv-contrib-python,没有的话

# 如果没有就下载 pip install opencv-python-headless
pip install opencv-contrib-python

如果有以上库,依旧出现同样错误,那么就是opencv配置库不全

apt-get install build-essential cmake
apt-get install libgtk-3-dev
apt-get install libboost-all-dev
pip install dlib

 最终解决:是因为版本问题,修改为

pip install opencv-python==4.8.0.74

【PS2】FileNotFoundError: [Errno 2] No such file or directory: 'audio2photoreal/checkpoints/ca_body/data/RLW104/config.yml'

 在/audio2photoreal/sample/generate.py文件中170行

指定了配置文件位置,但是文件夹下并没有此文件

 下载预训练文件没有下载完全,尝试

sh demo/install.sh

【PS3】ModuleNotFoundError: No module named 'tkinter'

解决:

apt-get install tcl-dev tk-dev python3-tk

【PS4】ing

 

 

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

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

相关文章

8年测试总结,正确的自动化测试实施-单元/接口/Web自动化...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 今天给大家分享自…

作业--day42

界面设计 MyProWin::MyProWin(QWidget *parent): QMainWindow(parent) {/**********窗口主体**********///窗口大小this->setFixedSize(644, 493);this->setWindowTitle("QQ");this->setWindowIcon(QIcon("C:/Users/10988/Downloads/pictrue/pictrue/…

java中实现对文件高效的复制

不多说我们直接上代码&#xff1a; 这个是使用NIO包下的FileChannel和ByteBuffer进行文件的操作的&#xff0c;会比较高效。

JavaScript(WebAPI)

文章目录 1. 什么是 WebAPI2. DOM 基本概念2.1 DOM 树 3. 获取元素3.1 querySelector3.2 querySelectorAll 4. 事件初识4.1 键盘事件 5. 操作元素5.1 获取/修改元素属性5.2 获取/修改表单元素属性5.3 获取/修改样式属性 6. 操作节点6.1 新增节点6.2 删除节点 1. 什么是 WebAPI …

浅谈智慧路灯安全智能供电方案设计——安科瑞赵嘉敏

摘要: 智慧路灯&#xff0c;作为智慧城市、新基建、城市更新的主要组成部分&#xff0c;近些年在各大城市已得到很好的落地和 应用&#xff0c;但其与传统路灯相比集成大量异元异构电子设备&#xff0c;这些设备的供电电压、接口形式、权属单位各不相同&#xff0c; 如何设计一…

Z-library居然来中国了!

提起「Z-Library」的大名&#xff0c;想必有不少朋友是知道的&#xff0c;早在2021年11月该网站遭遇了封站&#xff0c;好在目前已经有了比较稳定的国内直达网址&#xff0c;实测过了几个月还是能够稳定访问。 Z-Library是一个电子图书馆项目&#xff0c;提供世界上最大的免费…

java编程中,保证接口幂等性的实现方案讨论

一、什么是幂等性 数学中的幂等是指f(x) f(f(x))&#xff0c;编程领域的术语是指同一个操作&#xff0c;在重复提交的情况下&#xff0c;最终产生的影响是不变的。举例说&#xff1a; 提交订单时&#xff0c;用户在购物车界面&#xff0c;重复点击“下单”&#xff0c;服务端…

【CUDA】windows下的CUDA安装

一、前言 windows10 下安装 CUDA &#xff0c;首先需要下载安装包&#xff1a; CUDA toolkit&#xff08;工具包&#xff09; 二、安装前的准备 电脑环境检查 通过cmd&#xff0c;输入nvidia-smi 查看自己的驱动版本和支持的CUDA版本&#xff0c;如下图红圈标记位置 下载 …

尤雨溪:框架挖坑靠文档来补,这算 PUA 用户吗?丨 RTE 开发者日报 Vol.122

开发者朋友们大家好&#xff1a; 这里是 「RTE 开发者日报」 &#xff0c;每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE &#xff08;Real Time Engagement&#xff09; 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有思考的 文…

使用开源通义千问模型(Qwen)搭建自己的大模型服务

目标 1、使用开源的大模型服务搭建属于自己的模型服务&#xff1b; 2、调优自己的大模型&#xff1b; 选型 采用通义千问模型&#xff0c;https://github.com/QwenLM/Qwen 步骤 1、下载模型文件 开源模型库&#xff1a;https://www.modelscope.cn/models mkdir -p /data/…

Jmeter 性能 —— 吞吐量与并发用户数关系!

1、吞吐量和并发用户数的关系 2、已知在线用户数为3000&#xff0c;算出对应的并发用户数 ①我们常用的确定并发用户数的公式是&#xff1a; C活动用户数操作时间/系统运行时间 如每天最大在线用户数为3000人&#xff0c;每个用户平均操作时间为1小时&#xff0c;系统运行时…

【后退N帧协议】- 协议应用与局限分析

后退N帧协议是计算机网络通信中常用的一种流量控制协议&#xff0c;用于确保数据的可靠传输。本文将深入探讨后退N帧协议的原理、应用场景及局限性。 后退N帧协议的核心思想是在发送端发送数据时&#xff0c;等待接收端返回的确认信号。发送端每次发送N帧数据&#xff0c;并等…

基于SSM+Vue的学校社团管理系统(Java毕业设计)

大家好&#xff0c;我是DeBug&#xff0c;很高兴你能来阅读&#xff01;作为一名热爱编程的程序员&#xff0c;我希望通过这些教学笔记与大家分享我的编程经验和知识。在这里&#xff0c;我将会结合实际项目经验&#xff0c;分享编程技巧、最佳实践以及解决问题的方法。无论你是…

C# OpenCvSharp DNN FreeYOLO 人脸检测人脸图像质量评估

目录 效果 模型信息 yolo_free_huge_widerface_192x320.onnx face-quality-assessment.onnx 项目 代码 frmMain.cs FreeYoloFace FaceQualityAssessment.cs 下载 C# OpenCvSharp DNN FreeYOLO 人脸检测&人脸图像质量评估 效果 模型信息 yolo_free_huge_widerfa…

色标在matplotlib和plottable中

是这样的&#xff0c;我有一个数组[-4.4, -2.8, -2.6, -2.2, -1.1, 1.1, 1.2, 1.3, 3.6, 6.0, 6.4, 12.3]&#xff0c;它需要绘制散点图&#xff0c;点的颜色来代表数值大小&#xff1b;同时&#xff0c;也需要在plottable上作为一列显示&#xff0c;同样用颜色来代表数值的大小…

HarmonyOS应用开发学习笔记 ArkTS 布局概述

一、布局概述 布局指用特定的组件或者属性来管理用户页面所放置UI组件的大小和位置。在实际的开发过程中&#xff0c;需要遵守以下流程保证整体的布局效果 确定页面的布局结构。分析页面中的元素构成。选用适合的布局容器组件或属性控制页面中各个元素的位置和大小约束。 二…

【JUC】进程和线程

目录 &#x1f4e2;什么是进程?&#x1f3a1;什么是线程?&#x1f680;进程和线程的区别?&#x1f3a2;Java 线程和操作系统的线程有啥区别&#xff1f;&#x1f396;️JDK21的虚拟线程&#x1f3af;虚拟线程和平台线程的对比 &#x1f4e2;什么是进程? 进程是程序的一次执…

Zabbix“专家坐诊”第223期问答汇总

来源&#xff1a;乐维社区 问题一 Q&#xff1a;Zabbix 5.0安装完mysql之后怎么备份&#xff1f;忘记mysql当时创建的密码了&#xff0c;怎么样能查看设置的密码&#xff1f; A&#xff1a;mysql初始化密码在 /var/log/mysqld.log中可以看到&#xff0c;搜关键字temporary pas…

【算法分析与设计】移动零

题目 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0] 示例 2: 输入: nums [0…

电能计量芯片RN8209

电能计量芯片RN8209 简介2、操作2.1、复位2.2 模数转换2.3 有功功率2.4 无功功率2.5 有效值2.4 能量计算 RN8209中文手册 点击下载 简介 2、操作 2.1、复位 2.2 模数转换 2.3 有功功率 RN8209 提供两路有功功率的计算和校正&#xff0c;分别为电流 A 和电压有功功率计算和校正…