Audio2PhotoReal Projektdetails
Projektübersicht
Audio2PhotoReal ist ein innovatives Open-Source-Deep-Learning-Projekt von Facebook Research (Meta Research), das ein End-to-End-Synthesesystem von Audio zu realistischen menschlichen Avataren realisiert. Die Kernkompetenz des Projekts ist die Generierung realistischer Ganzkörperanimationen von Menschen basierend auf Spracheingaben, einschließlich Gesichtsausdrücken und Körperhaltungen.
- Projektadresse: https://github.com/facebookresearch/audio2photoreal
- Online-Demo: Google Colab Demo
Technische Merkmale
Kernfunktionen
- Audio-gesteuerte Personensynthese: Generierung vollständiger menschlicher Animationen nur basierend auf Audioeingaben
- Realistische Gesichtsausdrücke: 256-dimensionale Gesichtskodierung erzeugt natürliche Gesichtsausdrücke
- Ganzkörperhaltungsgenerierung: 104-dimensionale Gelenkwinkel realisieren vollständige Körperbewegungen
- Optimierung von Gesprächsszenarien: Spezielle Modellierung des menschlichen Verhaltens in Gesprächsszenarien
Technische Architektur
Das Projekt verwendet eine Architektur, die auf der Zusammenarbeit mehrerer Modelle basiert:
- Gesichts-Diffusionsmodell: Generiert 256-dimensionale Gesichtskodierung basierend auf Audio
- Körper-Diffusionsmodell: Generiert 104-dimensionale Gelenkrotationen in Kombination mit Audio und geführter Pose
- Geführter Pose-Generator: VQ-VAE-Architektur, generiert geführte Posen mit einer Frequenz von 1 fps
- VQ-Encoder-Decoder: Vektorquantisierung des kontinuierlichen 104-dimensionalen Posenraums
Datensatz
Datenstruktur
Das Projekt bietet einen vollständigen Datensatz von vier Personen:
- PXB184, RLW104, TXB805, GQS883
Jede Person enthält etwa 26-30 Gesprächsszenen, wobei jede Szene Folgendes enthält:
*audio.wav: Zweikanal-Audiodatei (48kHz)
- Kanal 0: Audio der aktuellen Person
- Kanal 1: Audio des Gesprächspartners
*body_pose.npy: (T × 104) Array der Gelenkwinkel
*face_expression.npy: (T × 256) Array der Gesichtskodierung
*missing_face_frames.npy: Index der fehlenden/beschädigten Gesichts-Frames
data_stats.pth: Statistiken zu Mittelwert und Standardabweichung der einzelnen Modalitäten
Datenaufteilung
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 und Verwendung
Schnelle Demo
# Umgebung erstellen
conda create --name a2p_env python=3.9
conda activate a2p_env
# Abhängigkeiten installieren
sh demo/install.sh
# Demo ausführen
python -m demo.demo
Vollständige Installation
# Umgebung konfigurieren
conda create --name a2p_env python=3.9
conda activate a2p_env
pip install -r scripts/requirements.txt
# Notwendige Modelle herunterladen
sh scripts/download_prereq.sh
# PyTorch3D installieren
pip install "git+https://github.com/facebookresearch/pytorch3d.git"
Daten herunterladen
# Einzelnen Datensatz herunterladen
curl -L https://github.com/facebookresearch/audio2photoreal/releases/download/v1.0/<person_id>.zip -o <person_id>.zip
unzip <person_id>.zip -d dataset/
# Alle Datensätze herunterladen
sh scripts/download_alldatasets.sh
# Vorab trainierte Modelle herunterladen
sh scripts/download_allmodels.sh
Modelltraining
1. Training des Gesichts-Diffusionsmodells
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. Training des Körper-Diffusionsmodells
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. Training des VQ-Encoders
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. Training des geführten Pose-Transformators
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
Inferenzgenerierung
Gesichtsgenerierung
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
Körpergenerierung
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
Vollständiges Rendering
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
Visualisierung
Datensatzvisualisierung
python -m visualize.render_anno \
--save_dir vis_anno_test \
--data_root dataset/PXB184 \
--max_seq_length 600
Technische Anforderungen
- CUDA: 11.7
- Python: 3.9
- GCC: 9.0
- Hauptabhängigkeiten: PyTorch, PyTorch3D, Gradio
Anwendungsbereiche
- Virtuelle Meetings und Remote-Zusammenarbeit
- Digitale Personen-Livestreams und Inhaltserstellung
- Spiele- und Unterhaltungsanwendungen
- Bildungs- und Trainingssimulationen
- Mensch-Maschine-Schnittstellen