Xiangyue Zhang*, Jianfang Li*, Jiaxu Zhang, Ziqiang Dang, Jianqiang Ren, Liefeng Bo, Zhigang Tuβ
β¨ICCV 2025β¨
Official implementation and checkpoints for semantic-aware holistic co-speech gesture generation.
Keywords: co-speech gesture generation, co-speech motion generation, speech-driven motion generation, semantic gestures, BEAT2, and SMPL-X.
- [2026.07.27] π₯ Added the 25-speaker BEAT2 release: all five motion representation models, Base and Sparse checkpoints, paired inference NPZ files, metrics, and a separate training workflow.
- [2025.09.11] π₯ Release: - [β] Inference code - [β] Training code
The two releases use different training protocols and are provided separately:
- Speaker 2 (paper protocol): download the original test
.npzfiles from Hugging Face or Google Drive. - All Speakers (25 English BEAT2 speakers): download the paired test
.npzfiles from Hugging Face or Google Drive.
| Training protocol | Speakers | FGD β (Γ10-1) | BC β (Γ10-1) | DIV β | MSE β (Γ10-8) | LVD β (Γ10-5) |
|---|---|---|---|---|---|---|
| Speaker 2 (paper) | 1 | 4.278 | 7.770 | 12.910 | 6.153 | 6.938 |
| All Speakers (released checkpoint) | 25 | 3.556 | 5.097 | 8.409 | 4.439 | 1.435 |
The Speaker 2 row is copied from Table 1 of the paper. The All-Speaker row
uses the lowest-FGD Sparse checkpoint selected by a coarse 10-epoch search
followed by a local 1-epoch search. Raw metrics and checkpoint metadata are in
results/all_speakers. The two rows use different
training protocols and should not be interpreted as a controlled
single-speaker versus multi-speaker ablation.
The shortest path to a runnable setup is:
conda create -n semtalk python=3.8 -y
conda activate semtalk
conda install pytorch==2.1.0 torchvision==0.16.0 torchaudio==2.1.0 pytorch-cuda=12.1 -c pytorch -c nvidia
pip install -r requirements.txt
pip install -U whisperxIf your data and weights are already ready, inference becomes:
python train.py --config configs/semtalk_sparse.yaml \
--inference \
--audio_infer_path demo/2_scott_0_1_1_test.wavWe Recommend a python version =3.8 and cuda version >=12.1. Then build environment as follows:
# [Optional] Create a virtual env
conda create -n SemTalk python=3.8
conda activate SemTalk
# pytorch, torchvison
conda install pytorch==2.1.0 torchvision==0.16.0 torchaudio==2.1.0 pytorch-cuda=12.1 -c pytorch -c nvidia
# Install with pip:
pip install -r requirements.txt
pip install -U whisperx
sudo apt-get update && sudo apt-get install -y ffmpeg # if you don't have ffmpegplease refer to EMAGE and download datasets from BEAT2 for datasets and place the dataset inside the SemTalk folder, i.e. path-to-SemTalk/BEAT2
Download hubert-large-ls960-ft(used for extracting audio features), faster-whisper-large-v3(used for inference) weights and place itside in the SemTalk folder, i.e. path-to-SemTalk/facebook.
If you are in China, you can use hf-mirror for faster and more reliable downloads. The process may take some time, so please be patient.
pip install -U huggingface_hub
export HF_ENDPOINT=https://hf-mirror.com
huggingface-cli download --resume-download facebook/hubert-large-ls960-ft --local-dir facebook/hubert-large-ls960-ft
huggingface-cli download --resume-download Systran/faster-whisper-large-v3 --local-dir Systran/faster-whisper-large-v3
Choose the weights that match the intended protocol:
- Speaker 2 (paper protocol): download the original pretrained models and weights from Hugging Face (Google Drive mirror).
- All Speakers (25 English BEAT2 speakers): download the all-speaker representation models and weights from Hugging Face (Google Drive mirror). This archive contains all five representation models and the selected Base and Sparse checkpoints.
The Hugging Face archives exclude SMPLX_NEUTRAL_2020.npz. Download SMPL-X
from the official website under its own
license and place it in the path expected by the repository.
Keep the original Speaker 2 archive in its documented locations. Install the All-Speaker archive without overwriting those files:
unzip SemTalk_all_speakers_weights_25spk.zip
cp -R SemTalk_all_speakers_weights/weights/all_speakers ./weights/The All-Speaker files use a separate subdirectory, so the original Speaker 2 paths and default configs remain unchanged.
Finally, these SemTalk folder should be orgnized as follows:
.
βββ BEAT2
βΒ Β βββ beat_english_v2.0.0
βββ configs
βββ dataloaders
βββ datasets (this folder will appear after you generate the datasets)
βΒ Β βββ beat2_cache2
βΒ Β βββ beat2_semtalk_train
βΒ Β βββ semtalk_dataloader.py
βββ facebook
βΒ Β βββ hubert-large-ls960-ft
βββ models
βββ optimizers
βββ src
βββ Systran
βΒ Β βββ faster-whisper-large-v3
βββ utils
βββ weights
βΒ Β βββ pretrained_vq
βΒ Β βββ smplx_models
βΒ Β βββ best_semtalk_base.bin
βΒ Β βββ best_semtalk_sparse.bin
βΒ Β βββ all_speakers
βΒ Β βββ pretrained_vq
βΒ Β βββ best_semtalk_base.bin
βΒ Β βββ best_semtalk_sparse.bin
βββ ae_trainer.py
βββ aelower_trainer.py
βββ aelowerfoot_trainer.py
βββ requirements.txt
βββ semtalk_base_trainer.py
βββ semtalk_sparse_trainer.py
βββ train.py
Notice: Please make sure you are in the root directory, i.e. path-to-SemTalk.
- To generate the training dataset, run:
python dataloaders/save_train_dataset.pyThis process may take some time, so please be patient.
- To generate the test dataset, run:
python dataloaders/save_test_dataset.pyThe commands below preserve the original Speaker 2 protocol. For the separate
25-speaker preprocessing, representation-model training, Base training, Sparse
training, and evaluation commands, see
scripts/all_speakers/README.md.
The commands below reproduce the original Speaker 2 RVQ-VAE protocol. You
can either train the models yourself and place the weights under
path-to-SemTalk/weights, or download the pretrained weights that match your
training protocol:
- Speaker 2 (paper protocol): use the original pretrained weights.
- All Speakers (25 English BEAT2 speakers): use the
all-speaker weights.
The archive contains the five all-speaker representation models under
weights/all_speakers/pretrained_vq, together with the selected Base and Sparse checkpoints. Followscripts/all_speakers/README.mdwhen training or evaluating this protocol.
python train.py --config configs/cnn_vqvae_face_30.yaml --train_rvq # facepython train.py --config configs/cnn_vqvae_hands_30.yaml --train_rvq # handspython train.py --config configs/cnn_vqvae_upper_30.yaml --train_rvq # upper bodypython train.py --config configs/cnn_vqvae_lower_foot_30.yaml --train_rvq # lower footpython train.py --config configs/cnn_vqvae_lower_30.yaml --train_rvq # lower bodypython train.py --config configs/semtalk_base.yamlNotice: Once you have obtained the optimal base motion generation weights, please update the path field to base_ckpt in configs/semtalk_sparse.yaml.
python train.py --config configs/semtalk_sparse.yamlNotice: Before running the test code, make sure the load_ckpt and base_ckpt paths in configs/semtalk_sparse.yaml are set correctly.
python train.py --config configs/semtalk_sparse.yaml --test_stateyou can put your inference wav format aduio on ./demo path, for example, you can run:
python train.py --config configs/semtalk_sparse.yaml --inference --audio_infer_path ./demo/2_scott_0_1_1.wavIf you are opening the codebase for the first time, these folders are the important ones:
configs/: experiment and path configurationdataloaders/: dataset preprocessing and dataset loadingmodels/: RVQ-VAE and SemTalk model definitionstrain.py: original training entrypoint
The original research code structure is still preserved.
Common repository paths are now centralized in utils/project_paths.py, so preprocessing, training, and checkpoints use the same path conventions.
This also covers the local HuBERT / faster-whisper directories and shared vocab.pkl lookup, which reduces machine-specific path edits when moving the repo.
Following EMAGE, you can download SMPLX blender addon, and install it in your blender 3.x or 4.x. Click the button Add Animation to visualize the generated smplx file (like xxx.npz).
Thanks to EMAGE, DiffSHEG, our code is partially borrowing from them. Please check these useful repos.
If you find our code or paper helps, please consider citing:
@inproceedings{zhang2025semtalk,
title={SemTalk: Holistic Co-speech Motion Generation with Frame-level Semantic Emphasis},
author={Zhang, Xiangyue and Li, Jianfang and Zhang, Jiaxu and Dang, Ziqiang and Ren, Jianqiang and Bo, Liefeng and Tu, Zhigang},
booktitle={Proceedings of the IEEE/CVF International Conference on Computer Vision},
pages={13761--13771},
year={2025}
}