
Pytorch Mise en œuvre de modèles de synthèse de synthèse de texte à dispection basés sur des réseaux convolutionnels:
Des échantillons audio sont disponibles sur https://r9y9.github.io/deepvoice3_pytorch/.
Notes de carnets censés être exécutés sur https://colab.research.google.com sont disponibles:
Remarque : Les modèles pré-entraînés ne sont pas compatibles pour Master. À mettre à jour bientôt.
| URL | Modèle | Données | Hyper Paramètres | Git engager | Mesures |
|---|---|---|---|---|---|
| lien | Deepvoice3 | Ljspeech | lien | ABF0A21 | 640K |
| lien | Nyanko | Ljspeech | builder=nyanko,preset=nyanko_ljspeech | BA59DC7 | 585k |
| lien | Deepvoice multi-haut-parleurs3 | Vctk | builder=deepvoice3_multispeaker,preset=deepvoice3_vctk | 0421749 | 300k + 300k |
Pour utiliser des modèles pré-formés, il est fortement recommandé que vous soyez sur le commit GIT spécifique noté ci-dessus. c'est-à-dire,
git checkout ${commit_hash}
Suivez ensuite la section "Synthétiser à partir d'un point de contrôle" dans la lecture du commit GIT spécifique. Veuillez noter que la dernière version de développement du référentiel peut ne pas fonctionner.
Vous pouvez essayer par exemple:
# pretrained model (20180505_deepvoice3_checkpoint_step000640000.pth)
# hparams (20180505_deepvoice3_ljspeech.json)
git checkout 4357976
python synthesis.py --preset=20180505_deepvoice3_ljspeech.json
20180505_deepvoice3_checkpoint_step000640000.pth
sentences.txt
output_dir
hparams.py pour plus de détails.builder spécifie le modèle que vous souhaitez utiliser. deepvoice3 , deepvoice3_multispeaker [1] et nyanko [2] sont supprimés.Veuillez installer les packages énumérés ci-dessus d'abord, puis
git clone https://github.com/r9y9/deepvoice3_pytorch && cd deepvoice3_pytorch
pip install -e ".[bin]"
Il existe de nombreux paramètres hyper à tourner dépend du modèle et des données sur lesquelles vous travaillez. Pour les ensembles de données et les modèles typiques, les paramètres qui connaîtnt bon fonctionnent ( préréglé ) sont fournis dans le référentiel. Voir le répertoire presets pour plus de détails. Noter que
preprocess.pytrain.pysynthesis.py Accepte --preset=<json> Paramètre facultatif, qui spécifie où charger les paramètres prédéfinis. Si vous allez utiliser des paramètres prédéfinis, vous devez utiliser le même --preset=<json> tout au long du prétraitement, de la formation et de l'évaluation. par exemple,
python preprocess.py --preset=presets/deepvoice3_ljspeech.json ljspeech ~/data/LJSpeech-1.0
python train.py --preset=presets/deepvoice3_ljspeech.json --data-root=./data/ljspeech
au lieu de
python preprocess.py ljspeech ~/data/LJSpeech-1.0
# warning! this may use different hyper parameters used at preprocessing stage
python train.py --preset=presets/deepvoice3_ljspeech.json --data-root=./data/ljspeech
Usage:
python preprocess.py ${dataset_name} ${dataset_path} ${out_dir} --preset=<json>
Prise en charge ${dataset_name} est:
ljspeech (en, haut-parleur unique)vctk (EN, Multi-Speaker)jsut (JP, haut-parleur)nikl_m (KO, Multi-Speaker)nikl_s (KO, haut-parleur) En supposant que vous utilisez des paramètres prédéfinis connus pour bien fonctionner pour le jeu de données LJSpeech / DeepVoice3 et que vous avez des données dans ~/data/LJSpeech-1.0 , vous pouvez alors prétraiter les données par:
python preprocess.py --preset=presets/deepvoice3_ljspeech.json ljspeech ~/data/LJSpeech-1.0/ ./data/ljspeech
Lorsque cela est fait, vous verrez des caractéristiques extraites (spectrogrammes de MEL et spectrogrammes linéaires) dans ./data/ljspeech .
La construction de votre propre ensemble de données, avec des métadonnées au format JSON (compatible avec CARPEDM20 / multi-haut-parde-tacotron-tensorflow) est actuellement prise en charge. Usage:
python preprocess.py json_meta ${list-of-JSON-metadata-paths} ${out_dir} --preset=<json>
Vous devrez peut-être modifier le fichier JSON préexistant préexistant, en particulier n_speakers . Pour le multisaker anglais, commencez par presets/deepvoice3_vctk.json .
En supposant que vous avez un ensemble de données A (haut-parleur A) et un ensemble de données B (haut-parleur B), chacun décrit dans le fichier de métadonnées JSON ./datasets/datasetA/alignment.json et ./datasets/datasetB/alignment.json , vous pouvez alors pré-prévoir les données par:
python preprocess.py json_meta "./datasets/datasetA/alignment.json,./datasets/datasetB/alignment.json" "./datasets/processed_A+B" --preset=(path to preset json file)
Certains ensembles de données, en particulier l'ensemble de données généré automatiquement, peuvent inclure un long silence et des bruits de leaders / arrière indésirables, sapant le modèle SEQ2SEQ au niveau du Char. (par exemple VCTK, bien que cela soit couvert dans VCTK_PREPROCESS)
Pour faire face au problème, gentle_web_align.py
gentle_web_align.py utilise Gentle, un outil d'alignement de texte de parole basé sur Kaldi. Cela accède à une application douce et servante, aligne des segments de son avec des transcriptions et convertit le résultat en fichiers d'étiquette de style HTK, à traiter dans preprocess.py . Gentle peut être exécuté dans Linux / Mac / Windows (via Docker).
Les résultats préliminaires montrent que bien que la méthode basée sur HTK / Festival / Merlin dans vctk_preprocess/prepare_vctk_labels.py fonctionne mieux sur VCTK, Gentle est plus stable avec des clips audio avec un bruit ambiant. (par exemple, des extraits de films)
Utilisation: (En supposant que Gentle fonctionne à localhost:8567 (par défaut lorsqu'il n'est pas spécifié))
datasetA/wavs et les transcriptions sont sur datasetA/txts ) python gentle_web_align.py -w "datasetA/wavs/*.wav" -t "datasetA/txts/*.txt" --server_addr=localhost --port=8567
datasetB/speakerN/blahblah.wav et datasetB/speakerN/blahblah.txt ) python gentle_web_align.py --nested-directories="datasetB" --server_addr=localhost --port=8567
Une fois que vous avez l'alignement des phonèmes pour chaque énoncé, vous pouvez extraire des fonctionnalités en exécutant preprocess.py
Usage:
python train.py --data-root=${data-root} --preset=<json> --hparams="parameters you may want to override"
Supposons que vous construisiez un modèle de style DeepVoice3 à l'aide de l'ensemble de données LJSpeech, vous pouvez ensuite former votre modèle par:
python train.py --preset=presets/deepvoice3_ljspeech.json --data-root=./data/ljspeech/
Les points de contrôle du modèle (.pth) et les alignements (.png) sont enregistrés dans le répertoire ./checkpoints par 10000 étapes par défaut.
Pleae Vérifiez cela à l'avance et suivez les commandes ci-dessous.
python preprocess.py nikl_s ${your_nikl_root_path} data/nikl_s --preset=presets/deepvoice3_nikls.json
python train.py --data-root=./data/nikl_s --checkpoint-dir checkpoint_nikl_s --preset=presets/deepvoice3_nikls.json
Les journaux sont jetés dans le répertoire ./log par défaut. Vous pouvez surveiller les journaux par Tensorboard:
tensorboard --logdir=log
Étant donné une liste de texte, synthesis.py synthétiser les signaux audio à partir du modèle formé. L'utilisation est:
python synthesis.py ${checkpoint_path} ${text_list.txt} ${output_dir} --preset=<json>
Exemple test_list.txt:
Generative adversarial network or variational auto-encoder.
Once upon a time there was a dear little girl who was loved by every one who looked at her, but most of all by her grandmother, and there was nothing that she would not have given to the child.
A text-to-speech synthesis system typically consists of multiple stages, such as a text analysis frontend, an acoustic model and an audio synthesis module.
VCTK et NIKL sont pris en charge pour construire un modèle multi-haut-parleurs.
Étant donné que certains échantillons audio dans VCTK ont de longs silences qui affectent les performances, il est recommandé de faire l'alignement des phonèmes et de supprimer les silences selon VCTK_PREPROCESS.
Une fois que vous avez l'alignement des phonèmes pour chaque énoncé, vous pouvez extraire les fonctionnalités de:
python preprocess.py vctk ${your_vctk_root_path} ./data/vctk
Maintenant que vous avez des données préparées, vous pouvez entraîner une version multi-haut-parleurs de DeepVoice3 par:
python train.py --data-root=./data/vctk --checkpoint-dir=checkpoints_vctk
--preset=presets/deepvoice3_vctk.json
--log-event-path=log/deepvoice3_multispeaker_vctk_preset
Si vous souhaitez réutiliser l'intégration apprise à partir d'un autre ensemble de données, vous pouvez le faire à la place par:
python train.py --data-root=./data/vctk --checkpoint-dir=checkpoints_vctk
--preset=presets/deepvoice3_vctk.json
--log-event-path=log/deepvoice3_multispeaker_vctk_preset
--load-embedding=20171213_deepvoice3_checkpoint_step000210000.pth
Cela peut améliorer un peu la vitesse d'entraînement.
Vous pourrez obtenir des échantillons audio nettoyés dans ../nikl_preprocoess. Des détails se trouvent ici.
Une fois que Nikl Corpus est prêt à l'emploi à partir du prétraitement, vous pouvez extraire les fonctionnalités de:
python preprocess.py nikl_m ${your_nikl_root_path} data/nikl_m
Maintenant que vous avez des données préparées, vous pouvez entraîner une version multi-haut-parleurs de DeepVoice3 par:
python train.py --data-root=./data/nikl_m --checkpoint-dir checkpoint_nikl_m
--preset=presets/deepvoice3_niklm.json
Si vous avez des données très limitées, vous pouvez envisager d'essayer le modèle pré-formé à virage fin. Par exemple, en utilisant le modèle pré-formé sur LJSpeEch, vous pouvez l'adapter aux données du haut-parleur VCTK p225 (30 minutes) par la commande suivante:
python train.py --data-root=./data/vctk --checkpoint-dir=checkpoints_vctk_adaptation
--preset=presets/deepvoice3_ljspeech.json
--log-event-path=log/deepvoice3_vctk_adaptation
--restore-parts="20171213_deepvoice3_checkpoint_step000210000.pth"
--speaker-id=0
D'après mon expérience, il peut obtenir une qualité de parole raisonnable très rapidement plutôt que de former le modèle à partir de zéro.
Il existe deux options importantes utilisées ci-dessus:
--restore-parts=<N> : il spécifie où charger les paramètres du modèle. Les différences par rapport à l'option --checkpoint=<N> sont 1) --restore-parts=<N> ignore tous les paramètres non valides, tandis que --checkpoint=<N> ne le fait pas. 2) --restore-parts=<N> Tell Trainer de commencer à 0-étape, tandis que --checkpoint=<N> Tell Trainer de continuer à partir de la dernière étape. --checkpoint=<N> devrait être OK si vous utilisez exactement le même modèle et continuez à vous entraîner, mais il serait utile si vous souhaitez personnaliser votre architecture de modèle et profiter du modèle pré-formé.--speaker-id=<N> : Il spécifie quel haut-parleur de données est utilisé pour la formation. Cela ne doit être spécifié que si vous utilisez un ensemble de données multi-orages. Quant à VCTK, l'ID du haut-parleur est automatiquement attribué de manière incrémentielle (0, 1, ..., 107) selon le speaker_info.txt dans l'ensemble de données. Si vous formiez un modèle multi-haut-parleurs, l'adaptation des haut-parleurs ne fonctionnera que lorsque n_speakers est identique .
Cela peut se produire en fonction des backends que vous avez pour Matplotlib. Essayez de changer le backend pour Matplotlib et voyez si cela fonctionne comme suit:
MPLBACKEND=Qt5Agg python train.py ${args...}
Dans le n ° 78, Engiecat a rapporté que la modification du backend de Matplotlib de Tkinter (TKAGG) en pyqt5 (qt5agg) a résolu le problème.
Une partie du code a été adaptée des projets suivants:
Bannière et logo créé par @jraulhernandezi (# 76)