DDPM-based Pitch Generation and Pitch Controllable Voice Synthesis.
このリポジトリは、主にunofficial VITS2、SiFi-GAN、及びRMS Singerを参考にして作られた、実験用のTTS/SVSモデルです。Pitch生成モデルとTTS/SVSモデルは別々に学習を行います。推論の際には、SVSではustファイルから歌声を、TTSでは入力テキストから音声を合成します。また、ピッチの再生成によりピッチや声色の異なる音声生成をすることが可能です。最後に、TTSモデルで歌声を実験的に合成します。
- 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
Anacondaによる実行環境構築を想定する。
-
Anacondaで"SiFiVITS2"という名前の仮想環境を作成する。[y]or nを聞かれたら[y]を入力する。
conda create -n SiFiVITS2 python=3.8
-
仮想環境を有効化する。
conda activate SiFiVITS2
-
このレポジトリをクローンする(もしくはDownload Zipでダウンロードする)
git clone https://github.com/tonnetonne814/SiFi-VITS2-44100-Ja.git cd SiFi-VITS2-44100-Ja # フォルダへ移動
-
https://pytorch.org/のURLよりPyTorchをインストールする。
# OS=Linux, CUDA=11.7 の例 pip3 install torch torchvision torchaudio
-
その他、必要なパッケージをインストールする。
pip install -r requirements.txt
-
Monotonoic Alignment Searchをビルドする。
cd monotonic_align mkdir monotonic_align python setup.py build_ext --inplace cd ..
歌声データベースからは、波音リツ歌声データベースVer2、TTSデータからは、JSUT Speech datasetによるBasic5000音源、ITAコーパスによるEmotion音源とRecitation音源、及び自作データセット音源による、44100Hzでの学習を想定する。
-
波音リツ歌声データベースVer2
- 波音リツ歌声データベースVer2をダウンロードおよび展開する。
- 展開したフォルダの中にある「波音リツ」歌声データベース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
- JSUT Speech datasetをダウンロード及び展開する。
- 展開したフォルダの中にある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コーパス (例:あみたろの声素材工房 様)
-
ITAコーパス読み上げ音声をダウンロードし、展開する。
-
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"にすること。
-
-
自作データセット(単一話者)
- 以下の要素に注意して、読み上げ音声を準備する。(What makes a good TTS datasetより)
- テキストや発話の長さが正規分布感になってること。
- テキストデータと発話音声に間違いがないこと。
- 背景ノイズが無いこと。
- 発話音声データ間で、話し方が似通っていること。
- 使用する言語の音素を網羅していること。
- 声色や音程の違い等をできるだけ自然に録音していること。
./dataset/homebrew/transcript_utf8.txt
に、以下の形式で音源と発話テキストを記述してください。wavファイル名(拡張子無):発話テキスト
- 用意した音源が格納されているフォルダを指定して、以下を実行する。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
- 以下の要素に注意して、読み上げ音声を準備する。(What makes a good TTS datasetより)
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]の対応付ファイルパス |
次のコマンドを入力することで、学習を開始する。
⚠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
- 波音リツ歌声データベース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
次のコマンドを入力することで、推論を開始する。各引数は適宜変更する。
- 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/
ファインチューニングを行う場合は、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)
- SiFi-GAN : Official implementation of the source-filter HiFiGAN vocoder
- VITS2 : unofficial vits2-TTS implementation in pytorch
- RMS Singer : Realistic-Music-Score based Singing Voice Synthesis
- Improved Denoising Diffusion Probabilistic Models
- multinomial_diffusion
- FastDiff : PyTorch Implementation of FastDiff (IJCAI'22)
- Diffusers: State-of-the-art diffusion models for image and audio generation in PyTorch
- VISinger : Use VITS and Opencpop to develop singing voice synthesis; Different from VISinger.
- FastSpeech 2 : Fast and High-Quality End-to-End Text to Speech
- ESPNet : End-to-End Speech Processing Toolkit
- JETS: Jointly Training FastSpeech2 and HiFi-GAN for End to End Text to Speech
- Fish Diffusion : An easy to understand TTS / SVS / SVC framework
- RVC : Retrieval-based-Voice-Conversion-WebUI-main
- so-vits-svc 4.0 : SoftVC VITS Singing Voice Conversion