? Tensorflowtts

Síntese de fala em tempo real de ponta para Tensorflow 2
? TensorFlowTTS provides real-time state-of-the-art speech synthesis architectures such as Tacotron-2, Melgan, Multiband-Melgan, FastSpeech, FastSpeech2 based-on TensorFlow 2. With Tensorflow 2, we can speed-up training/inference progress, optimizer further by using fake-quantize aware and pruning, make TTS models can be run faster than real-time and be able to deploy on mobile devices or embedded systems.
Este repositório é testado no Ubuntu 18.04 com:
A versão diferente do TensorFlow deve estar funcionando, mas ainda não testada. Este repositório tentará trabalhar com a mais recente versão estável tensorflow. Recomendamos que você instale o TensorFlow 2.6.0 para o treinamento, caso deseje usar o Multigpu.
$ pip install TensorFlowTTSOs exemplos estão incluídos no repositório, mas não são enviados com a estrutura. Portanto, para executar a versão mais recente dos exemplos, você precisa instalar a fonte abaixo.
$ git clone https://github.com/TensorSpeech/TensorFlowTTS.git
$ cd TensorFlowTTS
$ pip install .Se você deseja atualizar o repositório e suas dependências:
$ git pull
$ pip install --upgrade .Atualmente, o TensorFlowtts fornece as seguintes arquiteturas:
Também estamos implementando algumas técnicas para melhorar a velocidade de qualidade e convergência dos documentos a seguir:
Aqui em uma amostras de áudio no conjunto válido. Tacotron-2, FastSpeech, Melgan, Melgan.stft, FastSpeech2, multiband_melgan
Prepare um conjunto de dados no seguinte formato:
|- [NAME_DATASET]/
| |- metadata.csv
| |- wavs/
| |- file1.wav
| |- ...
Onde metadata.csv possui o seguinte formato: id|transcription . Este é um formato de LJSpeech; Você pode ignorar as etapas de pré -processamento se tiver outros conjuntos de dados de formato.
Observe que NAME_DATASET deve ser [ljspeech/kss/baker/libritts/synpaflex] por exemplo.
O pré -processamento tem duas etapas:
Para reproduzir as etapas acima:
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]
No momento, apoiamos apenas ljspeech , kss , baker , libritts , thorsten e synpaflex para o argumento do conjunto de dados. No futuro, pretendemos suportar mais conjuntos de dados.
NOTA : Para executar o pré -processamento libritts , leia primeiro as instruções em exemplos/fastspeech2_libritt. Precisamos reformatá -lo primeiro antes de executar o pré -processamento.
NOTA : Para executar o pré -processamento synpaflex , primeiro execute o notebooks notebooks/prepare_synpaflex.ipynb. Precisamos reformatá -lo primeiro antes de executar o pré -processamento.
Após o pré -processamento, a estrutura da pasta do projeto deve 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 contém a média e a DST dos espectrogramas Mel Split de Treinamentostats_energy.npy contém a média e o padrão dos valores de energia da divisão de treinamentostats_f0.npy contém a média e a DST dos valores F0 na divisão de treinamentotrain_utt_ids.npy / valid_utt_ids.npy contém IDs de treinamento e validação, respectivamente Utilizamos sufixo ( ids , raw-feats , raw-energy , raw-f0 , norm-feats e wave ) para cada tipo de entrada.
Notas importantes :
dump deve seguir a estrutura acima para poder usar o script de treinamento ou você pode modificá -lo sozinho? Para saber como treinar o modelo do zero ou ajustar com outros conjuntos de dados/idiomas, consulte os detalhes no diretório de exemplo.
Uma implementação detalhada da classe abstrata do conjunto de dados de tensorflow_tts/dataset/abstract_dataset. Existem algumas funções que você precisa sobrecarregar e entender:
Notas importantes :
Alguns exemplos para usar este abstrato_dataset são tacotron_dataset.py, fastspeech_dataset.py, melgan_dataset.py, fastspeech2_dataset.py
Uma implementação detalhada de base_trainer de tensorflow_tts/treinador/base_trainener.py. Inclui seq2SeqBasedTrainer e Herit de baseado em GanBasedTrain do BasedTrainer. Todos os treinadores suportam a GPU único/multi. Existem algumas funções que você deve exagerar ao implementar new_trainer:
Todos os modelos neste repositório são treinados com base no ganbasedtrainer (consulte Train_melgan.py, Train_melgan_stft.py, Train_multiband_melgan.py) e seq2seqbasedtrainer (consulte Train_tacotron2.py, Train_fastspeech.py).
Você pode saber como inferência cada modelo em notebooks ou ver um colab (para inglês), colab (para coreano), colab (para chinês), colab (para francês), colab (para alemão). Aqui está um código de exemplo para a inferência END2END com FastSpeech2 e Melgan de várias bandas. Carregamos todo o nosso hub de hubs huggingface.
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 os modelos aqui estão licenciados no Apache 2.0
Queremos agradecer a Tomoki Hayashi, que discutiu conosco muito sobre Melgan, Melgan de várias bandas, FastSpeech e Tacotron. Essa estrutura baseou-se em seu grande projeto de paralelo owavegan.