tonnetonne814 / SiFi-VITS2-44100-Ja

DDPM-based Pitch Generation and Pitch Controllable Voice Synthesis.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

SiFi-VITS2-44100-Ja

DDPM-based Pitch Generation and Pitch Controllable Voice Synthesis.

このリポジトリは、主にunofficial VITS2SiFi-GAN、及びRMS Singerを参考にして作られた、実験用のTTS/SVSモデルです。Pitch生成モデルとTTS/SVSモデルは別々に学習を行います。推論の際には、SVSではustファイルから歌声を、TTSでは入力テキストから音声を合成します。また、ピッチの再生成によりピッチや声色の異なる音声生成をすることが可能です。最後に、TTSモデルで歌声を実験的に合成します。

Text-to-Speech model architecture

PitchDDPM architecture

⚠Work in Progress⚠

  • SVS dataset, preprocess for both
  • SVS dataset, training Synthesizer
  • SVS dataset, training PitchDDPM
  • SVS dataset, pretrain Synthesizer/PitchDDPM
  • inference(SVS Synthesizer and SVS PitchDDPM)
  • TTS dataset, preprocess for Synthesizer
  • TTS dataset, preprocess for PitchDDPM
  • TTS dataset, training Synthesizer
  • TTS dataset, training PitchDDPM
  • TTS dataset, pretrain Synthesizer/PitchDDPM
  • inference(TTS Synthesizer and TTS PitchDDPM)
  • inference(TTS Synthesizer and SVS PitchDDPM) ※experimental

1. 共通 - 環境構築

Anacondaによる実行環境構築を想定する。

  1. Anacondaで"SiFiVITS2"という名前の仮想環境を作成する。[y]or nを聞かれたら[y]を入力する。

    conda create -n SiFiVITS2 python=3.8    
  2. 仮想環境を有効化する。

    conda activate SiFiVITS2 
  3. このレポジトリをクローンする(もしくはDownload Zipでダウンロードする)

    git clone https://github.com/tonnetonne814/SiFi-VITS2-44100-Ja.git 
    cd SiFi-VITS2-44100-Ja # フォルダへ移動
  4. https://pytorch.org/のURLよりPyTorchをインストールする。

    # OS=Linux, CUDA=11.7 の例
    pip3 install torch torchvision torchaudio
  5. その他、必要なパッケージをインストールする。

    pip install -r requirements.txt 
  6. Monotonoic Alignment Searchをビルドする。

    cd monotonic_align
    mkdir monotonic_align
    python setup.py build_ext --inplace
    cd ..

2. データセットの準備

歌声データベースからは、波音リツ歌声データベースVer2、TTSデータからは、JSUT Speech datasetによるBasic5000音源、ITAコーパスによるEmotion音源とRecitation音源、及び自作データセット音源による、44100Hzでの学習を想定する。

  • 波音リツ歌声データベースVer2

    1. 波音リツ歌声データベースVer2をダウンロードおよび展開する。
    2. 展開したフォルダの中にある「波音リツ」歌声データベースVer2フォルダを指定して、以下を実行する。f0 methodは[crepe, harvest, parselmouth, dio]のどれかを入力する。
      python3 ./preprocess_svs.py --song_db_path ./path/to/jsut_ver1.1/「波音リツ」歌声データベースVer2/ --f0_method crepe --audio_normalize True
  • JSUT Basic5000

    1. JSUT Speech datasetをダウンロード及び展開する。
    2. 展開したフォルダの中にあるbasic5000フォルダを指定して、以下を実行する。f0 methodは[crepe, harvest, parselmouth, dio]のどれかを入力する。
      python3 ./preprocess_tts_synthesizer.py --dataset_name jsut --folder_path ./path/to/jsut_ver1.1/basic5000/ --f0_method crepe --audio_normalize True
  • ITAコーパス (例:あみたろの声素材工房 様)

    1. ITAコーパス読み上げ音声をダウンロードし、展開する。

    2. RECITATION音源が格納されているrecitationフォルダと、EMOTION音源が格納されているemotionフォルダを準備し、2つのフォルダが格納されているフォルダを指定して、以下を実行する。f0 methodは[crepe, harvest, parselmouth, dio]のどれかを入力する。

      python3 ./preprocess_tts_synthesizer.py --dataset_name ita --folder_path ./path/to/ita_corpus/ --f0_method crepe --audio_normalize True

      ⚠音源は、ファイル名の001や002等の3桁の数字で区別するので、3桁の数字を含むこと。

      ⚠音源を格納している2つのフォルダ名は、それぞれ”recitation”と"emotion"にすること。

  • 自作データセット(単一話者)

    1. 以下の要素に注意して、読み上げ音声を準備する。(What makes a good TTS datasetより)
      • テキストや発話の長さが正規分布感になってること。
      • テキストデータと発話音声に間違いがないこと。
      • 背景ノイズが無いこと。
      • 発話音声データ間で、話し方が似通っていること。
      • 使用する言語の音素を網羅していること。
      • 声色や音程の違い等をできるだけ自然に録音していること。
    2. ./dataset/homebrew/transcript_utf8.txtに、以下の形式で音源と発話テキストを記述してください。
      wavファイル名(拡張子無):発話テキスト 
    3. 用意した音源が格納されているフォルダを指定して、以下を実行する。f0 methodは[crepe, harvest, parselmouth, dio]のどれかを入力する。
      python3 ./preprocess_tts_synthesizer.py --dataset_name homebrew --folder_path ./path/to/wav_folder/ --f0_method crepe --audio_normalize True

3. configsフォルダ内のyamlを編集

主要なパラメータを説明します。必要であれば編集する。

パラメータ名 説明
log_interval 指定ステップ毎にロスを記録する
eval_interval 指定ステップ毎にモデル評価を行う
max_epochs 学習データ全体を学習する上限回数
batch_size 一度のパラメータ更新に使用する学習データ数
is_finetune ファインチューニングを行うかどうか(True/False)
finetune_G ファインチューニング用のGeneratorモデルパス
finetune_D ファインチューニング用のDiscriminatorモデルパス
finetune_DUR ファインチューニング用のDurationDiscriminatorモデルパス
training_files 学習用filelistのテキストパス
validation_files 検証用filelistのテキストパス
oto2lab_path 音節と音素の対応付ファイルパス
ph_statistics_path 歌声DB用の音素統計ファイルのパス(preprocess時に生成される)
noteid2hz_txt_path MIDIノート番号と周波数[Hz]の対応付ファイルパス

4. Synthesizerの学習

次のコマンドを入力することで、学習を開始する。

⚠CUDA Out of Memoryのエラーが出た場合には、config.jsonにてbatch_sizeを小さくする。

  • 波音リツ歌声データベースVer2

    python train_SVS_synthesizer.py -c configs/namine_DB.yaml -m namine_synthesizer
  • JSUT Basic5000

    python train_TTS_synthesizer.py -c configs/jsut.yaml -m jsut_synthesizer
  • ITAコーパス

    python train_TTS_synthesizer.py -c configs/ita.yaml -m ITA_synthesizer 
  • 自作データセット

    python train_TTS_synthesizer.py -c configs/homebrew.yaml -m homebrew_synthesizer

学習経過はターミナルにも表示されるが、tensorboardを用いて確認することで、生成音声の視聴や、スペクトログラム、各ロス遷移を目視で確認することができます。

tensorboard --logdir logs

5. PitchDDPMの学習

  • 波音リツ歌声データベースVer2
    python train_SVS_F0Diffusion.py -c configs/namine_DB.yaml -m namine_f0_diffusion
  • JSUT Basic5000
    # python train_TTS_F0Diffusion.py -c configs/jsut.yaml -m jsut_f0_diffusion
  • ITAコーパス
    # python train_TTS_F0Diffusion.py -c configs/ita.yaml -m ita_f0_diffusion
  • 自作データセット
    # python train_TTS_F0Diffusion.py -c configs/homebrew.yaml -m homebrew_f0_diffusion

学習経過はターミナルにも表示されるが、tensorboardを用いて確認することで、生成音声の視聴や、スペクトログラム、各ロス遷移を目視で確認することができます。

tensorboard --logdir logs

6. 推論

次のコマンドを入力することで、推論を開始する。各引数は適宜変更する。

  • SVSモデルでの歌声合成 (SVS synthesizer and SVS PitchDDPM)
python3 inference_svs.py --config ./path/to/config.json --F0diff_model_path ./path/to/F0Diff_G_model.pth --Synthesizer_model_path ./path/to/Synthesizer_G_model.pth --UST_path ./path/to/yourfile.ust --oto2lab_path ./oto2lab.table/ --ask_retake True 

生成された歌声は各フレーズ毎にinfer_logsフォルダ(存在しない場合は自動作成)に保存されます。また、ピッチに納得がいかない場合は、リテイクを行うことで、好みな歌い方になるまで。

  • TTSモデルでの音声合成 (TTS synthesizer and TTS PitchDDPM)
#python3 inference_tts.py --config ./path/to/config.json --F0diff_model_path ./path/to/F0Diff_G_model.pth --Synthesizer_model_path ./path/to/Synthesizer_G_model.pth --UST_path ./path/to/yourfile.ust --oto2lab_path ./oto2lab.table/ 
  • TTSモデルでの歌声合成 (TTS synthesizer and SVS PitchDDPM)
#python3 inference_svs_use_tts.py --config ./path/to/config.json --F0diff_model_path ./path/to/F0Diff_G_model.pth --Synthesizer_model_path ./path/to/Synthesizer_G_model.pth --UST_path ./path/to/yourfile.ust --oto2lab_path ./oto2lab.table/ 

7.ファインチューニング

ファインチューニングを行う場合は、config.yaml内のis_finetuneをtrueに変更し、config.yaml内のfinetune_G/D/DURに各モデルパスを記述し、「4. 学習」のコマンドで学習を開始することで、ファインチューニングを行うことが出来ます。

事前学習モデル

  • SVS Synthesizer (波音リツ歌声データベースVer2) 450k steps
  • SVS PitchDDPM (波音リツ歌声データベースVer2) 288k steps
  • TTS Synthesizer (JSUT Basic5000)
  • TTS PitchDDPM (JSUT Basic5000)

参考

About

DDPM-based Pitch Generation and Pitch Controllable Voice Synthesis.

License:MIT License


Languages

Language:Python 99.8%Language:Cython 0.2%