注:これは開発バージョンです。安定したバージョンが必要な場合は、V0.1.1をチェックアウトしてください。
リポジトリの目標は、WaveNet Vocoderの実装を提供することです。WaveNetVocoderは、言語的または音響的特徴を条件とする高品質の生の音声サンプルを生成できます。
オーディオサンプルはhttps://r9y9.github.io/wavenet_vocoder/で入手できます。
https://colab.research.google.comで実行されるはずです。
注:これはそれ自体がテキストからスピーチ(TTS)モデルではありません。ここで事前に訓練されたモデルを提供すると、生のテキストではなくMELスペクトログラムを考慮して波形を合成できます。 TTSの事前に訓練されたモデルを使用するには、MEL-SpectRogram Prodictionモデル(Tacotron2など)が必要です。
注:LJSpeechの前提条件のモデルについては、モデルは複数回微調整され、合計で1000k以上のステップで訓練されました。モデルの訓練方法を知るには、問題(#1、#75、#45)を参照してください。
| モデルURL | データ | Hyper Params URL | gitコミット | ステップ |
|---|---|---|---|---|
| リンク | ljspeech | リンク | 2092A64 | 1000k〜ステップ |
| リンク | CMU Arctic | リンク | B1A1076 | 740Kステップ |
事前に訓練されたモデルを使用するには、上記の特定のGITコミットを最初にチェックアウトします。つまり、
git checkout ${commit_hash}
次に、READMEの「チェックポイントから合成」セクションに従います。 Synthesis.pyの古いバージョンは、 --preset=<json>パラメーターを受け入れない場合があり、プリセット(JSON)ファイルに従ってhparams.py変更する必要がある場合があります。
たとえば、試すことができます:
# Assuming you have downloaded LJSpeech-1.1 at ~/data/LJSpeech-1.1
# pretrained model (20180510_mixture_lj_checkpoint_step000320000_ema.pth)
# hparams (20180510_mixture_lj_checkpoint_step000320000_ema.json)
git checkout 2092a64
python preprocess.py ljspeech ~/data/LJSpeech-1.1 ./data/ljspeech
--preset=20180510_mixture_lj_checkpoint_step000320000_ema.json
python synthesis.py --preset=20180510_mixture_lj_checkpoint_step000320000_ema.json
--conditional=./data/ljspeech/ljspeech-mel-00001.npy
20180510_mixture_lj_checkpoint_step000320000_ema.pth
generated
生成されたWAVファイルをgeneratedディレクトリに見つけることができます。それがどのように機能するのだろうか?次に、コードを見てください:)
リポジトリは、1)Pytorchライブラリ、2)コマンドラインツール、3)ESPNETスタイルのレシピで構成されています。最初のものは、ワバネット機能を提供するPytorchライブラリです。 2つ目は、Wavenetトレーニング/推論、データ処理などを実行するためのツールのセットです。最後の1つは、WaveNetライブラリとユーティリティツールを組み合わせた再現性のあるレシピです。目的に応じてそれらをご覧ください。データセットにWavenetを構築したい場合(これは最も可能性の高いケースだと思います)、レシピはあなたの方法です。
git clone https://github.com/r9y9/wavenet_vocoder && cd wavenet_vocoder
pip install -e .
ライブラリパーツのみが必要な場合は、Pypiからインストールできます。
pip install wavenet_vocoder
リポジトリは、Kaldiスタイルのレシピを提供して、実験を再現可能で簡単に管理できるようにします。利用可能なレシピは次のとおりです。
mulaw256 :カテゴリの出力分布を使用するWavenet。入力は8ビットのMulaw量子化された波形です。mol :ロジスティクス(Mol)Wavenetの混合。入力は16ビットのRAWオーディオです。gaussian :シングルガウスワベネット(別名クラリネットの教師ウェイブネット)。入力は16ビットのRAWオーディオです。すべてのレシピにはrun.shがあります。これは、データの前処理を含むWavenetトレーニング/推論を実行するためのすべての手順を指定しています。詳細については、EGSディレクトリのrun.shを参照してください。
通知:マルチスピーカーWavenetのグローバルコンディショニングは、上記のレシピではサポートされていません(ただし、実装するのは難しくありません)。機能についてはv0.1.12を確認してください。または、機能が本当に必要な場合は、問題を提起してください。
レシピは、任意のデータセットに使用できるように一般的なものになるように設計されています。独自のデータセットにレシピを適用するには、すべてのWAVファイルを単一のフラットディレクトリに配置する必要があります。つまり、
> tree -L 1 ~/data/LJSpeech-1.1/wavs/ | head
/Users/ryuichi/data/LJSpeech-1.1/wavs/
├── LJ001-0001.wav
├── LJ001-0002.wav
├── LJ001-0003.wav
├── LJ001-0004.wav
├── LJ001-0005.wav
├── LJ001-0006.wav
├── LJ001-0007.wav
├── LJ001-0008.wav
├── LJ001-0009.wav
それでおしまい!最後のステップは、run.shでdb_root変更するか、 db_root run.sh.のコマンドラインjagmentとして指定することです。
./run.sh --stage 0 --stop-stage 0 --db-root ~/data/LJSpeech-1.1/wavs/
通常、レシピは複数のステップで構成されています。レシピを段階的に実行して、初めてどのように機能するかを理解することを強くお勧めします。これを行うには、次のようにstageとstop_stage指定します。
./run.sh --stage 0 --stop-stage 0
./run.sh --stage 1 --stop-stage 1
./run.sh --stage 2 --stop-stage 2
典型的な状況では、トレーニングステップのためにCUDAデバイスを特に特に指定する必要があります。
CUDA_VISIBLE_DEVICES="0,1" ./run.sh --stage 2 --stop-stage 2
コマンドラインツールは、Docoptを備えたWritternです。基本的な使用については、各ドキュストリングを参照してください。
HyperParametersをJSONファイルにダンプします。
使用法:
python tojson.py --hparams="parameters you want to override" <output_json_path>
使用法:
python preprocess.py wavallin ${dataset_path} ${out_dir} --preset=<json>
注:マルチGPUトレーニングの場合、batch_size%num_gpu == 0であることをより適切に確認してください
使用法:
python train.py --dump-root=${dump-root} --preset=<json>
--hparams="parameters you want to override"
ローカルコンディショニング機能を含むDirectoyを考えると、それらの波形を合成します。
使用法:
python evaluate.py ${dump_root} ${checkpoint} ${output_dir} --dump-root="data location"
--preset=<json> --hparams="parameters you want to override"
オプション:
--num-utterances=<N> :生成される発話の数。指定されていない場合は、すべての発言を生成します。これはデバッグに役立ちます。 注意:これはおそらく今は機能していません。代わりにevaluate.pyを使用してください。
波形を合成すると、コンディショニング機能が与えられます。
使用法:
python synthesis.py ${checkpoint_path} ${output_dir} --preset=<json> --hparams="parameters you want to override"
重要なオプション:
--conditional=<path> :(条件付きWavenetに必要)ローカル条件特徴(.npy)のパス。これが指定されている場合、生成する時間ステップ数は、条件付き機能のサイズによって決まります。注意:これはおそらく今は機能していません。動作バージョンについては、v0.1.1を確認してください。
python train.py --dump-root=./data/cmu_arctic/
--hparams="cin_channels=-1,gin_channels=-1"
gin_channelsとcin_channels負の値に設定することにより、グローバルおよびローカルのコンディショニングを無効にする必要があります。
python train.py --dump-root=./data/cmu_arctic/ --speaker-id=0
--hparams="cin_channels=80,gin_channels=-1"
注意:これはおそらく今は機能していません。動作バージョンについては、v0.1.1を確認してください。
python train.py --dump-root=./data/cmu_arctic/
--hparams="cin_channels=80,gin_channels=16,n_speakers=7"
ログはデフォルトで./logディレクトリにダンプされます。テンソルボードでログを監視できます。
tensorboard --logdir=log
どうもありがとうございます!!新しいものを見つけた場合は、PRを提出してください。