- 初めに
- 環境
- 準備
- ライブラリのインストール
- モデルのアップロード
- 音声ファイルのアップロードと学習用テキストの作成
- 前処理
- fine tuningの実行
- fine tuingモデルで推論
- 事前学習をする場合
初めに
以下の記事でStableTTSで推論をしてみました。今回はfine tuingを行ってみます。
環境
- 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から vocoder.pt
とcheckpoint-en_0.pt
をダウンロードします。この際に checkpoint-en_0.pt
は checkpoint_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をする際に配置した事前学習モデルを削除して学習をすれば事前学習ができます