Home
Login

Projet d'apprentissage profond basé sur l'audio pour générer des avatars humains virtuels réalistes, capable de synthétiser des gestes complets du corps et des expressions faciales à partir de la parole.

NOASSERTIONPython 2.8kfacebookresearchaudio2photoreal Last Updated: 2024-09-15

Présentation détaillée du projet Audio2PhotoReal

Aperçu du projet

Audio2PhotoReal est un projet innovant de deep learning open source de Facebook Research (Meta Research) qui réalise un système de synthèse de bout en bout allant de l'audio à des avatars humains virtualisés réalistes. La capacité principale de ce projet est de générer des animations corporelles complètes et réalistes à partir d'entrées vocales, y compris les expressions faciales et les postures corporelles.

Caractéristiques techniques

Fonctionnalités principales

  • Synthèse humaine pilotée par l'audio: Génère une animation humaine complète uniquement à partir d'une entrée audio.
  • Expressions faciales réalistes: Génération d'expressions faciales naturelles grâce à un encodage facial de 256 dimensions.
  • Génération de posture corporelle complète: Réalisation de mouvements corporels complets grâce à 104 dimensions d'angles articulaires.
  • Optimisation des scènes de dialogue: Modélisation du comportement humain spécifiquement pour les scènes de dialogue.

Architecture technique

Le projet adopte une architecture de conception collaborative multi-modèles :

  1. Modèle de diffusion faciale: Génère un encodage facial de 256 dimensions basé sur l'audio.
  2. Modèle de diffusion corporelle: Combine l'audio et la posture guidée pour générer 104 dimensions de rotation articulaire.
  3. Générateur de posture guidée: Architecture VQ-VAE, génère une posture guidée à une fréquence de 1fps.
  4. Encodeur-décodeur VQ: Vectorisation de l'espace de posture continu de 104 dimensions.

Jeu de données

Structure des données

Le projet fournit un jeu de données complet pour quatre personnages :

  • PXB184, RLW104, TXB805, GQS883

Chaque personnage contient environ 26 à 30 scènes de dialogue, chaque scène contenant :

*audio.wav: Fichier audio stéréo (48kHz)
  - Canal 0: Audio du personnage actuel
  - Canal 1: Audio du partenaire de dialogue

*body_pose.npy: (T × 104) Tableau d'angles articulaires
*face_expression.npy: (T × 256) Tableau d'encodage facial
*missing_face_frames.npy: Index des trames faciales manquantes/endommagées
data_stats.pth: Statistiques de la moyenne et de l'écart type de chaque modalité

Division des données

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

Installation et utilisation

Démonstration rapide

# Créer un environnement
conda create --name a2p_env python=3.9
conda activate a2p_env

# Installer les dépendances
sh demo/install.sh

# Lancer la démonstration
python -m demo.demo

Installation complète

# Configuration de l'environnement
conda create --name a2p_env python=3.9
conda activate a2p_env
pip install -r scripts/requirements.txt

# Télécharger les modèles nécessaires
sh scripts/download_prereq.sh

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

Téléchargement des données

# Télécharger un seul jeu de données
curl -L https://github.com/facebookresearch/audio2photoreal/releases/download/v1.0/<person_id>.zip -o <person_id>.zip
unzip <person_id>.zip -d dataset/

# Télécharger tous les jeux de données
sh scripts/download_alldatasets.sh

# Télécharger les modèles pré-entraînés
sh scripts/download_allmodels.sh

Entraînement du modèle

1. Entraînement du modèle de diffusion faciale

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. Entraînement du modèle de diffusion corporelle

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. Entraînement de l'encodeur 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. Entraînement du transformateur de posture guidée

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

Génération par inférence

Génération faciale

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

Génération corporelle

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

Rendu complet

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

Visualisation

Visualisation du jeu de données

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

Exigences techniques

  • CUDA: 11.7
  • Python: 3.9
  • GCC: 9.0
  • Dépendances principales: PyTorch, PyTorch3D, Gradio

Scénarios d'application

  • Réunions virtuelles et collaboration à distance
  • Diffusion en direct et création de contenu avec des humains numériques
  • Applications de jeux et de divertissement
  • Simulations d'éducation et de formation
  • Interfaces d'interaction homme-machine

Star History Chart