Vérifiez le fichier ChangeLog pour avoir un aperçu global des dernières modifications! ?
├── custom_architectures
│ ├── tacotron2_arch.py : Tacotron-2 synthesizer architecture
│ └── waveglow_arch.py : WaveGlow vocoder architecture
├── custom_layers
├── custom_train_objects
│ ├── losses
│ │ └── tacotron_loss.py : custom Tacotron2 loss
├── example_outputs : some pre-computed audios (cf the ` text_to_speech ` notebook)
├── loggers
├── models
│ ├── encoder : the ` AudioEncoder ` is used as speaker encoder for the SV2TTS model *
│ ├── tts
│ │ ├── sv2tts_tacotron2.py : SV2TTS main class
│ │ ├── tacotron2.py : Tacotron2 main class
│ │ ├── vocoder.py : main functions for complete inference
│ │ └── waveglow.py : WaveGlow main class (both pytorch and tensorflow)
├── pretrained_models
├── unitests
├── utils
├── example_fine_tuning.ipynb
├── example_sv2tts.ipynb
├── example_tacotron2.ipynb
├── example_waveglow.ipynb
└── text_to_speech.ipynbVérifiez le projet principal pour plus d'informations sur les modules / structures / classes principales incomparables.
* Vérifiez le projet Encoders pour plus d'informations sur le module models/encoder
models.tts ):| Fonctionnalité | Fusion / classe | Description |
|---|---|---|
| Texte vocal | tts | Effectuez des tts sur le texte que vous voulez avec le modèle que vous souhaitez |
| flux | tts_stream | Effectuez des tts sur le texte que vous entrez |
| Bûcher de TTS | loggers.TTSLogger | convertit les journaux logging en voix et jouent |
Le cahier text_to_speech fournit une démonstration concrète de la fonction tts
Architectures disponibles:
Synthesizer :SV2TTS )Vocoder :Les modèles SV2TTS sont affinés à partir de modèles Tacotron2 pré-entraînés, en utilisant la procédure d'apprentissage partiel (voir ci-dessous pour plus de détails), ce qui accélère beaucoup la formation.
| Nom | Langue | Ensemble de données | Synthétiseur | Vocodeur | Encodeur de haut-parleur | Entraîneur | Poids |
|---|---|---|---|---|---|---|---|
| Pretrained_tacotron2 | en | Ljspeech | Tacotron2 | WaveGlow | / / | Nvidia | Google Drive |
| tacotron2_siwis | fr | Siwis | Tacotron2 | WaveGlow | / / | moi | Google Drive |
| sv2tts_tacotron2_256 | fr | Siwis, Voxforge, Commonvoice | SV2TTSTacotron2 | WaveGlow | Google Drive | moi | Google Drive |
| sv2tts_siwis | fr | Siwis, Voxforge, Commonvoice | SV2TTSTacotron2 | WaveGlow | Google Drive | moi | Google Drive |
| sv2tts_tacotron2_256_v2 | fr | Siwis, Voxforge, Commonvoice | SV2TTSTacotron2 | WaveGlow | Google Drive | moi | Google Drive |
| sv2tts_siwis_v2 | fr | Siwis | SV2TTSTacotron2 | WaveGlow | Google Drive | moi | Google Drive |
Les modèles doivent être décompressés dans le répertoire pretrained_models/ !
Remarque importante : Les modèles NVIDIA disponibles sur torch hub nécessitent un GPU compatible avec la configuration correcte pour pytorch . C'est la raison pour laquelle les deux modèles sont fournis dans le point de contrôle keras attendu?
Les modèles sv2tts_siwis sont une version affinée de sv2tts_tacotron2_256 sur l'ensemble de données SIWIS (un seul speaker). Le réglage fin d'un multi-parcours sur un ensemble de données mono-haut-parleur a tendance à améliorer la stabilité et à produire une voix avec plus d'intonation, par rapport à la simple formation du modèle à haut-parleur.
Une démo Google Colab est disponible sur ce lien!
Vous pouvez également trouver un audio généré dans example_outputs/ , ou directement dans le cahier Colab;)
Consultez ce guide d'installations pour les instructions étape par étape!
Vous devrez peut-être installer ffmpeg pour le chargement / enregistrement de l'audio.
Google Colab tensorflow 2.x batch_size pour vocoder inference SV2TTS pré-entraînés similarity loss pour tester une nouvelle procédure de formation pour le réglage des amende TTS sur un document (en cours) SV2TTS basé sur un codeur formé avec la perte GE2E Il existe plusieurs façons d'activer la synthèse de la parole multi-speaker :
speaker ID qui est intégré par une couche Embedding apprenable. L'intégration de l'orateur est ensuite apprise pendant la formation.Speaker Encoder (SE) pour intégrer l'audio à partir du haut-parleur de référence. Ceci est souvent appelé zero-shot voice cloning , car il ne nécessite qu'un échantillon de l'orateur (sans formation).prompt-based a été proposée pour contrôler le discours avec des invites.SV2TTS Remarque: Dans les paragraphes suivants, encoder fait référence à la partie Tacotron Encoder , tandis que SE fait référence à un modèle speaker encoder (détaillé ci-dessous).
Le Speaker Encoder-based Text-To-Speech est inspiré de l'article "de la vérification du haut-parleur vers le texte-parole (SV2TTS)". Les auteurs ont proposé une extension de l'architecture Tacotron-2 pour inclure des informations sur la voix de l'orateur.
Voici un bref aperçu de la procédure proposée:
speaker verification . Ce modèle prend essentiellement comme entrée un échantillon audio (5-10 sec) à partir d'un haut-parleur et le code sur un vecteur D -dimensionnel, nommé l' embedding . Cette intégration vise à capturer des informations pertinentes sur la voix de l'orateur (par exemple, frequencies , rythm , pitch , ...).Speaker Encoder (SE) est ensuite utilisé pour coder la voix du haut-parleur à clone.Tacotron-2 , de sorte que le Decoder a accès à la fois au texte codé et à l'intégration du haut-parleur. L'objectif est que le Decoder apprendra à utiliser le speaker embedding pour copier son prosodie / intonation / ... pour lire le texte avec la voix de cet haut-parleur.
Il y a quelques limites avec l'approche ci-dessus:
Speaker Encoder doit séparer correctement les haut-parleurs et coder leur voix de manière significative pour le synthétiseur.Pour lutter contre ces limitations, la solution proposée consiste à effectuer une formation en 2 étapes:
CommonVoice . Il s'agit de l'une des plus grandes bases de données multilingues pour l'audio, au prix des audios bruyants / de qualité variable. Cela ne convient donc pas à former des modèles de bonne qualité, tandis que le prétraitement aide toujours à obtenir des audios intelligibles.La partie SE doit être capable de différencier les haut-parleurs et de les intégrer (encoder dans un vecteur 1-D) de manière significative .
Le modèle utilisé dans l'article est un modèle LSTM à 3 couches avec une couche de normalisation formée avec la perte GE2E. La principale limitation est que la formation de ce modèle est vraiment lente et a pris 2 semaines sur 4 GPU dans la thèse de maître corentin (cf son github)
Ce projet propose une architecture plus simple basée sur Convolutional Neural Networks (CNN) , qui est beaucoup plus rapide à former par rapport aux réseaux LSTM . De plus, la distance euclidian a été utilisée plutôt que la métrique cosine , qui a montré une convergence plus rapide. De plus, un générateur basé sur un cache personnalisé est proposé pour accélérer le traitement audio. Ces modifications ont permis de former un modèle de précision de 99% dans les 2 à 3 heures sur un seul GPU RTX 3090 !
Afin d'éviter de former un modèle SV2TTS à partir de zéro, ce qui serait complètement impossible sur un seul GPU, une nouvelle procédure partial transfer learning est proposée.
Cette procédure prend un modèle pré-formé avec une architecture légèrement différente et transfère tous les poids communs (comme dans l'apprentissage régulier du transfert). Pour les couches avec des poids différents, seule la partie commune est transférée, tandis que les poids restants sont initialisés en zéros. Cela entraîne un nouveau modèle avec différents poids pour imiter le comportement du modèle d'origine.
Dans l'architecture SV2TTS , le haut-parleur incorpore est transmis à la couche récurrente du Tacotron2 decoder . Il en résulte une forme d'entrée différente, ce qui rend la matrice de poids de couche différente. L'apprentissage par transfert partiel permet de nitialiser le modèle de telle sorte qu'il reproduit le comportement du modèle Tacotron2 monocoser d'origine!
Contacts:
[email protected]L'objectif de ces projets est de soutenir et de faire progresser l'éducation et la recherche dans les technologies d'apprentissage en profondeur. Pour faciliter cela, tout le code associé est mis à disposition dans le cadre de la licence générale GNU Affero V3 (AGPL), complétée par une clause qui interdit l'utilisation commerciale (cf le fichier de licence).
Ces projets sont publiés sous forme de "logiciel gratuit", vous permettant d'utiliser librement, de modifier, de déployer et de partager le logiciel, à condition d'adhérer aux termes de la licence. Bien que le logiciel soit disponible gratuitement, il n'est pas du domaine public et conserve la protection des droits d'auteur. Les conditions de licence sont conçues pour garantir que chaque utilisateur peut utiliser et modifier toute version du code pour ses propres projets éducatifs et de recherche.
Si vous souhaitez utiliser ce projet dans une entreprise commerciale propriétaire, vous devez obtenir une licence distincte. Pour plus de détails sur ce processus, veuillez me contacter directement.
Pour ma protection, il est important de noter que tous les projets sont disponibles sur une base "en ce qui concerne", sans aucune garantie ou conditions d'aucune sorte, explicite ou implicite. Cependant, n'hésitez pas à signaler les problèmes sur le projet du référentiel ou à faire une demande de traction pour le résoudre?
Si vous trouvez ce projet utile dans votre travail, veuillez ajouter cette citation pour lui donner plus de visibilité! ?
@misc{yui-mhcp
author = {yui},
title = {A Deep Learning projects centralization},
year = {2021},
publisher = {GitHub},
howpublished = {url{https://github.com/yui-mhcp}}
}
Le code de ce projet est un mélange de plusieurs projets GitHub, pour avoir une implémentation Tacotron-2 entièrement modable
dynamic decoder , qui a maintenant été optimisée et mise à jour pour être compatible Keras 3 .SV2TTS fournie est inspirée de ce référentiel, avec de petites différences et des optimisations.Documents: