? Tensorflowtts

Tensorflow 2のリアルタイム最先端の音声合成
? Tensorflowttsは、リアルタイムの最先端の音声合成アーキテクチャを提供します。Tacotron-2、Melgan、Multiband-Melgan、Fastspeech、Fastspeech2ベースのTensorflow 2など。TensorFlow2。組み込みシステム。
このリポジトリは、以下でUbuntu 18.04でテストされています。
異なるTensorflowバージョンは機能している必要がありますが、まだテストされていません。このレポは、最新の安定したTensorflowバージョンで動作しようとします。 MultiGPUを使用する場合に備えて、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]である必要があることに注意してください。
前処理には2つのステップがあります。
上記の手順を再現するには:
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 Preprocessingを実行するには、まずexamples/fastspeech2_librittsの命令をお読みください。プリプロシングを実行する前に、最初にそれを再フォーマットする必要があります。
注: synpaflex Preprocessingを実行するには、最初にノートブックノートブック/prepare_synpaflex.ipynbを実行してください。プリプロシングを実行する前に、最初にそれを再フォーマットする必要があります。
前処理後、プロジェクトフォルダーの構造は次のようにする必要があります。
|- [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が含まれていますstats_energy.npyには、トレーニング分割からのエネルギー値の平均とSTDが含まれていますstats_f0.npyは、トレーニング分割にf0値の平均とstdが含まれていますtrain_utt_ids.npy / valid_utt_ids.npyには、それぞれトレーニングと検証の発言IDが含まれています各入力タイプには、サフィックス( ids 、 raw-feats 、 raw-energy 、 raw-f0 、 norm-feats 、およびwave )を使用します。
重要なメモ:
dumpフォルダーの最終構造は上記の構造に従ってトレーニングスクリプトを使用できるようにする必要がありますか、それとも自分で変更できますか? ゼロからモデルをトレーニングする方法を知るため、または他のデータセット/言語で微調整する方法については、詳細をディレクトリの例をご覧ください。
tensorflow_tts/dataset/abstract_datasetからの抽象データセットクラスの詳細実装。オーバーサイドと理解する必要がある機能がいくつかあります。
重要なメモ:
このabstract_datasetを使用する例は、tacotron_dataset.py、fastspeech_dataset.py、melgan_dataset.py、fastspeech2_dataset.pyです。
tensorflow_tts/trainer/base_trainer.pyからのbase_trainerの詳細実装。 Seq2SeqBasedTrainerとGanBasedTrainerがBasedTrainerから継承されます。すべてのトレーナーは、シングル/マルチGPUの両方をサポートしています。 new_trainerを実装するときにオーバーする必要がある関数があります。
このリポジトリのすべてのモデルは、 ganbasedtrainerに基づいてトレーニングされています(train_melgan.py、train_melgan_stft.py、train_multiband_melgan.pyを参照)およびseq2seqbasedtrainer (train_tacotron2.py、train_fastspeech.py.pyを参照)。
ノートブックに各モデルを推論する方法を知るか、コラブ(英語用)、colab(韓国語)、colab(中国語)、colab(フランス語用)、colab(ドイツ語)を見る方法を知ることができます。 FastSpeech2およびマルチバンドメルガンを使用したEnd2End推論の例の例を示します。私たちは、すべての前提条件を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" )ここのすべてのモデルは、Apache 2.0の下でライセンスされています
私たちは、メルガン、マルチバンドメルガン、ファストスピーチ、タコトロンについて私たちと議論してくれた八門体トモキに感謝したいと思います。このフレームワークは、彼の素晴らしいオープンソースパラレルウェイガンプロジェクトに基づいています。