🎙️

JVSコーパスとESPNetを使って複数話者TTSモデル(VITS)を訓練させた

2023/11/27に公開

はじめに

背景

  • 複数話者のTTSモデルは色々な使い道があります
  • しかし、日本語の複数話者TTSモデルとしてオープンソースで配布されているものは、実はほとんどありません

補足

目的と概要

  • JVSコーパスとESPNetを使って複数話者TTSモデルを訓練し、性能を確認します。

結果

訓練設定

  • RTX2080super (memory: 8GB)
  • epoch数: 1000 -> 1週間程度の訓練時間(高スペックなGPUならもっと早いと思います)
  • batch_bins 375000 -> 5GB程度のメモリ消費
  • モデルアーキテクチャ・事前学習: JSUTで事前学習されたVITS

音声サンプル

Zennには音声ファイルを埋め込めないっぽいので、GoogleDriveへのリンクをベタ貼します。

https://drive.google.com/drive/u/0/folders/1JeVjqoknZh7DkZyGjE9mZdBJspeSqAPo

以下、driveの見方です。

  • speaker_{i}_text_{j}.wav: 今回学習した複数話者TTSモデルで、話者{i}にテキスト{j}を読み上げさせたサンプル
  • speaker_baseline{i}_text_{j}.wav: ベースラインとした単一話者TTSモデルで、話者{i}にテキスト{j}を読み上げさせたサンプル

考察

  • 品質はそこそこ
    • 話者性: しっかりと反映されている
    • 自然さ: 微妙。単一話者ベースラインに比べてほんの少しだけ劣る印象。
  • 性能のボトルネックはどこか?
    • モデルサイズ or データサイズ or エポック数 or モデルアーキテクチャ

実装概要

大まかな実装方針は以下になります(※今のところ訓練コードや重みは公開していません。需要があれば検討します。)

  • VCTKコーパス(英語の複数話者コーパス)を使って複数話者TTSモデルを訓練するレシピ、及びJVSを使って単一話者TTSモデルを訓練するレシピはすでにESPNet内に存在するので、それらのレシピを参考に、訓練レシピを作成する。
  • 具体的には、local/data_prep.sh周りを中心に書き換える

終わりに

  • ESPNetのレシピを少し改変し、JVSで学習することで、そこそこの複数話者TTSモデルが作れた
    • しかし合成音声の品質についてはもう少し改善の余地がありそう
  • 今回は話者IDを入力として与える形にしたが、話者embeddingを入力として与える形も面白そう
    • (ただし悪用のリスクも高まるので慎重に)
  • 研究室や会社から離れて個人開発を行うと、GPUリソースが意外とボトルネックになる。だれかGPU恵んでください。。。

Discussion