Catatan : Ini adalah versi pengembangan. Jika Anda memerlukan versi yang stabil, silakan periksa v0.1.1.
Tujuan dari repositori ini adalah untuk memberikan implementasi Vocoder Wavenet, yang dapat menghasilkan sampel ucapan mentah berkualitas tinggi yang dikondisikan pada fitur linguistik atau akustik.
Sampel audio tersedia di https://r9y9.github.io/wavenet_vocoder/.
Buku catatan yang seharusnya dieksekusi di https://colab.research.google.com tersedia:
CATATAN : Ini bukan sendiri model teks-ke-speech (TTS). Dengan model pra-terlatih yang disediakan di sini, Anda dapat mensintesis bentuk gelombang yang diberikan spektrogram MEL , bukan teks mentah. Anda akan memerlukan model prediksi Mel-Spectrogram (seperti TACOTRON2) untuk menggunakan model pra-terlatih untuk TTS.
Catatan : Sedangkan untuk model pretrained untuk LJSpeech, model ini disesuaikan beberapa kali dan dilatih untuk total lebih dari 1000 ribu langkah. Silakan merujuk pada masalah ( #1, #75, #45) untuk mengetahui bagaimana model dilatih.
| URL Model | Data | URL Hyper Params | Git Commit | Tangga |
|---|---|---|---|---|
| link | Ljspeech | link | 2092a64 | 1000K ~ langkah |
| link | CMU Arktik | link | B1A1076 | Langkah 740K |
Untuk menggunakan model pra-terlatih, pertama-tama checkout, komit git spesifik yang disebutkan di atas. yaitu,
git checkout ${commit_hash}
Dan kemudian mengikuti bagian "Sintesis dari Pos Pemeriksaan" di ReadMe. Perhatikan bahwa versi lama sintesis.py mungkin tidak menerima --preset=<json> parameter dan Anda mungkin harus mengubah hparams.py sesuai dengan file preset (json).
Anda bisa mencoba misalnya:
# 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
Anda dapat menemukan file WAV yang dihasilkan di Direktori generated . Bertanya -tanya bagaimana cara kerjanya? Kemudian lihat kode :)
Repositori terdiri dari 1) Perpustakaan Pytorch, 2) Alat baris perintah, dan 3) resep gaya ESPNET. Yang pertama adalah perpustakaan Pytorch untuk menyediakan fungsionalitas Wavanet. Yang kedua adalah satu set alat untuk menjalankan pelatihan/inferensi Wavenet, pemrosesan data, dll. Yang terakhir adalah resep yang dapat direproduksi yang menggabungkan perpustakaan Wavenet dan alat utilitas. Silakan lihat mereka tergantung pada tujuan Anda. Jika Anda ingin membangun gelombang di dataset Anda (saya kira ini adalah kasus yang paling mungkin), resepnya adalah cara bagi Anda.
git clone https://github.com/r9y9/wavenet_vocoder && cd wavenet_vocoder
pip install -e .
Jika Anda hanya membutuhkan bagian perpustakaan, Anda dapat menginstalnya dari PYPI:
pip install wavenet_vocoder
Repositori menyediakan resep gaya Kaldi untuk membuat percobaan dapat direproduksi dan mudah dikelola. Resep yang tersedia adalah sebagai berikut:
mulaw256 : Wavenet yang menggunakan distribusi output kategorikal. Inputnya adalah bentuk gelombang kuantisasi 8-bit Mulaw.mol : Campuran Logistik (Mol) Wavenet. Inputnya adalah audio mentah 16-bit.gaussian : Wavenet tunggal-Gaussian (alias guru Wavenet of Clarinet). Inputnya adalah audio mentah 16-bit. Semua resep telah run.sh , yang menentukan semua langkah untuk melakukan pelatihan/inferensi Wavenet termasuk preprocessing data. Silakan lihat Run.sh di Direktori EGS untuk detailnya.
PEMBERITAHUAN : Pengkondisian global untuk multi-speaker Wavenet tidak didukung dalam resep di atas (meskipun tidak sulit untuk diimplementasikan). Silakan periksa v0.1.12 untuk fitur ini, atau jika Anda benar -benar membutuhkan fitur, silakan angkat masalah.
Resep dirancang untuk menjadi generik sehingga seseorang dapat menggunakannya untuk dataset apa pun. Untuk menerapkan resep ke dataset Anda sendiri, Anda harus meletakkan semua file WAV di satu direktori flat. yaitu,
> 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
Itu saja! Langkah terakhir adalah memodifikasi db_root di run.sh atau memberikan db_root sebagai argmen baris perintah untuk run.sh.
./run.sh --stage 0 --stop-stage 0 --db-root ~/data/LJSpeech-1.1/wavs/
Resep biasanya terdiri dari beberapa langkah. Sangat disarankan untuk menjalankan resep demi langkah untuk memahami cara kerjanya untuk pertama kalinya. Untuk melakukannya, tentukan stage dan stop_stage sebagai berikut:
./run.sh --stage 0 --stop-stage 0
./run.sh --stage 1 --stop-stage 1
./run.sh --stage 2 --stop-stage 2
Dalam situasi yang khas, Anda perlu menentukan perangkat CUDA secara bertahap secara luas untuk langkah pelatihan.
CUDA_VISIBLE_DEVICES="0,1" ./run.sh --stage 2 --stop-stage 2
Alat baris perintah adalah penulis dengan Docopt. Lihat setiap docstring untuk penggunaan dasar.
Buang hyperparameter ke file json.
Penggunaan:
python tojson.py --hparams="parameters you want to override" <output_json_path>
Penggunaan:
python preprocess.py wavallin ${dataset_path} ${out_dir} --preset=<json>
Catatan: Untuk pelatihan multi GPU, Anda sebaiknya memastikan bahwa Batch_Size % num_gpu == 0
Penggunaan:
python train.py --dump-root=${dump-root} --preset=<json>
--hparams="parameters you want to override"
Diberikan Directoy yang berisi fitur pengkondisian lokal, sintesis bentuk gelombang untuk mereka.
Penggunaan:
python evaluate.py ${dump_root} ${checkpoint} ${output_dir} --dump-root="data location"
--preset=<json> --hparams="parameters you want to override"
Opsi:
--num-utterances=<N> : Jumlah ucapan yang akan dihasilkan. Jika tidak ditentukan, hasilkan semua ucapan. Ini berguna untuk debugging. Perhatikan : Ini mungkin tidak berfungsi sekarang. Harap gunakan evaluasi.py sebagai gantinya.
Mensintesis bentuk gelombang memberikan fitur pengkondisian.
Penggunaan:
python synthesis.py ${checkpoint_path} ${output_dir} --preset=<json> --hparams="parameters you want to override"
Pilihan penting:
--conditional=<path> : (Diperlukan untuk Wavenet bersyarat) Jalur fitur bersyarat lokal (.npy). Jika ini ditentukan, jumlah langkah waktu yang akan dihasilkan ditentukan oleh ukuran fitur bersyarat.Perhatikan : Ini mungkin tidak berfungsi sekarang. Silakan periksa v0.1.1 untuk versi kerja.
python train.py --dump-root=./data/cmu_arctic/
--hparams="cin_channels=-1,gin_channels=-1"
Anda harus menonaktifkan pengkondisian global dan lokal dengan mengatur gin_channels dan cin_channels ke nilai negatif.
python train.py --dump-root=./data/cmu_arctic/ --speaker-id=0
--hparams="cin_channels=80,gin_channels=-1"
Perhatikan : Ini mungkin tidak berfungsi sekarang. Silakan periksa v0.1.1 untuk versi kerja.
python train.py --dump-root=./data/cmu_arctic/
--hparams="cin_channels=80,gin_channels=16,n_speakers=7"
Log dibuang ke direktori ./log secara default. Anda dapat memantau log dengan Tensorboard:
tensorboard --logdir=log
Terima kasih banyak!! Jika Anda menemukan yang baru, silakan kirim PR.