This commit is contained in:
litagin02
2024-05-28 18:37:44 +09:00
parent e8691289bb
commit ceb431192c
7 changed files with 245 additions and 68 deletions

View File

@@ -1,385 +0,0 @@
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Style-Bert-VITS2 (ver 2.5.0) のGoogle Colabでの学習\n",
"\n",
"Google Colab上でStyle-Bert-VITS2の学習を行うことができます。\n",
"\n",
"このnotebookでは、通常使用ではあなたのGoogle Driveにフォルダ`Style-Bert-VITS2`を作り、その内部での作業を行います。他のフォルダには触れません。\n",
"Google Driveを使わない場合は、初期設定のところで適切なパスを指定してください。\n",
"\n",
"## 流れ\n",
"\n",
"### 学習を最初からやりたいとき\n",
"上から順に実行していけばいいです。音声合成に必要なファイルはGoogle Driveの`Style-Bert-VITS2/model_assets/`に保存されます。また、途中経過も`Style-Bert-VITS2/Data/`に保存されるので、学習を中断したり、途中から再開することもできます。\n",
"\n",
"### 学習を途中から再開したいとき\n",
"0と1を行い、3の前処理は飛ばして、4から始めてください。スタイル分け5は、学習が終わったら必要なら行ってください。\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 0. 環境構築\n",
"\n",
"Style-Bert-VITS2の環境をcolab上に構築します。グラボモードが有効になっていることを確認し、以下のセルを順に実行してください。\n",
"\n",
"**最近のcolabのアップデートにより、エラーダイアログ「WARNING: The following packages were previously imported in this runtime: [pydevd_plugins]」が出るが、「キャンセル」を選択して続行してください。**"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# このセルを実行して環境構築してください。\n",
"# エラーダイアログ「WARNING: The following packages were previously imported in this runtime: [pydevd_plugins]」が出るが「キャンセル」を選択して続行してください。\n",
"\n",
"!git clone https://github.com/litagin02/Style-Bert-VITS2.git\n",
"%cd Style-Bert-VITS2/\n",
"!pip install -r requirements.txt\n",
"!python initialize.py --skip_jvnv"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# Google driveを使う方はこちらを実行してください。\n",
"\n",
"from google.colab import drive\n",
"\n",
"drive.mount(\"/content/drive\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 1. 初期設定\n",
"\n",
"学習とその結果を保存するディレクトリ名を指定します。\n",
"Google driveの場合はそのまま実行、カスタマイズしたい方は変更して実行してください。"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"# 学習に必要なファイルや途中経過が保存されるディレクトリ\n",
"dataset_root = \"/content/drive/MyDrive/Style-Bert-VITS2/Data\"\n",
"\n",
"# 学習結果(音声合成に必要なファイルたち)が保存されるディレクトリ\n",
"assets_root = \"/content/drive/MyDrive/Style-Bert-VITS2/model_assets\"\n",
"\n",
"import yaml\n",
"\n",
"\n",
"with open(\"configs/paths.yml\", \"w\", encoding=\"utf-8\") as f:\n",
" yaml.dump({\"dataset_root\": dataset_root, \"assets_root\": assets_root}, f)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 2. 学習に使うデータ準備\n",
"\n",
"すでに音声ファイル1ファイル2-12秒程度とその書き起こしデータがある場合は2.2を、ない場合は2.1を実行してください。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 2.1 音声ファイルからのデータセットの作成(ある人はスキップ可)\n",
"\n",
"音声ファイル1ファイル2-12秒程度とその書き起こしのデータセットを持っていない方は、日本語の音声ファイルのみから以下の手順でデータセットを作成することができます。Google drive上の`Style-Bert-VITS2/inputs/`フォルダに音声ファイルwavファイル形式、1ファイルでも複数ファイルでも可を置いて、下を実行すると、データセットが作られ、自動的に正しい場所へ配置されます。"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# 元となる音声ファイルwav形式を入れるディレクトリ\n",
"input_dir = \"/content/drive/MyDrive/Style-Bert-VITS2/inputs\"\n",
"# モデル名(話者名)を入力\n",
"model_name = \"your_model_name\"\n",
"\n",
"# こういうふうに書き起こして欲しいという例文(句読点の入れ方・笑い方や固有名詞等)\n",
"initial_prompt = \"こんにちは。元気、ですかー?ふふっ、私は……ちゃんと元気だよ!\"\n",
"\n",
"!python slice.py -i {input_dir} --model_name {model_name}\n",
"!python transcribe.py --model_name {model_name} --initial_prompt {initial_prompt} --use_hf_whisper"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"成功したらそのまま3へ進んでください"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 2.2 音声ファイルと書き起こしデータがすでにある場合\n",
"\n",
"指示に従って適切にデータセットを配置してください。\n",
"\n",
"次のセルを実行して、学習データをいれるフォルダ1で設定した`dataset_root`)を作成します。"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"id": "esCNJl704h52"
},
"outputs": [],
"source": [
"import os\n",
"\n",
"os.makedirs(dataset_root, exist_ok=True)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"次に、学習に必要なデータを、Google driveに作成された`Style-Bert-VITS2/Data`フォルダに配置します。\n",
"\n",
"まず音声データwavファイルで1ファイルが2-12秒程度の、長すぎず短すぎない発話のものをいくつかと、書き起こしテキストを用意してください。wavファイル名やモデルの名前は空白を含まない半角で、wavファイルの拡張子は小文字`.wav`である必要があります。\n",
"\n",
"書き起こしテキストは、次の形式で記述してください。\n",
"```\n",
"****.wav|{話者名}|{言語ID、ZHかJPかEN}|{書き起こしテキスト}\n",
"```\n",
"\n",
"例:\n",
"```\n",
"wav_number1.wav|hanako|JP|こんにちは、聞こえて、いますか?\n",
"wav_next.wav|taro|JP|はい、聞こえています……。\n",
"english_teacher.wav|Mary|EN|How are you? I'm fine, thank you, and you?\n",
"...\n",
"```\n",
"日本語話者の単一話者データセットで構いません。\n",
"\n",
"### データセットの配置\n",
"\n",
"次にモデルの名前を適当に決めてください(空白を含まない半角英数字がよいです)。\n",
"そして、書き起こしファイルを`esd.list`という名前で保存し、またwavファイルも`raw`というフォルダを作成し、あなたのGoogle Driveの中の上で自動的に作られるはずの`Data`フォルダのなかに、次のように配置します。\n",
"```\n",
"├── Data\n",
"│ ├── {モデルの名前}\n",
"│ │ ├── esd.list\n",
"│ │ ├── raw\n",
"│ │ │ ├── ****.wav\n",
"│ │ │ ├── ****.wav\n",
"│ │ │ ├── ...\n",
"```"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "5r85-W20ECcr"
},
"source": [
"## 3. 学習の前処理\n",
"\n",
"次に学習の前処理を行います。必要なパラメータをここで指定します。次のセルに設定等を入力して実行してください。「~~かどうか」は`True`もしくは`False`を指定してください。"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"id": "CXR7kjuF5GlE"
},
"outputs": [],
"source": [
"# 上でつけたフォルダの名前`Data/{model_name}/`\n",
"model_name = \"your_model_name\"\n",
"\n",
"# JP-Extra (日本語特化版)を使うかどうか。日本語の能力が向上する代わりに英語と中国語は使えなくなります。\n",
"use_jp_extra = True\n",
"\n",
"# 学習のバッチサイズ。VRAMのはみ出具合に応じて調整してください。\n",
"batch_size = 4\n",
"\n",
"# 学習のエポック数(データセットを合計何周するか)。\n",
"# 100で多すぎるほどかもしれませんが、もっと多くやると質が上がるのかもしれません。\n",
"epochs = 100\n",
"\n",
"# 保存頻度。何ステップごとにモデルを保存するか。分からなければデフォルトのままで。\n",
"save_every_steps = 1000\n",
"\n",
"# 音声ファイルの音量を正規化するかどうか\n",
"normalize = False\n",
"\n",
"# 音声ファイルの開始・終了にある無音区間を削除するかどうか\n",
"trim = False\n",
"\n",
"# 読みのエラーが出た場合にどうするか。\n",
"# \"raise\"ならテキスト前処理が終わったら中断、\"skip\"なら読めない行は学習に使わない、\"use\"なら無理やり使う\n",
"yomi_error = \"skip\""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"上のセルが実行されたら、次のセルを実行して学習の前処理を行います。"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "xMVaOIPLabV5",
"outputId": "15fac868-9132-45d9-9f5f-365b6aeb67b0"
},
"outputs": [],
"source": [
"from gradio_tabs.train import preprocess_all\n",
"\n",
"preprocess_all(\n",
" model_name=model_name,\n",
" batch_size=batch_size,\n",
" epochs=epochs,\n",
" save_every_steps=save_every_steps,\n",
" num_processes=2,\n",
" normalize=normalize,\n",
" trim=trim,\n",
" freeze_EN_bert=False,\n",
" freeze_JP_bert=False,\n",
" freeze_ZH_bert=False,\n",
" freeze_style=False,\n",
" freeze_decoder=False, # ここをTrueにするともしかしたら違う結果になるかもしれません。\n",
" use_jp_extra=use_jp_extra,\n",
" val_per_lang=0,\n",
" log_interval=200,\n",
" yomi_error=yomi_error,\n",
")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 4. 学習\n",
"\n",
"前処理が正常に終わったら、学習を行います。次のセルを実行すると学習が始まります。\n",
"\n",
"学習の結果は、上で指定した`save_every_steps`の間隔で、Google Driveの中の`Style-Bert-VITS2/Data/{モデルの名前}/model_assets/`フォルダに保存されます。\n",
"\n",
"このフォルダをダウンロードし、ローカルのStyle-Bert-VITS2の`model_assets`フォルダに上書きすれば、学習結果を使うことができます。"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "laieKrbEb6Ij",
"outputId": "72238c88-f294-4ed9-84f6-84c1c17999ca"
},
"outputs": [],
"source": [
"# 上でつけたモデル名を入力。学習を途中からする場合はきちんとモデルが保存されているフォルダ名を入力。\n",
"model_name = \"your_model_name\"\n",
"\n",
"\n",
"import yaml\n",
"from gradio_tabs.train import get_path\n",
"\n",
"dataset_path, _, _, _, config_path = get_path(model_name)\n",
"\n",
"with open(\"default_config.yml\", \"r\", encoding=\"utf-8\") as f:\n",
" yml_data = yaml.safe_load(f)\n",
"yml_data[\"model_name\"] = model_name\n",
"with open(\"config.yml\", \"w\", encoding=\"utf-8\") as f:\n",
" yaml.dump(yml_data, f, allow_unicode=True)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# 日本語特化版を「使う」場合\n",
"!python train_ms_jp_extra.py --config {config_path} --model {dataset_path} --assets_root {assets_root}"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# 日本語特化版を「使わない」場合\n",
"!python train_ms.py --config {config_path} --model {dataset_path} --assets_root {assets_root}"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "c7g0hrdeP1Tl",
"outputId": "94f9a6f6-027f-4554-ce0c-60ac56251c22"
},
"outputs": [],
"source": [
"# 学習結果を試す・マージ・スタイル分けはこちらから\n",
"!python app.py --share"
]
}
],
"metadata": {
"accelerator": "GPU",
"colab": {
"gpuType": "T4",
"provenance": []
},
"kernelspec": {
"display_name": "Python 3",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.10.11"
}
},
"nbformat": 4,
"nbformat_minor": 0
}