
Pytorch Implementasi model sintesis teks-ke-speech berbasis jaringan:
Sampel audio tersedia di https://r9y9.github.io/deepvoice3_pytorch/.
Notebook yang seharusnya dieksekusi di https://colab.research.google.com tersedia:
Catatan : Model pretrain tidak kompatibel untuk dikuasai. Untuk segera diperbarui.
| Url | Model | Data | Paramter hiper | Git Commit | Tangga |
|---|---|---|---|---|---|
| link | DeepVoice3 | Ljspeech | link | ABF0A21 | 640k |
| link | Nyanko | Ljspeech | builder=nyanko,preset=nyanko_ljspeech | BA59DC7 | 585k |
| link | Multi-speaker DeepVoice3 | Vctk | builder=deepvoice3_multispeaker,preset=deepvoice3_vctk | 0421749 | 300K + 300K |
Untuk menggunakan model pra-terlatih, sangat disarankan agar Anda berada di git spesifik yang disebutkan di atas. yaitu,
git checkout ${commit_hash}
Kemudian ikuti bagian "sintesis dari pos pemeriksaan" di readme komit git spesifik. Harap perhatikan bahwa versi pengembangan terbaru dari repositori mungkin tidak berfungsi.
Anda bisa mencoba misalnya:
# 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 untuk detailnya.builder menentukan model mana yang ingin Anda gunakan. deepvoice3 , deepvoice3_multispeaker [1] dan nyanko [2] diselesaikan.Harap instal paket yang tercantum di atas terlebih dahulu, lalu
git clone https://github.com/r9y9/deepvoice3_pytorch && cd deepvoice3_pytorch
pip install -e ".[bin]"
Ada banyak parameter hiper yang harus diputar tergantung pada model dan data apa yang sedang Anda kerjakan. Untuk kumpulan data dan model yang khas, parameter yang diketahui bekerja dengan baik ( preset ) disediakan di repositori. Lihat Direktori presets untuk detailnya. Perhatikan itu
preprocess.pytrain.pysynthesis.py menerima --preset=<json> parameter opsional, yang menentukan di mana memuat parameter preset. Jika Anda akan menggunakan parameter preset, maka Anda harus menggunakan --preset=<json> yang sama selama preprocessing, pelatihan, dan evaluasi. misalnya,
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
alih-alih
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
Penggunaan:
python preprocess.py ${dataset_name} ${dataset_path} ${out_dir} --preset=<json>
Didukung ${dataset_name} s adalah:
ljspeech (en, speaker tunggal)vctk (en, multi-speaker)jsut (JP, pembicara tunggal)nikl_m (ko, multi-speaker)nikl_s (ko, pembicara tunggal) Dengan asumsi Anda menggunakan parameter preset yang diketahui berfungsi baik untuk dataset ljspeech/deepVoice3 dan memiliki data di ~/data/LJSpeech-1.0 , maka Anda dapat preprocess data dengan:
python preprocess.py --preset=presets/deepvoice3_ljspeech.json ljspeech ~/data/LJSpeech-1.0/ ./data/ljspeech
Ketika ini selesai, Anda akan melihat fitur yang diekstraksi (Mel-spectrograms dan spektrogram linier) di ./data/ljspeech .
Membangun dataset Anda sendiri, dengan metadata dalam format JSON (kompatibel dengan CarPedM20/multi-speaker-tacotron-tensorflow) saat ini didukung. Penggunaan:
python preprocess.py json_meta ${list-of-JSON-metadata-paths} ${out_dir} --preset=<json>
Anda mungkin perlu memodifikasi file JSON preset yang sudah ada sebelumnya, terutama n_speakers . Untuk multispeaker bahasa Inggris, mulailah dengan presets/deepvoice3_vctk.json .
Dengan asumsi Anda memiliki dataset A (speaker A) dan dataset B (speaker B), masing -masing dijelaskan dalam file metadata JSON ./datasets/datasetA/alignment.json dan ./datasets/datasetB/alignment.json , maka Anda dapat preproses data oleh:
python preprocess.py json_meta "./datasets/datasetA/alignment.json,./datasets/datasetB/alignment.json" "./datasets/processed_A+B" --preset=(path to preset json file)
Beberapa dataset, terutama dataset yang dihasilkan secara otomatis dapat mencakup keheningan yang lama dan suara-suara terkemuka/trailing yang tidak diinginkan, merusak model Seq2seq tingkat char. (misalnya vctk, meskipun ini dibahas dalam vctk_preprocess)
Untuk menangani masalahnya, gentle_web_align.py akan
gentle_web_align.py menggunakan alat penyelarasan teks-teks berbasis Kaldi. Ini mengakses aplikasi lembut yang dilayani web, menyelaraskan segmen suara dengan transkrip dan mengubah hasilnya menjadi file label gaya-HTK, untuk diproses di preprocess.py . Lembut dapat dijalankan di Linux/Mac/Windows (melalui Docker).
Hasil awal menunjukkan bahwa sementara metode berbasis htk/festival/merlin dalam vctk_preprocess/prepare_vctk_labels.py bekerja lebih baik pada vctk, lembut lebih stabil dengan klip audio dengan noise ambient. (misalnya kutipan film)
Penggunaan: (dengan asumsi lembut berjalan di localhost:8567 (default saat tidak ditentukan))
datasetA/wavs dan transkrip berada di datasetA/txts ) python gentle_web_align.py -w "datasetA/wavs/*.wav" -t "datasetA/txts/*.txt" --server_addr=localhost --port=8567
datasetB/speakerN/blahblah.wav dan datasetB/speakerN/blahblah.txt ) python gentle_web_align.py --nested-directories="datasetB" --server_addr=localhost --port=8567
Setelah Anda memiliki perataan fonem untuk setiap ucapan, Anda dapat mengekstrak fitur dengan menjalankan preprocess.py
Penggunaan:
python train.py --data-root=${data-root} --preset=<json> --hparams="parameters you may want to override"
Misalkan Anda membangun model bergaya DeepVoice3 menggunakan dataset LJSPEECH, maka Anda dapat melatih model Anda dengan:
python train.py --preset=presets/deepvoice3_ljspeech.json --data-root=./data/ljspeech/
Model Checkpoints (.pth) dan Alignments (.png) disimpan di ./checkpoints direktori per 10000 langkah secara default.
Pleae periksa ini terlebih dahulu dan ikuti perintah di bawah ini.
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 dibuang ke direktori ./log secara default. Anda dapat memantau log dengan Tensorboard:
tensorboard --logdir=log
Diberikan daftar teks, synthesis.py mensintesis sinyal audio dari model terlatih. Penggunaan adalah:
python synthesis.py ${checkpoint_path} ${text_list.txt} ${output_dir} --preset=<json>
Contoh 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 dan Nikl didukung dataset untuk membangun model multi-speaker.
Karena beberapa sampel audio dalam VCTK memiliki keheningan panjang yang mempengaruhi kinerja, disarankan untuk melakukan penyelarasan fonem dan menghilangkan keheningan sesuai dengan VCTK_Preprocess.
Setelah Anda memiliki penyelarasan fonem untuk setiap ucapan, Anda dapat mengekstrak fitur dengan:
python preprocess.py vctk ${your_vctk_root_path} ./data/vctk
Sekarang Anda memiliki data yang disiapkan, maka Anda dapat melatih versi DeepVoice3 multi-speaker dengan:
python train.py --data-root=./data/vctk --checkpoint-dir=checkpoints_vctk
--preset=presets/deepvoice3_vctk.json
--log-event-path=log/deepvoice3_multispeaker_vctk_preset
Jika Anda ingin menggunakan kembali embedding yang dipelajari dari dataset lain, maka Anda dapat melakukan ini sebagai gantinya dengan:
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
Ini dapat sedikit meningkatkan kecepatan pelatihan.
Anda akan dapat memperoleh sampel audio yang dibersihkan di ../nikl_preprocoess. Detail ditemukan di sini.
Setelah Nikl Corpus siap digunakan dari preprocessing, Anda dapat mengekstrak fitur dengan:
python preprocess.py nikl_m ${your_nikl_root_path} data/nikl_m
Sekarang Anda memiliki data yang disiapkan, maka Anda dapat melatih versi DeepVoice3 multi-speaker dengan:
python train.py --data-root=./data/nikl_m --checkpoint-dir checkpoint_nikl_m
--preset=presets/deepvoice3_niklm.json
Jika Anda memiliki data yang sangat terbatas, maka Anda dapat mempertimbangkan untuk mencoba model pra-terlatih dengan baik. Misalnya, menggunakan model pra-terlatih di LJSpeech, Anda dapat menyesuaikannya dengan data dari VCTK Speaker p225 (30 menit) dengan perintah berikut:
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
Dari pengalaman saya, itu bisa mendapatkan kualitas bicara yang masuk akal dengan sangat cepat daripada melatih model dari awal.
Ada dua opsi penting yang digunakan di atas:
--restore-parts=<N> : Ini menentukan di mana memuat parameter model. Perbedaan dari opsi --checkpoint=<N> adalah 1) --restore-parts=<N> mengabaikan semua parameter yang tidak valid, sementara --checkpoint=<N> tidak. 2) --restore-parts=<N> Beri tahu pelatih untuk memulai dari 0-langkah, sementara --checkpoint=<N> Beri tahu pelatih untuk melanjutkan dari langkah terakhir. --checkpoint=<N> Harus baik-baik saja jika Anda menggunakan model yang persis sama dan terus berlatih, tetapi akan bermanfaat jika Anda ingin menyesuaikan arsitektur model Anda dan mengambil keuntungan dari model pra-terlatih.--speaker-id=<N> : Ini menentukan pembicara data apa yang digunakan untuk pelatihan. Ini hanya boleh ditentukan jika Anda menggunakan dataset multi-speaker. Sedangkan untuk VCTK, ID speaker secara otomatis ditugaskan secara bertahap (0, 1, ..., 107) sesuai dengan speaker_info.txt dalam dataset. Jika Anda melatih model multi-speaker, adaptasi speaker hanya akan berfungsi ketika n_speakers identik .
Ini mungkin terjadi tergantung pada backend yang Anda miliki untuk Matplotlib. Coba ganti backend untuk matplotlib dan lihat apakah itu berfungsi sebagai berikut:
MPLBACKEND=Qt5Agg python train.py ${args...}
Di #78, ENGIECAT melaporkan bahwa mengubah backend Matplotlib dari Tkinter (TKAGG) menjadi PYQT5 (QT5AGG) memperbaiki masalah.
Bagian dari kode diadaptasi dari proyek -proyek berikut:
Banner dan logo yang dibuat oleh @jraulhernandezi (#76)