音视频开发之旅(80)- AI数字人-腾讯开源AniPortrait-音频驱动的肖像动画

目录

1、前言

2、效果展示

3、原理学习

4、遇到的问题与解决方案

5、资料

一、前言

一个月前阿里Emo发布,通过音频驱动的非常自然的肖像视频,引起很大反响。具体看下面的视频,但是并没有开源其代码。

这两天腾讯开源了其音频驱动的肖像视频的项目AniPortrait,它也实现了类似功能:音频驱动、参考视频表情动作驱动,或者通过预先生成的pose关键点视频来驱动。

AniPortrait开发者在EMO的issue上留言,哈哈

图片

二、效果展示

效果来看和EMO差距还是蛮大,主要是唇形不自然,官方给出的效果就可用看出唇形特别是牙齿的问题。当使用自己的素材生成时,问题更明显

2.1 官方展示效果

Aragaki

lyl

2.2 自己使用效果

Aragaki

sd

solo

三、原理学习

图片

分为两个阶段:从音频提取关键点信息和从关键点信息生成视频

音频处理阶段(Audio2Lmk)

在这个阶段,系统首先解析音频信号,以抓取驱动动态人脸模型的关键数据。

  1. 音频输入: 包含人声的音频片段

  2. Audio2Pose: 从音频中提取头部姿势信息

  3. Audio2Mesh: 从音频中提取面部网格的变形信息(面部表情变化)

4. Neutral Mesh: 标准的没有任何表情的基础3D面部模型

5. Mesh Offset: 结合音频提取的信息,生成表达特定情绪或语音的目标面部模型。

6. Target Meshes: 经过偏移和调整后得到的一系列面部模型,它们将用来产生动画中人物的表情。

7. Project: 将复杂的3D面部数据转换为2D平面上的点集,为下一步的视频生成做准备。

视频生成阶段(Lmk2Video)

经过第一阶段的处理,得到了可以描述面部动态的2D关键点。在第二阶段,这些关键点将被用于生成最终的视频。

  1. Reference Image: 提供一个参考帧,通常是一张静态的、人物正面的照片。

  2. Reference Pose Image: 参考图像中人物姿势的一个标准表示,用于帮助系统理解参考帧中的人物姿势。

  3. Denoising Unet:用于去除编码的潜在表示中的噪声,确保生成的图像尽可能清晰。

  4. VAE Decoder:将去噪后的潜在表示解码成2D图像,反映了目标视频帧的姿势。

  5. Motion Module:负责生成连续、平滑的面部运动,以创建逼真的视频。

四、遇到的问题与解决方案

1. audio2vid嘴唇动得太快 https://github.com/Zejun-Yang/AniPortrait/issues/7

可以在之后对预网格应用平滑AniPortrait/scripts/audio2vid.pyLine 155 in bfa1574
pred = pred + face_result['lmks3d'] 
, similar to what is done at,类似于在AniPortrait/scripts/generate_ref_pose.pyLine 85 in bfa1574pose_arr_smooth = smooth_pose_seq(pose_arr_interp)

2. video2video,源video需要和ref_image对齐吗?https://github.com/Zejun-Yang/AniPortrait/issues/27

将参考图片和参考视频处理成半身肖像的形式,尺寸作为正方形即可。可以参照demo中的样式,不需要严格对齐图片和视频的头部位置。

3. Audio driven 可以生成独立的视频吗?https://github.com/Zejun-Yang/AniPortrait/issues/48

​​​​​​​

目前audio2video方法生成30fps的视频时口型较准确。您无需调整L参数大小,生成视频后使用其他补帧方法提升到60fps即可。需要更高清视频也可以使用其他视频超分方法进行后处理,如果算力有余量,也可以尝试修改指令为-W 768 -H 768。另外,如果需要去掉输出结果中的pose video,对audio2video.py文件作出如下修改:AniPortrait/scripts/audio2vid.pyLine 210 in 415eb04
 video = torch.cat([ref_image_tensor, pose_tensor, video], dim=0) --》video = torch.cat([ref_image_tensor, video], dim=0)

4. 音频驱动的视频图像闪烁 https://github.com/Zejun-Yang/AniPortrait/issues/20

​​​​​​​

闪烁问题可能归因于扩散模型,我们正在积极努力在未来解决这个问题。FreeNoise 可以减少闪烁。只需使用时域中值滤波器再次将其传递给 FFMPEG:ffmpeg.exe -i .\input.mp4 -filter:v "tmedian=3" output.mp4这将显着减少闪烁

5.Face reenacment inference error:RuntimeError: CUDA error: device-side assert triggered  https://github.com/Zejun-Yang/AniPortrait/issues/42

​​​​​​​

RuntimeError: CUDA error: device-side assert triggeredCUDA kernel errors might be asynchronously reported at some other API call, so the stacktrace below might be incorrect.For debugging consider passing CUDA_LAUNCH_BLOCKING=1.Compile with TORCH_USE_CUDA_DSA to enable device-side assertions

解决方案:

​​​​​​​​​​​​​​

更改视频路径并重试它应该在配置文件中起作用。`pretrained_base_model_path: './pretrained_model/stable-diffusion-v1-5'pretrained_vae_path: './pretrained_model/sd-vae-ft-mse'image_encoder_path: './pretrained_model/image_encoder'
denoising_unet_path: "./pretrained_model/denoising_unet.pth"reference_unet_path: "./pretrained_model/reference_unet.pth"pose_guider_path: "./pretrained_model/pose_guider.pth"motion_module_path: "./pretrained_model/motion_module.pth"
inference_config: "./configs/inference/inference_v2.yaml"weight_dtype: 'fp16'
test_cases:  "./configs/inference/ref_images/Aragaki.png":    - "./configs/inference/head_pose_temp/pose_ref_video.mp4"`

五、资料

1、项目:https://github.com/Zejun-Yang/AniPortrait

2、论文:https://arxiv.org/pdf/2403.17694.pdf

感谢你的阅读

接下来我们继续学习输出AIGC相关内容,欢迎关注公众号“音视频开发之旅”,一起学习成长。

欢迎交流

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024年美团笔试题(1)

一.题目描述 小美拿到了一个排列,其中初始所有元素都是红色,但有些元素被染成了白色。 小美每次操作可以选择交换任意两个红色元素的位置。她希望操作尽可能少的次数使得数组变成非降序,你能帮帮她吗? 排列是指:一个长度为n的数组&#…

Java | Leetcode Java题解之第1题两数之和

题目&#xff1a; 题解&#xff1a; class Solution {public int[] twoSum(int[] nums, int target) {Map<Integer, Integer> map new HashMap<>();for(int i 0; i< nums.length; i) {if(map.containsKey(target - nums[i])) {return new int[] {map.get(tar…

【React】vite + react 项目,进行配置 eslint

安装与配置 eslint 1 安装 eslint babel/eslint-parser2 初始化配置 eslint3 安装 vite-plugin-eslint4 配置 vite.config.js 文件5 修改 eslint 默认配置 1 安装 eslint babel/eslint-parser npm i -D eslint babel/eslint-parser2 初始化配置 eslint npx eslint --init相关…

应急物资管理系统|实现应急物资的全生命周期管理和监控

应急物资管理系统是一种现代化、智能化、可视化的物资管理平台&#xff0c;主要用于实现对应急物资的全生命周期管理和监控&#xff0c;并提供可靠的应急响应支持。 应急物资管理系统功能 准入控制&#xff1a;东识应急物资管理系统可以实现准入控制&#xff0c;确保只有经过授…

C语言----strcmp()函数:比较两个字符串

C语言中strcmp&#xff08;&#xff09;用于对两个字符串进行比较&#xff08;区分大小&#xff09;。 头文件&#xff1a;string.h 语法原型 int strcmp(const char*str1,const char*str2) 参数str1和str2是参与比较的两个字符串。 strcmp()是根据ASCLL编码依次比较str1和str…

MP设置动态表名

Mybatis设置动态表名 Mybatis设置动态表名1.动态表名插件2.传递表名3.注意事项 Mybatis设置动态表名 1.动态表名插件 MybatisPlus中提供了一个动态表名的插件&#xff1a;https://baomidou.com/pages/2a45ff/#dynamictablenameinnerinterceptor 插件的部分源码如下&#xff…

大模型面试准备(十):大模型数据处理方法及优秀的开源数据介绍

节前&#xff0c;我们组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、参加社招和校招面试的同学&#xff0c;针对大模型技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何备战、面试常考点分享等热门话题进行了深入的讨论。 合集在这…

【Consul】Linux安装Consul保姆级教程

【Consul】Linux安装Consul保姆级教程 大家好 我是寸铁&#x1f44a; 总结了一篇【Consul】Linux安装Consul保姆级教程✨ 喜欢的小伙伴可以点点关注 &#x1f49d; 前言 今天要把编写的go程序放到linux上进行测试Consul服务注册与发现&#xff0c;那怎么样才能实现这一过程&am…

内网渗透之域环境探索和简单提权

参考文章&#xff1a;http://t.csdnimg.cn/AZ2OR 一个简单的域环境可以这样子搭建&#xff1a; 其中边界服务器有两张网卡&#xff0c;一个是对外的公网网卡&#xff0c;另一张是对内的局域网网卡。一般渗透过程中&#xff0c;拿下这个作为跳板机&#xff0c;进而继续渗透。 …

P23—P25:标识符和关键字

标识符 什么是标识符&#xff1f; 在java源程序中&#xff0c;程序员有权自己命名的单词都是标识符在EditPlus编译器中&#xff0c;表示符以黑色高亮字体显示 标识符可以标识什么元素&#xff1f; 类名方法名变量名接口名常量名 … 标识符的命名规则&#xff1a; 只能由**数…

C++学习随笔(8)——模板初阶

本章我们来学习一下C的模版部分&#xff01; 目录 1. 泛型编程 2. 函数模板 2.1 函数模板概念 2.1 函数模板格式 2.3 函数模板的原理 2.4 函数模板的实例化 2.5 模板参数的匹配原则 3. 类模板 3.1 类模板的定义格式 3.2 类模板的实例化 1. 泛型编程 如何实现一个通…

Android vehicle车辆属性新增demo

目录 前言一、Vehicle模块1.1 简介1.2 Vehicle框架1.3 主要功能和特点1.4 重要服务CarService1.4.1 简介1.4.2 组成1.4.3 启动时序1.4.4 作用 二、车辆属性新增demo2.1 CarPropertyService2.1.1 简介2.1.2 架构2.1.3 车辆属性 API2.1.4 CarPropertyService 初始化流程 2.2 App …

鸿蒙ARKTS--简易的购物网站

目录 一、media 二、string.json文件 三、pages 3.1 登录页面&#xff1a;gouwuPage.ets 3.2 PageResource.ets 3.3 商品页面&#xff1a;shangpinPage.ets 3.4 我的页面&#xff1a;wodePage.ets 3.5 注册页面&#xff1a;zhucePage.ets 3. 购物网站主页面&#xff…

在GitHub上上传项目(Idea)

repository创建好后&#xff0c;GitHub会提示相应的命令 在Idea的终端执行这些命令&#xff0c;就OK了 在GitHub上查看&#xff0c;已经上传成功

设备树语法

设备树语法 1 Devicetree格式1.1 DTS文件格式1.2 node格式1.3 properties格式 2 dts文件包好desi文件3 常用的 属性 properties3.1 #address-cells、#size-cells3.2 compatible3.3 model3.4 status3.5 reg&#xff08;设备不同reg属性的含义就不同&#xff09;3.6 name、device…

企业知识库搭建不再是难题,靠这几个软件就可以了

在当今知识为王的时代&#xff0c;具备一套强大且实用的企业知识库&#xff08;Knowledge Base&#xff09;已成为提升工作效率、促进团队合作不可或缺的工具。那么&#xff0c;问题来了&#xff0c;我们该如何搭建一套属于自己的知识库呢&#xff1f;今天&#xff0c;我就给大…

软件工程 - 04 需求分析

文章目录 需求分析需求分析方法系统建模用例图类图对象图活动图时序图协作图构件图部署图 软件开发各个阶段的图 需求分析 软件开发中非常重要的一环&#xff1b;好的需求分析方法&#xff0c;可以帮助更好地理解用户需求&#xff0c;准确定义系统的功能和性能要求&#xff0c…

深入理解数据结构(3):栈和队列详解

文章主题&#xff1a;顺序表和链表详解&#x1f331;所属专栏&#xff1a;深入理解数据结构&#x1f4d8;作者简介&#xff1a;更新有关深入理解数据结构知识的博主一枚&#xff0c;记录分享自己对数据结构的深入解读。&#x1f604;个人主页&#xff1a;[₽]的个人主页&#x…

系统优化都没做过?看这篇就够了

目录 一、系统优化指标 二、系统优化简介 三、系统优化 3.1 CPU 高 3.2 内存占用高 业务引起的内存升高 程序自身引起的内存问题 3.3 磁盘I/O 3.4 网络 3.5 数据库优化 3.6 响应时间高 3.7 吞吐量 3.8 代码层面优化 3.9 业务优化 四、JVM优化 4.1 堆内存设置 4.2 选择何时的…

半导体工艺技术

完整内容点击&#xff1a;【半导体工艺技术】