
Wavegrad
تنفيذ (Pytorch) من Google Brain's High-Fidelity Wavegrad (Paper). التنفيذ الأول على github مع توليد عالي الجودة ل 6 أرقام.
حالة
عامل الوقت الحقيقي (RTF)
عدد المعلمات : 15.810.401
| نموذج | مستقر | RTX 2080 TI | تسلا K80 | Intel Xeon 2.3ghz* |
|---|
| 1000 تكرار | + | 9.59 | - | - |
| 100 تكرار | + | 0.94 | 5.85 | - |
| 50 تكرار | + | 0.45 | 2.92 | - |
| 25 تكرار | + | 0.22 | 1.45 | - |
| 12 تكرار | + | 0.10 | 0.69 | 4.55 |
| 6 تكرار | + | 0.04 | 0.33 | 2.09 |
* ملاحظة : استخدم إصدارًا قديمًا من وحدة المعالجة المركزية Intel Xeon.
عن
Wavegrad هو نموذج مشروط لتوليد الموجة من خلال تقدير التدرجات لكثافة البيانات مع جودة أخذ العينات المماثلة Wavenet. هذا المتفرج ليس غان ، ولا تطبيع التدفق ، ولا نموذج الانحدار التلقائي الكلاسيكي . يعتمد المفهوم الرئيسي لـ Vocoder على النماذج الاحتمالية للانتشار (DDPM) ، والتي تستخدم Dynamics Langevin وأطر مطابقة الدرجات . مقارنةً ، مقارنةً بـ DDPM الكلاسيكي ، يحقق Wavegrad تقاربًا فائقًا (6 تكرار وربما أقل) نظام أخذ العينات التكراري Dynamics.
تثبيت
- استنساخ هذا الريبو:
git clone https://github.com/ivanvovk/WaveGrad.git
cd WaveGrad
- متطلبات التثبيت:
pip install -r requirements.txt
تمرين
1 إعداد البيانات
- اجعل قطار واختبار الأفلات من بيانات الصوت الخاصة بك مثل تلك المدرجة في مجلد
filelists . - قم بعمل ملف تكوين* في مجلد
configs .
* ملاحظة: إذا كنت ستغير hop_length لـ STFT ، فتأكد من أن منتج factors التهيئة الخاصة بك في التكوين يساوي hop_length الجديد.
2 تدريب وحدات معالجة الرسومات الواحدة والموزعة
- Open
runs/train.sh Script وحدد أجهزة GPU المرئية والمسار إلى ملف التكوين الخاص بك. إذا حددت أكثر من وحدة معالجة الرسومات ، فسيتم تشغيل التدريب في الوضع الموزع. - تشغيل
sh runs/train.sh
3 Tensorboard و Logging
لتتبع عملية التدريب ، قم بتشغيل Tensorboard بواسطة tensorboard --logdir=logs/YOUR_LOGDIR_FOLDER . سيتم تخزين جميع معلومات التسجيل ونقاط التفتيش في logs/YOUR_LOGDIR_FOLDER . يتم تحديد logdir في ملف التكوين.
4 SCHENE SCHENED SCHEND
بمجرد أن يتم تدريب النموذج ، ابحث عن الشبكة عن أفضل جدول* للحصول على عدد مطلوب من التكرارات في notebooks/inference.ipynb . يدعم الرمز التوازي ، بحيث يمكنك تحديد أكثر من عدد من الوظائف لتسريع البحث.
* ملاحظة : البحث الشبكي ضروري لعدد صغير من التكرارات (مثل 6 أو 7). بالنسبة للرقم الأكبر ، فقط جرب benchmark.fibonacci(...) تسلسل Fibonacci. من الجدول الزمني الجيد المكون من 25 عامًا ، على سبيل المثال ، يمكنك إنشاء جدول ترتيب أعلى من خلال نسخ عناصر.
جداول الضوضاء للنموذج المسبق
- تم الحصول على جدول الترجيح 6 باستخدام بحث الشبكة. بعد ذلك ، بناءً على مخطط تم الحصول عليه ، باليد ، وجدت تقريب أفضل قليلاً.
- تم الحصول على جدول الترجيح 7 بنفس الطريقة.
- تم الحصول على جدول الترجيح 12 بنفس الطريقة.
- تم الحصول على جدول المؤسسة 25 باستخدام Fibonacci Sequence
benchmark.fibonacci(...) . - تم الحصول على جدول الترجيح 50 من خلال تكرار العناصر من مخطط 25 تأسيس.
- تم الحصول على جدول 100 تويجي بنفس الطريقة.
- تم الحصول على جدول 1000 بتأليف بنفس الطريقة.
الاستدلال
CLI
ضع طيفك في مجلدات. اصنع عازفًا. ثم قم بتشغيل هذا الأمر مع الحجج الخاصة بك:
sh runs/inference.sh -c < your-config > -ch < your-checkpoint > -ns < your-noise-schedule > -m < your-mel-filelist > -v " yes "
كمبيوتر محمول Jupyter
يتم توفير المزيد من تفاصيل الاستدلال في notebooks/inference.ipynb . هناك يمكنك أيضًا العثور على كيفية تعيين جدول ضوضاء للنموذج وجعل الشبكة البحث عن أفضل مخطط.
آخر
المولدة الصوتيات
يتم توفير أمثلة من AudiOs المولدة في مجلد generated_samples . إن تدهور الجودة بين 1000 من الاستدلالات و 6 تويجيات غير ملحوظ إذا وجدت أفضل جدول للأخير.
نقاط التفتيش المسبقة
يمكنك العثور على ملف نقطة تفتيش مسبق* على LJSPEEDE (22 كيلو هرتز) عبر رابط محرك Google هذا.
* ملاحظة : نقطة التفتيش التي تم تحميلها عبارة عن dict مع 'model' مفتاح واحد.
التفاصيل المهمة والقضايا والتعليقات
- أثناء التدريب ، يستخدم Wavegrad جدولًا افتراضيًا للضوضاء مع 1000 تكرار وبيتشات المقياس الخطي من النطاق (1E-6 ، 0.01). للاستدلال ، يمكنك تعيين جدول آخر مع تكرارات أقل. قم بضبط بيتاس بعناية ، تعتمد جودة الإخراج بشكل كبير على ذلك.
- بشكل افتراضي يعمل النموذج بطريقة مختلطة. يتم تعديل حجم الدُفعة مقارنة بالورقة (256 -> 96) لأن المؤلفين قاموا بتدريب نموذجهم على TPU.
- بعد ~ 10K تكرارات التدريب (1-2 ساعة) على وحدة معالجة الرسومات الواحدة ، يقوم النموذج بأداء جيد للاستدلال 50. يبلغ إجمالي وقت التدريب حوالي 1-2 أيام (للتقارب المطلق).
- في مرحلة ما ، قد يبدأ التدريب في التصرف غريبًا ومجنونًا (تنفجر الخسارة) ، لذلك قمت بتقديم جدولة معدل التعلم (LR) وقص التدرج. إذا انفجرت الخسارة لبياناتك ، فحاول تقليل LR Scheduler Gamma قليلاً. يجب أن يساعد.
- بشكل افتراضي طول القفزة من STFT الخاص بك يساوي 300 (وبالتالي عامل التخطي الكلي). لا يتم اختبار حالات أخرى ، ولكن يمكنك المحاولة. تذكر أن عامل التخطي الكلي هذا يجب أن لا يزال مساوياً لطول القفز الجديد.
تاريخ التحديثات
- ( جديد : 10/24/2020) تحديث ضخم. التدريب الموزعة والدعم المختلط. ترميز موضعي أكثر صحة. CLI دعم الاستدلال. البحث الموازي الشبكة. انخفض حجم النموذج بشكل كبير.
- معلومات RTF جديدة لبطاقة GPU NVIDIA TESLA K80 (شعبية في خدمة Google Colab) و CPU Intel Xeon 2.3GHz.
- تحديث ضخم. جديد 6 تركيبات تم إنشاؤها جيدًا مثال. إعداد الجدول الزمني الجديد للضوضاء API. وأضاف أفضل رمز بحث الشبكة الجدول الزمني.
- تحسين التدريب من خلال إدخال جدولة معدل التعلم أكثر ذكاء. تم الحصول على توليف عالي الدقة.
- تدريب مستقر واستدلال متعدد. يتم دعم جدولة الضوضاء 6 التوسع.
- التدريب المستقر والاستدلال الثابت مع ضوضاء ثابتة خلفية كبيرة تركت. يتم حل جميع مشكلات الترميز الموضعية.
- تدريب مستقر من نماذج 25 و 50 و 1000 مثبتة. لم يتم العثور على التحجيم الخطي (C = 5000 من الورق) من الترميز الموضعي (علة).
- تدريب مستقر من نماذج 25 و 50 و 1000 مثبتة. ترميز موضعي ثابت تقليص. يتم استبدال أخذ العينات المقطوعة الموازية بأخذ عينات كاملة من MEL.
- ( إطلاق ، أولا على جيثب ). أخذ عينات من القطاع الموازي والترميز الموضعي المكسور. جودة سيئة مع نقرات من التسلسل من توليد القطعة المتوازية.
مراجع
- Nanxin Chen et al. ، Wavegrad: تقدير التدرجات لتوليد الموجة
- جوناثان هو وآخرون ، نماذج احتمالية نشر
- مستودع النماذج الاحتمالية للانتشار (تنفيذ TensorFlow) ، والتي تم اعتماد حسابات الانتشار منها