Dans notre article, nous proposons Daft-Exprt, un modèle acoustique multi-haut-parleurs faisant progresser l'état de l'art pour le transfert de prosodie transversale sur n'importe quel texte. C'est l'une des tâches les plus difficiles et rarement directement abordées, dans la synthèse de la parole, en particulier pour les données hautement expressives. Daft-Exprt utilise des couches de conditionnement de film pour injecter stratégiquement différentes informations prosodiques dans toutes les parties de l'architecture. Le modèle code explicitement des fonctionnalités de prosodie de bas niveau traditionnelles telles que la hauteur, le volume et la durée, mais aussi des informations prosodiques de niveau supérieur qui aident à générer des voix convaincantes dans des styles hautement expressifs. L'identité des conférenciers et les informations prosodiques sont démêlées par une stratégie de formation contradictoire qui permet un transfert précis de la prosodie entre les orateurs. Les résultats expérimentaux montrent que DAFT-EXPR surpasse considérablement de fortes lignes de base sur des tâches de transfert de prosodie inter-texte en texte, tout en donnant un naturel comparable aux modèles expressifs de pointe. De plus, les résultats indiquent que le modèle rejette les informations d'identité des orateurs de la représentation de la prosodie et génèrent systématiquement la parole avec la voix souhaitée. Visitez notre page de démonstration pour des échantillons audio liés aux expériences papier.
Divulgation complète : le modèle fourni dans ce référentiel n'est pas le même que dans l'évaluation du papier. Le modèle du document a été formé avec des données propriétaires qui nous empêchent de les libérer publiquement.
Nous pré-entraînons Daft-Exprt sur une combinaison de l'ensemble de données de la parole LJ et de l'ensemble de données de discours émotionnel (ESD) de Zhou et al.
Visitez les versions de ce référentiel pour télécharger le modèle pré-formé et écouter des exemples de transfert de prosodie en utilisant ce même modèle.
Exigences:
Nous vous recommandons d'utiliser Conda pour Python Environment Management, par exemple télécharger et installer MiniConda.
Créez votre environnement Python et installez les dépendances à l'aide du makefile:
conda create -n daft_exprt python=3.8 -yconda activate daft_exprtcd environmentmakeToutes les dépendances Linux / Conda / Pip seront installées par le MakeFile, et le référentiel sera installé en tant que package PIP en mode modifiable.
Exigences:
Construisez l'image Docker à l'aide du Dockerfile associé:
docker build -f environment/Dockerfile -t daft_exprt . Ce guide de démarrage rapide illustrera comment utiliser les différents scripts de ce référentiel à:
Tous les scripts sont situés dans le répertoire des scripts.
Le code source DAFT-EXPRT est situé dans le répertoire DAFT_EXPRT.
Les paramètres de configuration utilisés dans les scripts sont tous instanciés dans hparams.py.
À titre d'exemple de démarrage rapide, nous envisageons d'utiliser l'ensemble de données vocaux LJ 22KHz et l'ensemble de données de discours émotionnel (ESD) de 16 kHz de Zhou et al.
Cela combine un total de 11 haut-parleurs. Tous les ensembles de données de haut-parleurs doivent être dans le même répertoire racine. Par exemple:
/data_dir
LJ_Speech
ESD
spk_1
...
spk_N
Dans cet exemple, nous utilisons l'image Docker construite dans la section précédente:
docker run -it --gpus all -v /path/to/data_dir:/workdir/data_dir -v path/to/repo_dir:/workdir/repo_dir IMAGE_ID
Le code source s'attend à la structure de l'arborescence spécifique pour chaque ensemble de données de haut-parleur:
/speaker_dir
metadata.csv
/wavs
wav_file_name_1.wav
...
wav_file_name_N.wav
Metadata.csv doit être formaté comme suit:
wav_file_name_1|text_1
...
wav_file_name_N|text_N
Étant donné que chaque ensemble de données a sa propre nomenclature, ce projet ne fournit pas de script universel prêt à l'emploi.
Cependant, le script format_dataset.py propose déjà le code au format LJ et ESD:
python format_dataset.py
--data_set_dir /workdir/data_dir/LJ_Speech
LJ
python format_dataset.py
--data_set_dir /workdir/data_dir/ESD
ESD
--language english
Dans cette section, le code sera:
Pour prétraiter toutes les données formatées disponibles (c'est-à-dire LJ et ESD dans cet exemple):
python training.py
--experiment_name EXPERIMENT_NAME
--data_set_dir /workdir/data_dir
pre_process
Cela pré-traite les données à l'aide des hyper-paramètres par défaut qui sont définis pour les audios 22KHz.
Toutes les sorties liées à l'expérience seront stockées dans /workdir/repo_dir/trainings/EXPERIMENT_NAME .
Vous pouvez également cibler des haut-parleurs spécifiques pour le prétraitement des données. Par exemple, pour considérer uniquement les haut-parleurs ESD:
python training.py
--experiment_name EXPERIMENT_NAME
--speakers ESD/spk_1 ... ESD/spk_N
--data_set_dir /workdir/data_dir
pre_process
La fonction de pré-processus prend plusieurs arguments:
--features_dir : chemin absolu où les données prétraitées seront stockées. Par défaut à /workdir/repo_dir/datasets--proportion_validation : proportion d'exemples qui seront dans l'ensemble de validation. Par défaut à 0.1 % par haut-parleur.--nb_jobs : nombre de cœurs à utiliser pour le multi-traitement python. S'il est réglé sur max , tous les noyaux CPU sont utilisés. Par défaut à 6 . Notez que si c'est la première fois que vous pré-triez les données, cette étape prendra plusieurs heures.
Vous pouvez réduire le temps de calcul en augmentant le paramètre --nb_jobs .
Une fois le prétraitement terminé, lancez une formation. Pour s'entraîner sur toutes les données prétraitées:
python training.py
--experiment_name EXPERIMENT_NAME
--data_set_dir /workdir/data_dir
train
Ou si vous ciblez des haut-parleurs spécifiques pendant le prétraitement (par exemple, les haut-parleurs ESD):
python training.py
--experiment_name EXPERIMENT_NAME
--speakers ESD/spk_1 ... ESD/spk_N
--data_set_dir /workdir/data_dir
train
Toutes les sorties liées à l'expérience seront stockées dans /workdir/repo_dir/trainings/EXPERIMENT_NAME .
La fonction de train prend plusieurs arguments:
--checkpoint : chemin absolu d'un point de contrôle DAFT-Exprt. Par défaut ""--no_multiprocessing_distributed : Désactiver la formation distribuée multi-traitement pytorch. Par défaut à False--world_size : Nombre de nœuds pour la formation distribuée. Par défaut à 1 .--rank : Rang de nœud pour la formation distribuée. Par défaut à 0 .--master : URL utilisé pour mettre en place une formation distribuée. Par défaut à tcp://localhost:54321 . Ces valeurs par défaut lanceront une nouvelle formation à partir de l'itération 0, en utilisant tous les GPU disponibles sur la machine.
Le code suppose que seulement 1 GPU est disponible sur la machine.
La taille par défaut du lot et l'accumulation de gradient Les hyper-paramètres sont définis sur les valeurs pour reproduire la taille du lot de 48 à partir du papier.
Le code prend également en charge la journalisation de Tensorboard. Pour afficher les sorties de journalisation:
tensorboard --logdir_spec=EXPERIMENT_NAME:/workdir/repo_dir/trainings/EXPERIMENT_NAME/logs
Une fois la formation terminée, vous pouvez créer un ensemble de données pour le réglage de la fin de vocoder:
python training.py
--experiment_name EXPERIMENT_NAME
--data_set_dir /workdir/data_dir
fine_tune
--checkpoint CHECKPOINT_PATH
Ou si vous ciblez des conférenciers spécifiques pendant le prétraitement et la formation (par exemple, les conférenciers ESD):
python training.py
--experiment_name EXPERIMENT_NAME
--speakers ESD/spk_1 ... ESD/spk_N
--data_set_dir /workdir/data_dir
fine_tune
--checkpoint CHECKPOINT_PATH
L'ensemble de données de réglage fin sera stocké dans /workdir/repo_dir/trainings/EXPERIMENT_NAME/fine_tuning_dataset .
Pour un exemple sur la façon d'utiliser daft-exprt pour la synthèse TTS, exécutez le script synthétisé.py.
python synthesize.py
--output_dir OUTPUT_DIR
--checkpoint CHECKPOINT
Les phrases par défaut et les énoncés de référence sont utilisés dans le script.
Le script offre également la possibilité de:
--batch_size : Traitez un lot de phrases en parallèle--real_time_factor : estimer les performances du facteur en temps réel DAFT-Exprt étant donné la taille du lot choisie--control : effectuer un contrôle local de la prosodie @article{Zaidi2021,
abstract = {},
journal = {arXiv},
arxivId = {2108.02271},
author = {Za{"{i}}di, Julian and Seut{'{e}}, Hugo and van Niekerk, Benjamin and Carbonneau, Marc-Andr{'{e}}},
eprint = {2108.02271},
title = {{Daft-Exprt: Robust Prosody Transfer Across Speakers for Expressive Speech Synthesis}},
url = {https://arxiv.org/pdf/2108.02271.pdf},
year = {2021}
}
Toute contribution à ce référentiel est plus que bienvenue!
Si vous avez des commentaires, veuillez l'envoyer à [email protected].
© [2021] Ubisoft Entertainment. Tous droits réservés