IMS Toucan adalah toolkit untuk pelatihan, menggunakan, dan mengajar sintesis teks-ke-speech canggih, dikembangkan di Institute for Natural Language Processing (IMS), University of Stuttgart, Jerman , rumah resmi sistem Toucantts multibahasa yang secara masif. Sistem kami cepat, dapat dikendalikan, dan tidak memerlukan satu ton komputasi.

Jika Anda menemukan repo ini berguna, pertimbangkan untuk memberikan bintang. Sejumlah besar membuatku bahagia, dan mereka sangat memotivasi. Jika Anda ingin lebih memotivasi saya, Anda bahkan dapat mempertimbangkan mensponsori toolkit ini. Kami hanya menggunakan sponsor GitHub untuk ini, ada scammers di platform lain yang berpura -pura menjadi pencipta. Jangan biarkan mereka membodohi Anda. Kode dan modelnya benar -benar gratis, dan berkat dukungan memeluk wajah yang murah hati?, Kami bahkan memiliki contoh model yang berjalan pada GPU gratis untuk digunakan siapa pun.
Lihatlah demo interaktif-multik-multi-lingual kami di memeluk wajah?
Kami juga telah menerbitkan dataset TTS multibahasa yang sangat besar tentang memeluk wajah?
Daftar bahasa yang didukung dapat ditemukan di sini
Python 3.10 adalah versi yang disarankan.
Untuk menginstal toolkit ini, kloning ke mesin yang ingin Anda gunakan (harus memiliki setidaknya satu GPU yang diaktifkan CUDA jika Anda bermaksud melatih model pada mesin itu. Untuk inferensi, Anda tidak memerlukan GPU).
Jika Anda menggunakan Linux, Anda harus menginstal paket berikut, atau menginstalnya dengan APT-get jika Anda belum (pada sebagian besar distribusi mereka dipasang sebelumnya):
libsndfile1
espeak-ng
ffmpeg
libasound-dev
libportaudio2
libsqlite3-dev
Arahkan ke direktori yang telah Anda kloning. Kami merekomendasikan membuat dan mengaktifkan lingkungan virtual untuk menginstal persyaratan dasar ke dalam. Perintah di bawah ini merangkum semua yang perlu Anda lakukan di bawah Linux. Jika Anda menjalankan Windows, baris kedua perlu diubah, silakan lihat dokumentasi VENV.
python -m venv <path_to_where_you_want_your_env_to_be>
source <path_to_where_you_want_your_env_to_be>/bin/activate
pip install --no-cache-dir -r requirements.txt
Jalankan baris kedua setiap kali Anda mulai menggunakan alat lagi untuk mengaktifkan lingkungan virtual lagi, jika Anda EG keluar sementara itu. Untuk memanfaatkan GPU, Anda tidak perlu melakukan hal lain pada mesin Linux. Pada mesin Windows, lihat situs web resmi Pytorch untuk Command yang memungkinkan dukungan GPU.
Jika Anda tidak ingin model pretrained dan terlatih serta file cache yang dihasilkan dari preprocessing dataset Anda disimpan di subfolder default, Anda dapat mengatur direktori yang sesuai secara global dengan mengedit Utility/storage_config.py sesuai dengan kebutuhan Anda (jalur dapat relatif terhadap direktori root repositori atau absolute).
Anda tidak perlu menggunakan model pretrained, tetapi dapat mempercepat segalanya. Mereka akan diunduh dengan cepat secara otomatis saat dibutuhkan, berkat Face Memeluk? dan VB khususnya.
Espeak-Ng adalah persyaratan opsional, yang menangani banyak kasus khusus dalam banyak bahasa, jadi itu bagus untuk dimiliki.
Di sebagian besar lingkungan Linux sudah akan diinstal, dan jika tidak, dan Anda memiliki hak yang cukup, Anda dapat menginstalnya dengan hanya menjalankannya
apt-get install espeak-ng
Untuk Windows , mereka menyediakan file penginstal .msi yang nyaman di halaman rilis GitHub mereka. Setelah instalasi pada sistem non-linux, Anda juga perlu memberi tahu pustaka Phonemizer di mana menemukan instalasi Espeak Anda dengan mengatur variabel lingkungan PHONEMIZER_ESPEAK_LIBRARY , yang dibahas dalam masalah ini.
Untuk Mac sayangnya jauh lebih rumit. Berkat Sang Hyun Park, berikut adalah panduan untuk menginstalnya di Mac: Untuk M1 Mac, metode paling nyaman untuk menginstal Espeak-Ng ke sistem Anda adalah melalui port MacPorts Espeak-Ng. MacPorts sendiri dapat diinstal dari situs web MacPorts, yang juga membutuhkan Xcode Apple. Setelah Xcode dan MacPorts diinstal, Anda dapat menginstal port Espeak-Ng melalui
sudo port install espeak-ng
Seperti yang dinyatakan dalam instruksi pemasangan Windows, instalasi Espeak-NG perlu ditetapkan sebagai variabel untuk pustaka fonemizer. Variabel lingkungan adalah PHONEMIZER_ESPEAK_LIBRARY seperti yang diberikan dalam utas GitHub yang ditautkan di atas. Namun, file instalasi Espeak-Ng yang Anda butuhkan untuk mengatur variabel ini adalah file .dylib daripada file .dll di Mac. Untuk menemukan file perpustakaan Espeak-Ng, Anda dapat menjalankan port contents espeak-ng . File spesifik yang Anda cari bernama libespeak-ng.dylib .
Anda dapat memuat model terlatih Anda, atau pretrain disediakan satu, menggunakan InferenceInterfaces/ToucanTTSInterface.py . Cukup buat objek darinya dengan pegangan direktori yang tepat mengidentifikasi model yang ingin Anda gunakan. Sisanya harus bekerja di latar belakang. Anda mungkin ingin mengatur embedding bahasa atau embedding speaker menggunakan fungsi set_anguage dan set_speaker_embedding . Sebagian besar hal harus jelas.
InferenceInterface berisi dua metode untuk membuat audio dari teks. Mereka read_to_file dan read_aloud .
read_to_file mengambil sebagai masukan daftar string dan nama file. Ini akan mensintesis kalimat dalam daftar dan menggabungkannya dengan jeda pendek di antara dan menulisnya ke filepath yang Anda berikan sebagai argumen lainnya.
Read_aloud hanya mengambil string, yang kemudian akan dikonversi ke ucapan dan segera bermain menggunakan speaker sistem. Jika Anda mengatur tampilan argumen opsional ke True , visualisasi akan muncul, bahwa Anda harus menutup untuk program untuk melanjutkan.
Penggunaannya ditunjukkan dalam run_interactive_demo.py dan run_text_to_file_reader.py .
Ada parameter penskalaan sederhana untuk mengontrol durasi, varian kurva pitch dan varian kurva energi. Anda dapat mengubahnya dalam kode saat menggunakan demo interaktif atau pembaca, atau Anda dapat meneruskannya ke antarmuka saat Anda menggunakannya dalam kode Anda sendiri.
Untuk mengubah bahasa model dan melihat bahasa mana yang tersedia dalam model pretrained kami, lihat daftar yang ditautkan di sini
Di direktori yang disebut utilitas ada file yang disebut path_to_transcript_dicts.py . Dalam file ini Anda harus menulis fungsi yang mengembalikan kamus yang memiliki semua jalur absolut untuk masing -masing file audio dalam dataset Anda sebagai string sebagai kunci dan transkripsi tekstual dari audio yang sesuai sebagai nilai.
Kemudian pergi ke direktori pelatihan/resep . Di sana, buat salinan file finetuning_example_simple.py jika Anda hanya ingin finetune pada satu dataset atau finetuning_example_multilingual.py jika Anda ingin finetune pada beberapa dataset, bahkan berpotensi beberapa bahasa. Kami akan menggunakan salinan ini sebagai referensi dan hanya membuat perubahan yang diperlukan untuk menggunakan dataset baru. Temukan panggilan ke fungsi persiapan_tts_corpus . Ganti Path_to_Transcript_dict yang digunakan di sana dengan satu yang baru saja Anda buat. Kemudian ubah nama direktori cache yang sesuai menjadi sesuatu yang masuk akal untuk dataset. Juga cari variabel save_dir , di situlah pemeriksaan akan disimpan. Ini adalah nilai default, Anda dapat menimpanya saat memanggil pipa nanti menggunakan argumen baris perintah, jika Anda ingin menyempurnakan dari pos pemeriksaan dan dengan demikian menyimpan ke direktori yang berbeda. Akhirnya, ubah argumen Lang dalam pembuatan dataset dan dalam panggilan ke fungsi loop train ke ISO 639-3 ID bahasa yang cocok dengan data Anda.
Argumen yang diberikan pada loop kereta dalam contoh -contoh finetuning dimaksudkan untuk kasus finetuning dari model pretrained. Jika Anda ingin berlatih dari awal, lihat pipa berbeda yang memiliki Toucantts atas namanya dan lihat argumen yang digunakan di sana.
Setelah ini selesai, kita hampir selesai, sekarang kita hanya perlu membuatnya tersedia untuk file run_training_pipeline.py di level atas. Dalam file tersebut, impor fungsi run dari pipa yang baru saja Anda buat dan berikan nama yang bermakna. Sekarang di Pipeline_dict , tambahkan fungsi impor Anda sebagai nilai dan gunakan sebagai kunci singkatan yang masuk akal.
Setelah Anda memiliki resep yang dibangun, pelatihan sangat mudah:
python run_training_pipeline.py <shorthand of the pipeline>
Anda dapat menyediakan salah satu argumen berikut, tetapi tidak harus (meskipun untuk pelatihan Anda harus menentukan setidaknya ID GPU).
--gpu_id <ID of the GPU you wish to use, as displayed with nvidia-smi, default is cpu. If multiple GPUs are provided (comma separated), then distributed training will be used, but the script has to be started with torchrun.>
--resume_checkpoint <path to a checkpoint to load>
--resume (if this is present, the furthest checkpoint available will be loaded automatically)
--finetune (if this is present, the provided checkpoint will be fine-tuned on the data from this pipeline)
--model_save_dir <path to a directory where the checkpoints should be saved>
--wandb (if this is present, the logs will be synchronized to your weights&biases account, if you are logged in on the command line)
--wandb_resume_id <the id of the run you want to resume, if you are using weights&biases (you can find the id in the URL of the run)>
Untuk pelatihan multi-GPU, Anda harus menyediakan beberapa ID GPU (dipisahkan koma) dan memulai skrip dengan Torchrun. Anda juga harus menentukan jumlah GPU. Ini harus sesuai dengan jumlah ID yang Anda berikan. Hati -hati: Torchrun tidak kompatibel dengan Nohup! Gunakan TMUX sebagai gantinya untuk menjaga skrip tetap berjalan setelah Anda keluar dari shell.
torchrun --standalone --nproc_per_node=4 --nnodes=1 run_training_pipeline.py <shorthand of the pipeline> --gpu_id "0,1,2,3"
Setelah setiap zaman (atau sebagai alternatif setelah jumlah langkah tertentu), beberapa log akan ditulis ke konsol dan ke situs web bobot dan bias, jika Anda masuk dan atur bendera. Jika Anda mengeluarkan CUDA dari kesalahan memori, Anda perlu mengurangi batchsize dalam argumen panggilan ke pelatihan_loop dalam pipa yang Anda jalankan. Cobalah mengurangi ukuran batch dalam langkah -langkah kecil sampai Anda tidak lagi keluar dari kesalahan memori CUDA.
Di direktori yang Anda tentukan untuk disimpan, file pos pemeriksaan dan data visualisasi spektrogram akan muncul. Karena pos pemeriksaan cukup besar, hanya lima yang terbaru yang akan disimpan. Jumlah langkah pelatihan sangat tergantung pada data yang Anda gunakan dan apakah Anda finetuning dari pos pemeriksaan pretrained atau pelatihan dari awal. Semakin sedikit data yang Anda miliki, semakin sedikit langkah yang harus Anda ambil untuk mencegah kemungkinan keruntuhan. Jika Anda ingin berhenti lebih awal, bunuh saja prosesnya, karena semuanya adalah Daemonic, semua proses anak harus mati dengan itu. Jika ada beberapa proses hantu yang tertinggal, Anda dapat menggunakan perintah berikut untuk menemukannya dan membunuh mereka secara manual.
fuser -v /dev/nvidia*
Setiap kali pos pemeriksaan disimpan, versi terkompresi yang dapat digunakan untuk inferensi juga dibuat, yang dinamai terbaik.py
Berikut adalah beberapa poin yang dibesarkan oleh pengguna:
run_scorer.py .UserWarning: Detected call of lr_scheduler.step() before optimizer.step(). - Kami menggunakan penjadwal khusus, dan obor secara tidak benar berpikir bahwa kami memanggil penjadwal dan pengoptimal dalam urutan yang salah. Abaikan saja peringatan ini, itu sama sekali tidak berarti.WARNING[XFORMERS]: xFormers can't load C++/CUDA extensions. [...] - peringatan lain yang tidak berarti. Kami sebenarnya tidak menggunakan XFormers sendiri, itu hanya bagian dari ketergantungan dari salah satu dependensi kami, tetapi tidak digunakan di mana pun.The torchaudio backend is switched to 'soundfile'. Note that 'sox_io' is not supported on Windows. [...] - Terjadi di bawah jendela dan tidak mempengaruhi apa pun.WARNING:phonemizer:words count mismatch on 200.0% of the lines (2/1) [...] - Kami tidak tahu mengapa Espeak mulai memberikan peringatan ini, namun tampaknya tidak mempengaruhi apa pun, jadi tampaknya aman untuk diabaikan.NaN - Tingkat pembelajaran default bekerja pada data bersih. Jika data Anda kurang bersih, coba gunakan pencetak gol untuk menemukan sampel yang bermasalah, atau kurangi tingkat pembelajaran. Masalah yang paling umum adalah jeda dalam pidato, tetapi tidak ada yang mengisyaratkan mereka dalam teks. Itu sebabnya ASR Corpora, yang meninggalkan tanda baca, biasanya sulit digunakan untuk TTS. Modul Pytorch dasar dari FastSpeech 2 dan GST diambil dari ESPNET, modul Pytorch HiFi-Gan diambil dari repositori paralelwavegan. Beberapa modul yang terkait dengan postnet berbasis conditionalFlowMatching sebagaimana diuraikan dalam Matchatts diambil dari basis kode Matchatts resmi dan beberapa diambil dari basis kode Stabletts. Untuk konversi grapheme-to-phoneme, kami mengandalkan Espeak-Ng yang disebutkan di atas serta transphone. Kami menggunakan ENCODEC, codec audio saraf sebagai representasi menengah untuk caching data kereta untuk menghemat ruang.
@inproceedings{lux2021toucan,
year = 2021,
title = {{The IMS Toucan system for the Blizzard Challenge 2021}},
author = {Florian Lux and Julia Koch and Antje Schweitzer and Ngoc Thang Vu},
booktitle = {Blizzard Challenge Workshop},
publisher = {ISCA Speech Synthesis SIG}
}
@inproceedings{lux2022laml,
year = 2022,
title = {{Language-Agnostic Meta-Learning for Low-Resource Text-to-Speech with Articulatory Features}},
author = {Florian Lux and Ngoc Thang Vu},
booktitle = {ACL}
}
@inproceedings{lux2022cloning,
year = 2022,
title = {{Exact Prosody Cloning in Zero-Shot Multispeaker Text-to-Speech}},
author = {Lux, Florian and Koch, Julia and Vu, Ngoc Thang},
booktitle = {SLT},
publisher = {IEEE}
}
@inproceedings{lux2022lrms,
year = 2022,
title = {{Low-Resource Multilingual and Zero-Shot Multispeaker TTS}},
author = {Florian Lux and Julia Koch and Ngoc Thang Vu},
booktitle = {AACL}
}
@inproceedings{lux2023controllable,
year = 2023,
title = {{Low-Resource Multilingual and Zero-Shot Multispeaker TTS}},
author = {Florian Lux and Pascal Tilli and Sarina Meyer and Ngoc Thang Vu},
booktitle = {Interspeech}
publisher = {ISCA}
}
@inproceedings{lux2023blizzard,
year = 2023,
title = {{The IMS Toucan System for the Blizzard Challenge 2023}},
author = {Florian Lux and Julia Koch and Sarina Meyer and Thomas Bott and Nadja Schauffler and Pavel Denisov and Antje Schweitzer and Ngoc Thang Vu},
booktitle = {Blizzard Challenge Workshop},
publisher = {ISCA Speech Synthesis SIG}
}
@inproceedings{lux2024massive,
year = 2024,
title = {{Meta Learning Text-to-Speech Synthesis in over 7000 Languages}},
author = {Florian Lux and Sarina Meyer and Lyonel Behringer and Frank Zalkow and Phat Do and Matt Coler and Emanuël A. P. Habets and Ngoc Thang Vu},
booktitle = {Interspeech}
publisher = {ISCA}
}