Googleのパラレルタコトロン2のPytorch実装2:微分可能な持続時間モデリングを備えた非自動性神経TTSモデル


2021.05.25: Only the soft-DTW remains the last hurdle!実装に関する著者のアドバイスに続いて、L1損失(FastSpeech2)を使用した監視された期間信号の下で、各モジュールで1つずつテストしました。これまで、ソフト-DTWを除くすべてのモジュールが次のようにうまく機能していることを確認できます(合成されたスペクトログラム、GTスペクトログラム、残差アラインメント、およびwが上から下まで学習したことから)。

詳細については、最新のコミットログと更新された実装の問題セクションを確認してください。また、https://github.com/keonlee9420/fastspeech2/commits/ptaco2で進行中の実験を見つけることができます。
2021.05.15:実装が完了しました。正気はトレーニングと推論をチェックします。しかし、それでもモデルは収束できません。
I'm waiting for your contribution!モデルを正常に訓練するために、私の実装や貴重なアドバイスに間違いがあることがあればお知らせください。実装の問題セクションを参照してください。
Python依存関係をインストールできます
pip3 install -r requirements.txt LConvBlockを利用するには、FairSeq(公式文書、GitHub)をインストールします。インストールの問題を解決するには、#5をチェックしてください。
サポートされているデータセット:
データセットをダウンロードした後、 corpus_path preprocess.yamlに設定し、準備スクリプトを実行します。
python3 prepare_data.py config/LJSpeech/preprocess.yaml
次に、前処理スクリプトを実行します。
python3 preprocess.py config/LJSpeech/preprocess.yaml
モデルを訓練します
python3 train.py -p config/LJSpeech/preprocess.yaml -m config/LJSpeech/model.yaml -t config/LJSpeech/train.yaml
モデルはまだ収束できません。私はデバッグしていますが、あなたの素晴らしい貢献の準備ができたら、それは後押しされます!
単一の推論の場合は、実行します
python3 synthesize.py --text "YOUR_DESIRED_TEXT" --restore_step 900000 --mode single -p config/LJSpeech/preprocess.yaml -m config/LJSpeech/model.yaml -t config/LJSpeech/train.yaml
生成された発話は、 output/result/に保存されます。
バッチ推論もサポートされています
python3 synthesize.py --source preprocessed_data/LJSpeech/val.txt --restore_step 900000 --mode batch -p config/LJSpeech/preprocess.yaml -m config/LJSpeech/model.yaml -t config/LJSpeech/train.yaml
preprocessed_data/LJSpeech/val.txtのすべての発話を合成する。
使用
tensorboard --logdir output/log/LJSpeech
LocalHostでTensorboardを提供します。
全体的に、元の論文では示唆されていない正規化または活性化は、順方向および後方計算でNAN値(勾配)を防ぐために適切に配置されています。 (NANは、ネットワークで何かが間違っていることを示しています)
FFTBlock使用します。ConvBlockには、ドロップアウト0.2を使用します。grapheme_to_phoneme関数を実装します。 (./text/ initを参照)。 128-binの代わりに80 channelsメルスペクトルグロムを使用します。nn.SiLU()を使用します。W V C S取得するとV E LConvBlockおよび通常の正弦波位置埋め込みを使用します。LConvBLock出力にnn.Tanh()を適用します(fastspeech2のデコーダーパーツのアクティベーションパターンに続いて)。 model/soft_dtw_cuda.pyにカスタマイズされたsoft-dtwを実装します。Eのみが計算されます。しかし、損失関数として採用されているJacobian製品は、 R WRT入力Xのターゲット派生ターゲットを返すために追加されます。8です。 @misc{lee2021parallel_tacotron2,
author = {Lee, Keon},
title = {Parallel-Tacotron2},
year = {2021},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {url{https://github.com/keonlee9420/Parallel-Tacotron2}}
}