🔥

GPT-soVITS ver2をモジュールとして動かす

2024/08/08に公開

はじめに

高品質なzero-shot TTSモデルであるGPT-SoVITSにVersion 2がリリースされたようです。

デモ動画などを確認する限り、品質も非常に向上しているようですので、今回はこのGPT-SoVITSのVersion 2を試していきたいと思います。

https://github.com/RVC-Boss/GPT-SoVITS

また、このモデルは基本的にWebUIで利用することを想定されていますが、せっかくのMIT Licenseなのでシステムに組み込みたいという方もいらっしゃると思います。
したがって、pythonのスクリプトとして実行できるようにします。

具体的にはGoogle colabにて、WebUIを使わずに実行していきます。
WebUIで利用する方法を説明されている記事は多数ございますが、WebUIを使わずにスクリプト内で実行する方法はあまり紹介されていない(あったとしても、該当バージョンが古い)ので、同じような使い方をしたい方の参考になりましたら幸いです。

事前準備

リポジトリのクローン

下記のコマンドでリポジトリのクローンをしてください。

git clone https://github.com/RVC-Boss/GPT-SoVITS.git

gitを導入していない場合は、下記の画像の通り、緑の「Code」のボタンをクリックしてから、「Download ZIP」をクリックしてダウンロードが可能です。

事前学習モデルのダウンロード

下記に、GPT-SoVITS(ver2)の事前学習モデルが格納されています。
https://huggingface.co/lj1995/GPT-SoVITS/tree/main

この中で必要なのはchinese-hubert-basechinese-roberta-wwm-ext-largegsv-v2final-pretrainedの3つのフォルダになります。
(直下に格納されているファイルはversion1用の重みファイルになります)

ダウンロードにはgit lfsを利用することが手っ取り早いです。

下記のような記事を参考に導入してください。
(こちらとは別にgitの導入も必要です)
https://qiita.com/seigot/items/82b49fe0e80e217cb136

下記のコマンドでダウンロードできます

git lfs install
git clone https://huggingface.co/lj1995/GPT-SoVITS

もし、どうしてもgitが利用できない場合は、1ファイルずつであればダウンロードボタンからダウンロードも可能です(少し面倒ですが)

それぞれ必要なフォルダをローカルに作成してください。
chinese-hubert-basechinese-roberta-wwm-ext-largegsv-v2final-pretrainedの3つのフォルダです。

その後、該当するフォルダの中のすべてのファイルを、下記の下矢印のボタンをクリックしてダウンロオードしてください。

ダウンロードしたファイルをchinese-hubert-basechinese-roberta-wwm-ext-largegsv-v2final-pretrainedの3つのフォルダに正しく配置してください。

ノートブックのダウンロード

下記のリポジトリに、Google colabで利用するノートブックを用意しています。
https://github.com/personabb/colab_AI_sample/tree/main/colab_GPT-soVITS_sample

上記のリポジトリ内のノートブックcolab_GPT-SoVITS_sample.ipynbをダウンロードしておいてください。

Google Driveへのアップロード

必要なフォルダをGoogle Driveにアップロードします。
まずは、Google Driveの「マイドライブ」直下TTS-testの空フォルダを作成してください。

その後、先ほどcloneしたGPT-SoVITSもしくはGPT-SoVITS-mainフォルダの中にあるrequirements.txtファイルとGPT_SoVITSフォルダとtoolsフォルダの3つを、TTS-testフォルダの中にアップロードしてください。

その後、TTS-test/GPT-SoVITS/GPT_SoVITS/pretrained_modelsフォルダの中に、chinese-hubert-basechinese-roberta-wwm-ext-largegsv-v2final-pretrainedフォルダを、フォルダごとアップロードしてください。

さらに、後述する、参照音声と、出力結果音声を保管するフォルダとして、inputsフォルダとoutputsフォルダをGoogle DriveのTTS-testフォルダの中に作成してください。

最後に、colab_GPT-SoVITS_sample.ipynbTTS-testフォルダの直下にアップロードしてください。

実行

参照データの準備

GPT-SoVITSをzero-shot TTSとして利用する場合は、下記の3つのデータが必要です。

  • ref_audio
    • 参照音声です。声をクローンしたい音声ファイル(5-10秒ほど)を用意してください。
    • .wavファイルの動作は確認しています。
  • ref_text
    • 参照音声のテキスト書き起こしです。ノードブック上に記載します。
    • 言語も指定する必要があります。
  • target_text
    • 発話させたい内容の文章です。ノードブック上に記載します。
    • 言語も指定する必要があります

言語に関しては、下記のいずれかを指定する必要があるっぽいです。
日本語英語中国語以外はよくわかっていません。(中国語で記載されているっぽいので翻訳してみてください)
言語混合なども指定できるっぽいです。

./GPT-SoVITS/GPT_SoVITS/inference_webui.py
dict_language_v2 = {
    i18n("中文"): "all_zh",#全部按中文识别
    i18n("英文"): "en",#全部按英文识别#######不变
    i18n("日文"): "all_ja",#全部按日文识别
    i18n("粤语"): "all_yue",#全部按中文识别
    i18n("韩文"): "all_ko",#全部按韩文识别
    i18n("中英混合"): "zh",#按中英混合识别####不变
    i18n("日英混合"): "ja",#按日英混合识别####不变
    i18n("粤英混合"): "yue",#按粤英混合识别####不变
    i18n("韩英混合"): "ko",#按韩英混合识别####不变
    i18n("多语种混合"): "auto",#多语种启动切分识别语种
    i18n("多语种混合(粤语)"): "auto_yue",#多语种启动切分识别语种
}

参照音声を用意したら、Google DriveのTTS-testフォルダにinputsフォルダを作成して、その中に格納してください。
本記事内では、参照音声のパスは"TTS-test/inputs/audio.wav"を想定します。

この時点で、下記のようなフォルダ構成になっているはずです。

MyDrive/
    └ TTS-test/
          ├ GPT-SoVITS/
          |        ├ pretrained_models/
          |        |    ├ chinese-hubert-base/
      |     |    |         └ ・・・
          |        |    ├ chinese-roberta-wwm-ext-large/
      |     |    |         └ ・・・
          |        |    └ gsv-v2final-pretrained/
      |     |              └ ・・・
          |        └ ・・・・
          ├ tools/       
          |   └ ・・・
          ├ inputs/
          |    └ audio.wav
          ├ outputs/
          ├ requirements.txt
          └ colab_GPT-SoVITS_sample.ipynb

今回の記事では、下記のサイトから参照音声をお借りしました。
https://amitaro.net/voice/corpus-list/ita/

毎度毎度、使わせていただいております。
あみたろ様ありがとうございます。

今回使わせていただいたのは、上記ページの【よふかしスタイル】の音声になります。
参照音声の書き起こしは下記です。

イタリア旅行で彼は、いくつか景勝の地として有名な都市、例えば、ナポリやフィレンツェを訪れた。

上記の音声をaudio.wavとして、使わせていただきました。

ノートブックで実行

ここまで準備したら、あとはcolab_GPT-SoVITS_sample.ipynbのセルをすべて上から実行していけばOKです。

1セル目の実行後、ノートブックがGoogle Driveをマウントするために認証を求められるので認証をしてください。

2セル目の実行後、セッションの再起動を求めるwarningが出ます。
その場合は、ポップアップに従って再起動を実施してください。
その後、改めて1セル目から順番に実行をしてください。

4セル目に設定を記載します。
下記のようになっているはずです。

## 設定

gpt_model = "./GPT_SoVITS/pretrained_models/gsv-v2final-pretrained/s1bert25hz-5kh-longer-epoch=12-step=369668.ckpt"
sovits_model = "./GPT_SoVITS/pretrained_models/gsv-v2final-pretrained/s2G2333k.pth"

ref_audio_path = "inputs/audio.wav"
ref_text = """
イタリア旅行で彼は、いくつか景勝の地として有名な都市、例えば、ナポリやフィレンツェを訪れた。
"""
ref_language = "日文"

target_text = """
今日は、お兄ちゃんが大好きな深層学習の勉強をしようね!
え?強化学習の方が・・・好き??
お兄ちゃんのバカ!
"""

target_language = "日文"
output_wav_path = "./outputs/output.wav"

  • gpt_modelsovits_model
    • ダウンロードしたモデルの重みのpathをおきます
  • ref_audio_path
    • 参照音声のpathを指定します
  • ref_text
    • 参照音声の文字起こしテキストです
  • ref_language
    • 参照音声の言語指定です。そのほかに指定できる言語は、前述した内容と同じです
  • target_text
    • 発話させたい文章です。
    • 文章内で改行すると、改行した文章ごとにモデルを実行するため、実行時間は長くなりますが、一文一文の品質は向上することが多いです。
      • ただし、前の文章の感情と同じように話して欲しい場合、あえて改行しない選択肢もあります。色々なパターンで試行錯誤してみてください。
  • target_language
    • 発話させる文章の言語指定です。
  • output_wav_path
    • 出力する音声をファイルとして保存する際のpathです。

6セル目を実行することで、実際に音声を生成します。
また、音声生成にかかった時間を計測しています。
T4GPUで実施すると、1行あたり1-2秒程度生成に時間がかかるため、個人的にはリアルタイム会話システムに実装するのは難しいかもなあと思っております。
(どなたか、高速化してくれたらめっちゃ嬉しいです)
また、生成された音声が、Google Driveのoutputsフォルダに保存されています

最後に、7セル目を実行することで、6セル目で生成した音声をノートブック上で再生することができます。

実験結果

上記の設定で、実行した結果を表示します。
https://youtu.be/L_ZFHkKHrcM

正直、過去色々みてきたTTSモデルの中でも、最高級に高い品質だなと思いました。
声の似ている度具合も、日本語のイントネーションの正確性という観点でも。

願わくは、もう少し高速で動作したら嬉しいですね。
(ハイスペックPCを使えというだけかもですが)

まとめ

今回はGPT-SoVITS version2をWebUIを使わずに実行する方法を記載しました。
皆様の役に立てると嬉しいです。

では、ここまで読んでくださり、ありがとうございました。

Discussion