Dalam makalah ini, kami menyajikan Styletts 2, model Text-to-Speech (TTS) yang memanfaatkan difusi gaya dan pelatihan permusuhan dengan model bahasa bicara yang besar (SLM) untuk mencapai sintesis TTS tingkat manusia. Styletts 2 berbeda dari pendahulunya dengan memodelkan gaya sebagai variabel acak laten melalui model difusi untuk menghasilkan gaya yang paling cocok untuk teks tanpa memerlukan ucapan referensi, mencapai difusi laten yang efisien sambil mendapat manfaat dari beragam sintesis pidato yang ditawarkan oleh model difusi. Selain itu, kami menggunakan SLM besar terlatih, seperti WAVLM, sebagai diskriminator dengan pemodelan durasi yang dapat dibedakan baru untuk pelatihan ujung-ke-ujung, menghasilkan peningkatan kealamian bicara. Styletts 2 melampaui rekaman manusia pada dataset LJSPEECH speaker tunggal dan mencocokkannya pada dataset VCTK multispeaker sebagaimana dinilai oleh penutur asli bahasa Inggris. Selain itu, ketika dilatih pada dataset Libitts, model kami mengungguli model yang tersedia untuk umum sebelumnya untuk adaptasi speaker nol-shot. Pekerjaan ini mencapai sintesis TTS tingkat manusia pertama pada dataset tunggal dan multispeaker, menunjukkan potensi difusi gaya dan pelatihan permusuhan dengan SLM besar.
Kertas: https://arxiv.org/abs/2306.07691
Sampel audio: https://styletts2.github.io/
Demo Online: Wajah Memeluk (Terima kasih @fakerybakery untuk demo online yang indah)
train_second.py (saya telah mencoba semua yang saya bisa untuk memperbaikinya tetapi tidak berhasil, jadi jika Anda bersedia membantu, silakan lihat #7) git clone https://github.com/yl4579/StyleTTS2.git
cd StyleTTS2pip install -r requirements.txtDi Windows Tambah:
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 -UJuga instal fonemizer dan espeak jika Anda ingin menjalankan demo:
pip install phonemizer
sudo apt-get install espeak-ngPelatihan Tahap Pertama:
accelerate launch train_first.py --config_path ./Configs/config.ymlPelatihan Tahap Kedua (versi DDP tidak berfungsi, jadi versi saat ini menggunakan DP, sekali lagi lihat #7 jika Anda ingin membantu) :
python train_second.py --config_path ./Configs/config.yml Anda dapat menjalankan keduanya secara berurutan dan akan melatih tahap pertama dan kedua. Model akan disimpan dalam format "Epoch_1st_%05d.pth" dan "Epoch_2nd_%05d.pth". Pos pemeriksaan dan log tensorboard akan disimpan di log_dir .
Format daftar data harus filename.wav|transcription|speaker , lihat val_list.txt sebagai contoh. Label speaker diperlukan untuk model multi-speaker karena kita perlu sampel audio referensi untuk pelatihan model difusi gaya.
Di config.yml, ada beberapa konfigurasi penting yang harus diurus:
OOD_data : Jalan untuk teks-teks di luar distribusi untuk pelatihan permusuhan SLM. Formatnya harus text|anything .min_length : Panjang minimum teks ood untuk pelatihan. Ini untuk memastikan pidato yang disintesis memiliki panjang minimum.max_len : Panjang audio maksimum untuk pelatihan. Unit adalah bingkai. Karena ukuran hop default adalah 300, satu bingkai sekitar 300 / 24000 (0,0125) detik. Menurunkan ini jika Anda menemukan masalah di luar memori.multispeaker : Disetel ke true jika Anda ingin melatih model multispeaker. Ini diperlukan karena arsitektur Denoiser berbeda untuk model tunggal dan multispeaker.batch_percentage : Ini untuk memastikan selama pelatihan permusuhan SLM tidak ada masalah di luar memori (OOM). Jika Anda mengalami masalah oom, harap atur angka yang lebih rendah untuk ini.Di folder utils, ada tiga model pra-terlatih:
batch_size yang lebih rendah atau max_len . Anda dapat merujuk pada masalah #10 untuk informasi lebih lanjut. Script dimodifikasi dari train_second.py yang menggunakan DP, karena DDP tidak berfungsi untuk train_second.py . Silakan lihat bagian tebal di atas jika Anda bersedia membantu dengan masalah ini.
python train_finetune.py --config_path ./Configs/config_ft.yml Pastikan Anda memiliki pos pemeriksaan Libitts yang diunduh dan dibuka ritsleting di bawah folder. Konfigurasi default config_ft.yml finetunes di ljspeech dengan 1 jam data bicara (sekitar 1k sampel) untuk 50 zaman. Ini membutuhkan waktu sekitar 4 jam untuk menyelesaikan pada empat NVIDIA A100. Kualitasnya sedikit lebih buruk (mirip dengan NaturalSpeech di LJSPEECH) daripada model LJSPEECH yang dilatih dari awal dengan 24 jam data bicara, yang membutuhkan waktu sekitar 2,5 hari untuk menyelesaikan empat A100. Sampel dapat ditemukan di #65 (komentar).
Jika Anda menggunakan GPU tunggal (karena skrip tidak berfungsi dengan DDP) dan ingin menyimpan kecepatan pelatihan dan VRAM, Anda dapat melakukannya (terima kasih @korakoe karena membuat skrip di #100):
accelerate launch --mixed_precision=fp16 --num_processes=1 train_finetune_accelerate.py --config_path ./Configs/config_ft.yml@Kreevoz telah membuat catatan terperinci tentang masalah umum dalam finetuning, dengan saran dalam memaksimalkan kualitas audio: #81. Beberapa di antaranya juga berlaku untuk pelatihan dari awal. @Iieleven11 juga telah membuat pedoman untuk menyempurnakan: #128.
joint_epoch : Ini kemungkinan karena RAM GPU Anda tidak cukup besar untuk menjalankan pelatihan permusuhan SLM. Anda mungkin melewatkannya tetapi kualitasnya bisa lebih buruk. Mengatur joint_epoch angka yang lebih besar daripada epochs dapat melewatkan pelatihan SLM Advatariral. Silakan merujuk ke inference_ljspeech.ipynb (speaker tunggal) dan inference_libritts.ipynb (multi-speaker) untuk detailnya. Untuk Liblitts, Anda juga perlu mengunduh Reference_Audio.zip dan unzip di bawah demo sebelum menjalankan demo.
Styletts 2 pretrained di ljspeech corpus dalam 24 kHz dapat diunduh di https://huggingface.co/yl4579/styletts2-ljspeech/tree/main.
Model Styletts 2 pretrained di Liblitts dapat diunduh di https://huggingface.co/yl4579/styletts2-libritts/tree/main.
Anda dapat mengimpor Styletts 2 dan menjalankannya di kode Anda sendiri. Namun, inferensi tergantung pada paket berlisensi GPL, sehingga tidak termasuk langsung dalam repositori ini. Garpu berlisensi GPL memiliki skrip yang dapat diimpor, serta API streaming eksperimental, dll. Paket berlisensi mit sepenuhnya yang menggunakan Gruut (meskipun kualitas lebih rendah karena ketidaksesuaian antara fonemizer dan gruut) juga tersedia.
Sebelum menggunakan model pra-terlatih ini, Anda setuju untuk memberi tahu para pendengar bahwa sampel ucapan disintesis oleh model pra-terlatih, kecuali jika Anda memiliki izin untuk menggunakan suara yang Anda sintesis. Artinya, Anda setuju untuk hanya menggunakan suara -suara yang pembicara memberikan izin untuk mengkloning suara mereka, baik secara langsung atau dengan lisensi sebelum membuat suara yang disintesis publik, atau Anda harus mengumumkan secara terbuka bahwa suara -suara ini disintesis jika Anda tidak memiliki izin untuk menggunakan suara -suara ini.
Kode: Lisensi MIT
Model pra-terlatih: Sebelum menggunakan model pra-terlatih ini, Anda setuju untuk memberi tahu para pendengar bahwa sampel ucapan disintesis oleh model pra-terlatih, kecuali jika Anda memiliki izin untuk menggunakan suara yang Anda sintesis. Artinya, Anda setuju untuk hanya menggunakan suara -suara yang pembicara memberikan izin untuk mengkloning suara mereka, baik secara langsung atau dengan lisensi sebelum membuat suara yang disintesis publik, atau Anda harus mengumumkan secara terbuka bahwa suara -suara ini disintesis jika Anda tidak memiliki izin untuk menggunakan suara -suara ini.