注意:這是開發版本。如果您需要穩定的版本,請查看V0.1.1。
存儲庫的目的是提供WaveNet Vocoder的實現,該實現可以生成以語言或聲學特徵為條件的高質量原始語音樣本。
音頻樣本可在https://r9y9.github.io/wavenet_vocoder/上找到。
可以在https://colab.research.google.com上執行的筆記本。
注意:這本身不是文本對語音(TTS)模型。使用此處提供的預訓練模型,您可以在MEL頻譜圖中合成波形,而不是原始文本。您將需要MEL-SPECTROGRAM預測模型(例如Tacotron2)來使用TTS的預訓練模型。
注意:對於LJSpeech預驗證的模型,該模型進行了多次微調,並總共訓練了超過1000k的步驟。請參閱問題(#1,#75,#45),以了解如何訓練模型。
| 模型URL | 數據 | 超級參數URL | git提交 | 步驟 |
|---|---|---|---|---|
| 關聯 | ljspeech | 關聯 | 2092A64 | 1000k〜步驟 |
| 關聯 | CMU北極 | 關聯 | B1A1076 | 740k步驟 |
要使用預訓練的模型,請首先檢查上述特定的GIT提交。 IE,
git checkout ${commit_hash}
然後遵循“從檢查點合成”部分中的“合成”部分。請注意,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
您可以在generated目錄中找到生成的WAV文件。想知道它是如何工作的?然後查看代碼:)
存儲庫由1)Pytorch庫,2)命令行工具和3)ESPNET風格的食譜組成。第一個是一個提供Wavanet功能的Pytorch庫。第二個是運行WaveNet訓練/推理,數據處理等的一組工具。最後一個是將WaveNet庫和實用程序工具組合的可重複配方。請根據您的目的來看看它們。如果您想在數據集上構建WaveNet(我想這是最有可能的情況),那麼食譜就是您的方法。
git clone https://github.com/r9y9/wavenet_vocoder && cd wavenet_vocoder
pip install -e .
如果您只需要庫部分,則可以從PYPI安裝它:
pip install wavenet_vocoder
該存儲庫提供了卡爾迪風格的食譜,以使實驗可重現且易於管理。可用食譜如下:
mulaw256 :使用分類輸出分佈的Wavenet。輸入為8位Mulaw量化波形。mol :物流(mol)波諾特的混合物。輸入是16位原始音頻。gaussian :單高斯象徵(又名單簧管的老師Wavenet)。輸入是16位原始音頻。所有食譜都run.sh ,它指定了執行WaveNet訓練/推理的所有步驟,包括數據預處理。有關詳細信息,請參見EGS目錄中的Run.sh。
注意:上述配方中不支持多揚聲器Wavenet的全局條件(儘管不應該實施)。請檢查V0.1.12的功能,或者如果您確實需要該功能,請提出問題。
食譜被設計為通用,以便可以將它們用於任何數據集。要將食譜應用於您自己的數據集中,您需要將所有WAV文件放入一個平面目錄中。 IE,
> 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作為命令行argment.sh.sh.
./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的寫作。請參閱每個docstring以獲取基本用法。
將超參數轉換為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"
給定一個包含局部條件特徵的直接操作,為其合成波形。
用法:
python evaluate.py ${dump_root} ${checkpoint} ${output_dir} --dump-root="data location"
--preset=<json> --hparams="parameters you want to override"
選項:
--num-utterances=<N> :要生成的話語數量。如果未指定,則會產生所有完全贊成。這對於調試很有用。 注意:這可能現在不起作用。請改用estuation.py。
合成波形提供了調節功能。
用法:
python synthesis.py ${checkpoint_path} ${output_dir} --preset=<json> --hparams="parameters you want to override"
重要選擇:
--conditional=<path> :(有條件的波納特所必需的)局部條件特徵(.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
非常感謝! !如果您找到新的,請提交公關。