IMS Toucanは、ドイツのシュトゥットガルト大学である自然言語加工研究所(IMS)で開発された最先端のテキストからスピーチ合成のトレーニング、使用、教育のためのツールキットです。私たちのシステムは高速で制御可能であり、大量の計算を必要としません。

このリポジトリが便利だと思う場合は、星を与えることを検討してください。多くの数が私を幸せにし、彼らは非常にやる気を起こさせます。さらにやる気を起こさせたい場合は、このツールキットのスポンサーを検討することもできます。これにはGitHubスポンサーのみを使用しています。他のプラットフォームには、作成者のふりをする詐欺師がいます。彼らにあなたをだましさせないでください。コードとモデルは完全に無料であり、顔を抱きしめることの寛大なサポートのおかげで、GPUで実行されているモデルのインスタンスもあります。
顔を抱き締めるインタラクティブな大規模な言語デモをチェックしてください。
また、顔を抱きしめる多言語TTSデータセットを公開しましたか?
サポートされている言語のリストはここにあります
Python 3.10は推奨バージョンです。
このツールキットをインストールするには、使用するマシンにクローン化するには(そのマシンでモデルをトレーニングする場合は、少なくとも1つのCUDA有効化GPUが必要です。推論にはGPUは必要ありません)。
Linuxを使用している場合は、次のパッケージをインストールするか、そうでない場合はAPT-Getでインストールする必要があります(ほとんどの分布では、事前にインストールされています):
libsndfile1
espeak-ng
ffmpeg
libasound-dev
libportaudio2
libsqlite3-dev
クローニングしたディレクトリに移動します。基本的な要件をインストールするために、仮想環境を作成およびアクティブ化することをお勧めします。以下のコマンドは、Linuxの下で行うために必要なすべてを要約します。 Windowsを実行している場合は、2行目を変更する必要があります。VENVドキュメントをご覧ください。
python -m venv <path_to_where_you_want_your_env_to_be>
source <path_to_where_you_want_your_env_to_be>/bin/activate
pip install --no-cache-dir -r requirements.txt
その間にログアウトした場合、ツールを再度使用して仮想環境を再度アクティブにするたびに2行目を実行します。 GPUを使用するには、Linuxマシンで他のことをする必要はありません。 Windowsマシンでは、GPUサポートを可能にするインストールコマンドの公式Pytorch Webサイトをご覧ください。
デフォルトのサブフォルダーにデータセットを前処理することに起因するキャッシュファイルと同様に、前処理されたトレーニングモデルとトレーニングされたモデルが必要ない場合は、ニーズに合わせてUtility/storage_config.pyを編集して、対応するディレクトリをグローバルに設定できます(パスはリポジトリルートディレクトリまたは絶対的なものに比べて)。
前提条件のモデルを使用する必要はありませんが、非常にスピードアップすることができます。顔を抱きしめたおかげで、必要なときに自動的にダウンロードされますか?特にVB。
Espeak-ngはオプションの要件であり、多くの言語で多くの特別なケースを処理するため、持っているのは良いことです。
ほとんどのLinux環境ではすでにインストールされています。そうでない場合は、十分な権利がある場合は、実行するだけでインストールできます。
apt-get install espeak-ng
Windowsの場合、GitHubリリースページに便利な.msiインストーラーファイルを提供します。非Linuxシステムにインストールした後、 PHONEMIZER_ESPEAK_LIBRARY環境変数を設定して、Phonemizer LibraryにESPEAKインストールを見つける場所を伝える必要があります。
Macの場合、残念ながらはるかに複雑です。 Sang Hyun Parkのおかげで、Macにインストールするためのガイドがあります。M1Macの場合、ESPEAK-NGをシステムにインストールする最も便利な方法は、ESPEAK-NGのMacPortsポートを介してです。 MacPorts自体は、MacPortsのWebサイトからインストールできます。これには、AppleのXcodeも必要です。 XcodeとMacPortsがインストールされたら、ESPEAK-NGのポートを介してインストールできます
sudo port install espeak-ng
Windowsのインストール手順に記載されているように、ESPEAK-ngのインストールは、Phonemizer Libraryの変数として設定する必要があります。環境変数は、上記のリンクされたgithubスレッドに記載されているPHONEMIZER_ESPEAK_LIBRARYです。ただし、この変数をに設定する必要があるESPEAK-ngインストールファイルは、Mac上の.dllファイルではなく.dylibファイルです。 ESPEAK-NGライブラリファイルを見つけるために、 port contents espeak-ng実行できます。探している特定のファイルはlibespeak-ng.dylibという名前です。
訓練されたモデルをロードするか、 InferenceInterfaces/ToucanTTSInterface.pyを使用して、提供されたモデルを提供できます。使用するモデルを識別する適切なディレクトリハンドルを使用して、そこからオブジェクトを作成するだけです。残りはバックグラウンドでうまくいくはずです。 set_languageおよびset_speaker_embedding関数を使用して、言語の埋め込みまたはスピーカーの埋め込みを設定することをお勧めします。ほとんどのものは自明であるべきです。
InferenceInterfaceには、テキストからオーディオを作成する2つの方法が含まれています。それらはread_to_fileとread_aloudです。
read_to_fileは、文字列とファイル名のリストを入力として取得します。リスト内の文を統合し、その間の短い一時停止でそれらを連結し、他の議論として提供するFilepathに書き込みます。
read_aloudは文字列だけを使用し、それがスピーチに変換され、システムのスピーカーを使用してすぐに再生します。オプションの引数ビューをtrueに設定すると、視覚化がポップアップし、プログラムを継続するために閉じる必要があります。
それらの使用は、 run_interactive_demo.pyおよびrun_text_to_file_reader.pyで実証されています。
持続時間、ピッチ曲線の分散、エネルギー曲線の分散を制御するための単純なスケーリングパラメーターがあります。インタラクティブデモまたはリーダーを使用するときにコードでそれらを変更するか、独自のコードで使用するときにインターフェイスに渡すだけです。
モデルの言語を変更して、当社の事前に守られたモデルで利用可能な言語を確認するには、ここにリンクされているリストをご覧ください
ユーティリティと呼ばれるディレクトリには、 path_to_transcript_dicts.pyというファイルがあります。このファイルでは、データセット内の各オーディオファイルへのすべての絶対パスをキーとして文字列としてすべての絶対パスを持つ辞書を返す関数と、対応するオーディオのテキストのテキストが値として表示される関数を書き込む必要があります。
次に、ディレクトリトレーニングインターフェイス/レシピに移動します。そこには、単一のデータセットまたはfinetuning_example_multilingual.pyの単一のデータセットでFinetuneを獲得する場合は、 finetuning_example_simple.pyファイルのコピーを作成します。このコピーを参照として使用し、新しいデータセットを使用するために必要な変更のみを行います。 prepare_tts_corpus関数への呼び出しを見つけます。そこで使用されているpath_to_transcript_dictを、作成したばかりの1つに置き換えます。次に、対応するキャッシュディレクトリの名前をデータセットにとって意味のあるものに変更します。また、チェックポイントが保存される変数Save_Dirも注目してください。これはデフォルト値です。チェックポイントから微調整して別のディレクトリに保存する場合に備えて、コマンドライン引数を使用して後でパイプラインを呼び出すときに上書きすることができます。最後に、データセットの作成と、データに一致するISO 639-3言語IDへの列車ループ機能への呼び出しにおけるLang引数を変更します。
微調ューする例で列車ループに与えられる議論は、前処理されたモデルからの微調整の場合を対象としています。ゼロからトレーニングしたい場合は、その名前にToucanttsを持っている別のパイプラインを見て、そこで使用される議論を見てください。
これが完了したら、ほぼ完了しましたが、今では上位レベルのrun_training_pipeline.pyファイルを利用できるようにする必要があります。上記のファイルでは、作成したばかりのパイプラインから実行機能をインポートし、意味のある名前を付けます。 Pipeline_Dictで、インポートされた関数を価値として追加し、理にかなっている速記として使用します。
レシピを作成したら、トレーニングは非常に簡単です。
python run_training_pipeline.py <shorthand of the pipeline>
以下の引数のいずれかを提供できますが、必要はありません(トレーニングでは、少なくともGPU IDを明確に指定する必要があります)。
--gpu_id <ID of the GPU you wish to use, as displayed with nvidia-smi, default is cpu. If multiple GPUs are provided (comma separated), then distributed training will be used, but the script has to be started with torchrun.>
--resume_checkpoint <path to a checkpoint to load>
--resume (if this is present, the furthest checkpoint available will be loaded automatically)
--finetune (if this is present, the provided checkpoint will be fine-tuned on the data from this pipeline)
--model_save_dir <path to a directory where the checkpoints should be saved>
--wandb (if this is present, the logs will be synchronized to your weights&biases account, if you are logged in on the command line)
--wandb_resume_id <the id of the run you want to resume, if you are using weights&biases (you can find the id in the URL of the run)>
マルチGPUトレーニングの場合、複数のGPU ID(コンマ分離)を提供し、Torchrunでスクリプトを開始する必要があります。また、GPUの数を指定する必要があります。これは、提供するIDの数と一致する必要があります。注意:TorchrunはNohupと互換性がありません!代わりにTMUXを使用して、シェルからログアウトした後にスクリプトを実行し続けます。
torchrun --standalone --nproc_per_node=4 --nnodes=1 run_training_pipeline.py <shorthand of the pipeline> --gpu_id "0,1,2,3"
すべての時代の後(または特定のステップカウントの後)、いくつかのログは、ログインしてフラグを設定すると、コンソールとWeights and BiaseのWebサイトに書き込まれます。メモリエラーからCUDAを取り出した場合、実行中のパイプラインのTraining_loopへのコールの引数のバッチサイズを減らす必要があります。 CUDAメモリエラーからこれ以上なくなるまで、小さなステップでバッチサイズを減らしてみてください。
保存するために指定したディレクトリには、チェックポイントファイルとスペクトログラム視覚化データが表示されます。チェックポイントは非常に大きいため、最新の5つのチェックポイントだけが保持されます。トレーニング手順の量は、使用しているデータと、前提条件のチェックポイントまたはゼロからのトレーニングから微調整するかどうかに依存します。データが少ないほど、崩壊の可能性を防ぐために必要なステップが少なくなります。早めに停止したい場合は、プロセスを殺してください。ゴーストプロセスがいくつか残っている場合は、次のコマンドを使用してそれらを見つけて手動で殺すことができます。
fuser -v /dev/nvidia*
チェックポイントが保存されるたびに、推論に使用できる圧縮バージョンも作成されます。
ユーザーが育てたいくつかのポイントを次に示します。
run_scorer.pyを見てください。UserWarning: Detected call of lr_scheduler.step() before optimizer.step(). - カスタムスケジューラを使用し、トーチはスケジューラとオプティマイザーを間違った順序で呼び出すと誤って考えています。この警告を無視するだけで、それは完全に無意味です。WARNING[XFORMERS]: xFormers can't load C++/CUDA extensions. [...] - 別の意味のない警告。私たちは実際に自分自身をXformersを使用していません。それは私たちの依存関係の1つの依存関係の一部にすぎませんが、どの場所でも使用されていません。The torchaudio backend is switched to 'soundfile'. Note that 'sox_io' is not supported on Windows. [...] - Windowsの下で発生するだけで、何にも影響しません。WARNING:phonemizer:words count mismatch on 200.0% of the lines (2/1) [...] - ESPEAKがこの警告を発し始めた理由はわかりませんが、それは何にも影響しないようであるため、無視するのは安全です。NaNに変わります - デフォルトの学習率はクリーンデータで機能します。データのクリーンが低い場合は、スコアラーを使用して問題のあるサンプルを見つけてみるか、学習率を下げてください。最も一般的な問題は、スピーチに一時停止することですが、テキストでそれらを示唆するものはありません。そのため、句読点を除外するASRコーパスは通常、TTSに使用するのが困難です。 FastSpeech 2およびGSTの基本的なPytorchモジュールはESPNETから取得され、Hifi-GanのPytorchモジュールはParallelwaveganリポジトリから取得されます。 Matchattsで概説されているように、ConditionalFlowMatchingベースのポストネットに関連するいくつかのモジュールは、公式のMatchatts CodeBaseから取得され、一部はStabletts CodeBaseから取得されます。 Grapheme-to-Phonemeの変換については、前述のEspeak-ngとTransphoneに依存しています。スペースを節約するために列車データをキャッシュするための中間表現として、ニューラルオーディオコーデックであるEncodecを使用します。
@inproceedings{lux2021toucan,
year = 2021,
title = {{The IMS Toucan system for the Blizzard Challenge 2021}},
author = {Florian Lux and Julia Koch and Antje Schweitzer and Ngoc Thang Vu},
booktitle = {Blizzard Challenge Workshop},
publisher = {ISCA Speech Synthesis SIG}
}
@inproceedings{lux2022laml,
year = 2022,
title = {{Language-Agnostic Meta-Learning for Low-Resource Text-to-Speech with Articulatory Features}},
author = {Florian Lux and Ngoc Thang Vu},
booktitle = {ACL}
}
@inproceedings{lux2022cloning,
year = 2022,
title = {{Exact Prosody Cloning in Zero-Shot Multispeaker Text-to-Speech}},
author = {Lux, Florian and Koch, Julia and Vu, Ngoc Thang},
booktitle = {SLT},
publisher = {IEEE}
}
@inproceedings{lux2022lrms,
year = 2022,
title = {{Low-Resource Multilingual and Zero-Shot Multispeaker TTS}},
author = {Florian Lux and Julia Koch and Ngoc Thang Vu},
booktitle = {AACL}
}
@inproceedings{lux2023controllable,
year = 2023,
title = {{Low-Resource Multilingual and Zero-Shot Multispeaker TTS}},
author = {Florian Lux and Pascal Tilli and Sarina Meyer and Ngoc Thang Vu},
booktitle = {Interspeech}
publisher = {ISCA}
}
@inproceedings{lux2023blizzard,
year = 2023,
title = {{The IMS Toucan System for the Blizzard Challenge 2023}},
author = {Florian Lux and Julia Koch and Sarina Meyer and Thomas Bott and Nadja Schauffler and Pavel Denisov and Antje Schweitzer and Ngoc Thang Vu},
booktitle = {Blizzard Challenge Workshop},
publisher = {ISCA Speech Synthesis SIG}
}
@inproceedings{lux2024massive,
year = 2024,
title = {{Meta Learning Text-to-Speech Synthesis in over 7000 Languages}},
author = {Florian Lux and Sarina Meyer and Lyonel Behringer and Frank Zalkow and Phat Do and Matt Coler and Emanuël A. P. Habets and Ngoc Thang Vu},
booktitle = {Interspeech}
publisher = {ISCA}
}