? Tensorflowtts

Síntesis del habla de vanguardia en tiempo real para TensorFlow 2
? Tensorflowtts proporciona arquitecturas de síntesis de voz en tiempo real en tiempo real, como Tacotron-2, Melgan, Multiband-Melgan, FastSpeech, FastSpeech2 Based-On TensorFlow 2. Con TensorFlow 2, podemos acelerar la capacitación/progreso de inferencia, optimizador más al usar los modelos falsos de los modelos móvil sistemas integrados.
Este repositorio se prueba en Ubuntu 18.04 con:
Diferente versión de TensorFlow debería estar funcionando pero aún no probada. Este repositorio intentará trabajar con la última versión estable TensorFlow. Le recomendamos que instale TensorFlow 2.6.0 a la capacitación en caso de que desee usar multigpu.
$ pip install TensorFlowTTSSe incluyen ejemplos en el repositorio, pero no se envían con el marco. Por lo tanto, para ejecutar la última versión de ejemplos, debe instalar la fuente a continuación.
$ git clone https://github.com/TensorSpeech/TensorFlowTTS.git
$ cd TensorFlowTTS
$ pip install .Si desea actualizar el repositorio y sus dependencias:
$ git pull
$ pip install --upgrade .TensorFlowtts actualmente proporciona las siguientes arquitecturas:
También estamos implementando algunas técnicas para mejorar la velocidad de calidad y convergencia de los siguientes documentos:
Aquí en una muestra de audio en un conjunto válido. Tacotron-2, FastSpeech, Melgan, Melgan.stft, FastSpeech2, Multiband_melgan
Prepare un conjunto de datos en el siguiente formato:
|- [NAME_DATASET]/
| |- metadata.csv
| |- wavs/
| |- file1.wav
| |- ...
Donde metadata.csv tiene el siguiente formato: id|transcription . Este es un formato similar a LJSpeech; Puede ignorar los pasos de preprocesamiento si tiene otros conjuntos de datos de formato.
Tenga en cuenta que NAME_DATASET debe ser [ljspeech/kss/baker/libritts/synpaflex] por ejemplo.
El preprocesamiento tiene dos pasos:
Para reproducir los pasos anteriores:
tensorflow-tts-preprocess --rootdir ./[ljspeech/kss/baker/libritts/thorsten/synpaflex] --outdir ./dump_[ljspeech/kss/baker/libritts/thorsten/synpaflex] --config preprocess/[ljspeech/kss/baker/thorsten/synpaflex]_preprocess.yaml --dataset [ljspeech/kss/baker/libritts/thorsten/synpaflex]
tensorflow-tts-normalize --rootdir ./dump_[ljspeech/kss/baker/libritts/thorsten/synpaflex] --outdir ./dump_[ljspeech/kss/baker/libritts/thorsten/synpaflex] --config preprocess/[ljspeech/kss/baker/libritts/thorsten/synpaflex]_preprocess.yaml --dataset [ljspeech/kss/baker/libritts/thorsten/synpaflex]
En este momento solo admitemos ljspeech , kss , baker , libritts , thorsten y synpaflex para el argumento del conjunto de datos. En el futuro, tenemos la intención de admitir más conjuntos de datos.
Nota : Para ejecutar el preprocesamiento libritts , primero lea las instrucciones en ejemplos/fastspeech2_libritts. Necesitamos reformatearlo primero antes de ejecutar el preprocesamiento.
Nota : Para ejecutar el preprocesamiento synpaflex , primero ejecute los cuadernos de cuaderno/prepare_synpaflex.ipynb. Necesitamos reformatearlo primero antes de ejecutar el preprocesamiento.
Después del preprocesamiento, la estructura de la carpeta del proyecto debe ser:
|- [NAME_DATASET]/
| |- metadata.csv
| |- wav/
| |- file1.wav
| |- ...
|- dump_[ljspeech/kss/baker/libritts/thorsten]/
| |- train/
| |- ids/
| |- LJ001-0001-ids.npy
| |- ...
| |- raw-feats/
| |- LJ001-0001-raw-feats.npy
| |- ...
| |- raw-f0/
| |- LJ001-0001-raw-f0.npy
| |- ...
| |- raw-energies/
| |- LJ001-0001-raw-energy.npy
| |- ...
| |- norm-feats/
| |- LJ001-0001-norm-feats.npy
| |- ...
| |- wavs/
| |- LJ001-0001-wave.npy
| |- ...
| |- valid/
| |- ids/
| |- LJ001-0009-ids.npy
| |- ...
| |- raw-feats/
| |- LJ001-0009-raw-feats.npy
| |- ...
| |- raw-f0/
| |- LJ001-0001-raw-f0.npy
| |- ...
| |- raw-energies/
| |- LJ001-0001-raw-energy.npy
| |- ...
| |- norm-feats/
| |- LJ001-0009-norm-feats.npy
| |- ...
| |- wavs/
| |- LJ001-0009-wave.npy
| |- ...
| |- stats.npy
| |- stats_f0.npy
| |- stats_energy.npy
| |- train_utt_ids.npy
| |- valid_utt_ids.npy
|- examples/
| |- melgan/
| |- fastspeech/
| |- tacotron2/
| ...
stats.npy contiene la media y la ETS de los espectrogramas MEL divididos de entrenamientostats_energy.npy contiene la media y la ETS de los valores de energía de la división de entrenamientostats_f0.npy contiene la media y la ETS de los valores de F0 en la división de entrenamientotrain_utt_ids.npy / valid_utt_ids.npy contiene ID de enunciación de entrenamiento y validación respectivamente Utilizamos sufijo ( ids , raw-feats , raw-energy , raw-f0 , norm-feats y wave ) para cada tipo de entrada.
Notas importantes :
dump debe seguir la estructura anterior para poder usar el script de entrenamiento, o puede modificarlo usted mismo. Para saber cómo entrenar el modelo desde cero o ajustar con otros conjuntos de datos/lenguajes, consulte los detalles en el directorio de ejemplo.
Una implementación detallada de la clase de conjunto de datos abstractos de TensorFlow_TTS/DataSet/Abstract_Dataset. Hay algunas funciones que necesitas Overide y comprende:
Notas importantes :
Algunos ejemplos para usar este abstract_dataset son tacotron_dataset.py, fastspeech_dataset.py, melgan_dataset.py, fastspeech2_dataset.py
Una implementación detallada de base_trainer de tensorflow_tts/entrenador/base_trainer.py. Incluye Seq2SeqBasedTrainer y GanBasedTrainer heredado de BasedTrainer. Todos los entrenadores admiten tanto una sola/multi GPU. Hay algunas funciones que debes superar cuando implementan new_trainer:
Todos los modelos de este reposition se basan en GanBasedTrainer (ver Train_melgan.py, Train_melgan_stft.py, Train_Multiband_Melgan.py) y SEQ2SEQBaseDtrainer (ver Train_tacotron2.py, Train_Fastspeech.py).
Puede saber cómo inferir cada modelo en cuadernos o ver un Colab (para inglés), Colab (para coreano), Colab (para chino), Colab (para francés), Colab (para alemán). Aquí hay un código de ejemplo para la inferencia de End2END con FastSpeech2 y Melgan de la banda múltiple. Subimos todo nuestro estado previo en Huggingface Hub.
import numpy as np
import soundfile as sf
import yaml
import tensorflow as tf
from tensorflow_tts . inference import TFAutoModel
from tensorflow_tts . inference import AutoProcessor
# initialize fastspeech2 model.
fastspeech2 = TFAutoModel . from_pretrained ( "tensorspeech/tts-fastspeech2-ljspeech-en" )
# initialize mb_melgan model
mb_melgan = TFAutoModel . from_pretrained ( "tensorspeech/tts-mb_melgan-ljspeech-en" )
# inference
processor = AutoProcessor . from_pretrained ( "tensorspeech/tts-fastspeech2-ljspeech-en" )
input_ids = processor . text_to_sequence ( "Recent research at Harvard has shown meditating for as little as 8 weeks, can actually increase the grey matter in the parts of the brain responsible for emotional regulation, and learning." )
# fastspeech inference
mel_before , mel_after , duration_outputs , _ , _ = fastspeech2 . inference (
input_ids = tf . expand_dims ( tf . convert_to_tensor ( input_ids , dtype = tf . int32 ), 0 ),
speaker_ids = tf . convert_to_tensor ([ 0 ], dtype = tf . int32 ),
speed_ratios = tf . convert_to_tensor ([ 1.0 ], dtype = tf . float32 ),
f0_ratios = tf . convert_to_tensor ([ 1.0 ], dtype = tf . float32 ),
energy_ratios = tf . convert_to_tensor ([ 1.0 ], dtype = tf . float32 ),
)
# melgan inference
audio_before = mb_melgan . inference ( mel_before )[ 0 , :, 0 ]
audio_after = mb_melgan . inference ( mel_after )[ 0 , :, 0 ]
# save to file
sf . write ( './audio_before.wav' , audio_before , 22050 , "PCM_16" )
sf . write ( './audio_after.wav' , audio_after , 22050 , "PCM_16" )Todos los modelos aquí tienen licencia bajo el Apache 2.0
Queremos agradecer a Tomoki Hayashi, quien discutió mucho con nosotros sobre Melgan, Melgan Melgan, FastSpeech y Tacotron. Este marco basado en su gran proyecto paralelo de código abierto.