
Wavegrad
Implementasi (Pytorch) dari Vocoder Wavegrad (kertas) Google Brain. Implementasi pertama di GitHub dengan generasi berkualitas tinggi untuk 6 iterasi.
Status
Faktor real-time (RTF)
Jumlah parameter : 15.810.401
| Model | Stabil | RTX 2080 Ti | Tesla K80 | Intel Xeon 2.3GHz* |
|---|
| 1000 iterasi | + | 9.59 | - | - |
| 100 iterasi | + | 0.94 | 5.85 | - |
| 50 iterasi | + | 0.45 | 2.92 | - |
| 25 iterasi | + | 0.22 | 1.45 | - |
| 12 iterasi | + | 0.10 | 0.69 | 4.55 |
| 6 iterasi | + | 0,04 | 0.33 | 2.09 |
* Catatan : Menggunakan versi lama Intel Xeon CPU.
Tentang
Wavegrad adalah model bersyarat untuk pembuatan bentuk gelombang melalui memperkirakan gradien kepadatan data dengan kualitas pengambilan sampel yang mirip Wavenet. Vocoder ini bukan GAN, atau aliran normalisasi, atau model autoregresif klasik . Konsep utama Vocoder didasarkan pada Denoising Diffusion Probabilistic Models (DDPM), yang memanfaatkan dinamika Langevin dan kerangka kerja pencocokan skor . Selanjutnya, dibandingkan dengan DDPM klasik, Wavegrad mencapai konvergensi super cepat (6 iterasi dan mungkin lebih rendah) WRT Langevin Dynamics Iterative Sampling Skema.
Instalasi
- Klon repo ini:
git clone https://github.com/ivanvovk/WaveGrad.git
cd WaveGrad
- Instal Persyaratan:
pip install -r requirements.txt
Pelatihan
1 Mempersiapkan data
- Buat daftar file kereta dan uji dari data audio Anda seperti yang disertakan ke dalam folder
filelists . - Buat file konfigurasi* di folder
configs .
* Catatan: Jika Anda akan mengubah hop_length untuk STFT, maka pastikan bahwa produk dari factors upampling Anda dalam konfigurasi sama dengan hop_length baru Anda.
2 pelatihan GPU tunggal dan terdistribusi
- Open
runs/train.sh skrip dan tentukan perangkat GPU yang terlihat dan path ke file konfigurasi Anda. Jika Anda menentukan lebih dari satu GPU, pelatihan akan berjalan dalam mode terdistribusi. - Jalankan
sh runs/train.sh
3 Tensorboard dan Logging
Untuk melacak proses pelatihan Anda, jalankan tensorboard dengan tensorboard --logdir=logs/YOUR_LOGDIR_FOLDER . Semua informasi logging dan pos pemeriksaan akan disimpan dalam logs/YOUR_LOGDIR_FOLDER . logdir ditentukan dalam file config.
4 pencarian jaringan jadwal kebisingan
Setelah model dilatih, pencarian grid untuk jadwal terbaik* untuk sejumlah iterasi yang diperlukan di notebooks/inference.ipynb . Kode ini mendukung paralelisme, sehingga Anda dapat menentukan lebih dari satu jumlah pekerjaan untuk mempercepat pencarian.
* Catatan : Pencarian kisi diperlukan hanya untuk sejumlah kecil iterasi (seperti 6 atau 7). Untuk jumlah yang lebih besar cukup coba inisialisasi urutan fibonacci.fibonacci benchmark.fibonacci(...) : Saya menggunakannya untuk 25 iterasi dan berfungsi dengan baik. Dari jadwal 25 iterasi yang baik, misalnya, Anda dapat membangun jadwal orde tinggi dengan menyalin elemen.
Jadwal kebisingan untuk model pretrained
- Jadwal 6-iterasi diperoleh dengan menggunakan pencarian grid. Setelah, berdasarkan skema yang diperoleh, dengan tangan, saya menemukan perkiraan yang sedikit lebih baik.
- Jadwal 7-iterasi diperoleh dengan cara yang sama.
- Jadwal 12-iterasi diperoleh dengan cara yang sama.
- Jadwal 25-iterasi diperoleh dengan menggunakan fibonacci urutan
benchmark.fibonacci(...) . - Jadwal 50-iterasi diperoleh dengan mengulangi elemen dari skema 25 iterasi.
- Jadwal 100 iterasi diperoleh dengan cara yang sama.
- Jadwal 1000 iterasi diperoleh dengan cara yang sama.
Kesimpulan
Cli
Masukkan spektrogram Mel Anda di beberapa folder. Membuat daftar file. Kemudian jalankan perintah ini dengan argumen Anda sendiri:
sh runs/inference.sh -c < your-config > -ch < your-checkpoint > -ns < your-noise-schedule > -m < your-mel-filelist > -v " yes "
Jupyter Notebook
Rincian inferensi lebih lanjut disediakan dalam notebooks/inference.ipynb . Di sana Anda juga dapat menemukan cara mengatur jadwal kebisingan untuk model dan membuat pencarian grid untuk skema terbaik.
Lainnya
Audio yang dihasilkan
Contoh audio yang dihasilkan disediakan di folder generated_samples . Degradasi kualitas antara 1000-pribumi dan kesimpulan 6 iterasi tidak terlihat jika ditemukan jadwal terbaik untuk yang terakhir.
Pos pemeriksaan pretrained
Anda dapat menemukan file pos pemeriksaan pretrained* di ljspeech (22kHz) melalui tautan Google Drive ini.
* Catatan : Diunggah pos pemeriksaan adalah dict dengan 'model' kunci tunggal.
Detail penting, masalah, dan komentar
- Selama pelatihan Wavegrad menggunakan jadwal kebisingan default dengan 1000 iterasi dan beta skala linier dari kisaran (1E-6, 0,01). Untuk inferensi Anda dapat menetapkan jadwal lain dengan iterasi yang lebih sedikit. Tune beta dengan hati -hati, kualitas output sangat tergantung padanya.
- Secara default model berjalan dengan cara presisi campuran. Ukuran batch dimodifikasi dibandingkan dengan kertas (256 -> 96) karena penulis melatih model mereka di TPU.
- Setelah ~ 10k iterasi pelatihan (1-2 jam) pada satu GPU model ini melakukan generasi yang baik untuk inferensi 50-anyation. Total waktu pelatihan adalah sekitar 1-2 hari (untuk konvergensi absolut).
- Pada beberapa titik pelatihan mungkin mulai berperilaku aneh dan gila (kerugian meledak), jadi saya telah memperkenalkan penjadwalan tingkat pembelajaran (LR) dan kliping gradien. Jika kerugian meledak untuk data Anda, maka cobalah untuk mengurangi Gamma Penjadwal LR sedikit. Itu harus membantu.
- Secara default, panjang hop STFT Anda sama dengan 300 (dengan demikian total faktor upampling). Kasus lain tidak diuji, tetapi Anda dapat mencoba. Ingat, total faktor upampling harus tetap sama dengan panjang hop baru Anda.
Sejarah Pembaruan
- ( Baru : 10/24/2020) Pembaruan Besar. Pelatihan Terdistribusi dan Dukungan Presisi Campuran. Pengkodean posisi yang lebih benar. Dukungan CLI untuk inferensi. Pencarian Grid Paralel. Ukuran model menurun secara signifikan.
- Info RTF baru untuk kartu GPU NVIDIA TESLA K80 (Populer di Layanan Google Colab) dan CPU Intel Xeon 2.3GHz.
- Pembaruan besar. Contoh sampel 6-iterasi baru yang dihasilkan dengan baik. API Pengaturan Jadwal Kebisingan Baru. Menambahkan kode pencarian grid jadwal terbaik.
- Peningkatan pelatihan dengan memperkenalkan penjadwal tingkat pembelajaran yang lebih cerdas. Memperoleh sintesis kesetiaan tinggi.
- Pelatihan yang stabil dan inferensi multi-utara. Penjadwalan kebisingan 6-iterasi didukung.
- Pelatihan yang stabil dan inferensi uji-tetap dengan latar belakang noise statis yang signifikan tersisa. Semua masalah pengkodean posisi dipecahkan.
- Pelatihan stabil dari model uriasi 25-, 50- dan 1000-fixed. Tidak menemukan penskalaan linier (C = 5000 dari kertas) dari pengkodean posisi (bug).
- Pelatihan stabil dari model uriasi 25-, 50- dan 1000-fixed. Memperbaiki pengkodean downscaling. Pengambilan sampel segmen paralel digantikan oleh pengambilan sampel full-mel.
- ( Rilis, pertama di github ). Pengambilan sampel segmen paralel dan pengkodean penurunan posisi posisi yang rusak. Kualitas buruk dengan klik dari gabungan dari generasi segmen paralel.
Referensi
- Nanxin Chen et al., Wavegrad: memperkirakan gradien untuk generasi gelombang
- Jonathan Ho et al., Model probabilistik difusi denoising
- Denoising Difusion Probabilistic Model Repositori (Implementasi TensorFlow), dari mana perhitungan difusi telah diadopsi