OmniAvatar
扫码查看

使用音频和文本生成虚拟人视频

OmniAvatar

综合介绍

OmniAvatar 是一个由浙江大学和阿里巴巴集团共同开发的开源项目,它能够根据一段音频、一张人物照片和一段描述文字,生成一个带有自然身体动画的虚拟人视频。 和之前大多数只关注脸部动画的模型不同,OmniAvatar能够驱动全身的动作,包括手势和身体的姿态,使得生成的视频更加生动和真实。 该模型通过一种名为“像素级多层次音频嵌入”的技术,提升了口型与音频的同步准确性。 同时,用户可以使用简单的文字指令(Prompt)来控制视频中人物的行为、情绪乃至背景环境,例如可以让虚拟人表现出开心或愤怒,或者让背景变成动态的场景。 这个项目利用了LoRA训练方法,在保留了基础视频模型强大的文生视频能力的同时,高效地融入了音频信息,实现了对虚拟人视频内容更精细的控制。

功能列表

  • 音频驱动生成: 输入一段音频和一张静态人物图片,即可生成对应的虚拟人说话视频。
  • 全身动画: 不仅限于面部,模型能生成包含手臂、躯干等部分的自适应全身动作。
  • 口型同步: 采用像素级多层次音频嵌入策略,确保视频中人物的口型与输入音频高度同步。
  • 文本指令控制: 用户可以通过文本提示(Prompt)精确控制视频内容,包括:
    • 情绪控制: 指定人物表现出开心、悲伤、愤怒等不同情绪。
    • 行为动作: 控制人物的动作幅度,甚至可以实现与物体的互动。
    • 背景控制: 能够根据文本描述改变视频背景,例如将人物置于动态的汽车内。
  • 多种模型尺寸: 提供1.3B和14B两种参数规模的模型,用户可以根据设备性能选择。
  • 性能优化: 支持多种高级配置,如使用FSDP以减少多GPU推理时的显存占用,或调整TeaCache参数来加速生成过程。
  • 开源免费: 项目代码、模型权重均已在Hugging Face和Github开放,并采用Apache-2.0许可证。

使用帮助

OmniAvatar 能够将一张静态图片和一段音频,结合文本指令,转化成一段生动的虚拟人视频。以下是详细的安装和使用流程。

1. 安装

首先,需要将OmniAvatar的项目代码克隆到你的本地计算机。

git clone https://github.com/Omni-Avatar/OmniAvatar.git
cd OmniAvatar

接下来,安装项目所需的核心依赖库,主要是PyTorch以及其他一些Python包。官方建议使用特定版本的PyTorch。

# 推荐使用cu124版本的PyTorch
pip install torch==2.4.0 torchvision==0.19.0 torchaudio==2.4.0 --index-url https://download.pytorch.org/whl/cu124
# 安装其他依赖
pip install -r requirements.txt

为了获得更快的处理速度,你可以选择性安装flash_attn库来加速模型的注意力计算。

pip install flash_attn

2. 下载模型

OmniAvatar的运行需要依赖多个预训练模型。你需要先创建一个用于存放模型的文件夹,然后使用huggingface-cli工具从Hugging Face Hub上下载。

首先,创建目录并安装Hugging Face的命令行工具。

mkdir pretrained_models
pip install "huggingface_hub[cli]"

然后,根据你希望使用的模型大小(1.3B或14B),下载对应的模型文件。以下载14B模型为例:

# 下载基础视频模型
huggingface-cli download Wan-AI/Wan2.1-T2V-14B --local-dir ./pretrained_models/Wan2.1-T2V-14B
# 下载OmniAvatar的LoRA和音频条件权重
huggingface-cli download OmniAvatar/OmniAvatar-14B --local-dir ./pretrained_models/OmniAvatar-14B
# 下载音频编码器模型
huggingface-cli download facebook/wav2vec2-base-960h --local-dir ./pretrained_models/wav2vec2-base-960h

下载完成后,请确保你的pretrained_models文件夹结构如下所示:

OmniAvatar
└── pretrained_models
├── Wan2.1-T2V-14B
│   └── ...
├── OmniAvatar-14B
│   ├── config.json
│   └── pytorch_model.pt
└── wav2vec2-base-960h
└── ...

3. 准备输入文件

你需要准备一个文本文件,用于定义生成视频的各项输入。这个文件(例如examples/infer_samples.txt)的格式非常关键,每一行代表一次生成任务,格式如下:

[prompt]@@[img_path]@@[audio_path]

  • [prompt]: 描述视频内容的文本。官方建议格式为“[第一帧画面的描述] - [人物行为的描述] - [背景描述(可选)]”。例如:"A man is talking - upper body - in a wood room"。
  • [img_path]: 你的原始人物图片路径。
  • [audio_path]: 你希望人物朗读的音频文件路径。

4. 执行生成命令

准备好所有文件后,就可以运行推理脚本来生成视频了。

单GPU生成(以1.3B模型为例)这是一个基本的生成命令,使用inference_1.3B.yaml配置文件和infer_samples.txt输入文件。

torchrun --standalone --nproc_per_node=1 scripts/inference.py \
--config configs/inference_1.3B.yaml \
--input_file examples/infer_samples.txt

多GPU生成与性能优化如果你的设备拥有多张GPU,可以通过并行处理来加速生成。同时,你也可以通过调整参数来管理显存占用。

例如,在一个拥有8张GPU的设备上,你可以使用FSDP(Fully Sharded Data Parallel)来显著降低显存占用。

torchrun --standalone --nproc_per_node=8 scripts/inference.py \
--config configs/inference.yaml \
--input_file examples/infer_samples.txt \
--hp=sp_size=8,max_tokens=30000,guidance_scale=4.5,overlap_frame=13,num_steps=25,use_fsdp=True,tea_cache_l1_thresh=0.14,num_persistent_param_in_dit=7000000000
  • --hp=...: 用于传递一系列超参数。
  • sp_size=8: 设置序列并行数为8(与GPU数量对应)。
  • use_fsdp=True: 启用FSDP来优化显存。
  • num_steps=25: 设置扩散模型的步数,步数越多通常质量越好,但速度越慢。推荐范围是[20-50]。

生成的视频文件将保存在输出目录中,你可以在配置文件configs/inference.yaml里查看或修改输出路径。

应用场景

  1. 播客与访谈节目只需要一张主持人的照片和节目的音频,就可以自动生成主持人的讲解视频,大大降低了视频内容的制作成本和周期。
  2. 电商营销广告可以生成模特介绍产品的视频。通过文本指令,还能让模特与产品进行互动,例如拿起一件商品进行展示,使广告内容更具吸引力。
  3. 虚拟歌手表演输入歌曲的音频和虚拟偶像的图片,OmniAvatar可以生成口型精准、肢体动作自然的演唱视频,为虚拟偶像的舞台表演提供了一种高效的制作方案。
  4. 个性化数字人普通用户可以利用自己的照片和录音,轻松创造一个能说会动的“数字分身”,用于社交媒体、视频简历或在线教育等多种场合。

QA

  1. OmniAvatar与其他的“AI说话脸”工具有什么不同?最大的不同在于OmniAvatar能够生成“全身”动画,而不仅仅是脸部。 它不仅能实现精准的口型同步,还能根据音频和文本指令,生成自然的身体姿态、手势和动作,适用场景更广泛。
  2. 我是否需要很强的编程能力才能使用它?需要一些基础的命令行操作能力。使用者需要熟悉如何使用git克隆代码库,并使用pip安装Python依赖。核心操作是通过运行提供的脚本来完成的,但需要根据文档正确配置模型路径和输入文件。
  3. 对硬件设备(GPU)有什么要求?要求较高。根据官方提供的数据,即便是经过优化的14B模型,在单张GPU上也需要至少8GB的显存才能运行,而标准模式下则需要36GB显存。因此,推荐在配备有高端NVIDIA GPU的设备上运行。
  4. 是否可以控制视频中人物说话的语气和情绪?是的。你可以通过在prompt中加入描述性词语来控制情绪,例如“happy”(开心)、“angry”(愤怒)等。 此外,通过调整audio_cfg参数,可以增强口型与音频的匹配度,让语气表现更突出。
微信微博Email复制链接