Implémentation du "réseau d'attention informé de la durée pour la synthèse multimodale" (https://arxiv.org/pdf/1909.01700.pdf).
Statut : publié
Durian est une architecture d'encodeur pour la tâche de synthèse du texte à la disposition. Contrairement aux architectures antérieures comme Tacotron 2, elle n'apprend pas le mécanisme d'attention mais prend en compte les informations de durée des phonèmes. Ainsi, bien sûr, utiliser ce modèle, on devrait avoir un ensemble de données phonémis et aligné sur la durée. Cependant, vous pouvez essayer d'utiliser un modèle de durée pré-entraîné sur l'ensemble de données LJSpeech (CMU Dict Used). Des liens seront fournis ci-dessous.
Le modèle Durian se compose de deux modules: le synthétiseur du squelette et le prédicteur de durée. Voici quelques-unes des différences les plus notables par rapport au durian décrit dans le papier:
Le synthétiseur de l'épine dorsale et le modèle de durée sont formés simultanément. Pour les simplifications de simplifications de l'implémentation, le modèle de durée prédit l'alignement sur le nombre maximal de trames fixes. Vous pouvez apprendre ces sorties en tant que problème BCE, problème MSE en résumant sur l'axe des trames ou pour utiliser les deux pertes (je n'ai pas testé celui-ci), le définissez dans la config.json . Les expériences ont montré que la version Just-BCE du processus d'optimisation s'est montrée instable avec des séquences de texte plus longues, donc préfèrent utiliser MSE + BCE ou Just-MSE (cela ne vous dérange pas si vous obtenez de mauvais alignements dans Tensorboard).
Vous pouvez vérifier la synthèse de démonstration de démonstration d'ondes (a été obtenue bien avant la convergence) dans un dossier demo (voccodeur d'onde utilisé).
Tout d'abord, assurez-vous que vous avez installé tous les packages à l'aide de pip install --upgrade -r requirements.txt . Le code est testé à l'aide de pytorch==1.5.0
Clone The Repository: git clone https://github.com/ivanvovk/DurrIAN
Pour commencer la formation de la version Durian basée sur papier, exécutez python train.py -c configs/default.json . Vous pouvez spécifier pour former le modèle de base en tant que python train.py -c configs/baseline.json --baseline
Pour vous assurer que tout fonctionne bien dans votre environnement local, vous pouvez exécuter des tests unitaires dans le dossier tests par python <test_you_want_to_run.py> .
Cette implémentation a été formée en utilisant un ensemble de données LJSpeech aligné par une durée phonémisés avec une minimisation de la perte de durée BCE. Vous pouvez le trouver via ce lien.
L'inconvénient principal de ce modèle est de nécessiter un ensemble de données aligné sur la durée. Vous pouvez trouver un filelist LJSpeech analysé utilisé dans la formation de la mise en œuvre actuelle dans le dossier filelists . Afin d'utiliser vos données, assurez-vous d'avoir organisé vos filelists de la même manière que ceux fournis LJSpeech. Cependant, afin d'économiser du temps et des neurones de votre cerveau, vous pouvez essayer de former le modèle sur votre ensemble de données sans alignement de durée en utilisant le modèle de durée LJSpeech pré-entraîné à partir de mon point de contrôle de modèle (je n'ai pas essayé). Mais si vous êtes intéressé à aligner un ensemble de données personnel, suivez soigneusement la section suivante.
Dans mes expériences, j'ai aligné LJSpeech avec l'outil d'alignement forcé de Montréal. Si ici quelque chose ne sera pas clair, veuillez suivre les instructions dans les documents de Toolkit. Pour commencer, l'algorithme d'alignement a plusieurs étapes:
Organisez correctement votre ensemble de données. MFA exige que ce soit dans un seul dossier de structure {présentance_id.lab, présentation_id.wav}. Assurez-vous que tous vos textes sont au format .lab .
Téléchargez la version MFA et suivez les instructions d'installation via ce lien.
Une fois terminé avec MFA, vous avez besoin de votre dictionnaire de mots de données avec des transcriptions de phonèmes. Ici, vous avez plusieurs options:
bin/mfa_generate_dictionary /path/to/model_g2p.zip /path/to/data dict.txt . Remarquez que l'installation par défaut de MFA vous fournira automatiquement un modèle prétrainé en anglais, que vous pouvez utiliser. Une fois que vos données ont préparé vos données, le dictionnaire et le modèle G2P, vous êtes maintenant prêt à vous aligner. Exécutez la commande bin/mfa_align /path/to/data dict.txt path/to/model_g2p.zip outdir . Attendez jusqu'à ce que ce soit. Le dossier outdir contiendra une liste de mots de vocabulaire et un dossier avec des fichiers spéciaux de format .TextGrid , où les alignements Wavs sont stockés.
Maintenant, nous voulons traiter ces fichiers de grille de texte afin d'obtenir la FileList finale. Ici, vous pouvez trouver utile le package Python TextGrid . Installez-le à l'aide de pip install TextGrid . Ici un exemple comment l'utiliser:
import textgrid
tg = textgrid.TextGrid.fromFile('./outdir/data/text0.TextGrid')
Maintenant, tg est l'ensemble deux objets: le premier contient des mots alignés, le second contient des phonèmes alignés. Vous avez besoin du deuxième. Extraire des durées (dans les cadres! tg a des intervalles en secondes, ainsi convertir) pour l'ensemble de données entier en itérant sur des fichiers .TextGrid obtenus et préparez un fileliste dans le même format que ceux que j'ai fournis dans le dossier filelists .
J'ai trouvé un aperçu de plusieurs aligneurs. Peut-être que ce sera utile. Cependant, je vous recommande d'utiliser le MFA car c'est l'un des aligneurs les plus précis, sur ma meilleure connaissance.