? TensorFlowtts

Современный синтез речи в реальном времени для 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 система
Этот репозиторий проверяется на Ubuntu 18.04 с:
Различная версия TensorFlow должна работать, но еще не протестирована. Этот репо старается работать с последней стабильной версией Tensorflow. Мы рекомендуем вам установить TensorFlow 2.6.0 для обучения на случай, если вы хотите использовать мультигпью.
$ pip install TensorFlowTTSПримеры включены в репозиторий, но не поставляются с рамками. Поэтому, чтобы запустить последнюю версию примеров, вам необходимо установить источник ниже.
$ git clone https://github.com/TensorSpeech/TensorFlowTTS.git
$ cd TensorFlowTTS
$ pip install .Если вы хотите обновить репозиторий и его зависимости:
$ git pull
$ pip install --upgrade .TensorFlowtts в настоящее время предоставляет следующие архитектуры:
Мы также реализуем некоторые методы для улучшения качества и скорости сходимости из следующих документов:
Здесь, в образцах аудио на действительном наборе. Tacotron-2, Fastspeech, Melgan, Melgan.stft, Fastspeech2, Multiband_melgan
Подготовьте набор данных в следующем формате:
|- [NAME_DATASET]/
| |- metadata.csv
| |- wavs/
| |- file1.wav
| |- ...
Где metadata.csv имеет следующий формат: id|transcription . Это формат, похожий на LJSPEECH; Вы можете игнорировать шаги предварительной обработки, если у вас есть другие наборы данных формата.
Обратите внимание, что NAME_DATASET должно быть [ljspeech/kss/baker/libritts/synpaflex] .
Предварительная обработка имеет два шага:
Чтобы воспроизвести шаги выше:
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]
Прямо сейчас мы поддерживаем только ljspeech , kss , baker , libritts , thorsten и synpaflex для аргумента набора данных. В будущем мы намерены поддерживать больше наборов данных.
ПРИМЕЧАНИЕ libritts Нам нужно переформатировать его сначала перед предварительной обработкой.
ПРИМЕЧАНИЕ synpaflex Нам нужно переформатировать его сначала перед предварительной обработкой.
После предварительной обработки структура папки проекта должна быть:
|- [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 содержит среднее значение и STD из тренировочных спектрограмм MELstats_energy.npy содержит среднее значение и STD значений энергии от разделения обученияstats_f0.npy содержит среднее значение и STD значений F0 в тренировочном разделенииtrain_utt_ids.npy / valid_utt_ids.npy содержит идентификаторы высказываний и проверки обучения и проверки соответственно Мы используем суффикс ( ids , raw-feats , raw-energy , raw-f0 , norm-feats и wave ) для каждого входного типа.
Важные примечания :
dump должна следовать приведенной выше структуре, чтобы иметь возможность использовать тренировочный скрипт, или вы можете изменить его самостоятельно? Чтобы узнать, как тренировать модель с нуля или настройку с другими наборами данных/языками, см. Подробную информацию в Directory Directory.
Подробная реализация класса абстрактного набора данных из TensorFlow_tts/DataSet/Abstract_Dataset. Есть некоторые функции, которые вам нужны переоценить и понять:
Важные примечания :
Некоторые примеры для использования этого Abstract_dataset являются tacotron_dataset.py, fastspeech_dataset.py, melgan_dataset.py, fastspeech2_dataset.py
Подробная реализация base_trainer от tensorflow_tts/trainer/base_trainer.py. Он включает в себя SEQ2SeqBasedTrainer и GanbasedTrainer, наследуя от Basedtrainer. Все тренер поддерживают как одиночный/многолетний графический процессор. Есть некоторые функции, которые вы должны переоценить при реализации new_trainer:
Все модели на этом репо обучаются на основе ganbasedtrainer (см. Train_melgan.py, Train_melgan_stft.py, Train_multiband_melgan.py) и seq2seqbasedtrainer (см. Train_tacotron2.py, train_fastspeech.py).
Вы можете знать, как сделать вывод каждой модели в ноутбуках или увидеть колаб (для английского языка), колаба (для корейского), колаба (для китайского), колаба (для французского языка), колаба (для немецкого языка). Вот пример кода для вывода End2end с Fastspeech2 и многополосным Melgan. Мы загрузили все наши предварительные в центр 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" )Все модели здесь лицензированы в соответствии с Apache 2.0
Мы хотим поблагодарить Томоки Хаяси, который много обсуждал с нами о Мелгане, многополосном Мелгане, Fastspeech и Tacotron. Эта структура основана на его великом проекте с открытым исходным кодом.