MB-iSTFT-VITS: Lightweight and High-Fidelity End-to-End Text-to-Speech with Multi-Band Generation and Inverse Short-Time Fourier Transform
このリポジトリは、 44100Hzの日本語音声を学習および出力できるように編集したMB-iSTFT-VITSです。44100Hzに対応させた際、pseudo-QMFを用いた合成では定周波ノイズが発生したため、合成フィルタを学習パラメータにすることで柔軟に対応できるようにしたMS-iSTFT-VITS実装のみを対象にしています。
サンプル視聴 : JSUT 2000 Epoch sample / 生成時間 : 約0.04[秒](A6000)
Anacondaによる実行環境構築を想定する。
-
Anacondaで"MB-iSTFT-VITS"という名前の仮想環境を作成する。[y]or nを聞かれたら[y]を入力する。
conda create -n MB-iSTFT-VITS python=3.8
-
仮想環境を有効化する。
conda activate MB-iSTFT-VITS
-
このレポジトリをクローンする(もしくはDownload Zipでダウンロードする)
git clone https://github.com/tonnetonne814/MB-iSTFT-VITS-44100-Ja.git cd MB-iSTFT-VITS-44100-Ja # フォルダへ移動
-
https://pytorch.org/のURLよりPyTorch1.13.1をインストールする(_VF.stftの部分でエラーで止まったら違うバージョンに変える)
# OS=Linux, CUDA=11.7 の例 pip install torch==1.13.1+cu117 torchvision==0.14.1+cu117 torchaudio==0.13.1 --extra-index-url https://download.pytorch.org/whl/cu117
-
その他、必要なパッケージをインストールする。
pip install -r requirements.txt
-
Monotonoic Alignment Searchをビルドする。
cd monotonic_align mkdir monotonic_align python setup.py build_ext --inplace cd ..
JSUT Speech datasetによるBasic5000音源、ITAコーパスによるEmotion音源とRecitation音源、及び自作データセット音源による、44100Hzでの学習を想定する。
-
JSUT Basic5000
- JSUT Speech datasetをダウンロード及び展開する。
- 展開したフォルダの中にあるbasic5000フォルダを指定して、以下を実行する。
python3 ./dataset/preprocess.py --dataset_name jsut --folder_path ./path/to/jsut_ver1.1/basic5000/ --sampling_rate 44100
-
ITAコーパス (例:あみたろの声素材工房 様)
-
ITAコーパス読み上げ音声をダウンロードし、展開する。
-
RECITATION音源が格納されているrecitationフォルダと、EMOTION音源が格納されているemotionフォルダを準備し、2つのフォルダが格納されているフォルダを指定して、以下を実行する。
python3 ./dataset/preprocess.py --dataset_name ita --folder_path ./path/to/ita_corpus/ --sampling_rate 44100
⚠音源は、ファイル名の001や002等の3桁の数字で区別するので、3桁の数字を含むこと。
⚠音源を格納している2つのフォルダ名は、それぞれ”recitation”と"emotion"にすること。
-
-
自作データセット(単一話者)
- 以下の要素に注意して、読み上げ音声を準備する。(What makes a good TTS datasetより)
- テキストや発話の長さが正規分布感になってること。
- テキストデータと発話音声に間違いがないこと。
- 背景ノイズが無いこと。
- 発話音声データ間で、話し方が似通っていること。
- 使用する言語の音素を網羅していること。
- 声色や音程の違い等をできるだけ自然に録音していること。
./dataset/homebrew/transcript_utf8.txt
に、以下の形式で音源と発話テキストを記述してください。wavファイル名(拡張子無):発話テキスト
- 用意した音源が格納されているフォルダを指定して、以下を実行する。
python3 dataset/preprocess.py --dataset_name homebrew --folder_path ./path/to/wav_folder/ --sampling_rate 44100
- 以下の要素に注意して、読み上げ音声を準備する。(What makes a good TTS datasetより)
3. configsフォルダ内のjsonを編集
主要なパラメータを説明します。必要であれば編集する。
分類 | パラメータ名 | 説明 |
---|---|---|
train | log_interval | 指定ステップ毎にロスを算出し記録する |
train | eval_interval | 指定ステップ毎にモデル評価を行う |
train | epochs | 学習データ全体を学習する回数 |
train | batch_size | 一度のパラメータ更新に使用する学習データ数 |
train | finetune_model_dir | ファインチューニング用のcheckpointsが入っているフォルダ |
data | training_files | 学習用filelistのテキストパス |
data | validation_files | 検証用filelistのテキストパス |
次のコマンドを入力することで、学習を開始する。
⚠CUDA Out of Memoryのエラーが出た場合には、config.jsonにてbatch_sizeを小さくする。
-
JSUT Basic5000
python train_latest.py -c configs/jsut_44100.json -m JSUT_BASIC5000
-
ITAコーパス
python train_latest.py -c configs/ita_44100.json -m ITA_CORPUS
-
自作データセット
python train_latest.py -c configs/homebrew_44100.json -m homebrew_dataset
学習経過はターミナルにも表示されるが、tensorboardを用いて確認することで、生成音声の視聴や、スペクトログラム、各ロス遷移を目視で確認することができます。
tensorboard --logdir logs
次のコマンドを入力することで、推論を開始する。config.jsonへのパスと、生成器モデルパスを指定する。
python3 inference.py --config ./path/to/config.json --model_path ./path/to/G_xxx.pth
Terminal上にて使用するデバイスを選択後、テキストを入力することで、音声が生成さされます。音声は自動的に再生され、infer_logsフォルダ(存在しない場合は自動作成)に保存されます。
ファインチューニングを行う場合は、生成器モデルのcheckpointをG_finetune.pth、識別器モデルのcheckpointsをD_finetune.pthに名前を変更し、config.jsonで記述しているfinetune_model_dirフォルダ内へと配置する。その後、「4. 学習」のコマンドで学習を開始することで、ファインチューニングを行うことが出来ます。ファインチューニングの際には事前学習モデルを使用するのがオススメです。
ダウンロード:
-
FullBand化におけるMB-iSTFT-VITSの定周波ノイズについて。
MB-iSTFT-VITSでは、ピー(ファの音あたり)という定周波ノイズが発生し、スペクトログラムに横線が入ってしまったが、MS-iSTFT-VITSの方では発生しませんでした。モデル設定は共通にしてあるので、学習可能なフィルタが貢献しているかもしれません。