このホワイトペーパーでは、スタイルの拡散と敵対的なトレーニングを活用して、人間レベルのTTS合成を達成するための大規模な音声言語モデル(SLM)を使用したテキストツースピーチ(TTS)モデルであるStyletts 2を紹介します。 Styletts 2は、参照音声を必要とせずにテキストに最も適したスタイルを生成し、拡散モデルによって提供される多様な音声合成の恩恵を受けながらテキストに最も適したスタイルを生成するために、拡散モデルを介してスタイルを潜在的なランダム変数としてモデル化することにより、前身とは異なります。さらに、WAVLMなどの大規模な事前訓練を受けたSLMを使用して、エンドツーエンドトレーニングのための新しい微分持続時間モデリングを備えた判別器として、音声の自然性が向上します。 Styletts 2は、単一スピーカーのLJSpeechデータセットで人間の録音を上回り、ネイティブの英語スピーカーが判断するように、マルチスピーカーVCTKデータセットでそれを一致させます。さらに、Librittsデータセットで訓練された場合、当社のモデルは、ゼロショットスピーカーの適応のために以前の公開されたモデルよりも優れています。この作業は、単一およびマルチスピーカーデータセットの両方で最初の人間レベルTTS合成を達成し、スタイルの拡散と大きなSLMによる敵対的なトレーニングの可能性を紹介します。
論文:https://arxiv.org/abs/2306.07691
オーディオサンプル:https://styletts2.github.io/
オンラインデモ:顔を抱き締める(素晴らしいオンラインデモをありがとう@fakerybakery)
train_second.pyのDDP(Accelerator)を修正します(これを修正するためにできる限りのことを試しましたが、成功しませんでした。 git clone https://github.com/yl4579/StyleTTS2.git
cd StyleTTS2pip install -r requirements.txtWindowsの追加:
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 -Uまた、デモを実行したい場合は、フォネマイザーとスパークをインストールします。
pip install phonemizer
sudo apt-get install espeak-ng第一段階のトレーニング:
accelerate launch train_first.py --config_path ./Configs/config.ymlセカンドステージトレーニング(DDPバージョンが機能しないため、現在のバージョンではDPを使用します。
python train_second.py --config_path ./Configs/config.yml両方を連続して実行でき、第1段階と2番目のステージの両方をトレーニングできます。モデルは、「epoch_1st_%05d.pth」および「epoch_2nd_%05d.pth」という形式で保存されます。チェックポイントとテンソルボードログは、 log_dirで保存されます。
データリスト形式はfilename.wav|transcription|speakerである必要があります。例としてval_list.txtを参照してください。スピーカーラベルは、スタイル拡散モデルトレーニングのために参照オーディオをサンプリングする必要があるため、マルチスピーカーモデルに必要です。
config.ymlでは、次のような重要な構成がいくつかあります。
OOD_data :SLM敵対的なトレーニングのための分散外のテキストのパス。フォーマットはtext|anything必要です。min_length :トレーニング用のoodテキストの最小長。これは、合成された音声が最小の長さであることを確認するためです。max_len :トレーニング用のオーディオの最大長。ユニットはフレームです。デフォルトのホップサイズは300であるため、1つのフレームは約300 / 24000 )秒です。これを下げると、これを下げると、メモリ外の問題が発生します。multispeaker :マルチスピーカーモデルをトレーニングする場合はTRUEに設定します。これは、単一モデルとマルチスピーカーモデルでは、脱型のアーキテクチャが異なるため、必要です。batch_percentage :これは、SLMの敵対的なトレーニング中に、メモリ(OOM)の問題がないことを確認するためです。 OOMの問題に遭遇した場合は、このために低い数字を設定してください。UTILSフォルダーには、3つの事前に訓練されたモデルがあります。
batch_sizeまたはmax_lenを使用してください。詳細については、問題#10を参照できます。スクリプトは、DDPがtrain_second.pyでは機能しないため、DPを使用するtrain_second.pyから変更されます。この問題を喜んで手伝ってくれる場合は、上記の大胆なセクションをご覧ください。
python train_finetune.py --config_path ./Configs/config_ft.yml Librittsチェックポイントがダウンロードされ、フォルダーの下に解凍されていることを確認してください。 50エポックの1時間の音声データ(約1Kサンプル)を備えたljspeech上のデフォルトの構成config_ft.yml Finetunes。これには、4つのNvidia A100で約4時間かかりました。品質は、24時間の音声データでゼロから訓練されたljspeechモデルよりもわずかに悪化しています(ljspeechのnaturalspeechに似ています)。サンプルは#65にあります(コメント)。
単一のGPUを使用している場合(スクリプトがDDPで動作しないため)、トレーニング速度とVRAMを保存したい場合は、#100でスクリプトを作成してくれた@korakoeに感謝します):
accelerate launch --mixed_precision=fp16 --num_processes=1 train_finetune_accelerate.py --config_path ./Configs/config_ft.yml@kreevozは、Finetuningの一般的な問題について詳細なメモを作成し、オーディオ品質を最大化するための提案:#81。これらのいくつかは、ゼロからのトレーニングにも当てはまります。 @iieleven11は、微調整のためのガイドラインも作成しました:#128。
joint_epoch :これは、GPU RAMがSLM敵対的なトレーニングの実行に十分な大きさではないためです。あなたはそれをスキップするかもしれませんが、品質は悪いかもしれません。 joint_epochの設定epochsよりも多くの数字を設定すると、SLM Advesariral Trainingをスキップできます。 詳細については、Inference_ljspeech.ipynb(Single-Speaker)およびInference_libritts.ipynb(Multi-Speaker)を参照してください。 Librittsの場合、Demoを実行する前に、reference_audio.zipをダウンロードしてdemoの下に解凍する必要があります。
24 kHzのLjspeech Corpusの前提条件2は、https://huggingface.co/yl4579/styletts2-ljspeech/tree/mainでダウンロードできます。
Librittsの前提条件のStyletts 2モデルは、https://huggingface.co/yl4579/styletts2-libritts/tree/mainでダウンロードできます。
Styletts 2をインポートして、独自のコードで実行できます。ただし、推論はGPLライセンスパッケージに依存するため、このリポジトリに直接含まれていません。 GPLライセンスのフォークには、インポート可能なスクリプトと、実験的なストリーミングAPIなどがあります。Gruutを使用する完全に溶解したパッケージ(フォーンマイザーとGruutの間の不一致により品質が低いですが)も利用できます。
これらの事前に訓練されたモデルを使用する前に、あなたが合成する音声を使用する許可がない限り、スピーチサンプルが事前に訓練されたモデルによって合成されることをリスナーに通知することに同意します。つまり、スピーカーが合成された声を公開する前に直接またはライセンスで音声をクローン化する許可を認める声のみを使用することに同意するか、これらの声を使用する許可がない場合はこれらの声が合成されることを公に発表する必要があります。
コード:MITライセンス
事前に訓練されたモデル:これらの事前訓練されたモデルを使用する前に、あなたが合成する音声を使用する許可がない限り、スピーチサンプルが事前に訓練されたモデルによって合成されることをリスナーに通知することに同意します。つまり、スピーカーが合成された声を公開する前に直接またはライセンスで音声をクローン化する許可を認める声のみを使用することに同意するか、これらの声を使用する許可がない場合はこれらの声が合成されることを公に発表する必要があります。