PITS: Variational Pitch Inference without Fundamental Frequency for End-to-End Pitch-controllable TTS
このリポジトリは、 44100Hzの日本語音声を学習および出力できるように編集したPITSです。初期状態ではベクトル量子化処理無しのPITS(A+D)版ですが、models.pyのfor Q optionと記載されている部分のコードを数行変更すれば、PITS(A+D+Q)版へと変更が可能です。
Anacondaによる実行環境構築を想定します。
- Anacondaで"PITS"という名前の仮想環境を作成する。[y]or nを聞かれたら[y]を入力する。
conda create -n PITS python=3.8
- 仮想環境を有効化する。
conda activate PITS
- このリポジトリをクローンする(もしくはDownload Zipでダウンロードする)
git clone https://github.com/tonnetonne814/PITS-44100-Ja.git cd PITS-44100-Ja # フォルダ移動
- PyTorch.orgより、自分の環境に合わせて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
JVSコーパスによる、parallel100(話者間で共通する読み上げ音声 100 発話)、及びnonpara30(話者間で全く異なる読み上げ音声 30 発話)の学習を想定します。
-
こちらからJVSコーパスをダウンロード&解凍する。
-
発話音声ファイルのサンプリングレートを44100Hzに変更する。path/to/〜となっている部分は適宜変更する。
python3 ./dataset/preprocess.py --folder_path path/to/jvs_ver1/ --sampling_rate 44100
⚠path/to/jvs_ver1/ には、jvsコーパスの各話者の発話フォルダ[jvs001,jvs002, ... ,jvs100]が格納されているフォルダパスを指定する。
3. configsフォルダ内のjsonを編集
主要なパラメータを下表に記載します。
分類 | パラメータ名 | 説明 |
---|---|---|
train | log_interval | 指定ステップ毎にロスを算出し記録する |
train | eval_interval | 指定ステップ毎にモデル評価を行う |
train | save_interval | 指定ステップ毎にモデル保存を行う |
train | epochs | 学習データ全体の学習回数 |
train | batch_size | 一回のパラメータ更新に使用する学習データの数 |
data | data_path | jvs話者フォルダが格納されているフォルダパス(preprocess.pyで使用したpath/to/jvs_ver1/の値) |
data | training_files | 学習用filelistのテキストパス |
data | validation_files | 検証用filelistのテキストパス |
data | speakers | 話者名のリスト |
config_ja_44100.yaml内の、data部分のdata_pathの値を、「2. データセットの準備」部分のpreprocess.pyに使用したjvsフォルダパスに書き換えます。
44100HzでのPITS(A+D)版の学習を想定します。Terminalに以下を入力し、学習を開始する。path/to/〜となっている部分は適宜変更する。
python3 train.py --config ./configs/config_ja_44100.yaml --model PITS_A+D
# 途中から学習を開始する場合は、--resume path/to/checkpoint.pt を追加する
このとき、nonpara30について、書き起こし文(transcripts_utf8.txt)と実際に格納されているwavファイルが一致しないものは除外する処理が入っています。
学習経過はターミナルにも表示されるが、tensorboardを用いて確認することで、生成音声の視聴や、スペクトログラムやYingramや各ロス遷移を目視で確認することができる。
tensorboard --logdir ./logs/PITS_A+D/
推論を行う場合は、Terminalに以下を入力する。path/to/〜となっている部分は適宜変更する。
python3 inference.py --config path/to/config.yaml --model PITS_A+D --model_path path/to/checkpoint.pth
Terminalにて、話者名や、読み上げテキスト、ピッチシフト数(整数)を入力することで、音声が生成さされます。音声は自動的に再生され、infer_logsフォルダ(存在しない場合は自動作成)に保存されます。
- ファインチューニング用のfilelist等を作成する必要があります。
./filelist/*.txtの中身を参考に作成してください。形式としては、以下のようになっています。
話者フォルダからwavファイルまでのパス | 発話テキスト | 話者名
- config.yaml内のtraining_filesと、validation_filesのパスを、作成したリストに書き換えます。
- config.yaml内のspeakers部分に、話者名を記載(追加でも変更でも良い)する。
- Terminalに以下を入力し、ファインチューニングを実行する。path/to/〜となっている部分は適宜変更する。
python3 train.py --config path/to/config.yaml --model PITS_A+D_finetune --force_resume path/to/checkpoint.pt
JVSコーパスを22050Hz版は150Epoch、44100Hz版は250Epoch程度学習した程度のモデルです。喋ったりピッチを変更する程度には問題ないとは思いますが、学習不足であることに注意して使用してください。
ダウンロード : PITS(A+D)22050Hz版 PITS(A+D)44100版
Yingram, an acoustic feature inspired by YIN algorithm [22] that captures pitch information including harmonics.Yingram is designed to address the limitations of extracting f0, which is not well-defined in some cases [23], and the Yingram-based model shows better preference than the f0-based model [16].
DeepL : Yingramは、YINアルゴリズム[22]にインスパイアされた音響特徴で、倍音を含むピッチ情報を捉えます。Yingramは、場合によってはうまく定義できないf0を抽出する限界に対処するために設計され[23]、Yingramベースのモデルはf0ベースのモデルよりも優れた選好性を示します[16]。
- Official PITS Implementation; https://github.com/anonymous-pits/pits
- Official VITS Implementation: https://github.com/jaywalnut310/vits
- NANSY Implementation from dhchoi99: https://github.com/dhchoi99/NANSY
- Official Avocodo Implementation: https://github.com/ncsoft/avocodo
- Official PhaseAug Implementation: https://github.com/mindslab-ai/phaseaug
- Tacotron Implementation from keithito: https://github.com/keithito/tacotron
- CSTR VCTK Corpus (version 0.92): https://datashare.ed.ac.uk/handle/10283/3443
- G2P for demo, g2p_en from Kyubyong: https://github.com/Kyubyong/g2p
- ESPNet:end-to-end speech processing toolkit: https://github.com/espnet/espnet