¡Consulte el archivo ChangeLog para tener una descripción global de las últimas modificaciones! ?
├── 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.ipynbConsulte el proyecto principal para obtener más información sobre los módulos / estructura / clases principales sin extensión.
* Consulte el proyecto de codificadores para obtener más información sobre los models/encoder
models.tts módulo.tts):| Característica | Fáctica / clase | Descripción |
|---|---|---|
| Texto a voz | tts | Realice TTS en el texto que desee con el modelo que desee |
| arroyo | tts_stream | Realice TTS en el texto que ingrese |
| Logger TTS | loggers.TTSLogger | convierte los registros logging en voz y reproducirlo |
El cuaderno text_to_speech proporciona una demostración concreta de la función tts
Arquitecturas disponibles:
Synthesizer :SV2TTS )Vocoder :Los modelos SV2TTS están ajustados a partir de modelos Tacotron2 previos a la aparición, utilizando el procedimiento de aprendizaje de transferencia parcial (ver más abajo para más detalles), lo que acelera mucho la capacitación.
| Nombre | Idioma | Conjunto de datos | Sintetizador | Vocero | Codificador | Entrenador | Pesas |
|---|---|---|---|---|---|---|---|
| Pretrenado_tacotron2 | en | Ljspeech | Tacotron2 | WaveGlow | / | Nvidia | Google Drive |
| tacotron2_siwis | fr | Siwis | Tacotron2 | WaveGlow | / | a mí | Google Drive |
| sv2tts_tacotron2_256 | fr | Siwis, Voxforge, CommonVoice | SV2TTSTacotron2 | WaveGlow | Google Drive | a mí | Google Drive |
| sv2tts_siwis | fr | Siwis, Voxforge, CommonVoice | SV2TTSTacotron2 | WaveGlow | Google Drive | a mí | Google Drive |
| sv2tts_tacotron2_256_v2 | fr | Siwis, Voxforge, CommonVoice | SV2TTSTacotron2 | WaveGlow | Google Drive | a mí | Google Drive |
| sv2tts_siwis_v2 | fr | Siwis | SV2TTSTacotron2 | WaveGlow | Google Drive | a mí | Google Drive |
¡Los modelos deben desactivarse en el pretrained_models/ directorio!
Nota importante : Los modelos NVIDIA disponibles en torch hub requieren una GPU compatible con la configuración correcta para pytorch . ¿Es la razón por la cual los dos modelos se proporcionan en el punto de control keras esperado?
Los modelos sv2tts_siwis son la versión ajustada de sv2tts_tacotron2_256 en el conjunto de datos SIWIS (un solo hablante). El ajuste de un altavoz múltiple en un conjunto de datos de un solo hablante tiende a mejorar la estabilidad y producir una voz con más entonación, en comparación con simplemente entrenar el modelo de un solo hablante.
¡Una demostración de Google Colab está disponible en este enlace!
También puede encontrar algo de audio generado en example_outputs/ , o directamente en el cuaderno Colab;)
¡Consulte esta guía de Installagion para ver las instrucciones paso a paso!
Es posible que deba instalar ffmpeg para la carga / ahorro de audio.
Google Colab tensorflow 2.x batch_size para vocoder inference SV2TTS previamente similarity loss para probar un nuevo procedimiento de entrenamiento para ajuste de un solo hablante TTS en el documento (en progreso) SV2TTS basado en un codificador entrenado con la pérdida GE2E Hay múltiples formas de habilitar la síntesis del habla multi-speaker :
speaker ID que esté incrustada por una capa Embedding aprendible. La incrustación del orador se aprende durante el entrenamiento.Speaker Encoder (SE) para incrustar el audio del altavoz de referencia. Esto a menudo se denomina zero-shot voice cloning , ya que solo requiere una muestra del altavoz (sin entrenamiento).prompt-based para controlar el discurso con indicaciones.SV2TTS Nota: En los próximos párrafos, encoder se refiere a la parte Tacotron Encoder , mientras que SE se refiere a un modelo speaker encoder (detallado a continuación).
El Speaker Encoder-based Text-To-Speech se inspira desde el papel "De la verificación del altavoz hasta el texto de texto a voz (SV2TTS)". Los autores han propuesto una extensión de la arquitectura Tacotron-2 para incluir información sobre la voz del orador.
Aquí hay una breve descripción del procedimiento propuesto:
speaker verification . Este modelo básicamente toma como entrada una muestra de audio (5-10 segundos) de un altavoz, y lo codifica en un vector d -dimensional, llamado la embedding . Esta incrustación tiene como objetivo capturar información relevante sobre la voz del orador (por ejemplo, frequencies , rythm , pitch , ...).Speaker Encoder (SE) se usa para codificar la voz del altavoz al clon.Tacotron-2 , de modo que el Decoder tiene acceso tanto al texto codificado como al altavoz. El objetivo es que el Decoder aprenderá a usar el speaker embedding para copiar su prosodia / entonación / ... para leer el texto con la voz de este altavoz.
Hay algunas limitaciones con el enfoque anterior:
Speaker Encoder tiene que separar correctamente los altavoces y codificar su voz de manera significativa para el sintetizador.Para abordar estas limitaciones, la solución propuesta es realizar un entrenamiento de 2 pasos:
CommonVoice . Esta es una de las bases de datos multilingües más grandes para audio, a costa de audios de calidad ruidosa / variable. Por lo tanto, esto no es adecuado para entrenar modelos de buena calidad, mientras que el preprocesamiento aún ayuda a obtener audios inteligibles.La parte SE debe poder diferenciar los altavoces e incrustarlos (codificarlos en un vector 1-D) de una manera significativa .
El modelo utilizado en el papel es un modelo LSTM de 3 capas con una capa de normalización entrenada con la pérdida GE2E. La principal limitación es que el entrenamiento de este modelo es realmente lento , y tomó 2 semanas en 4 GPU en la tesis de maestría de Corentinj (cf su GitHub)
Este proyecto propone una arquitectura más simple basada en Convolutional Neural Networks (CNN) , que es mucho más rápida de entrenar en comparación con las redes LSTM . Además, la distancia euclidian se ha utilizado en lugar de la métrica cosine , que ha mostrado una convergencia más rápida. Además, se propone un generador basado en caché personalizado para acelerar el procesamiento de audio. ¡Estas modificaciones permiten entrenar un modelo de precisión del 99% en 2-3 horas en una sola GPU RTX 3090 !
Para evitar entrenar un modelo SV2TTS desde cero, que sería completamente imposible en una sola GPU, se propone un nuevo procedimiento partial transfer learning .
Este procedimiento toma un modelo previamente capacitado con una arquitectura ligeramente diferente y transfiere todos los pesos comunes (como en el aprendizaje de transferencia regular). Para las capas con diferentes pesas, solo se transfiere la parte común, mientras que los pesos restantes se inicializan a ceros. Esto da como resultado un nuevo modelo con diferentes pesos para imitar el comportamiento del modelo original.
En la arquitectura SV2TTS , la incrustación del altavoz se pasa a la capa recurrente del Tacotron2 decoder . Esto da como resultado una forma de entrada diferente, haciendo que la matriz de pesas de la capa sea diferente. ¡El aprendizaje de transferencia parcial permite nitializar el modelo de tal manera que replica el comportamiento del modelo Tacotron2 original de un solo hablante!
Contactos:
[email protected]El objetivo de estos proyectos es apoyar y avanzar en la educación e investigación en tecnología de aprendizaje profundo. Para facilitar esto, todo el código asociado está disponible bajo la GNU Affero General Public License (AGPL) V3, complementado por una cláusula que prohíbe el uso comercial (cf el archivo de licencia).
Estos proyectos se lanzan como "software libre", lo que le permite usar, modificar, implementar y compartir libremente el software, siempre que se adhiera a los términos de la licencia. Si bien el software está disponible gratuitamente, no es un dominio público y conserva la protección de los derechos de autor. Las condiciones de la licencia están diseñadas para garantizar que cada usuario pueda utilizar y modificar cualquier versión del código para sus propios proyectos educativos y de investigación.
Si desea utilizar este proyecto en un esfuerzo comercial propietario, debe obtener una licencia por separado. Para obtener más detalles sobre este proceso, contácteme directamente.
Para mi protección, es importante tener en cuenta que todos los proyectos están disponibles "como es", sin garantías o condiciones de ningún tipo, ya sea explícitos o implícitos. Sin embargo, ¿dude en informar problemas sobre el proyecto del repositorio o hacer una solicitud de extracción para resolverlo?
Si encuentra que este proyecto es útil en su trabajo, agregue esta cita para darle más visibilidad. ?
@misc{yui-mhcp
author = {yui},
title = {A Deep Learning projects centralization},
year = {2021},
publisher = {GitHub},
howpublished = {url{https://github.com/yui-mhcp}}
}
El código para este proyecto es una mezcla de múltiples proyectos de GitHub, para tener una implementación Tacotron-2 totalmente modulable
dynamic decoder , que ahora se ha optimizado y actualizado para ser compatibles Keras 3 .SV2TTS proporcionada se inspira en este repositorio, con pequeñas diferencias y optimizaciones.Documentos: