
畳み込みネットワークベースのテキストからスピーチ合成モデルのPytorch実装:
オーディオサンプルはhttps://r9y9.github.io/deepvoice3_pytorch/で入手できます。
https://colab.research.google.comで実行される予定のノートブック:
注:前処理されたモデルは、マスターと互換性がありません。すぐに更新されます。
| URL | モデル | データ | ハイパーパラメーター | gitコミット | ステップ |
|---|---|---|---|---|---|
| リンク | deepvoice3 | ljspeech | リンク | ABF0A21 | 640K |
| リンク | ニャンコ | ljspeech | builder=nyanko,preset=nyanko_ljspeech | BA59DC7 | 585k |
| リンク | マルチスピーカーdeepvoice3 | VCTK | builder=deepvoice3_multispeaker,preset=deepvoice3_vctk | 0421749 | 300K + 300K |
事前に訓練されたモデルを使用するには、上記の特定のgitコミットに参加することを強くお勧めします。つまり、
git checkout ${commit_hash}
次に、特定のGITコミットのREADMEの「チェックポイントからの合成」セクションに従います。リポジトリの最新の開発バージョンが機能しない可能性があることに注意してください。
たとえば、試すことができます:
# pretrained model (20180505_deepvoice3_checkpoint_step000640000.pth)
# hparams (20180505_deepvoice3_ljspeech.json)
git checkout 4357976
python synthesis.py --preset=20180505_deepvoice3_ljspeech.json
20180505_deepvoice3_checkpoint_step000640000.pth
sentences.txt
output_dir
hparams.pyを参照してください。builder 、使用するモデルを指定します。 deepvoice3 、 deepvoice3_multispeaker [1]、およびnyanko [2]がサープされています。上記のパッケージを最初にインストールしてから、次にインストールしてください
git clone https://github.com/r9y9/deepvoice3_pytorch && cd deepvoice3_pytorch
pip install -e ".[bin]"
回転すべきハイパーパラメーターはたくさんあります。これは、取り組んでいるモデルとデータによって異なります。典型的なデータセットとモデルの場合、良好な動作(プリセット)であることが知られているパラメーターがリポジトリに提供されます。詳細については、 presets Directoryを参照してください。それに注意してください
preprocess.pytrain.pysynthesis.py Accepts --preset=<json>オプションパラメーターは、プリセットパラメーターをロードする場所を指定します。プリセットパラメーターを使用する場合は、前処理、トレーニング、評価を通して同じ--preset=<json>を使用する必要があります。例えば、
python preprocess.py --preset=presets/deepvoice3_ljspeech.json ljspeech ~/data/LJSpeech-1.0
python train.py --preset=presets/deepvoice3_ljspeech.json --data-root=./data/ljspeech
の代わりに
python preprocess.py ljspeech ~/data/LJSpeech-1.0
# warning! this may use different hyper parameters used at preprocessing stage
python train.py --preset=presets/deepvoice3_ljspeech.json --data-root=./data/ljspeech
使用法:
python preprocess.py ${dataset_name} ${dataset_path} ${out_dir} --preset=<json>
サポートされている${dataset_name} sは次のとおりです。
ljspeech (en、単一スピーカー)vctk (en、マルチスピーカー)jsut (JP、単一スピーカー)nikl_m (ko、マルチスピーカー)nikl_s (KO、単一スピーカー) ljspeech Dataset/deepvoice3に適していることが知られているプリセットパラメーターを使用し、 ~/data/LJSpeech-1.0にデータを持っていると仮定すると、以下を処理することができます。
python preprocess.py --preset=presets/deepvoice3_ljspeech.json ljspeech ~/data/LJSpeech-1.0/ ./data/ljspeech
これが完了すると、 ./data/ljspeech ljspeechに抽出された機能(メルスペクトルグラムと線形スペクトログラム)が表示されます。
JSON形式のメタデータを使用して、独自のデータセットを構築します(CARPEDM20/Multi-Speaker-Tacotron-Tensorflowと互換性があります)が現在サポートされています。使用法:
python preprocess.py json_meta ${list-of-JSON-metadata-paths} ${out_dir} --preset=<json>
既存のプリセットJSONファイル、特にn_speakers変更する必要がある場合があります。英語のマルチスピーカーの場合は、 presets/deepvoice3_vctk.jsonから始めます。
データセットA(スピーカー./datasets/datasetB/alignment.json )とデータセットB(スピーカーB)があると仮定./datasets/datasetA/alignment.jsonます。それぞれがJSONメタデータファイルに記載されています。
python preprocess.py json_meta "./datasets/datasetA/alignment.json,./datasets/datasetB/alignment.json" "./datasets/processed_A+B" --preset=(path to preset json file)
一部のデータセット、特に自動的に生成されたデータセットには、長い沈黙と望ましくないリーディング/トレーリングノイズが含まれる場合があり、Char-Level Seq2Seqモデルを損なうものです。 (例:VCTK、これはvctk_preprocessでカバーされています)
この問題に対処するために、 gentle_web_align.pyウィル
gentle_web_align.py 、Kaldiベースの音声テキストアライメントツールであるGentleを使用します。これにより、Webに基づいた穏やかなアプリケーションにアクセスし、指定されたサウンドセグメントが転写産物と整列し、結果をHTKスタイルのラベルファイルに変換し、 preprocess.pyで処理します。穏やかは、Linux/Mac/Windows(Docker経由)で実行できます。
予備的な結果は、 vctk_preprocess/prepare_vctk_labels.pyのHTK/フェスティバル/マーリンベースのメソッドがVCTKでより良い動作をすることを示しています。 (例:映画の抜粋)
使用法:( gentlyがlocalhost:8567 (指定されていない場合はデフォルト))
datasetA/wavsにあり、トランスクリプトはdatasetA/txtsにあります) python gentle_web_align.py -w "datasetA/wavs/*.wav" -t "datasetA/txts/*.txt" --server_addr=localhost --port=8567
datasetB/speakerN/blahblah.wav and datasetB/speakerN/blahblah.txt ) python gentle_web_align.py --nested-directories="datasetB" --server_addr=localhost --port=8567
発話ごとに音素アライメントができたら、 preprocess.pyを実行して機能を抽出できます。
使用法:
python train.py --data-root=${data-root} --preset=<json> --hparams="parameters you may want to override"
ljspeechデータセットを使用してdeepvoice3スタイルモデルを構築すると、次のモデルをトレーニングできるとします。
python train.py --preset=presets/deepvoice3_ljspeech.json --data-root=./data/ljspeech/
モデルチェックポイント(.pth)とalignments(.png)は、デフォルトでは10000ステップあたりの./checkpointsディレクトリに保存されます。
事前にこれを確認し、以下のコマンドに従ってください。
python preprocess.py nikl_s ${your_nikl_root_path} data/nikl_s --preset=presets/deepvoice3_nikls.json
python train.py --data-root=./data/nikl_s --checkpoint-dir checkpoint_nikl_s --preset=presets/deepvoice3_nikls.json
ログはデフォルトで./logディレクトリにダンプされます。テンソルボードでログを監視できます。
tensorboard --logdir=log
テキストのリストが与えられた場合、 synthesis.py訓練されたモデルからのオーディオ信号を合成します。使用法は次のとおりです。
python synthesis.py ${checkpoint_path} ${text_list.txt} ${output_dir} --preset=<json>
例test_list.txt:
Generative adversarial network or variational auto-encoder.
Once upon a time there was a dear little girl who was loved by every one who looked at her, but most of all by her grandmother, and there was nothing that she would not have given to the child.
A text-to-speech synthesis system typically consists of multiple stages, such as a text analysis frontend, an acoustic model and an audio synthesis module.
VCTKとNIKLは、マルチスピーカーモデルを構築するためのサポートされているデータセットです。
VCTKの一部のオーディオサンプルには、パフォーマンスに影響を与える長い沈黙があるため、VCTK_PREPROCESSに従って音素アライメントを行い、サイレンスを除去することをお勧めします。
発話ごとに音素アライメントができたら、次のことで機能を抽出できます。
python preprocess.py vctk ${your_vctk_root_path} ./data/vctk
データが準備されたので、次のようにdeepvoice3のマルチスピーカーバージョンをトレーニングできます。
python train.py --data-root=./data/vctk --checkpoint-dir=checkpoints_vctk
--preset=presets/deepvoice3_vctk.json
--log-event-path=log/deepvoice3_multispeaker_vctk_preset
他のデータセットから学習した埋め込みを再利用する場合は、代わりにこれを行うことができます。
python train.py --data-root=./data/vctk --checkpoint-dir=checkpoints_vctk
--preset=presets/deepvoice3_vctk.json
--log-event-path=log/deepvoice3_multispeaker_vctk_preset
--load-embedding=20171213_deepvoice3_checkpoint_step000210000.pth
これにより、トレーニングの速度が少し向上する可能性があります。
掃除されたオーディオサンプルを../nikl_preprocoessで取得できます。詳細はこちらにあります。
Nikl Corpusが前処理から使用できるようになったら、次のことで機能を抽出できます。
python preprocess.py nikl_m ${your_nikl_root_path} data/nikl_m
データが準備されたので、次のようにdeepvoice3のマルチスピーカーバージョンをトレーニングできます。
python train.py --data-root=./data/nikl_m --checkpoint-dir checkpoint_nikl_m
--preset=presets/deepvoice3_niklm.json
データが非常に限られている場合は、事前に訓練されたファインターンモデルを試すことを検討できます。たとえば、LJSpeechで事前に訓練されたモデルを使用して、次のコマンドでVCTKスピーカーp225 (30分)のデータに適応できます。
python train.py --data-root=./data/vctk --checkpoint-dir=checkpoints_vctk_adaptation
--preset=presets/deepvoice3_ljspeech.json
--log-event-path=log/deepvoice3_vctk_adaptation
--restore-parts="20171213_deepvoice3_checkpoint_step000210000.pth"
--speaker-id=0
私の経験から、モデルをゼロからトレーニングするのではなく、合理的な音声品質を非常に迅速に得ることができます。
上記で使用される2つの重要なオプションがあります。
--restore-parts=<N> :モデルパラメーターをロードする場所を指定します。オプション--checkpoint=<N>の違いは1) --restore-parts=<N>すべての無効なパラメーターを無視しますが、 --checkpoint=<N>はそうではありません。 2) --restore-parts=<N>トレーナー--checkpoint=<N> 0ステップから開始するように指示します。 --checkpoint=<N>まったく同じモデルを使用してトレーニングを続けている場合は大丈夫ですが、モデルアーキテクチャをカスタマイズし、事前に訓練されたモデルの利点をとる場合に役立ちます。--speaker-id=<N> :トレーニングに使用されるデータのスピーカーを指定します。これは、マルチスピーカーデータセットを使用している場合にのみ指定する必要があります。 VCTKの場合、スピーカーIDは、データセットのspeaker_info.txtに従って、自動的に(0、1、...、107)自動的に割り当てられます。マルチスピーカーモデルをトレーニングしている場合、スピーカーの適応はn_speakersが同一である場合にのみ機能します。
これは、matplotlibのバックエンドに応じて発生する可能性があります。 Matplotlibのバックエンドを変更して、次のように機能するかどうかを確認してください。
MPLBACKEND=Qt5Agg python train.py ${args...}
#78で、EngieCatは、MatplotlibのバックエンドをTkinter(TKAGG)からPYQT5(QT5AGG)に変更すると、問題が修正されたと報告しました。
コードの一部は、次のプロジェクトから採用されました。
@jraulhernandeziによって作成されたバナーとロゴ(#76)