Skip to content

Commit

Permalink
Merge pull request #133 from litagin02/dev
Browse files Browse the repository at this point in the history
Version 2.5.0
  • Loading branch information
litagin02 authored Jun 1, 2024
2 parents 2771fbd + aa66341 commit 250e83e
Show file tree
Hide file tree
Showing 63 changed files with 2,184 additions and 1,828 deletions.
3 changes: 2 additions & 1 deletion .dockerignore
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,13 @@
!/style_bert_vits2/

!/bert/deberta-v2-large-japanese-char-wwm/
!/common/
!/configs/
!/dict_data/default.csv
!/model_assets/
!/static/

!/config.py
!/default_config.yml
!/initialize.py
!/requirements.txt
!/server_editor.py
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -39,3 +39,5 @@ safetensors.ipynb

# pyopenjtalk's dictionary
*.dic

playground.ipynb
2 changes: 1 addition & 1 deletion Dockerfile.deploy
Original file line number Diff line number Diff line change
Expand Up @@ -20,4 +20,4 @@ COPY --chown=user . $HOME/app
RUN pip install --no-cache-dir -r $HOME/app/requirements.txt

# 必要に応じて制限を変更してください
CMD ["python", "server_editor.py", "--line_length", "50", "--line_count", "3"]
CMD ["python", "server_editor.py", "--line_length", "50", "--line_count", "3", "--skip_static_files"]
30 changes: 17 additions & 13 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,19 +1,21 @@
# Style-Bert-VITS2

**利用の際は必ず[利用規約](/docs/TERMS_OF_USE.md)をお読みください。**

Bert-VITS2 with more controllable voice styles.

https://github.com/litagin02/Style-Bert-VITS2/assets/139731664/e853f9a2-db4a-4202-a1dd-56ded3c562a0

You can install via `pip install style-bert-vits2` (inference only), see [library.ipynb](/library.ipynb) for example usage.

- **解説チュートリアル動画** [YouTube](https://youtu.be/aTUSzgDl1iY) [ニコニコ動画](https://www.nicovideo.jp/watch/sm43391524)
- [English README](docs/README_en.md)
- [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](http://colab.research.google.com/github/litagin02/Style-Bert-VITS2/blob/master/colab.ipynb)
- [FAQ](/docs/FAQ.md)
- [🤗 オンラインデモはこちらから](https://huggingface.co/spaces/litagin/Style-Bert-VITS2-Editor-Demo)
- [Zennの解説記事](https://zenn.dev/litagin/articles/034819a5256ff4)

- [**リリースページ**](https://github.com/litagin02/Style-Bert-VITS2/releases/)[更新履歴](/docs/CHANGELOG.md)

- 2024-06-01: Ver 2.5.0 (**[利用規約](/docs/TERMS_OF_USE.md)の追加**、フォルダ分けからのスタイル生成、小春音アミ・あみたろモデルの追加、インストールの高速化等)
- 2024-03-16: ver 2.4.1 (**batファイルによるインストール方法の変更**)
- 2024-03-15: ver 2.4.0 (大規模リファクタリングや種々の改良、ライブラリ化)
- 2024-02-26: ver 2.3 (辞書機能とエディター機能)
Expand All @@ -32,13 +34,15 @@ This repository is based on [Bert-VITS2](https://github.com/fishaudio/Bert-VITS2
- 入力されたテキストの内容をもとに感情豊かな音声を生成する[Bert-VITS2](https://github.com/fishaudio/Bert-VITS2)のv2.1とJapanese-Extraを元に、感情や発話スタイルを強弱込みで自由に制御できるようにしたものです。
- GitやPythonがない人でも(Windowsユーザーなら)簡単にインストールでき、学習もできます (多くを[EasyBertVits2](https://github.com/Zuntan03/EasyBertVits2/)からお借りしました)。またGoogle Colabでの学習もサポートしています: [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](http://colab.research.google.com/github/litagin02/Style-Bert-VITS2/blob/master/colab.ipynb)
- 音声合成のみに使う場合は、グラボがなくてもCPUで動作します。
- 音声合成のみに使う場合、Pythonライブラリとして`pip install style-bert-vits2`でインストールできます。例は[library.ipynb](/library.ipynb)を参照してください。
- 他との連携に使えるAPIサーバーも同梱しています ([@darai0512](https://github.com/darai0512) 様によるPRです、ありがとうございます)。
- 元々「楽しそうな文章は楽しそうに、悲しそうな文章は悲しそうに」読むのがBert-VITS2の強みですので、スタイル指定がデフォルトでも感情豊かな音声を生成することができます。


## 使い方

CLIでの使い方は[こちら](/docs/CLI.md)を参照してください。
- CLIでの使い方は[こちら](/docs/CLI.md)を参照してください。
- [よくある質問](/docs/FAQ.md)も参照してください。

### 動作環境

Expand All @@ -52,7 +56,7 @@ Pythonライブラリとしてのpipでのインストールや使用例は[libr

Windowsを前提としています。

1. [このzipファイル](https://github.com/litagin02/Style-Bert-VITS2/releases/download/2.4.1/sbv2.zip)**パスに日本語や空白が含まれない場所に**ダウンロードして展開します。
1. [このzipファイル](https://github.com/litagin02/Style-Bert-VITS2/releases/download/2.5.0/sbv2.zip)**パスに日本語や空白が含まれない場所に**ダウンロードして展開します。
- グラボがある方は、`Install-Style-Bert-VITS2.bat`をダブルクリックします。
- グラボがない方は、`Install-Style-Bert-VITS2-CPU.bat`をダブルクリックします。CPU版では学習はできませんが、音声合成とマージは可能です。
2. 待つと自動で必要な環境がインストールされます。
Expand All @@ -64,13 +68,17 @@ Windowsを前提としています。

#### GitやPython使える人

Pythonの仮想環境・パッケージ管理ツールである[uv](https://github.com/astral-sh/uv)がpipより高速なので、それを使ってインストールすることをお勧めします。
(使いたくない場合は通常のpipでも大丈夫です。)

```bash
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"
git clone https://github.com/litagin02/Style-Bert-VITS2.git
cd Style-Bert-VITS2
python -m venv venv
uv venv venv
uv pip install torch torchaudio --index-url https://download.pytorch.org/whl/cu118
uv pip install -r requirements.txt
venv\Scripts\activate
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
pip install -r requirements.txt
python initialize.py # 必要なモデルとデフォルトTTSモデルをダウンロード
```
最後を忘れずに。
Expand Down Expand Up @@ -116,20 +124,16 @@ model_assets
- `App.bat`をダブルクリックか`python app.py`したところの「データセット作成」タブから、音声ファイルを適切な長さにスライスし、その後に文字の書き起こしを自動で行えます。
- 指示に従った後、下の「学習」タブでそのまま学習を行うことができます。

注意: データセットの手動修正やノイズ除去等、細かい修正を行いたい場合は[Aivis](https://github.com/tsukumijima/Aivis)や、そのデータセット部分のWindows対応版 [Aivis Dataset](https://github.com/litagin02/Aivis-Dataset) を使うといいかもしれません。ですがファイル数が多い場合などは、このツールで簡易的に切り出してデータセットを作るだけでも十分という気もしています。

データセットがどのようなものがいいかは各自試行錯誤中してください。

#### 学習WebUI

- `App.bat`をダブルクリックか`python app.py`して開くWebUIの「学習」タブから指示に従ってください。

### スタイルの生成

- デフォルトスタイル「Neutral」以外のスタイルを使いたい人向けです。
- デフォルトでは、デフォルトスタイル「Neutral」の他、学習フォルダのフォルダ分けに応じたスタイルが生成されます。
- それ以外の方法で手動でスタイルを作成したい人向けです。
- `App.bat`をダブルクリックか`python app.py`して開くWebUIの「スタイル作成」タブから、音声ファイルを使ってスタイルを生成できます。
- 学習とは独立しているので、学習中でもできるし、学習が終わっても何度もやりなおせます(前処理は終わらせている必要があります)。
- スタイルについての仕様の詳細は[clustering.ipynb](clustering.ipynb)を参照してください。

### API Server

Expand Down
16 changes: 8 additions & 8 deletions app.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,14 @@

import gradio as gr
import torch
import yaml

from config import get_path_config
from gradio_tabs.dataset import create_dataset_app
from gradio_tabs.inference import create_inference_app
from gradio_tabs.merge import create_merge_app
from gradio_tabs.style_vectors import create_style_vectors_app
from gradio_tabs.train import create_train_app
from initialize import download_default_models
from style_bert_vits2.constants import GRADIO_THEME, VERSION
from style_bert_vits2.nlp.japanese import pyopenjtalk_worker
from style_bert_vits2.nlp.japanese.user_dict import update_dict
Expand All @@ -22,25 +23,25 @@
# dict_data/ 以下の辞書データを pyopenjtalk に適用
update_dict()

# Get path settings
with Path("configs/paths.yml").open("r", encoding="utf-8") as f:
path_config: dict[str, str] = yaml.safe_load(f.read())
# dataset_root = path_config["dataset_root"]
assets_root = path_config["assets_root"]

parser = argparse.ArgumentParser()
parser.add_argument("--device", type=str, default="cuda")
parser.add_argument("--host", type=str, default="127.0.0.1")
parser.add_argument("--port", type=int, default=None)
parser.add_argument("--no_autolaunch", action="store_true")
parser.add_argument("--share", action="store_true")
parser.add_argument("--skip_default_models", action="store_true")

args = parser.parse_args()
device = args.device
if device == "cuda" and not torch.cuda.is_available():
device = "cpu"

model_holder = TTSModelHolder(Path(assets_root), device)
if not args.skip_default_models:
download_default_models()

path_config = get_path_config()
model_holder = TTSModelHolder(Path(path_config.assets_root), device)

with gr.Blocks(theme=GRADIO_THEME) as app:
gr.Markdown(f"# Style-Bert-VITS2 WebUI (version {VERSION})")
Expand All @@ -56,7 +57,6 @@
with gr.Tab("マージ"):
create_merge_app(model_holder=model_holder)


app.launch(
server_name=args.host,
server_port=args.port,
Expand Down
15 changes: 6 additions & 9 deletions bert_gen.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,21 +5,18 @@
import torch.multiprocessing as mp
from tqdm import tqdm

from config import config
from config import get_config
from style_bert_vits2.constants import Languages
from style_bert_vits2.logging import logger
from style_bert_vits2.models import commons
from style_bert_vits2.models.hyper_parameters import HyperParameters
from style_bert_vits2.nlp import (
bert_models,
cleaned_text_to_sequence,
extract_bert_feature,
)
from style_bert_vits2.nlp import cleaned_text_to_sequence, extract_bert_feature
from style_bert_vits2.nlp.japanese import pyopenjtalk_worker
from style_bert_vits2.nlp.japanese.user_dict import update_dict
from style_bert_vits2.utils.stdout_wrapper import SAFE_STDOUT


config = get_config()
# このプロセスからはワーカーを起動して辞書を使いたいので、ここで初期化
pyopenjtalk_worker.initialize_worker()

Expand Down Expand Up @@ -61,7 +58,7 @@ def process_line(x: tuple[str, bool]):
bert = torch.load(bert_path)
assert bert.shape[-1] == len(phone)
except Exception:
bert = extract_bert_feature(text, word2ph, language_str, device)
bert = extract_bert_feature(text, word2ph, Languages(language_str), device)
assert bert.shape[-1] == len(phone)
torch.save(bert, bert_path)

Expand All @@ -77,10 +74,10 @@ def process_line(x: tuple[str, bool]):
config_path = args.config
hps = HyperParameters.load_from_json(config_path)
lines: list[str] = []
with open(hps.data.training_files, "r", encoding="utf-8") as f:
with open(hps.data.training_files, encoding="utf-8") as f:
lines.extend(f.readlines())

with open(hps.data.validation_files, "r", encoding="utf-8") as f:
with open(hps.data.validation_files, encoding="utf-8") as f:
lines.extend(f.readlines())
add_blank = [hps.data.add_blank] * len(lines)

Expand Down
316 changes: 0 additions & 316 deletions clustering.ipynb

This file was deleted.

Loading

0 comments on commit 250e83e

Please sign in to comment.