الانتشار المزدوج
الانتشار المزدوج هو نموذج انتشار توليدي للموسيقى. لا يزال هذا النموذج والرمز في هذا المستودع عملًا محددًا.
أنا أستخدم الموسيقى حاليًا من SNES Games كمجموعة بيانات الخاصة بي أثناء التطوير. تتكون مجموعة البيانات من حوالي 20،000 عينة من الأطوال بين 1 و 3 دقائق. أنا أستخدم اللعبة التي تنطلقها الموسيقى كملصق فئة للتكيف ، مما يعني أنه يمكنك اختيار لعبة (أو مجموعة مرجحة من الألعاب المتعددة) لإنشاء موسيقى جديدة مع الأدوات والأناقة المناسبة. عدد الأمثلة لكل فئة / لعبة في أي مكان من حوالي 5 إلى 50 ، وجميع العينات التي تم إنشاؤها التي تم إنشاؤها بين أكثر من لعبة واحدة هي "صفر طلقة".
يمكنك سماع بعض العينات التي تم إنشاؤها بواسطة النموذج في مراحل مختلفة من التدريب / التطوير هنا.
لقد بدأت هذا المشروع في أغسطس/أغسطس/آب/أغسطس بقصد تحقيق 3 أهداف:
- تعرف على كل مكونات من نماذج الانتشار الحديثة في كل من الاستدلال والتدريب
- تدريب نموذج من نقطة الصفر قادر على توليد الموسيقى التي أرغب بالفعل في الاستماع إليها
- هل ما سبق باستخدام وحدة معالجة الرسومات المستهلك الواحدة فقط (4090)
لقد تغير النموذج بشكل كبير على مدار التطور خلال الـ 12 شهرًا الماضية.
في البداية (أغسطس/2023) كان نموذج الانتشار غير مشروط وعمل مباشرة على الصوت الخام.
- نظرًا لقيود الذاكرة والأداء ، كان هذا يعني أنني كنت مقصورة على حوالي 16 ثانية من الصوت الأحادي في 8 كيلو هرتز.
- لقد جربت تنسيقات 1D و 2 D مع خطوات مختلفة للمعالجة المسبقة. لقد وجدت أن التنسيقات ثنائية الأبعاد قادرة على التعميم بشكل أفضل مع مجموعة بيانات صغيرة وكانت أكثر فعالية حسابية ومعلمة من تنسيقات 1D.
- بالنسبة للتنسيقات ثنائية الأبعاد ، وجدت باستخدام الاهتمام القابل للفصل (دمج الصفوف / الأعمدة مع البعد الدُفعات بالتناوب) يمكن أن يؤدي إلى استخدام الاهتمام في نموذج أبعاد عالية دون التضحية بجودة كبيرة.
- لقد وجدت أن الاهتمام كان متطلبًا مطلقًا للسماح للنموذج بفهم مقياس التردد الحسي في الموسيقى عندما يستخدم التنسيق مقياس التردد الخطي ، خاصة مع التضمينات الموضعية لمحور التردد.
- لقد وجدت أن V-Prediction مع جدول جيب التمام يعمل بشكل أفضل بكثير من أي بدائل (لانتشار الصوت / غير المشروط الخام).
في ديسمبر/ديسمبر 2023 ، بدأت في تدريب نماذج تشفير تلقائي لتجربة نموذج نشر كامن.
- بعد الانتقال إلى الانتشار الكامن ، تمكنت من البدء في تدريب نموذج الانتشار على محاصيل 45 ثانية @ 32 كيلو هرتز ستيريو
- لقد وجدت أن الخسارة الحكيمة تعمل بشكل سيء للغاية من حيث جودة إعادة الإعمار ، وكانت الخسارة الطيفية متعددة النطاق خيارًا أفضل بكثير. لقد وجدت أن فقدان كثافة الطاقة متعددة النطاق يعمل بشكل أفضل بكثير للموسيقى وملعب التعلم إذا قمت بإضافة مصطلح خسارة مرجح بشكل مناسب للمرحلة.
- لقد وجدت أنه على الرغم من أنه من الممكن أن تتضمن VAE التي تتضمن مرحلة الحصول على جودة إعادة الإعمار الجيدة ومساحة كامنة مضغوطة ، إلا أن المساحة الكامنة كان لها إنتروبيا عالية ولم يكن قابلاً للتفسير بسهولة بواسطة نموذج الانتشار الكامن. وقد أدى ذلك إلى نموذج يمكن أن يولد أصواتًا جيدة النوعية ولكن كان لديه موسيقي ضعيف.
- لقد وجدت أن نموذج الانتشار الكامن يؤدي بشكل أفضل إلى حد كبير مع اللاتينات التي لها تباين موحد ؛ ليست هناك حاجة إلى أن تكون التباين السجل معلمة قابلة للتعلم ، وبدلاً من ذلك ، أقوم بتعريف الهدف الموحد للتوزيع الكامن.
- لقد وجدت أن أداء نموذج الانتشار الكامن قد تم تحسينه بشكل كبير مع انخفاض مستوى السجل SNR / أعلى مستهدف في التوزيع الكامن ، شريطة استخدام وضع التوزيع الكامن لهدف التدريب. يتيح انخفاض SNR المستهدف لنموذج الانتشار الكامن استبعاد مستويات الضوضاء المنخفضة أثناء التدريب والاستدلال ؛ يمكن تصميم الضوضاء المتبقية بعد أخذ العينات لمطابقة التباين المتوقع في التوزيع الكامن.
في مارس/2024 ، بدأت في استخدام تنسيقات قائمة على الطيف MEL ، باستثناء معلومات الطور.
- لقد وجدت أنه من الممكن تحسين إعادة بناء مرحلة FGLA بشكل كبير عن طريق ضبط المعلمات النافذة والطيفية ، بالإضافة إلى تعديل الخوارزمية إلى مراحل الإلغاء لإشارات الاستريو بطريقة أكثر تماسكًا. لقد استقرت على مجموعة من المعلمات التي أدت إلى أبعاد طيفية تشبه الصوت الخام الذي تم أخذ عينات منه بشكل نقدي دون التضحية بالكثير من الجودة الإدراكية.
- لقد وجدت أن الخسارة الطيفية متعددة النطاق تعمل بشكل جيد 2D لبيانات الطيف / الصورة ، فإن الجودة الناتجة في مكان ما بين فقدان النقطة والخسارة العدائية.
في أبريل/2024 ، استبدلت نموذج الانتشار و unets VAE (تعتمد سابقًا على UNET غير المشروط في الناشرون) مع EDM2 UNET المحسّن.
- لقد قمت بالعديد من التحسينات على EDM2 UNET:
- استبدال انتباه einsum باهتمام Torch SDP
- استبدال ترددات التضمين فورييه / مراحل مساحة منتج داخلية أكثر سلاسة
- إضافة تسمية الفصل الدراسي بطريقة تحافظ على الحجم على التوقع
- استبدل تطبيع الوزن في الطريقة الأمامية لوحدة MPCONV مع تطبيع الوزن الذي يتم تطبيقه فقط عندما يتم تحديث الأوزان لتحسين الأداء وانخفاض استهلاك الذاكرة
- تمت إضافة تصحيح عند استخدام القطع الداخلية للحفاظ على حجم التوقع أثناء الاستدلال
- استبدلت عينة UP/Downsing مع مشكلات مكافئة مدمجة لتحسين الأداء
- دمج بعض رمز التكييف المسبق في UNET نفسه.
- لقد بدأت في استخدام تجميع Torch Dynamo / Model وأضفت تلميحات المترجم المناسبة لتحقيق أقصى أداء.
- لقد بدأت في استخدام التكييف القائم على التصنيف وتنفيذ التوجيه الحر المصنف لتحسين كبير في الجودة والتحكم.
في مايو/2024 ، اعتمدت جدول ضوضاء EDM/DDIM ، وخوارزمية أخذ العينات ، وأجمل التعلم.
- لقد وجدت أنه يمكن تحسين أخذ عينات Sigma Normal Sigma في التدريب باستخدام تباين الخطأ المقدر لكل Sigma لحساب PDF Sigma الذي يركز بشكل صريح على مستويات الضوضاء التي يكون النموذج أكثر قدرة على إحراز تقدم.
- لقد وجدت أن استخدام أخذ العينات الطبقية لتوزيع السيرام بالتساوي قدر الإمكان داخل كل دفعة صغيرة يمكن أن يخفف من مشاكل مع مزامير صغيرة أصغر.
- لقد بدأت في تشفير اللاتينية لمجموعة البيانات الخاصة بي قبل تدريب نموذج الانتشار لزيادة الأداء وتقليل استهلاك الذاكرة. لقد وجدت ما قبل التشفير قبل أن تؤثر المحصول العشوائي سلبًا على جودة العينة التي تم إنشاؤها بسبب عدم وجود اختلافات تم إنشاؤها بواسطة إزاحات البكسل تحت الحدود. أضفت اختلافات كامنة مشفرة مسبقًا لتلك الإزاحة.
- بدأت التدريب مع أوزان EMA بأطوال متعددة.
في يونيو إلى يوليو/يوليو 2024 ، جربت بنية النموذج وأضفت ضوضاء في أخذ العينات.
- لقد وجدت أن استخدام الطبقات الخطية منخفضة الرتبة في كتل RESNET النموذج يمكن أن يزيد بشكل كبير من الجودة دون زيادة عدد المعلمات بشكل كبير ؛ على وجه التحديد ، إسقاط إلى عدد أكبر من الأبعاد داخل كتلة RESNET حيث يتم تطبيق عدم الخطية ثم الإسقاط.
- لقد وجدت أن إضافة تعديل مشروط إلى الطبقات الخطية QKV ذاتية QKV زيادة كبيرة في جودة التكييف.
- لقد قمت بتدريب نموذج آخر 1D باستخدام جميع التحسينات في الهندسة المعمارية الجديدة وأكدت النتائج السابقة التي توصلت إليها في أن نماذج 1D تعمم بشكل سيئ مع مجموعة بيانات صغيرة.
- مستوحاة من هذه الورقة ، جربت إضافة كمية كبيرة من الضوضاء لإطالة عدد الخطوات التي يكون فيها النموذج في حالة حرجة أو قريبة أثناء أخذ العينات. هذا زاد بشكل كبير من جودة العينات مع خفض درجة حرارة العينة الناتجة بشكل كبير وهو أمر مرغوب فيه للموسيقى.
في أغسطس/أغسطس/2024 ، بدأت إعادة كتابة شبه مكتملة لقاعدة الكود لسداد الديون الفنية التي تراكمت خلال العام الماضي من التجارب السريعة.
- لقد قمت بإعادة تنفيذ آخر الكود المتبقي الذي استخدم الناشرون وأزالت التبعية.
- لقد قمت ببناء نظام معياري للسماح بتجربة سهلة مع عملية التدريب للوحدات التعسفية.
- تم إعادة كتابة رمز التدريب ويستخدم ملفات التكوين قدر الإمكان للسماح بالبحث التلقائي للعمارة أو بنية النماذج.
- تم إعادة كتابة رمز المعالجة المسبقة لمجموعة البيانات. أنوي قضاء المزيد من الوقت في تطوير الأدوات / النماذج لتصفية مجموعة البيانات وزيادةها والتي ستتيح لي استخدام حجم أكبر من بيانات الجودة المنخفضة.
في سبتمبر/2024 ، بدأت في تدريب نماذج Inpainting وبدأت في بناء Webui.
- لقد وجدت أن إستراتيجية تحويل / تنفيذ نموذج inpainting (صفر-إنتافي إضافي للعينة المرجعية والقناع في طبقة Conv_in الأولى) تستخدم بواسطة الانتشار المستقر يعمل مع النموذج الخاص بي ولكن يمكن أن يستغرق بعض الوقت لتلاعب بشكل صحيح. أدت إضافة عدم وجود طراز موجود إلى تقليل الأداء غير الوصفي قليلاً ، لذا فأنا أستخدم نموذج Inpainting حصريًا لمهام التعبير في الوقت الحالي. أرغب في إيجاد طريقة لتحسين الأداء إلى النقطة التي أحتاج فيها فقط إلى نموذج واحد لكلا المهمتين.
- بالنسبة إلى Webui ، بدأت مع Gradio ، لكنني وجدت قيودًا مؤلمة وضعف الأداء. أبحث عن بدائل وجدت Nicegui أفضل بكثير لما أريد إنجازه. اعتبارًا من اليوم ، يكون Webui وظيفيًا ولكنه يفتقد إلى تبديل النماذج التي يتم التحكم فيها في WebUI وبعض معلومات / مخططات التصحيح المفصلة التي كنت أستخدمها للتطوير. عنصر الصوت HTML5 الافتراضي هو clunky وسأعمل على استبداله بمشغل مخصص أكثر ملاءمة لتحرير الصوت.
في أكتوبر/2024 ، واصلت تطوير Webui وتجربة تقنيات EMA.
- لقد استبدلت عناصر الصوت الافتراضية HTML5 بعنصر مخصص لطيف يعرض عرضًا طيفيًا ويتضمن مؤشرًا زمنيًا دقيقًا. هذا يحسن سهولة الاستخدام ودقة أداة الرصاص.
- أضفت الرصاص الخارجي لتمديد أو إعداد عينات تم إنشاؤها. أضفت أيضًا خيارًا لإنشاء حلقات سلسة.
- قمت بفصل معالجة نموذج Pytorch إلى عمليتها لجعل واجهة المستخدم أكثر استجابة.
- لقد وجدت أن SwitchEMA يمكن أن يؤدي إلى تحسن كبير في فقدان التحقق من الصحة دون أي تكلفة / تدريب إضافية.
- بعد بعض التجارب ، وجدت أن هذه التقنية يمكن تحسينها بدلاً من ذلك باستخدام ردود الفعل من أوزان EMA مرة أخرى في أوزان القطار مع مقياس فرطمي للسيطرة على قوة التغذية المرتدة.
في نوفمبر/2024 ، بدأت عملية تبني التصفيق لاستبدال نظام تكييف ملصقات الفصل بهدف تدريب نموذج مع مجموعة بيانات موسعة.
- لقد استبدلت بعض سير عمل إعداد مجموعات البيانات باستخدام FOOBAR2000 لتنقل التشفير ووضع العلامات.
- أضفت تضمينات التصفيق المشروفة مسبقًا إلى اللاتينات الموجودة مسبقًا للعينات في مجموعة البيانات. يتم استخدام درجات هذه التضمينات مقابل قائمة محددة مسبقًا من الملصقات / التسميات التوضيحية والأمثلة السلبية لتحديث بيانات التعريف الصوتي والتمهيد عملية تنظيف / تصفية مجموعة البيانات.
- بدأت في تجربة طرق مختلفة لدمج تكييف التصفيق في التدريب النموذجي. لقد وجدت أنه يمكن استخدام متوسط التضمين الصوتي الإجمالي لمجموعة البيانات بأكمله بفعالية كدمج غير مشروط عند استخدام التكرار الخالي من المصنف. لقد وجدت أن التضمينات الصوتية والنص الإجمالية لما هو الفائدة لتكون علامة فئة بسيطة يمكن استخدامها بشكل فعال لعينة من تلك الفئة.
بعض الملاحظات الإضافية:
- يدعم رمز التدريب العديد من وحدات معالجة الرسومات والتدريب الموزعة من خلال تسريع Huggingface ، ويسجل حاليًا إلى Tensorboard.
- يتم تضمين رمز مجموعة البيانات قبل/ما بعد المعالجة في هذا المستودع الذي يتضمن كل ما هو مطلوب لتدريب نموذج جديد على بياناتك الخاصة
- يتم اختبار جميع التعليمات البرمجية في هذا المستودع للعمل على كل من منصات Windows و Linux ، على الرغم من أن الأداء أفضل بشكل كبير على Linux