Ceci est la mise en œuvre du code officiel? Matcha-TTS [ICASSP 2024].
Nous proposons? Matcha-TTS, une nouvelle approche de TTS neuronal non autorégressive, qui utilise l'appariement du débit conditionnel (similaire aux flux rectifiés) pour accélérer la synthèse de la parole basée sur les ODE. Notre méthode:
Consultez notre page de démonstration et lisez notre papier ICASSP 2024 pour plus de détails.
Les modèles pré-formés seront automatiquement téléchargés avec l'interface CLI ou Gradio.
Vous pouvez également essayer? Matcha-tts dans votre navigateur sur HuggingFace? espaces.
conda create -n matcha-tts python=3.10 -y
conda activate matcha-tts
pip install matcha-ttsde la source
pip install git+https://github.com/shivammehta25/Matcha-TTS.git
cd Matcha-TTS
pip install -e . # This will download the required models
matcha-tts --text " <INPUT TEXT> "ou
matcha-tts-app ou ouvrir synthesis.ipynb sur le cahier Jupyter
matcha-tts --text " <INPUT TEXT> "matcha-tts --file < PATH TO FILE >matcha-tts --file < PATH TO FILE > --batchedArguments supplémentaires
matcha-tts --text " <INPUT TEXT> " --speaking_rate 1.0matcha-tts --text " <INPUT TEXT> " --temperature 0.667matcha-tts --text " <INPUT TEXT> " --steps 10Supposons que nous nous entraînons avec le discours LJ
Téléchargez l'ensemble de données à partir d'ici, extrayez-les sur data/LJSpeech-1.1 et préparez les listes de fichiers pour pointer des données extraites comme pour l'élément 5 dans la configuration du repo Nvidia Tacotron 2.
Clone et entrez le référentiel Matcha-TTS
git clone https://github.com/shivammehta25/Matcha-TTS.git
cd Matcha-TTSpip install -e .configs/data/ljspeech.yaml et modifiez train_filelist_path : data/filelists/ljs_audio_text_train_filelist.txt
valid_filelist_path : data/filelists/ljs_audio_text_val_filelist.txtmatcha-data-stats -i ljspeech.yaml
# Output:
#{ ' mel_mean ' : -5.53662231756592, ' mel_std ' : 2.1161014277038574} Mettez à jour ces valeurs dans configs/data/ljspeech.yaml sous la clé data_statistics .
data_statistics: # Computed for ljspeech dataset
mel_mean: -5.536622
mel_std: 2.116101aux chemins de votre train et valites de validation.
make train-ljspeechou
python matcha/train.py experiment=ljspeechpython matcha/train.py experiment=ljspeech_min_memorypython matcha/train.py experiment=ljspeech trainer.devices=[0,1]matcha-tts --text " <INPUT TEXT> " --checkpoint_path < PATH TO CHECKPOINT > Un merci spécial à @ mush42 pour la mise en œuvre du support d'exportation et d'inférence ONNX.
Il est possible d'exporter des points de contrôle Matcha vers ONNX et d'exécuter l'inférence sur le graphique ONNX exporté.
Pour exporter un point de contrôle vers ONNX, installez d'abord ONNX avec
pip install onnxEnsuite, exécutez ce qui suit:
python3 -m matcha.onnx.export matcha.ckpt model.onnx --n-timesteps 5Facultativement, l'exportateur ONNX accepte les arguments Vocoder-Name et Vocoder-CheckPoint . Cela vous permet d'intégrer le vocodeur dans le graphique exporté et de générer des formes d'onde en une seule exécution (similaire aux systèmes TTS de bout en bout).
Notez que n_timesteps est traité comme un hyper-paramètre plutôt que comme une entrée de modèle. Cela signifie que vous devez le spécifier pendant l'exportation (pas pendant l'inférence). S'il n'est pas spécifié, n_timesteps est défini sur 5 .
IMPORTANT : Pour l'instant, Torch> = 2.1.0 est nécessaire pour l'exportation, car l'opérateur scaled_product_attention n'est pas exportable dans les versions plus anciennes. Jusqu'à la sortie de la version finale, ceux qui souhaitent exporter leurs modèles doivent installer Torch> = 2.1.0 manuellement en pré-libération.
Pour exécuter l'inférence sur le modèle exporté, installez d'abord onnxruntime en utilisant
pip install onnxruntime
pip install onnxruntime-gpu # for GPU inferenceUtilisez ensuite ce qui suit:
python3 -m matcha.onnx.infer model.onnx --text " hey " --output-dir ./outputsVous pouvez également contrôler les paramètres de synthèse:
python3 -m matcha.onnx.infer model.onnx --text " hey " --output-dir ./outputs --temperature 0.4 --speaking_rate 0.9 --spk 0 Pour exécuter l'inférence sur GPU , assurez-vous d'installer le package onnxruntime-gpu , puis passez --gpu à la commande d'inférence:
python3 -m matcha.onnx.infer model.onnx --text " hey " --output-dir ./outputs --gpu Si vous avez exporté uniquement le matcha vers ONNX, cela écrira le spectrogramme MEL en tant que graphiques et des tableaux numpy vers le répertoire de sortie. Si vous avez intégré le vocodeur dans le graphique exporté, cela écrira des fichiers audio .wav vers le répertoire de sortie.
Si vous avez exporté uniquement Matcha vers ONNX et que vous souhaitez exécuter un pipeline TTS complet, vous pouvez passer un chemin vers un modèle Vocoder au format ONNX :
python3 -m matcha.onnx.infer model.onnx --text " hey " --output-dir ./outputs --vocoder hifigan.small.onnx Cela écrira des fichiers audio .wav dans le répertoire de sortie.
Si l'ensemble de données est structuré comme
data/
└── LJSpeech-1.1
├── metadata.csv
├── README
├── test.txt
├── train.txt
├── val.txt
└── wavsEnsuite, vous pouvez extraire les alignements de niveau de phonème à partir d'un modèle Matcha-TTS formé en utilisant:
python matcha/utils/get_durations_from_trained_model.py -i dataset_yaml -c < checkpoint >Exemple:
python matcha/utils/get_durations_from_trained_model.py -i ljspeech.yaml -c matcha_ljspeech.ckptou simplement:
matcha-tts-get-durations -i ljspeech.yaml -c matcha_ljspeech.ckpt Dans le jeu de données, activez la durée de charge. Exemple: ljspeech.yaml
load_durations: True
ou voir un exemplaires dans les configurations / expérimentation / ljspeech_from_durations.yaml
Si vous utilisez notre code ou si vous trouvez ce travail utile, veuillez citer notre article:
@inproceedings{mehta2024matcha,
title={Matcha-{TTS}: A fast {TTS} architecture with conditional flow matching},
author={Mehta, Shivam and Tu, Ruibo and Beskow, Jonas and Sz{'e}kely, {'E}va and Henter, Gustav Eje},
booktitle={Proc. ICASSP},
year={2024}
}
Puisque ce code utilise Lightning-Hydra-Template, vous avez tous les pouvoirs qui l'accompagnent.
Autre code source que nous aimerions reconnaître: