{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Style-Bert-VITS2 (ver 2.2) の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上に構築します。グラボモードが有効になっていることを確認し、以下のセルを順に実行してください。" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#@title このセルを実行して環境構築してください。\n", "#@markdown 最後に赤文字でエラーや警告が出ても何故かうまくいくみたいです。\n", "\n", "!git clone https://github.com/litagin02/Style-Bert-VITS2.git\n", "%cd Style-Bert-VITS2/\n", "!pip install -r requirements.txt\n", "!apt install libcublas11\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", "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", "!python slice.py -i {input_dir} -o {dataset_root}/{model_name}/raw\n", "!python transcribe.py -i {dataset_root}/{model_name}/raw -o {dataset_root}/{model_name}/esd.list --speaker_name {model_name} --compute_type float16" ] }, { "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" ] }, { "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 webui_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", " use_jp_extra=use_jp_extra,\n", " val_per_lang=0,\n", " log_interval=200,\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 webui_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": [ "#@title 学習結果を試すならここから\n", "!python app.py --share --dir {assets_root}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 5. スタイル分け" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "!python webui_style_vectors.py --share" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 6. マージ" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "!python webui_merge.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 }