Project Icon

audio2photoreal

AI驱动的音频转人物对话视频技术

audio2photoreal项目实现了音频到逼真人物对话视频的自动转换。该开源项目集成了面部表情和全身动作生成模型,能根据音频输入合成自然的人物表情和动作。项目提供预训练模型、训练代码和数据集,便于研究者复现和改进。这一技术为虚拟人物制作和视频合成领域开辟了新的可能性。

从音频到照片级真实感化身:在对话中合成人类

本仓库包含了论文"从音频到照片级真实感化身:在对话中合成人类"的PyTorch实现

:hatching_chick: 这里试用我们的演示,或继续按照以下步骤在本地运行代码! 感谢大家通过贡献/评论/问题提供的支持!

https://github.com/facebookresearch/audio2photoreal/assets/17986358/5cba4079-275e-48b6-aecc-f84f3108c810

本代码库提供:

  • 训练代码
  • 测试代码
  • 预训练的动作模型
  • 数据集访问

如果您使用了数据集或代码,请引用我们的论文

@inproceedings{ng2024audio2photoreal,
  title={From Audio to Photoreal Embodiment: Synthesizing Humans in Conversations},
  author={Ng, Evonne and Romero, Javier and Bagautdinov, Timur and Bai, Shaojie and Darrell, Trevor and Kanazawa, Angjoo and Richard, Alexander},
  booktitle={IEEE Conference on Computer Vision and Pattern Recognition},
  year={2024}
}

仓库内容

我们用 :point_down: 图标标注了可以直接复制粘贴到终端的代码。

快速开始

使用这个演示,您可以录制音频片段并选择要生成的样本数量。

确保您有CUDA 11.7和gcc/++ 9.0以兼容pytorch3d

:point_down: 安装必要组件。这将进行环境配置并安装相应的渲染资产、先决条件模型和预训练模型:

conda create --name a2p_env python=3.9
conda activate a2p_env
sh demo/install.sh

:point_down: 运行演示。您可以录制音频,然后渲染相应的结果!

python -m demo.demo

:microphone: 首先,录制您的音频

:hourglass: 请耐心等待,因为渲染可能需要一段时间!

您可以更改要生成的样本数量(1-10),并通过点击每个视频右上角的下载按钮下载您喜欢的视频。

安装

代码已在CUDA 11.7和Python 3.9,gcc/++ 9.0环境下测试通过

:point_down: 如果您尚未通过演示设置完成,请配置环境并下载先决条件模型:

conda create --name a2p_env python=3.9
conda activate a2p_env
pip install -r scripts/requirements.txt
sh scripts/download_prereq.sh

:point_down: 为了使渲染正常工作,请确保您也安装了pytorch3d

pip install "git+https://github.com/facebookresearch/pytorch3d.git"

有关渲染器的更多详细信息,请参阅CA Bodies仓库

下载数据和模型

要下载任何数据集,您可以在https://github.com/facebookresearch/audio2photoreal/releases/download/v1.0/<person_id>.zip找到它们,其中您可以将<person_id>替换为PXB184RLW104TXB805GQS883中的任何一个。 可以使用以下命令通过命令行下载。

curl -L https://github.com/facebookresearch/audio2photoreal/releases/download/v1.0/<person_id>.zip -o <person_id>.zip
unzip <person_id>.zip -d dataset/
rm <person_id>.zip

:point_down: 要下载所有数据集,您可以简单地运行以下命令,它将下载并解压所有模型。

sh scripts/download_alldatasets.sh

同样,要下载任何模型,您可以在http://audio2photoreal_models.berkeleyvision.org/<person_id>_models.tar找到它们。

# 下载动作生成
wget http://audio2photoreal_models.berkeleyvision.org/<person_id>_models.tar
tar xvf <person_id>_models.tar
rm <person_id>_models.tar

# 下载身体解码器/渲染资产并将它们放在正确的位置
mkdir -p checkpoints/ca_body/data/
wget https://github.com/facebookresearch/ca_body/releases/download/v0.0.1-alpha/<person_id>.tar.gz
tar xvf <person_id>.tar.gz --directory checkpoints/ca_body/data/
rm <person_id>.tar.gz

:point_down: 您也可以使用此脚本下载所有模型:

sh scripts/download_allmodels.sh

上述模型脚本将下载both动作生成模型和身体解码器/渲染模型。请查看脚本以获取更多详细信息。

数据集

一旦数据集下载并解压(通过scripts/download_datasets.sh),它应该展开成以下目录结构:

|-- dataset/
    |-- PXB184/
        |-- data_stats.pth 
        |-- scene01_audio.wav
        |-- scene01_body_pose.npy
        |-- scene01_face_expression.npy
        |-- scene01_missing_face_frames.npy
        |-- ...
        |-- scene30_audio.wav
        |-- scene30_body_pose.npy
        |-- scene30_face_expression.npy
        |-- scene30_missing_face_frames.npy
    |-- RLW104/
    |-- TXB805/
    |-- GQS883/

四位参与者(PXB184, RLW104, TXB805, GQS883)中的每一位应该有独立的"场景"(1到26左右)。 对于每个场景,我们保存了3种类型的数据标注。

*audio.wav:包含原始音频的波形文件(两个通道,1600*T个样本),采样率为48kHz;通道0是当前人物的音频,通道1是其对话伙伴的音频。

*body_pose.npy:(T x 104)数组,表示运动学骨骼中的关节角度。并非所有关节都用3自由度表示。每个104维向量可用于重建完整的身体骨骼。

*face_expression.npy:(T x 256)数组,表示面部编码,其中每个256维向量可重建一个面部网格。

*missing_face_frames.npy:面部编码缺失或损坏的帧索引(t)列表。

data_stats.pth:包含每个人每种模态的均值和标准差。

对于训练/验证/测试集的划分,索引在data_loaders/data.py中定义如下:

train_idx = list(range(0, len(data_dict["data"]) - 6))
val_idx = list(range(len(data_dict["data"]) - 6, len(data_dict["data"]) - 4))
test_idx = list(range(len(data_dict["data"]) - 4, len(data_dict["data"])))

这适用于我们训练的四个数据集参与者中的任何一个。

可视化真实数据

如果你正确安装了渲染依赖,你可以使用以下命令可视化完整数据集:

python -m visualize.render_anno 
    --save_dir <保存目录路径> 
    --data_root <数据根目录路径> 
    --max_seq_length <数字>

视频将根据指定的--max_seq_length参数分段,你可以自行指定(默认为600)。

:point_down: 例如,要可视化PXB184的真实数据标注,你可以运行以下命令:

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

预训练模型

我们训练的是针对特定人物的模型,所以每个人都应该有一个关联的目录。例如,对于PXB184,其完整模型解压后应该有以下结构:

|-- checkpoints/
    |-- diffusion/
        |-- c1_face/
            |-- args.json
            |-- model:09d.pt
        |-- c1_pose/
            |-- args.json
            |-- model:09d.pt
    |-- guide/
        |-- c1_pose/
            |-- args.json
            |-- checkpoints/
                |-- iter-:07d.pt
    |-- vq/
        |-- c1_pose/
            |-- args.json
            |-- net_iter:06d.pth

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

  1. 一个面部扩散模型,根据音频输出256个面部编码
  2. 一个姿势扩散模型,根据音频和引导姿势输出104个关节旋转
  3. 一个引导VQ姿势模型,以1fps的速度根据音频输出VQ标记
  4. 一个VQ编码器-解码器模型,对连续的104维姿势空间进行向量量化。

运行预训练模型

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

面部生成

要生成面部的结果文件,运行:

python -m sample.generate 
    --model_path <模型路径> 
    --num_samples <样本数> 
    --num_repetitions <重复次数> 
    --timestep_respacing ddim500 
    --guidance_param 10.0

<模型路径>应该是与生成面部相关的扩散模型的路径。 例如,对于参与者PXB184,路径可能是./checkpoints/diffusion/c1_face/model000155000.pt 其他参数说明:

--num_samples:要生成的样本数。要采样完整数据集,使用56(除了TXB805,使用58)。
--num_repetitions:重复采样的次数,使得生成的总序列数为(num_samples * num_repetitions)。
--timestep_respacing:采取多少个扩散步骤。格式始终为ddim<数字>。
--guidance_param:条件对结果的影响程度。我通常使用2.0-10.0的范围,对于面部倾向于使用较高值。

:point_down: 使用提供的预训练模型为PXB184运行面部模型的完整示例如下:

python -m sample.generate --model_path checkpoints/diffusion/c1_face/model000155000.pt --num_samples 10 --num_repetitions 5 --timestep_respacing ddim500 --guidance_param 10.0

这将从数据集中生成10个样本1次。输出结果文件将保存在: ./checkpoints/diffusion/c1_face/samples_c1_face_000155000_seed10_/results.npy

身体生成

生成相应的身体与生成面部非常相似,但现在我们还需要提供用于生成引导姿势的模型。

python -m sample.generate 
    --model_path <模型路径> 
    --resume_trans <引导模型路径> 
    --num_samples <样本数> 
    --num_repetitions <重复次数> 
    --timestep_respacing ddim500 
    --guidance_param 2.0

:point_down: 这里,<引导模型路径>应指向引导变换器。完整命令如下:

python -m sample.generate --model_path checkpoints/diffusion/c1_pose/model000340000.pt --resume_trans checkpoints/guide/c1_pose/checkpoints/iter-0100000.pt --num_samples 10 --num_repetitions 5 --timestep_respacing ddim500 --guidance_param 2.0

同样,输出将保存在: ./checkpoints/diffusion/c1_pose/samples_c1_pose_000340000_seed10_guide_iter-0100000.pt/results.npy

可视化

在身体生成方面,你还可以选择传入--plot标志来渲染逼真的头像。你还需要使用--face_codes标志传入相应生成的面部编码。 如果你已经预先计算了姿势,也可以选择使用--pose_codes标志传入生成的身体。 这将在保存身体results.npy的同一目录中保存视频。 :point_down: 包含三个新标志的完整命令示例如下:

python -m sample.generate --model_path checkpoints/diffusion/c1_pose/model000340000.pt --resume_trans checkpoints/guide/c1_pose/checkpoints/iter-0100000.pt --num_samples 10 --num_repetitions 5 --timestep_respacing ddim500 --guidance_param 2.0 --face_codes ./checkpoints/diffusion/c1_face/samples_c1_face_000155000_seed10_/results.npy --pose_codes ./checkpoints/diffusion/c1_pose/samples_c1_pose_000340000_seed10_guide_iter-0100000.pt/results.npy --plot

其余标志可以保持不变。关于实际的渲染API,请参阅Codec Avatar Body了解安装等信息。 *重要提示:为了可视化完整的真实感头像,你需要先运行面部编码,然后将其传入身体生成代码中。*如果你尝试对面部编码使用--plot调用生成,将无法正常工作。

从头开始训练

你需要训练四个可能的模型:1) 面部扩散模型,2) 身体扩散模型,3) 身体VQ VAE,4) 身体引导transformer。 唯一的依赖关系是4)需要3)。所有其他模型可以并行训练。

1) 面部扩散模型

要训练面部模型,你需要运行以下脚本:

python -m train.train_diffusion 
    --save_dir <保存目录路径>
    --data_root <数据根目录路径>
    --batch_size <批次大小>
    --dataset social  
    --data_format face 
    --layers 8 
    --heads 8 
    --timestep_respacing ''
    --max_seq_length 600

重要的是,一些标志如下:

--save_dir: 存储所有输出的目录路径
--data_root: 加载数据的目录路径
--dataset: 要加载的数据集名称;目前我们只支持'social'数据集
--data_format: 设置为'face'表示面部,而不是姿势
--timestep_respacing: 设置为'',表示默认的1000步扩散步骤间隔
--max_seq_length: 训练时单个序列的最大帧数

:point_down: 对人物PXB184进行训练的完整示例如下:

python -m train.train_diffusion --save_dir checkpoints/diffusion/c1_face_test --data_root ./dataset/PXB184/ --batch_size 4 --dataset social --data_format face --layers 8 --heads 8 --timestep_respacing '' --max_seq_length 600

2) 身体扩散模型

训练身体模型与面部模型类似,但有以下额外参数:

python -m train.train_diffusion 
    --save_dir <保存目录路径> 
    --data_root <数据根目录路径>
    --lambda_vel <数值>
    --batch_size <批次大小> 
    --dataset social 
    --add_frame_cond 1 
    --data_format pose 
    --layers 6 
    --heads 8 
    --timestep_respacing '' 
    --max_seq_length 600

与面部训练不同的标志如下:

--lambda_vel: 使用速度进行训练的额外辅助损失
--add_frame_cond: 设置为'1'表示1 fps。如果未指定,默认为30 fps。
--data_format: 设置为'pose'表示身体,而不是面部

:point_down: 对人物PXB184进行训练的完整示例如下:

python -m train.train_diffusion --save_dir checkpoints/diffusion/c1_pose_test --data_root ./dataset/PXB184/ --lambda_vel 2.0 --batch_size 4 --dataset social --add_frame_cond 1 --data_format pose --layers 6 --heads 8 --timestep_respacing '' --max_seq_length 600

3) 身体VQ VAE

要训练VQ编码器-解码器,你需要运行以下脚本:

python -m train.train_vq 
    --out_dir <输出目录路径> 
    --data_root <数据根目录路径>
    --batch_size <批次大小>
    --lr 1e-3 
    --code_dim 1024 
    --output_emb_width 64 
    --depth 4 
    --dataname social 
    --loss_vel 0.0 
    --add_frame_cond 1 
    --data_format pose 
    --max_seq_length 600

:point_down: 对人物PXB184来说,命令如下:

python -m train.train_vq --out_dir checkpoints/vq/c1_vq_test --data_root ./dataset/PXB184/ --lr 1e-3 --code_dim 1024 --output_emb_width 64 --depth 4 --dataname social --loss_vel 0.0 --data_format pose --batch_size 4 --add_frame_cond 1 --max_seq_length 600

4) 身体引导transformer

一旦你从3)训练了VQ模型,你就可以将其传入以训练身体引导姿势transformer:

python -m train.train_guide 
    --out_dir <输出目录路径>
    --data_root <数据根目录路径>
    --batch_size <批次大小>
    --resume_pth <VQ模型路径>
    --add_frame_cond 1 
    --layers 6 
    --lr 2e-4 
    --gn 
    --dim 64 

:point_down: 对人物PXB184来说,命令如下:

python -m train.train_guide --out_dir checkpoints/guide/c1_trans_test --data_root ./dataset/PXB184/ --batch_size 4 --resume_pth checkpoints/vq/c1_vq_test/net_iter300000.pth --add_frame_cond 1 --layers 6 --lr 2e-4 --gn --dim 64

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

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

许可证

代码和数据集根据CC-NC 4.0 International license发布。

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号