Implementación de la "Red de atención informada de duración para la síntesis multimodal" (https://arxiv.org/pdf/1909.01700.pdf) papel.
Estado : liberado
Durian es una arquitectura de codificador codificador para la tarea de síntesis de texto a voz. A diferencia de las arquitecturas anteriores como Tacotron 2, no aprende el mecanismo de atención, pero tiene en cuenta la información de duraciones de fonemas. Entonces, por supuesto, para usar este modelo, uno debe tener un conjunto de datos fonemizado y alineado por la duración. Sin embargo, puede intentar utilizar el modelo de duración previamente en el conjunto de datos LJSPEECH (CMU DICT utilizado). Los enlaces se proporcionarán a continuación.
El modelo de durian consta de dos módulos: sintetizador de backbone y predictor de duración. Estas son algunas de las diferencias más notables con respecto a Durian descritas en el papel:
Tanto el sintetizador y el modelo de duración están entrenados simultáneamente. Para las simplificaciones de implementación, el modelo de duración predice la alineación sobre el número máximo fijo de cuadros. Puede aprender estas salidas como problema de BCE, problema MSE sumando sobre el eje de cuadros o para usar ambas pérdidas (no he probado este), configúrelo en config.json . Los experimentos mostraron que la versión Just-BCE del proceso de optimización mostró inestable con secuencias de texto más largas, por lo que prefiere usar MSE+BCE o Just-MSE (no le importe si obtienes alineaciones malas en Tensorboard).
Puede verificar la síntesis de demostración Wavfile (se obtuvo mucho antes de la convergencia) en la carpeta demo (Vocoder de Glow Used).
En primer lugar, asegúrese de haber instalado todos los paquetes utilizando pip install --upgrade -r requirements.txt . El código se prueba usando pytorch==1.5.0
Clone the Repository: git clone https://github.com/ivanvovk/DurrIAN
Para comenzar a entrenar a la versión de Durian en papel, ejecute python train.py -c configs/default.json . Puede especificar para entrenar el modelo de línea de base como python train.py -c configs/baseline.json --baseline
Para asegurarse de que todo funcione bien en su entorno local, puede ejecutar pruebas unitarias en la carpeta tests de python <test_you_want_to_run.py> .
Esta implementación fue capacitada utilizando el conjunto de datos LJSPEech alineado con duración fonemizada con minimización de pérdida de duración de BCE. Puede encontrarlo a través de este enlace.
El principal inconveniente de este modelo requiere un conjunto de datos alineados por la duración. Puede encontrar el filelista LJSPeech analizado utilizado en la capacitación de la implementación actual en la carpeta filelists . Para usar sus datos, asegúrese de haber organizado sus filelistas de la misma manera que se proporcionaron LJSPeech. Sin embargo, para ahorrar tiempo y neuronas de sus cerebros, puede intentar entrenar el modelo en su conjunto de datos sin alinearse con la duración utilizando el modelo de duración de LJSpeech desde mi punto de control de mi modelo (no se probó). Pero si está interesado en alinear el conjunto de datos personales, siga cuidadosamente la siguiente sección.
En mis experimentos alineé LJSpeech con la herramienta de alineación forzada de Montreal. Si aquí algo no está claro, siga las instrucciones en los documentos de Toolkit. Para empezar, el algoritmo de alineación tiene varios pasos:
Organice su conjunto de datos correctamente. MFA requiere que esté en una sola carpeta de estructura {Utterance_id.lab, Utterance_id.wav}. Asegúrese de que todos sus textos sean de formato .lab .
Descargue las instrucciones de instalación de lanzamiento y siga MFA a través de este enlace.
Una vez hecho con MFA, necesita su diccionario de palabras de conjunto de datos con transcripciones de fonemas. Aquí tienes varias opciones:
bin/mfa_generate_dictionary /path/to/model_g2p.zip /path/to/data dict.txt . Observe que la instalación de MFA predeterminada le proporcionará automáticamente el modelo de petróleo en inglés, que puede usar. Una vez que tenga sus datos preparados, el diccionario y el modelo G2P, ahora está listo para alinearse. Ejecute el comando bin/mfa_align /path/to/data dict.txt path/to/model_g2p.zip outdir . Espere hasta que haya terminado. La carpeta outdir contendrá una lista de palabras fuera de vocabulario y una carpeta con archivos especiales de formato .TextGrid , donde se almacenan alineaciones Wavs.
Ahora queremos procesar estos archivos de cuadrícula de texto para obtener el Filelista final. Aquí puede encontrar útil el paquete Python TextGrid . Instálelo con pip install TextGrid . Aquí un ejemplo de cómo usarlo:
import textgrid
tg = textgrid.TextGrid.fromFile('./outdir/data/text0.TextGrid')
Ahora tg es el conjunto de dos objetos: el primero contiene palabras alineadas, el segundo contiene fonemas alineados. Necesitas el segundo. Extraer duraciones (en marcos! tg tiene intervalos en segundos, por lo tanto, se convierte) para un conjunto de datos completo iterar sobre archivos .TextGrid obtenidos y preparar una fila filista en el mismo formato que los que proporcioné en la carpeta filelists .
Encontré una descripción general de varios alineadores. Tal vez sea útil. Sin embargo, le recomiendo que use MFA, ya que es uno de los alineadores más precisos, para mi mejor conocimiento.