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次元の姿勢空間をベクトル量子化

データセット

データ構造

このプロジェクトは、4人の人物の完全なデータセットを提供します。

  • 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