PytorchによるVITSの実装です。
日本語音声のデータセット"JVS corpus"で学習し
- テキストの読み上げ
- 音声間の変換
を行うことができます。
モデルの詳しい解説と音声生成例についてはこちらを参照。
- Ubuntu20.04
- Python 3.10.0
- torch==1.13.1+cu117
- torchaudio==0.13.1+cu117
ライブラリの詳細はrequirements.txtを参照。
ライブラリはpipによるインストールを推奨します。
jvs_preprocessor.pyはJVS corpusに対し前処理を行うプログラムです。vits_train.pyは前処理済みデータセットを読み込み学習を実行し、学習の過程と学習済みパラメーターを出力するプログラムです。vits_text_to_speech.pyはvits_train.pyで出力した学習済みパラメーターを読み込み、推論(テキストから音声の生成)を実行、結果を.wav形式で出力するプログラムです。vits_voice_converter.pyはvits_train.pyで出力した学習済みパラメーターを読み込み、推論(音声間の変換)を実行、結果を.wav形式で出力するプログラムです。
- JVS corpusをダウンロード、解凍します。
jvs_preprocessor.pyの16行目付近の変数jvs_dataset_pathで、解凍したJVS corpusへのパスを指定します。python jvs_preprocessor.pyを実行し前処理を実行します。- データセット中の各
.wavファイルがサンプリングレート22050[Hz]へと変換され、./dataset/jvs_preprocessed/jvs_wav_preprocessed/以下に出力されます。 - 前処理済み各
.wavファイルへのパスと、それに対応するラベルが列挙されたファイルが./dataset/jvs_preprocessed/jvs_preprocessed_for_train.txtとして出力されます。
- データセット中の各
モジュールmonotonic_alignは高速化のためCythonで実装されています。これをコンパイルします。
cd ./module/model_component/monotonic_align/を実行します。mkdir monotonic_alignを実行します。python setup.py build_ext --inplaceでCythonで書かれたモジュールのコンパイルを行います。
python vits_train.pyを実行しVITSの学習を行います。- 学習過程が
./output/vits/train/以下に出力されます。 - 学習済みパラメーターが
./output/vits/train/iteration295000/netG_cpu.pthなどという形で5000イテレーション毎に出力されます。
- 学習過程が
vits_text_to_speech.pyの39行目付近の変数trained_weight_pathにvits_train.pyで出力した学習済みパラメーターへのパスを指定します。vits_text_to_speech.pyの41行目付近の変数source_textに発話させたい文章を指定します。vits_text_to_speech.pyの43行目付近の変数target_speaker_idに発話の対象とする話者idを指定します。- 話者idは(JVS corpusで決められている話者の番号-1)となります。例えば"jvs010"の話者を指定したい場合は、話者idは9となります。
python vits_text_to_speech.pyを実行しテキストの読み上げを行います。- 生成結果が
./output/vits/inference/text_to_speech/output.wavとして出力されます。
- 生成結果が
vits_voice_converter.pyの37行目付近の変数trained_weight_pathにvits_train.pyで出力した学習済みパラメーターへのパスを指定します。vits_voice_converter.pyの39行目付近の変数source_wav_pathに変換元としたいwavファイルへのパスを指定します。vits_voice_converter.pyの41行目付近の変数source_speaker_idに変換元の話者idを指定します。vits_voice_converter.pyの43行目付近の変数target_speaker_idに変換先の話者idを指定します。python vits_voice_converter.pyを実行し推論(音声変換)を行います。- 変換結果が
./output/vits/inference/voice_conversion/output.wavとして出力されます。
- 変換結果が
https://arxiv.org/abs/2106.06103
https://github.com/jaywalnut310/vits