Hyperion is a Speaker Recognition Toolkit based on PyTorch and numpy. It provides:
- x-Vector architectures: ResNet, Res2Net, Spine2Net, ECAPA-TDNN, EfficientNet, Transformers and others.
- Embedding preprocessing tools: PCA, LDA, NAP, Centering/Whitening, Length Normalization, CORAL
- Several flavours of PLDA back-ends: Full-rank PLDA, Simplified PLDA, PLDA
- Calibration and Fusion tools
- Recipes for popular datasets: VoxCeleb, NIST-SRE, VOiCES
The full API is described in the documentation page https://hyperion-ml.readthedocs.io
We use anaconda or miniconda, though you should be able to make it work in other python distributions
To start, you should create a new enviroment and install PyTorch:
conda create --name ${your_env} python=3.11
conda activate ${your_env}
# We used PyTorch 2.3.1, other versions >=2.1.0 may work too
conda install pytorch==2.3.1 torchvision==0.18.1 torchaudio==2.3.1 pytorch-cuda=12.1 -c pytorch -c nvidia
# If using ASR recipes, you need to install k2:
wget https://huggingface.co/csukuangfj/k2/resolve/main/ubuntu-cuda/k2-1.24.4.dev20240606+cuda12.1.torch2.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
pip install k2-1.24.4.dev20240606+cuda12.1.torch2.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
# If using mamba, install:
pip install causal-conv1d>=1.2.0
pip install mamba-ssm
- First, clone the repo:
git clone https://github.com/hyperion-ml/hyperion.git
- Then install hyperion in the environment
cd hyperion
pip install -e .
Known issues: If you get this error when training:
Error: mkl-service + Intel(R) MKL: MKL_THREADING_LAYER=INTEL is incompatible with libgomp.so.1 library.
Try to import numpy first or set the threading layer accordingly. Set MKL_SERVICE_FORCE_INTEL to force it.
Unistall and reinstall numpy:
pip unistall numpy
pip install numpy=={same-version-you-uninstalled}
There are recipes for several tasks in the ./egs
directory.
These recipes require some extra tools (e.g. sph2pipe), which need to be installed first:
./install_egs_requirements.sh
Most recipes do not require Kaldi, only the older ones using Kaldi x-vectors,
so we do not install it by default. If you are going to need it install it
yourself. Then make a link in ./tools
to your kaldi installation
cd tools
ln -s ${your_kaldi_path} kaldi
cd -
Finally configure the python and environment name that you intend to use to run the recipes. For that run
./prepare_egs_paths.sh
This script will ask for the path to your anaconda installation and enviromentment name. It will also detect if hyperion is already installed in the environment, otherwise it will add hyperion to your python path. This will create the file
tools/path.sh
which sets all the enviroment variables required to run the recipes. This has been tested only on JHU computer grids, so you may need to modify this file manually to adapt it to your grid.
The structure of the recipes is very similar to Kaldi, so if should be familiar for most people. Data preparation is also similar to Kaldi. Each dataset has a directory with files like
wav.scp
utt2spk
spk2utt
...
Contrary to other toolkits, the recipes do not contain a single run.sh
script
to run all the steps of the recipe.
Since some recipes have many steps and most times you don't want to run all of then
from the beginning, we have split the recipe in several run scripts.
The scripts have a number indicating the order in the sequence.
For example,
run_001_prepare_data.sh
run_002_compute_vad.sh
run_010_prepare_audios_to_train_xvector.sh
run_011_train_xvector.sh
run_030_extract_xvectors.sh
run_040_evaluate_plda_backend.sh
will evaluate the recipe with the default configuration.
The default configuration is in the file default_config.sh
We also include extra configurations, which may change the hyperparamters of the recipe. For example:
- Acoustic features
- Type of the x-vector neural netwok
- Hyper-parameters of the models
- etc.
Extra configs are in the global_conf
directory of the recipe.
Then you can run the recipe with the alternate config as:
run_001_prepare_data.sh --config-file global_conf/alternative_conf.sh
run_002_compute_vad.sh --config-file global_conf/alternative_conf.sh
run_010_prepare_audios_to_train_xvector.sh --config-file global_conf/alternative_conf.sh
run_011_train_xvector.sh --config-file global_conf/alternative_conf.sh
run_030_extract_xvectors.sh --config-file global_conf/alternative_conf.sh
run_040_evaluate_plda_backend.sh --config-file global_conf/alternative_conf.sh
Note that many alternative configus share hyperparameters with the default configs. That means that you may not need to rerun all the steps to evaluate a new configuration. It mast cases you just need to re-run the steps from the neural network training to the end.
Each recipe README.md file contains the bibtex to the works that should be cited if you use that recipe in your research
- The directory structure of the repo looks like this:
hyperion
hyperion/egs
hyperion/hyperion
hyperion/resources
hyperion/tests
hyperion/tools
- Directories:
- hyperion: python classes with utilities for speaker and language recognition
- egs: recipes for sevaral tasks: VoxCeleb, SRE18/19/20, voices, ...
- tools: contains external repos and tools like kaldi, python, cudnn, etc.
- tests: unit tests for the classes in hyperion
- resources: data files required by unittest or recipes