StableTTSでつくよみちゃんコーパスを使ってfine tuingをする

初めに

以下の記事でStableTTSで推論をしてみました。今回はfine tuingを行ってみます。

ayousanz.hatenadiary.jp

環境

  • L4 GPU
  • ubuntu22.04

準備

この辺は前の記事を同じですが、一応書いておきます

ライブラリのインストール

まずは動かすために必要なライブラリをインストールします

内部で音声周りの処理をするために依存しているライブラリを入れます

sudo apt update
sudo apt install ffmpeg

次に requirements.txt を入れるのですが、numpyが2.0.0が公開された影響でバグるので requirements.txt を変更して numpy<2にします

以下が変更した requirements.txtです

torch
torchaudio
matplotlib
numpy<2
tensorboard
pypinyin
jieba
eng_to_ipa
unidecode
inflect
pyopenjtalk-prebuilt
numba
tqdm
IPython
gradio
soundfile

モデルのアップロード

TTSの音声合成をするために、公式のモデルをダウンロードして配置をします。ただし日本語の事前学習モデルは公式から提供されていないため、今回は英語のモデルを使用します

事前学習モデルの取得URL

上記のURLから vocoder.ptcheckpoint-en_0.pt をダウンロードします。この際に checkpoint-en_0.ptcheckpoint_0.pt に名前を変更して、checkpoints/ 以下に配置します。また vocoder.ptはルートパスに配置します

プロジェクトルート/
│
├── checkpoints/
│   └── checkpoint_0.pt  (元の名前: checkpoint-en_0.pt)
│
└── vocoder.pt

音声ファイルのアップロードと学習用テキストの作成

fine tuingをするために、今回は つくよみちゃんコーパスを使用していきます。

以下の構成で、音声ファイル及び学習用のテキストを配置します

StableTTS/
│
├── filelists/
│   └── filelist.txt
│
└── audio/
    ├── VOICEACTRESS100_001.wav
    ├── VOICEACTRESS100_002.wav
    ├── VOICEACTRESS100_003.wav
    ├── VOICEACTRESS100_004.wav
    ├── VOICEACTRESS100_005.wav
    ├── VOICEACTRESS100_006.wav
    └── ....

また filelist.txt の中身は、以下のような書き方でファイルを作成をします

audio/VOICEACTRESS100_001.wav|また、東寺のように、五大明王と呼ばれる、主要な明王の中央に配されることも多い。
audio/VOICEACTRESS100_002.wav|ニューイングランド風は、牛乳をベースとした、白いクリームスープであり、ボストンクラムチャウダーとも呼ばれる。
audio/VOICEACTRESS100_003.wav|コンピュータゲームのメーカーや、業界団体などに関連する人物のカテゴリ。

前処理

音声のアップロードとテキストの配置が終わったら、前処理を実行します。

python preprocess.py

これが終了した際に、filelistの中に filelist.json が作成されていて以下のような内容になっています

{"mel_path": "./stableTTS_datasets/mels/0_VOICEACTRESS100_001.pt", "phone": ["m", "a", "", "t", "a", ",", " ", "t", "o", "", "o", "d", "ʑ", "i", "n", "o", " ", "j", "o", "", "o", "n", "^", "i", ",", " ", "g", "o", "", "d", "a", "i", " ", "m", "j", "o", "", "o", "o", "", "o", "t", "o", " ", "j", "o", "", "b", "a", "ɾ", "e", "ɾ", "ɯ", ",", " ", "ʃ", "ɯ", "", "j", "o", "o", "n", "a", " ", "m", "j", "o", "", "o", "o", "", "o", "n", "o", " ", "t", "ʃ", "ɯ", "", "ɯ", "o", "", "o", "n", "^", "i", " ", "h", "a", "", "i", "s", "a", "ɾ", "e", "ɾ", "ɯ", " ", "k", "o", "", "t", "o", "", "m", "o", " ", "o", "", "o", "i", "."], "audio_path": "audio/VOICEACTRESS100_001.wav", "text": "また、東寺のように、五大明王と呼ばれる、主要な明王の中央に配されることも多い。"}

fine tuningの実行

マルチGPUを使う際には、train.py の2行目の以下をコメントアウトを外して任意のGPUを指定してください

os.environ['CUDA_VISIBLE_DEVICES'] = '0,1'

学習時のパラメータは config.py になります。バッチサイズは、VRAM 24GBの場合は、48で良さそうです

以下のコマンドを実行することで、学習をすることができます

python train.py

学習が終了後は以下のようなモデルが checkpointsに生成されています。

  • checkpoint_ステップ数.pt
  • optimizer_ステップ数.pt

fine tuingモデルで推論

vocoder.pt を checkpointsに移動します。その後に以下を実行して、WebUIを起動します

python webui.py

学習後に指定するモデルは、checkpoint_ステップ数.pt を指定します。

事前学習をする場合

事前学習をする場合は、fine tuingをする際に配置した事前学習モデルを削除して学習をすれば事前学習ができます