16 KiB
機能:
-
ゼロショット TTS: 5 秒間のボーカルサンプルを入力すると、即座にテキストから音声に変換されます。
-
数ショット TTS: わずか 1 分間のトレーニングデータでモデルを微調整し、音声の類似性とリアリズムを向上。
-
多言語サポート: 現在、英語、日本語、中国語をサポートしています。
-
WebUI ツール: 統合されたツールには、音声伴奏の分離、トレーニングセットの自動セグメンテーション、中国語 ASR、テキストラベリングが含まれ、初心者がトレーニングデータセットと GPT/SoVITS モデルを作成するのを支援します。
デモ動画をチェック!
未見の話者数ショット微調整デモ:
https://github.com/RVC-Boss/GPT-SoVITS/assets/129054828/05bee1fa-bdd8-4d85-9350-80c060ab47fb
インストール
テスト済みの環境
- Python 3.9, PyTorch 2.0.1, CUDA 11
- Python 3.10.13, PyTorch 2.1.2, CUDA 12.3
- Python 3.9, PyTorch 2.2.2, macOS 14.4.1 (Apple silicon)
- Python 3.9, PyTorch 2.2.2, CPUデバイス
注記: numba==0.56.4 は py<3.11 が必要です
Windows
Windows ユーザーの場合(win>=10 でテスト済み)、事前にパッケージ化されたディストリビューションを直接ダウンロードし、go-webui.bat をダブルクリックして GPT-SoVITS-WebUI を起動することができます。
Linux
conda create -n GPTSoVits python=3.9
conda activate GPTSoVits
bash install.sh
macOS
注:MacでGPUを使用して訓練されたモデルは、他のデバイスで訓練されたモデルと比較して著しく品質が低下するため、当面はCPUを使用して訓練します。
xcode-select --install
を実行して、Xcodeコマンドラインツールをインストールします。brew install ffmpeg
またはconda install ffmpeg
を実行して、FFmpegをインストールします。- 上記の手順を完了した後、以下のコマンドを実行してこのプロジェクトをインストールします。
conda create -n GPTSoVits python=3.9
conda activate GPTSoVits
pip install -r requirements.txt
手動インストール
依存関係をインストールします
pip install -r requirementx.txt
FFmpegをインストールします。
Conda ユーザー
conda install ffmpeg
Ubuntu/Debian ユーザー
sudo apt install ffmpeg
sudo apt install libsox-dev
conda install -c conda-forge 'ffmpeg<7'
Windows ユーザー
ffmpeg.exe と ffprobe.exe をダウンロードし、GPT-SoVITS のルートディレクトリに置きます。
Docker の使用
docker-compose.yaml の設定
-
イメージのタグについて:コードベースの更新が速く、イメージのパッケージングとテストが遅いため、Docker Hub で現在パッケージされている最新のイメージをご覧になり、ご自身の状況に応じて選択するか、またはご自身のニーズに応じて Dockerfile を使用してローカルで構築してください。
-
環境変数:
is_half
:半精度/倍精度の制御。"SSL 抽出"ステップ中に4-cnhubert/5-wav32k
ディレクトリ内の内容が正しく生成されない場合、通常これが原因です。実際の状況に応じて True または False に調整してください。
-
ボリューム設定:コンテナ内のアプリケーションのルートディレクトリは
/workspace
に設定されます。デフォルトのdocker-compose.yaml
には、アップロード/ダウンロードの内容の実例がいくつか記載されています。 -
shm_size
:Windows の Docker Desktop のデフォルトの利用可能メモリが小さすぎるため、異常な動作を引き起こす可能性があります。状況に応じて適宜設定してください。 -
deploy
セクションの GPU に関連する内容は、システムと実際の状況に応じて慎重に設定してください。
docker compose で実行する
docker compose -f "docker-compose.yaml" up -d
docker コマンドで実行する
上記と同様に、実際の状況に基づいて対応するパラメータを変更し、次のコマンドを実行します:
docker run --rm -it --gpus=all --env=is_half=False --volume=G:\GPT-SoVITS-DockerTest\output:/workspace/output --volume=G:\GPT-SoVITS-DockerTest\logs:/workspace/logs --volume=G:\GPT-SoVITS-DockerTest\SoVITS_weights:/workspace/SoVITS_weights --workdir=/workspace -p 9880:9880 -p 9871:9871 -p 9872:9872 -p 9873:9873 -p 9874:9874 --shm-size="16G" -d breakstring/gpt-sovits:xxxxx
事前訓練済みモデル
GPT-SoVITS Models から事前訓練済みモデルをダウンロードし、GPT_SoVITSpretrained_models
に置きます。
中国語 ASR(追加)については、Damo ASR Model、Damo VAD Model、Damo Punc Model からモデルをダウンロードし、tools/asr/models
に置いてください。
UVR5 (Vocals/Accompaniment Separation & Reverberation Removal, additionally) の場合は、UVR5 Weights からモデルをダウンロードして tools/uvr5/uvr5_weights
に置きます。
データセット形式
TTS アノテーション .list ファイル形式:
vocal_path|speaker_name|language|text
言語辞書:
- 'zh': 中国語
- 'ja': 日本語
- 'en': 英語
例:
D:\GPT-SoVITS\xxx/xxx.wav|xxx|en|I like playing Genshin.
メインブランチ API 使用ガイド
python api.py -dr "123.wav" -dt "一二三。" -dl "all_ja"
実行パラメータ
必須パラメータ:
-s
- SoVITSモデルのパス。config.py
で指定できます。-g
- GPTモデルのパス。config.py
で指定できます。
参照音声がリクエストに含まれていない場合に使用:
-dr
- デフォルトの参照音声パス。リクエストに参照音声が提供されていない場合に使用します。-dt
- デフォルト参照音声に対応するテキスト。-dl
- デフォルト参照音声の言語。選択肢には"all_zh"、"en"、"all_ja"、"zh"、"ja"が含まれます。
オプションパラメータ:
-
-d
- 推論デバイス。選択肢には"cuda"、"cpu"が含まれます。 -
-a
- バインドアドレス。デフォルトは"127.0.0.1"。 -
-p
- バインドポート。デフォルトは9880で、config.py
で指定できます。 -
-fp
-config.py
の設定を上書きして全精度を使用。 -
-hp
-config.py
の設定を上書きして半精度を使用。 -
-sm
- ストリーミング返信モード。デフォルトでは無効で、選択肢には"close"、"c"、"normal"、"n"、"keepalive"、"k"が含まれます。 -
-mt
- 返信の音声エンコード形式。ストリーミングではデフォルトでogg、非ストリーミングではデフォルトでwav、選択肢には"wav"、"ogg"、"aac"が含まれます。 -
-cp
- テキスト分割記号設定。デフォルトでは空で、",。?!"の文字列として入力します。 -
-hb
- cnhubertのパス。 -
-b
- bertのパス。
推論
エンドポイント: /
指定された実行パラメータや参照音声、区切り記号を使用して推論を行います。GETまたはPOSTメソッドを使用できます:
GET:
http://127.0.0.1:9880?text=先帝が創業の途中で急逝し、今や世界は三分され、益州は疲弊しています。これは真に危機的な存亡の秋です。&text_language=all_ja
POST:
{
"text": "先帝が創業の途中で急逝し、今や世界は三分され、益州は疲弊しています。これは真に危機的な存亡の秋です。",
"text_language": "all_ja"
}
実行パラメータで指定された参照音声を使用し、分割記号を設定して推論を行います。GETまたはPOSTメソッドを使用できます:
GET:
http://127.0.0.1:9880?text=先帝が創業の途中で急逝し、今や世界は三分され、益州は疲弊しています。これは真に危機的な存亡の秋です。&text_language=all_ja&cut_punc=,。
POST:
{
"text":"先帝が創業の途中で急逝し、今や世界は三分され、益州は疲弊しています。これは真に危機的な存亡の秋です。",
"text_language": "all_ja",
"cut_punc": ",。"
}
この推論に使用する参照音声を手動で指定します。GETまたはPOSTメソッドを使用できます:
GET:
http://127.0.0.1:9880?refer_wav_path=123.wav&prompt_text=一二三。&prompt_language=all_ja&text=先帝が創業の途中で急逝し、今や世界は三分され、益州は疲弊しています。これは真に危機的な存亡の秋です。&text_language=all_ja&cut_punc=,。
POST:
{
"refer_wav_path": "まつお ばしょう.wav",
"prompt_text": "月日は百代の過客にして、行きかふ年も又旅人也。",
"prompt_language": "all_ja",
"text": "先帝が創業の途中で急逝し、今や世界は三分され、益州は疲弊しています。これは真に危機的な存亡の秋です。",
"text_language": "all_ja",
"cut_punc": ",。"
}
成功時、直接wav音声ストリームを返し、HTTPステータスコードは 200 です。失敗時、エラーメッセージを含むJSONを返し、HTTPステータスコードは 400 です。
デフォルト参照音声の変更
エンドポイント: /change_refer
使用するデフォルトの参照音声を手動で変更します。GETまたはPOSTメソッドを使用できます:
GET:
http://127.0.0.1:9880/change_refer?refer_wav_path=まつお ばしょう.wav&prompt_text=月日は百代の過客にして、行きかふ年も又旅人也。&prompt_language=all_ja
`
POST:
{
"refer_wav_path": "まつお ばしょう.wav",
"prompt_text": "月日は百代の過客にして、行きかふ年も又旅人也。",
"prompt_language": "all_ja"
}
成功時、JSONを返し、HTTPステータスコードは 200 です。失敗時、JSONを返し、HTTPステータスコードは 400 です。
コマンド制御
エンドポイント: /control
コマンドには、「restart」(再起動)と「exit」(終了)が含まれます。GETまたはPOSTメソッドを使用できます:
GET:
http://127.0.0.1:9880/control?command=restart
`
POST:
{
"command": "restart"
}
Todo リスト
-
優先度 高:
- 日本語と英語でのローカライズ。
- ユーザーガイド。
- 日本語データセットと英語データセットのファインチューニングトレーニング。
-
機能:
- ゼロショット音声変換(5 秒)/数ショット音声変換(1 分)。
- TTS スピーキングスピードコントロール。
- TTS の感情コントロールの強化。
- SoVITS トークン入力を語彙の確率分布に変更する実験。
- 英語と日本語のテキストフロントエンドを改善。
- 小型と大型の TTS モデルを開発する。
- Colab のスクリプト。
- トレーニングデータセットを拡張する(2k→10k)。
- より良い sovits ベースモデル(音質向上)
- モデルミックス
(オプション) 必要に応じて、コマンドライン操作モードが提供されます。
コマンド ラインを使用して UVR5 の WebUI を開きます
python tools/uvr5/webui.py "<infer_device>" <is_half> <webui_port_uvr5>
ブラウザを開けない場合は、以下の形式に従って UVR 処理を行ってください。これはオーディオ処理に mdxnet を使用しています。
python mdxnet.py --model --input_root --output_vocal --output_ins --agg_level --format --device --is_half_precision
コマンド ラインを使用してデータセットのオーディオ セグメンテーションを行う方法は次のとおりです。
python audio_slicer.py \
--input_path "<path_to_original_audio_file_or_directory>" \
--output_root "<directory_where_subdivided_audio_clips_will_be_saved>" \
--threshold <volume_threshold> \
--min_length <minimum_duration_of_each_subclip> \
--min_interval <shortest_time_gap_between_adjacent_subclips>
--hop_size <step_size_for_computing_volume_curve>
コマンドラインを使用してデータセット ASR 処理を行う方法です (中国語のみ)
python tools/asr/funasr_asr.py -i <input> -o <output>
ASR処理はFaster_Whisperを通じて実行されます(中国語を除くASRマーキング)
(進行状況バーは表示されません。GPU のパフォーマンスにより時間遅延が発生する可能性があります)
python ./tools/asr/fasterwhisper_asr.py -i <input> -o <output> -l <language>
カスタムリストの保存パスが有効になっています
クレジット
以下のプロジェクトとコントリビューターに感謝します:
- ar-vits
- SoundStorm
- vits
- TransferTTS
- Chinese Speech Pretrain
- contentvec
- hifi-gan
- Chinese-Roberta-WWM-Ext-Large
- fish-speech
- ultimatevocalremovergui
- audio-slicer
- SubFix
- FFmpeg
- gradio