Spaces:
Running
A newer version of the Gradio SDK is available:
5.4.0
title: Style Bert VITS2 AK
emoji: 📈
colorFrom: green
colorTo: indigo
sdk: gradio
sdk_version: 4.40.0
app_file: app.py
pinned: false
license: apache-2.0
Style-Bert-VITS2
Bert-VITS2 with more controllable voice styles.
https://github.com/litagin02/Style-Bert-VITS2/assets/139731664/e853f9a2-db4a-4202-a1dd-56ded3c562a0
-
- 2024-02-09: ver 2.2
- 2024-02-07: ver 2.1
- 2024-02-03: ver 2.0
- 2024-01-09: ver 1.3
- 2023-12-31: ver 1.2
- 2023-12-29: ver 1.1
- 2023-12-27: ver 1.0
This repository is based on Bert-VITS2 v2.1 and Japanese-Extra, so many thanks to the original author!
概要
- 入力されたテキストの内容をもとに感情豊かな音声を生成するBert-VITS2のv2.1とJapanese-Extraを元に、感情や発話スタイルを強弱込みで自由に制御できるようにしたものです。
- GitやPythonがない人でも(Windowsユーザーなら)簡単にインストールでき、学習もできます (多くをEasyBertVits2からお借りしました)。またGoogle Colabでの学習もサポートしています:
- 音声合成のみに使う場合は、グラボがなくてもCPUで動作します。
- 他との連携に使えるAPIサーバーも同梱しています (@darai0512 様によるPRです、ありがとうございます)。
- 元々「楽しそうな文章は楽しそうに、悲しそうな文章は悲しそうに」読むのがBert-VITS2の強みですので、スタイル指定がデフォルトでも感情豊かな音声を生成することができます。
使い方
動作環境
各UIとAPI Serverにおいて、Windows コマンドプロンプト・WSL2・Linux(Ubuntu Desktop)での動作を確認しています(WSLでのパス指定は相対パスなど工夫ください)。NVidiaのGPUが無い場合は学習はできませんが音声合成とマージは可能です。
インストール
GitやPythonに馴染みが無い方
Windowsを前提としています。
- このzipファイルをパスに日本語や空白が含まれない場所にダウンロードして展開します。
- グラボがある方は、
Install-Style-Bert-VITS2.bat
をダブルクリックします。 - グラボがない方は、
Install-Style-Bert-VITS2-CPU.bat
をダブルクリックします。CPU版では学習はできませんが、音声合成とマージは可能です。
- 待つと自動で必要な環境がインストールされます。
- その後、自動的に音声合成するためのWebUIが起動したらインストール成功です。デフォルトのモデルがダウンロードされるているので、そのまま遊ぶことができます。
またアップデートをしたい場合は、Update-Style-Bert-VITS2.bat
をダブルクリックしてください。ただし1.xから2.xへアップデートする場合は、このbatファイルをStyle-Bert-VITS2
フォルダがあるフォルダ(Update-Style-Bert-VITS2.bat
等があるフォルダ)へ保存してからダブルクリックしてください。
GitやPython使える人
git clone https://github.com/litagin02/Style-Bert-VITS2.git
cd Style-Bert-VITS2
python -m venv venv
venv\Scripts\activate
# PyTorch 2.2.x系は今のところは学習エラーが出るので前のバージョンを使う
pip install torch==2.1.2 torchvision==0.16.2 torchaudio==2.1.2 --index-url https://download.pytorch.org/whl/cu118
pip install -r requirements.txt
python initialize.py # 必要なモデルとデフォルトTTSモデルをダウンロード
最後を忘れずに。
音声合成
App.bat
をダブルクリックか、python app.py
するとWebUIが起動します(python app.py --cpu
でCPUモードで起動、学習中チェックに便利です)。インストール時にデフォルトのモデルがダウンロードされているので、学習していなくてもそれを使うことができます。
音声合成に必要なモデルファイルたちの構造は以下の通りです(手動で配置する必要はありません)。
model_assets
├── your_model
│ ├── config.json
│ ├── your_model_file1.safetensors
│ ├── your_model_file2.safetensors
│ ├── ...
│ └── style_vectors.npy
└── another_model
├── ...
このように、推論にはconfig.json
と*.safetensors
とstyle_vectors.npy
が必要です。モデルを共有する場合は、この3つのファイルを共有してください。
このうちstyle_vectors.npy
はスタイルを制御するために必要なファイルで、学習の時にデフォルトで平均スタイル「Neutral」が生成されます。
複数スタイルを使ってより詳しくスタイルを制御したい方は、下の「スタイルの生成」を参照してください(平均スタイルのみでも、学習データが感情豊かならば十分感情豊かな音声が生成されます)。
学習
学習には2-14秒程度の音声ファイルが複数と、それらの書き起こしデータが必要です。
- 既存コーパスなどですでに分割された音声ファイルと書き起こしデータがある場合はそのまま(必要に応じて書き起こしファイルを修正して)使えます。下の「学習WebUI」を参照してください。
- そうでない場合、(長さは問わない)音声ファイルのみがあれば、そこから学習にすぐに使えるようにデータセットを作るためのツールを同梱しています。
データセット作り
Dataset.bat
をダブルクリックかpython webui_dataset.py
すると、音声ファイルからデータセットを作るためのWebUIが起動します(音声ファイルを適切な長さにスライスし、その後に文字の書き起こしを自動で行います)。- 指示に従った後、閉じて下の「学習WebUI」でそのまま学習を行うことができます。
注意: データセットの手動修正やノイズ除去等、細かい修正を行いたい場合はAivisや、そのデータセット部分のWindows対応版 Aivis Dataset を使うといいかもしれません。ですがファイル数が多い場合などは、このツールで簡易的に切り出してデータセットを作るだけでも十分という気もしています。
データセットがどのようなものがいいかは各自試行錯誤中してください。
学習WebUI
Train.bat
をダブルクリックかpython webui_train.py
するとWebUIが起動するので指示に従ってください。
スタイルの生成
- デフォルトスタイル「Neutral」以外のスタイルを使いたい人向けです。
Style.bat
をダブルクリックかpython webui_style_vectors.py
するとWebUIが起動します。- 学習とは独立しているので、学習中でもできるし、学習が終わっても何度もやりなおせます(前処理は終わらせている必要があります)。
- スタイルについての仕様の詳細はclustering.ipynbを参照してください。
API Server
構築した環境下でpython server_fastapi.py
するとAPIサーバーが起動します。
API仕様は起動後に/docs
にて確認ください。
- 入力文字数はデフォルトで100文字が上限となっています。これは
config.yml
のserver.limit
で変更できます。 - デフォルトではCORS設定を全てのドメインで許可しています。できる限り、
config.yml
のserver.origins
の値を変更し、信頼できるドメインに制限ください(キーを消せばCORS設定を無効にできます)。
マージ
2つのモデルを、「声質」「声の高さ」「感情表現」「テンポ」の4点で混ぜ合わせて、新しいモデルを作ることが出来ます。
Merge.bat
をダブルクリックかpython webui_merge.py
するとWebUIが起動します。
自然性評価
学習結果のうちどのステップ数がいいかの「一つの」指標として、SpeechMOS を使うスクリプトを用意しています:
python speech_mos.py -m <model_name>
ステップごとの自然性評価が表示され、mos_results
フォルダのmos_{model_name}.csv
とmos_{model_name}.png
に結果が保存される。読み上げさせたい文章を変えたかったら中のファイルを弄って各自調整してください。またあくまでアクセントや感情表現や抑揚を全く考えない基準での評価で、目安のひとつなので、実際に読み上げさせて選別するのが一番だと思います。
Bert-VITS2との関係
基本的にはBert-VITS2のモデル構造を少し改造しただけです。旧事前学習モデルもJP-Extraの事前学習モデルも、実質Bert-VITS2 v2.1 or JP-Extraと同じものを使用しています(不要な重みを削ってsafetensorsに変換したもの)。
具体的には以下の点が異なります。
- EasyBertVits2のように、PythonやGitを知らない人でも簡単に使える。
- 感情埋め込みのモデルを変更(256次元のwespeaker-voxceleb-resnet34-LMへ、感情埋め込みというよりは話者識別のための埋め込み)
- 感情埋め込みもベクトル量子化を取り払い、単なる全結合層に。
- スタイルベクトルファイル
style_vectors.npy
を作ることで、そのスタイルを使って効果の強さも連続的に指定しつつ音声を生成することができる。 - 各種WebUIを作成
- bf16での学習のサポート
- safetensors形式のサポート、デフォルトでsafetensorsを使用するように
- その他軽微なbugfixやリファクタリング
TODO
- デフォルトのJVNVモデルにJP-Extra版のものを追加
- LinuxやWSL等、Windowsの通常環境以外でのサポート ← おそらく問題ないとの報告あり
- 複数話者学習での音声合成対応(学習は現在でも可能)
-
server_fastapi.py
の対応、とくにAPIで使えるようになると嬉しい人が増えるのかもしれない - モデルのマージで声音と感情表現を混ぜる機能の実装
- 英語等多言語対応?
References
In addition to the original reference (written below), I used the following repositories:
The pretrained model and JP-Extra version is essentially taken from the original base model of Bert-VITS2 v2.1 and JP-Extra pretrained model of Bert-VITS2, so all the credits go to the original author (Fish Audio):
Below is the original README.md.
Bert-VITS2
VITS2 Backbone with multilingual bert
For quick guide, please refer to webui_preprocess.py
.
简易教程请参见 webui_preprocess.py
。
请注意,本项目核心思路来源于anyvoiceai/MassTTS 一个非常好的tts项目
MassTTS的演示demo为ai版峰哥锐评峰哥本人,并找回了在金三角失落的腰子
成熟的旅行者/开拓者/舰长/博士/sensei/猎魔人/喵喵露/V应当参阅代码自己学习如何训练。
严禁将此项目用于一切违反《中华人民共和国宪法》,《中华人民共和国刑法》,《中华人民共和国治安管理处罚法》和《中华人民共和国民法典》之用途。
严禁用于任何政治相关用途。
Video:https://www.bilibili.com/video/BV1hp4y1K78E
Demo:https://www.bilibili.com/video/BV1TF411k78w
QQ Group:815818430
References
- anyvoiceai/MassTTS
- jaywalnut310/vits
- p0p4k/vits2_pytorch
- svc-develop-team/so-vits-svc
- PaddlePaddle/PaddleSpeech
- emotional-vits
- fish-speech
- Bert-VITS2-UI