本仓库包含了论文"从音频到照片级真实感化身:在对话中合成人类"的PyTorch实现
:hatching_chick: 在这里试用我们的演示,或继续按照以下步骤在本地运行代码! 感谢大家通过贡献/评论/问题提供的支持!
本代码库提供:
如果您使用了数据集或代码,请引用我们的论文
@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>
替换为PXB184
、RLW104
、TXB805
或GQS883
中的任何一个。
可以使用以下命令通过命令行下载。
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
。
要运行实际模型,你需要运行预训练模型并生成相关的结果文件,然后再进行可视化。
要生成面部的结果文件,运行:
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)。所有其他模型可以并行训练。
要训练面部模型,你需要运行以下脚本:
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
训练身体模型与面部模型类似,但有以下额外参数:
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
要训练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
一旦 你从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发布。
一键生成PPT和Word,让学习生活更轻松
讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。
深度推理能力全新升级,全面对标OpenAI o1
科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。
一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型
Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。
字节跳动发布的AI编程神器IDE
Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。
AI助力,做PPT更简单!
咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。
选题、配图、成文,一站式创作,让内容运营更高效
讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。
专业的AI公文写作平台,公文写作神器
AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。
OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。
openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。
高分辨率纹理 3D 资产生成
Hunyuan3D-2 是腾讯开发的用于 3D 资产生成的强大工具,支持从文本描述、单张图片或多视角图片生成 3D 模型,具备快速形状生成能力,可生成带纹理的高质量 3D 模型,适用于多个领域,为 3D 创作提供了高效解决方案。
一个具备存储、管理和客户端操作等多种功能的分布式文件系统相关项目。
3FS 是一个功能强大的分布式文件系统项目,涵盖了存储引擎、元数据管理、客户端工具等多个模块。它支持多种文件操作,如创建文件和目录、设置布局等,同时具备高效的事件循环、节点选择和协程池管理等特性。适用于需要大规模数据存储和管理的场景,能够提高系统的性能和可靠性,是 分布式存储领域的优质解决方案。
最新AI工具、AI资讯
独家AI资源、AI项目落地
微信扫一扫关注公众号