Home
Login

基於音訊生成逼真的人體虛擬化身的深度學習專案,能從語音合成全身手勢和面部表情

NOASSERTIONPython 2.8kfacebookresearchaudio2photoreal Last Updated: 2024-09-15

Audio2PhotoReal 項目詳細介紹

項目概述

Audio2PhotoReal 是 Facebook Research(Meta Research)開源的一個創新深度學習項目,實現了從音訊到逼真人體虛擬化身的端到端合成系統。該項目的核心能力是根據語音輸入生成逼真的全身人體動畫,包括面部表情和身體姿態。

技術特點

核心功能

  • 音訊驅動的人體合成: 僅基於音訊輸入生成完整的人體動畫
  • 逼真的面部表情: 256 維面部編碼生成自然的面部表情
  • 全身姿態生成: 104 維關節角度實現完整的身體動作
  • 對話場景優化: 專門針對對話場景中的人體行為建模

技術架構

項目採用多模型協同的架構設計:

  1. 面部擴散模型: 基於音訊生成 256 維面部編碼
  2. 身體擴散模型: 結合音訊和引導姿態生成 104 維關節旋轉
  3. 引導姿態生成器: VQ-VAE 架構,1fps 頻率生成引導姿態
  4. VQ 編碼器-解碼器: 對連續 104 維姿態空間進行向量量化

數據集

數據結構

項目提供了四個人物的完整數據集:

  • PXB184, RLW104, TXB805, GQS883

每個人物包含約 26-30 個對話場景,每個場景包含:

*audio.wav: 雙聲道音訊檔案(48kHz)
  - 聲道 0: 當前人物音訊
  - 聲道 1: 對話夥伴音訊

*body_pose.npy: (T × 104) 關節角度陣列
*face_expression.npy: (T × 256) 面部編碼陣列  
*missing_face_frames.npy: 缺失/損壞的面部幀索引
data_stats.pth: 各模態的均值和標準差統計

數據劃分

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"])))

安裝和使用

快速演示

# 創建環境
conda create --name a2p_env python=3.9
conda activate a2p_env

# 安裝依賴
sh demo/install.sh

# 運行演示
python -m demo.demo

完整安裝

# 環境配置
conda create --name a2p_env python=3.9
conda activate a2p_env
pip install -r scripts/requirements.txt

# 下載必要模型
sh scripts/download_prereq.sh

# 安裝 PyTorch3D
pip install "git+https://github.com/facebookresearch/pytorch3d.git"

數據下載

# 下載單個數據集
curl -L https://github.com/facebookresearch/audio2photoreal/releases/download/v1.0/<person_id>.zip -o <person_id>.zip
unzip <person_id>.zip -d dataset/

# 下載所有數據集
sh scripts/download_alldatasets.sh

# 下載預訓練模型
sh scripts/download_allmodels.sh

模型訓練

1. 面部擴散模型訓練

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 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 編碼器訓練

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. 引導姿態變換器訓練

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

推理生成

面部生成

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

身體生成

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

完整渲染

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

可視化

數據集可視化

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

技術要求

  • CUDA: 11.7
  • Python: 3.9
  • GCC: 9.0
  • 主要依賴: PyTorch, PyTorch3D, Gradio

應用場景

  • 虛擬會議和遠程協作
  • 數位人直播和內容創作
  • 遊戲和娛樂應用
  • 教育和培訓仿真
  • 人機交互介面

Star History Chart