照片逼真肖像动画的音频驱动合成——AniPortrait翻译与调试

news2024/11/13 7:52:43

文章目录

  • AniPortrait翻译
    • Abstract
    • Introduction
    • 2 Method
      • 2.1 Audio2Lmk
      • 2.2 Lmk2Video
    • 3 Experiments
      • 3.1 Implementation Details
      • 3.2 Results
  • 代码调试
    • 1 下载github项目
    • 2 配置环境
    • 3 下载包
    • 4 下载权重
    • 5 推断

AniPortrait翻译

封面
AniPortrait:照片逼真肖像动画的音频驱动合成
paper:https://arxiv.org/abs/2403.17694
github: https://github.com/Zejun-Yang/AniPortrait

Abstract

  在这项研究中,我们提出了一种生成由音频和参考肖像图像驱动的高质量动画的新框架 AniPortrait。我们的方法分为两个阶段。最初,我们从音频中提取 3D 中间表示并将它们投影到一系列 2D 面部标志中。随后,我们采用鲁棒扩散模型,结合运动模块,将地标序列转换为逼真且时间一致的肖像动画。实验结果表明,AniPortrait在面部自然度、姿势多样性和视觉质量方面的优越性,从而增强了感知体验。此外,我们的方法在灵活性和可控性方面显示出巨大的潜力,可以有效地应用于面部运动编辑或面部重演等领域。我们在 https://github.com/Zejun-Yang/AniPortrait 上发布代码和模型权重。

Introduction

  从音频和静态图像创建逼真且富有表现力的肖像动画具有广泛的应用,从虚拟现实和游戏到数字媒体。然而,产生视觉上吸引和维护时间一致性的高质量动画是一个巨大的挑战。这种复杂性源于需要复杂的协调嘴唇运动、面部表情和头部位置来制作视觉上引人注目的效果。
  现有的方法在克服这一挑战方面往往不足,主要是由于它们依赖于有限容量的生成器来创建视觉内容,如GANs[3,17]、NeRF[14,13]或基于运动的解码器[16,8]。这些网络的泛化能力有限,在生成高质量内容时往往缺乏稳定性。最近,扩散模型的出现[2,5,9]促进了高质量图像的生成。一些研究通过结合时间模块来构建这一点,使扩散模型能够在创建引人注目的视频方面表现出色。
  基于扩散模型的进步,我们引入了 AniPortrait,这是一个新颖的框架,旨在生成由音频和参考图像驱动的高质量动画肖像。AniPortrait 分为两个不同的阶段。在第一阶段,我们使用基于转换器的模型从音频输入中提取一系列 3D 面部网格和头部姿势,然后将其投影到一系列 2D 面部标志中。除了与音频节奏同步的头部动作外,该阶段还能够从音频中捕获微妙的表情和嘴唇运动。在随后的阶段,我们利用鲁棒扩散模型[9],与运动模块[4]集成,将面部地标序列转换为时间一致和逼真的动画肖像。具体来说,我们利用一种有效的扩散模型Stable Diffusion 1.5的AnimateAnyone[6]的网络架构,基于身体运动序列和参考图像生成流体和类似生命的视频。特别值得注意的是,我们重新设计了该网络中的姿势引导器模块。这种修改不仅保持了轻量级的设计,而且在生成嘴唇运动方面表现出更高的精度。
  我们的实验结果表明,AniPortrait 在创建具有令人印象深刻的面部自然度、不同姿势和出色的视觉质量的动画方面的优越性。通过使用 3D 面部表示作为中间特征,我们获得了根据需要修改这些表示的灵活性。这种适应性极大地增强了我们的框架在面部运动编辑和面部重现等领域的适用性。

2 Method

  所提出的框架包括两个模块,即 Audio2Lmk 和 Lmk2Video。前者旨在提取一系列地标,从音频输入中捕获复杂的面部表情和嘴唇运动。后者利用这个地标序列生成高质量的人像视频,具有时间稳定性。我们在图 1 中展示了框架的概述,并提供了更多细节。
图1
图1。所提方法概述。我们的框架分为两个阶段。首先,我们从音频中提取3D人脸网格和头部姿势,然后将这两个元素投影到2D关键点中。在第二阶段,我们利用扩散模型将二维关键点转换为人像视频。这两个阶段在我们的框架中同时训练。

2.1 Audio2Lmk

  令 A 1 : T A^{1:T} A1:T =( a 1 , . . . , a T a^{1}, . . . , a^{T} a1,...,aT ) 表示一系列语音片段,我们的目标是预测相应的 3D 面部网格序列 M 1 : T M^{1:T} M1:T =( m 1 , . . . , m T m^{1}, . . . , m^{T} m1,...,mT ) ,其中每个 m t m^{t} mt R N × 3 R^{N ×3 } RN×3和姿势序列 P 1 : T P^{1:T} P1:T =( p 1 , . . . , p T p^{1}, . . . , p^{T} p1,...,pT ) ,每个 p t , p^{t}, pt,是一个 6 维向量,表示旋转和平移。
  我们采用预训练的wav2vec[1]来提取音频特征。该模型具有高度的泛化性,能够从音频中准确识别发音和语调,这在生成逼真的面部动画中起着关键作用。通过利用获得的鲁棒语音特征,我们可以有效地采用由两个 fc 层组成的简单架构,将这些特征转换为 3D 面部网格。我们观察到这种简单的设计不仅保证了准确性,而且提高了推理过程的效率。
  在将音频转换为姿势的任务中,我们使用与主干相同的 wav2vec 网络。但是,我们不会与音频到网格模块共享权重。这是因为姿势与音频中存在的节奏和语气更密切相关,与音频到网格任务相比,这是一个不同的重点。为了解决先前状态的影响,我们使用 Transformer[11] 解码器来解码姿势序列。在此过程中,使用交叉注意机制将音频特征集成到解码器中。对于上述两个模块,我们使用简单的 L1 损失对它们进行训练。在获得网格和姿态序列后,我们使用透视投影将它们转换为二维面部地标序列。这些地标随后被用作下一阶段的输入信号。

2.2 Lmk2Video

  给定一个参考肖像图像,表示为 I r e f I_{ref} Iref ,以及表示为$ L^{1:T}$ = ( l 1 , . . . , l T l^{1}, . . . , l^{T} l1,...,lT ) 的面部标志序列。 l 1 , . . . , l T l^{1}, . . . , l^{T} l1,...,lT其中每个 l t l^{t} lt R N × 2 R^{N ×2} RN×2,我们提出的 Lmk2Video 模块创建了一个时间一致的肖像动画。这个动画将运动与地标序列对齐,并保持与参考图像一致的外观。我们将肖像动画表示为一系列肖像帧,表示为I^{1:T}$ = ( I 1 , . . . , I T I^{1}, . . . , I^{T} I1,...,IT ) 庇护。
  Lmk2Video的网络结构的设计灵感来自AnimateAnyone。我们利用SD1.5作为骨干,结合时间运动模块,有效地将多帧噪声输入转换为视频帧序列。同时,使用反映SD1.5结构的RefNet从参考图像中提取外观信息并将其集成到主干中。这种战略设计确保面部 ID 在整个输出视频中保持一致。与 AnimateAnyone 不同,我们增强了 PoseGuider 设计的复杂性。原始版本仅包含几个卷积层,之后地标特征与主干输入层的潜在特征合并。我们发现这种基本设计未能捕捉到嘴唇的复杂运动。因此,我们采用ControlNet[15]多尺度策略,将相应尺度的地标特征合并到主干的不同块中。尽管有这些增强功能,我们成功地将参数计数保持在相对较低的水平。
  我们还引入了一个额外的改进:将参考图像的地标作为额外的输入。PoseGuider 的交叉注意模块有助于参考地标和每一帧的目标地标之间的交互。这个过程为网络提供了额外的线索来理解面部标志和外观之间的相关性,从而帮助生成具有更精确运动的肖像动画的生成。

3 Experiments

3.1 Implementation Details

  在Audio2Lmk阶段,我们采用wav2vec2.0作为骨干。我们利用MediaPipe[7]提取3D网格和6D姿势进行注释。Audio2Mesh 的训练数据来自我们的内部数据集,该数据集包含来自单个说话者的近小时高质量语音数据。为了确保MediaPipe提取的3D网格的稳定性,我们指示参与者在整个记录过程中保持稳定的头部位置,面对相机。我们使用HDTF[18]训练Audio2Pose。所有训练操作都在单个 A100 上执行,使用学习率为 1e-5 的 Adam 优化器。
  在 Lmk2Video 过程中,我们实现了两步训练方法。在初始步骤中,我们专注于训练主干、RefNet 和 PoseGuider 的 2D 组件,留下运动模块。在随后的步骤中,我们冻结所有其他组件并专注于运动模块的训练。我们利用两个大规模、高质量的人脸视频数据集VFHQ[12]和CelebV-HQ[19]来训练模型。所有数据都经过MediaPipe处理,以提取2D面部地标。为了提高网络对嘴唇运动的敏感性,我们在将姿势图像与 2D 地标渲染时,用不同的颜色区分上唇和下唇。所有图像都被调整为 512x512 分辨率。我们利用 4 个 A100 GPU 进行模型训练,将两天专门用于每个步骤。采用AdamW优化器,学习率为1e-5。

3.2 Results

  如图 2 所示,我们的方法生成了一系列在质量和真实感上都惊人的动画。我们利用中间 3D 表示,可以对其进行编辑以操纵最终输出。例如,我们可以从源中提取地标并改变其 ID,从而使我们能够创建面部重演效果。
图2
4 Conclusion and Future Work
  本研究提出了一种基于扩散模型的人像动画框架。该框架通过简单地输入音频剪辑和参考图像,能够生成具有平滑嘴唇运动和自然头部运动的肖像视频。利用扩散模型的鲁棒泛化能力,该框架创建的动画显示出令人印象深刻的逼真图像质量和令人信服的逼真运动。然而,这种方法需要使用中间的 3D 表示,获得大规模、高质量的 3D 数据的成本非常高。因此,生成的肖像视频中的面部表情和头部姿势无法逃脱恐怖谷效应。未来,我们计划遵循 EMO[10] 的方法,直接从音频预测肖像视频,以实现更令人惊叹的生成结果。

代码调试

1 下载github项目

https://github.com/Zejun-Yang/AniPortrait.git

2 配置环境

conda create -n aniportrait python=3.10
conda activate aniportrait

3 下载包

pip install pytorch==2.0.1 torchvision==0.15.2 torchaudio==2.0.2 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

4 下载权重

所有权重都应放在 ./pretrained_weights 目录下。您可以按以下方式手动下载权重:
(1) 下载我们训练好的权重,其中包括以下部分:denoising_unet.pth、reference_unet.pth、pose_guider.pth、motion_module.pth、audio2mesh.pt、audio2pose.pt 和 film_net_fp16.pt。您也可以从 wisemodel 下载。
因为hugging face比较慢,我选择在gitee中下载,进入gitee,搜索AniPortrait,选择第一个Hugging Face 模型镜像/ AniPortrait,点击克隆/下载,复制以下命令:

git clone https://gitee.com/hf-models/AniPortrait.git

(2) 下载基于模型和其他组件的预训练权重:

  • StableDiffusion V1.5
  • sd-vae-ft-mse
  • image_encoder
  • wav2vec2-base-960h
    (3) 最后,应将这些权重放置如下:
./pretrained_weights/
|-- image_encoder
|   |-- config.json
|   `-- pytorch_model.bin
|-- sd-vae-ft-mse
|   |-- config.json
|   |-- diffusion_pytorch_model.bin
|   `-- diffusion_pytorch_model.safetensors
|-- stable-diffusion-v1-5
|   |-- feature_extractor
|   |   `-- preprocessor_config.json
|   |-- model_index.json
|   |-- unet
|   |   |-- config.json
|   |   `-- diffusion_pytorch_model.bin
|   `-- v1-inference.yaml
|-- wav2vec2-base-960h
|   |-- config.json
|   |-- feature_extractor_config.json
|   |-- preprocessor_config.json
|   |-- pytorch_model.bin
|   |-- README.md
|   |-- special_tokens_map.json
|   |-- tokenizer_config.json
|   `-- vocab.json
|-- audio2mesh.pt
|-- audio2pose.pt
|-- denoising_unet.pth
|-- film_net_fp16.pt
|-- motion_module.pth
|-- pose_guider.pth
`-- reference_unet.pth

5 推断

Gradio Web UI

python -m scripts.app

Audio driven:

python -m scripts.audio2vid --config ./configs/prompts/animation_audio.yaml -W 512 -H 512 -acc

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

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

相关文章

解决使用matplotlib不显示中文的问题

某季度某城市某天11点到12点气温变化图 import random x range(60) y_BeiJing [random.uniform(15,18) for i in x] plt.figure(figsize(20,8),dpi80) plt.plot(x,y_BeiJing) x_label ["11点{}分".format(i) for i in x] plt.xticks(x[::5],x_label[::5]) plt.yt…

【网络】网络层协议-IP协议

网络层协议-IP协议 文章目录 IP协议1.网络层 & IP协议基本概念2.IP协议格式2.1报头各字段简介2.2IP如何将报头与有效载荷进行分离?2.3IP如何决定将有效载荷交付给上层的哪一个协议?2.4源IP与目的IP2.5八位生存时间2.6分片与组装 3.网段划分3.1IP地址…

嵌入式Qt移植前期准备-思维导图-学习笔记-基于正点原子阿尔法开发板

嵌入式Qt移植前期准备 概述 Qt官方在哪些平台/系统有支持? Windows Ubuntu IOS 为什么要进行Qt移植? 自制系统,如BusyBox简易系统,希望能运行Qt 厂家提供的Qt库太大,太全,占空间 版本升级,想用其它…

蒙特卡洛应用:RTX 光线追踪算法 ReSTIR 原理

接上文:蒙特卡洛方法相关论文:《Spatiotemporal reservoir resampling for real-time ray tracing with dynamic direct lighting: 2020》 ReSTIR 算法全称为 GIalgorithm based on Spatiotemporal Reservoir Resampling,是一种在实时路径追…

面试利器:产品经理必备的40+高频面试题集,收藏这一篇就够了

产品经理的面试,一般会问什么问题? 作为公司的产品负责人,大小也面了不下 100 个产品,产品经验横跨了 0~3 年、3~5 年。 我罗列了一些常用的产品面试问题,主要有“开始、产品、中级、考察、结束”等五类,…

【C++ 面试 - 面向对象】每日 3 题(十二)

✍个人博客:Pandaconda-CSDN博客 📣专栏地址:http://t.csdnimg.cn/fYaBd 📚专栏简介:在这个专栏中,我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话,欢迎点赞👍收藏&…

区间预测|基于灰狼优化最小二乘支持向量机的多变量回归区间预测Matlab程序GWO-LSSVM-ABKDE

区间预测|基于灰狼优化最小二乘支持向量机的多变量回归区间预测Matlab程序GWO-LSSVM-ABKDE 文章目录 前言区间预测|基于灰狼优化最小二乘支持向量机的多变量回归区间预测Matlab程序GWO-LSSVM-ABKDE 一、GWO-LSSVM-ABKDE模型1. 灰狼优化算法(GWO)2. 最小二…

vue.js - 看板娘 Live2d

文中的资源文件在这里:我的资源中,打好包了已经,地址:live2d资源 1、在项目的 src/assets 文件夹中,添加 live2d 的资源文件 2、在 src/components 文件中,编写 live2d的index.vue组件 3、在 App.vue 中…

AI在医学领域:在软组织和骨骼肿瘤放射学成像中的应用综述

软组织和骨骼肿瘤(Soft-tissue and bone tumours,STBT)是人体中较为罕见的肿瘤,包括良性和恶性病变。恶性STBT,约占所有肿瘤的1%。这些肿瘤可以发生在任何年龄和几乎所有解剖部位,起源于包括肌肉、脂肪、血…

富唯智能公司和产品介绍

公司介绍 广州富唯智能科技有限公司是一家专注于人工智能与柔性智造领域的高新技术企业,于2022年联合清华大学深圳国际研究生院成立,拥有多名业内顶尖的人工智能专家、智能制造专家以及硕士和博士组成的高水平研发团队。 公司致力于用前沿的人工智能技…

GenAI大模型应用方法选择深度解析: 模型训练,微调,检索增强RAG和提示工程

重点摘要 每种生成式人工智能学习方法都有其独特的优势和理想应用场景: 模型训练(Model Training):需要大量的数据和计算资源来从头构建一个人工智能模型。它具有高度的可定制性和可扩展性,但耗时较长。 微调(Fine-Tuning):专注…

win11成功点亮 WSL 创建的 Linux 子系统 jupyter服务 并配合 conda 环境运行代码【保姆级教程】

🥇 版权: 本文由【墨理学AI】原创首发、各位读者大大、敬请查阅、感谢三连 🎉 声明: 作为全网 AI 领域 干货最多的博主之一,❤️ 不负光阴不负卿 ❤️ 文章目录 零、前言一、安装 jupyter notebook二、生成jupyter notebook配置文件三、设置J…

力扣top100-链表类题易错点总结-c++实现(更新中)

首先给一个我之前写的双指针在链表类题中的妙用的link:双指针在链表中的妙用 tip1 来自“合并两个有序链表” 题目链接戳这里 这道题注意的就是如果是要返回一个新链表的头结点,一定要新建一个头结点: ListNode* prehead new ListNode…

备考计算机二级Python之Day5

第5章 函数和代码 一、函数的基本使用 函数是一段具有特定功能的、可重用的语句组,通过函数名来表示和调用。 函数的使用包括两部分:函数的定义和函数的使用 1、函数的定义 Python语言通过保留字def定义函数,语法形式如下: …

判别分析2|Bayes判别分析|Fisher判别分析|软件求解

Bayes判别分析 引入先验信息 距离判别只要求知道总体的数字特征,不涉及总体的分布函数 当均值和协方差未知时,就用样本的均值和协方差矩阵做估计值。距离判别方法简单实用,但没有考虑到每个总体出现的机会大小,即先验概率&#…

数据结构(邓俊辉)学习笔记】优先级队列 09——左式堆:合并算法

文章目录 1. LeftHeap模板类2. 算法3. 实现4. 实例 1. LeftHeap模板类 接下来这节,来讨论左式堆的合并算法。再给出具体算法之前,首先要给出左式堆模板类的定义。 比如这就是一种可能的实现方式,可以看到,我们这里再次利用了 C…

srm供应商一体化招采系统解决方案,需求功能清单以及源码实现(JAVA)

1. 供应商管理 2. 采购需求管理 3. 采购寻源管理 4. 采购合同管理 5. 采购订单管理 6. 采购协同管理 7. 外部商城采购管理 8. 报表查询管理 9. 系统管理 10. 集成管理 资料获取:本文末个人名片。

在Activity中使用Menu

在Activity中使用Menu 手机毕竟和电脑不同,它的屏幕空间非常有限,因此充分地利用屏幕空间在手机界面设计中就显得非常重要了。如果你的活动中有大量的菜单需要显示,这个时候界面设计就会比较尴尬,因为仅这些菜单就可能占用屏幕将…

构建高效的串行任务执行器:SerialExecutor深度解析

本文主要介绍怎么去实现一个支持串行执行任务的SerialExecutor执行器 摘要 在复杂的异步编程中,有时我们需要确保任务以串行的方式执行,以维护任务间的依赖关系或顺序。SerialExecutor 是一个自定义的执行器,它封装了 Java 的 Executor 接口…

Linux磁盘分区,增加磁盘应用实例,磁盘情况查询

目录 linux磁盘分区机制 原理介绍 示意图 硬盘说明 查看所有设备挂载情况 挂载的经典案例 给虚拟机添加硬盘 分区 删除挂载 永久挂载 磁盘情况查询 查询系统整体磁盘使用情况 查询指定目录的磁盘占用情况 linux磁盘分区机制 原理介绍 载入可以将一个分区和一个目录…