(تحاول دعم توليد الصوت إلى اللاعب في قائمة TODO الخاصة بي ، بحيث يمكنك إدخال مسارات الموسيقى وستساعد LDM في دمجها ~)
الإعداد سهل للغاية! فقط اتبع الإرشادات أدناه:
pip install -r gradio/requirements.txt
python gradio/gradio_app.py
علينا أن نعترف بأن بنية UNET لا تزال لديها بعض ميزة الاحتمالات في الموسيقى الذاتية ، ولكن هذا لم يتم قياسه في المقياس. ولدينا بعض النماذج التي كانت أفضل على المقياس ، أو تدربت لفترة أطول ، لكننا لاحظنا أن النماذج أصبحت عمومًا أقل موسيقيًا بعد التدريب لفترة طويلة ، لذلك اخترنا نموذجًا معتدلًا على المقياس كعينة مفتوحة المصدر . إذا كنت بحاجة إلى مزيد من النماذج (المطاردة المتطورة أو السعي الموسيقي الشديد ، يرجى الاتصال بي)
بدون أي تصميم فاخر ، مجرد حقن جودة ، واستمتع بموسيقاك الجميلة
أسفل نقطة التفتيش الرئيسية لنموذج QA-MDT الخاص بنا من https://huggingface.co/lichang0928/qa-mdt
للمستخدمين الصينيين ، يمكنك أيضًا تنزيل نقطة التفتيش الخاصة بك من خلال الرابط التالي:
https://pan.baidu.com/s/1n0xqvxtf_x9i7fwb07lpqw؟pwd=9nkt
يوفر هذا المستودع تنفيذ QA-MDT ، ودمج النماذج الحديثة لتوليد الموسيقى. تعتمد الكود والأساليب على المستودعات التالية:
Python 3.10
qamdt.yamlقبل التدريب ، تحتاج إلى تنزيل CKPTs إضافية مطلوبة في ./audioldm_train/config/mos_as_token
لاحظ أن: كل نقاط التفتيش أعلاه يمكن تنزيلها من:
flan-t5-large
Clap_Music
روبرتا قاعدة
آحرون
sh run.shنموذجنا بالفعل محاط جيدا. إذا كنت ترغب في إعادة تدريبها أو ضبطها ، فيمكنك اختيار استخدام استراتيجية ضمان الجودة الخاصة بنا أو عدم استخدامها. نحن نقدم العديد من استراتيجيات التدريب:
PixArt_MDTPixart_MDT_MOS_AS_TOKENPixArt_Slowyou can just follow AudioLDM and make your dataset as illustrated in our paper (method part) للتدريب أو ضبطها ، ما عليك سوى تغيير "Your_Class" في audioldm_train.modules.diffusionmodules.PixArt.Your_Class في ملف التكوين الخاص بنا.
يمكنك أيضًا محاولة تعديل حجم التصحيح وحجم التداخل لأفضل أداء وموارد الحوسبة الخاصة بك (انظر الملحق لدينا في ورقة Arxiv)
نستخدم تنسيق مجموعة بيانات LMDB للتدريب. يمكنك تعديل Dataloader وفقًا لاحتياجات التدريب الخاصة بك.
إذا كنت ترغب في متابعة عمليتنا (على الرغم من أننا لا نوصي بها ، لأنه يمكن أن يكون معقدًا) ، فإليك كيفية إنشاء مجموعة بيانات Toy LMDB:
إنشاء ملف proto
أولاً ، قم بإنشاء ملف يسمى datum_all.proto مع المحتوى التالي:
syntax = "proto2" ;
message Datum_all {
repeated float wav_file = 1 ;
required string caption_original = 2 ;
repeated string caption_generated = 3 ;
required float mos = 4 ;
}توليد روابط بيثون
(يجب أن يكون إصدار Protoc الخاص بك 3.4 ، ويمكنك تنزيله هنا)
قم بتشغيل الأمر التالي في المحطة الخاصة بك لإنشاء روابط Python:
protoc --python_out=./ datum_all.protoسيؤدي ذلك إلى إنشاء ملف يسمى datum_all_pb2.py . لقد قدمنا أيضًا هذا الملف في مجلد مجموعات البيانات لدينا ، ويمكنك التحقق مما إذا كان يطابق ما أنشأته. لا تحاول أبدًا تعديل هذا الملف ، لأن القيام بذلك قد يسبب أخطاء.
يوضح البرنامج النصي التالي Python كيفية إعداد مجموعة البيانات الخاصة بك في تنسيق LMDB:
import torch
import os
import lmdb
import time
import numpy as np
import librosa
import os
import soundfile as sf
import io
from datum_all_pb2 import Datum_all as Datum_out
device = 'cpu'
count = 0
total_hours = 0
# Define paths
lmdb_file = '/disk1/changli/toy_lmdb'
toy_path = '/disk1/changli/audioset'
lmdb_key = os . path . join ( lmdb_file , 'data_key.key' )
# Open LMDB environment
env = lmdb . open ( lmdb_file , map_size = 1e12 )
txn = env . begin ( write = True )
final_keys = []
def _resample_load_librosa ( path : str , sample_rate : int , downmix_to_mono : bool , ** kwargs ):
"""Load and resample audio using librosa."""
src , sr = librosa . load ( path , sr = sample_rate , mono = downmix_to_mono , ** kwargs )
return src
start_time = time . time ()
# Walk through the dataset directory
for root , _ , files in os . walk ( toy_path ):
for file in files :
audio_path = os . path . join ( root , file )
key_tmp = audio_path . replace ( '/' , '_' )
audio = _resample_load_librosa ( audio_path , 16000 , True )
# Create a new Datum object
datum = Datum_out ()
datum . wav_file . extend ( audio )
datum . caption_original = 'audio' . encode ()
datum . caption_generated . append ( 'audio' . encode ())
datum . mos = - 1
# Write to LMDB
txn . put ( key_tmp . encode (), datum . SerializeToString ())
final_keys . append ( key_tmp )
count += 1
total_hours += 1.00 / 60 / 10
if count % 1 == 0 :
elapsed_time = time . time () - start_time
print ( f' { count } files written, time: { elapsed_time :.2f } s' )
txn . commit ()
txn = env . begin ( write = True )
# Finalize transaction
try :
total_time = time . time () - start_time
print ( f'Packing completed: { count } files written, total_hours: { total_hours :.2f } , time: { total_time :.2f } s' )
txn . commit ()
except :
pass
env . close ()
# Save the LMDB keys
with open ( lmdb_key , 'w' ) as f :
for key in final_keys :
f . write ( key + ' n ' )خلاف ذلك ، يمكنك فقط استخدام dataloader في Audioldm
أدخل مسار LMDB الذي تم إنشاؤه ومسار ملف المفتاح المقابل في التكوين
ابدأ التدريب الخاص بك
sh infer/infer.sh
# you may change the infer.sh for witch quality level you want to infer
# defaultly, it should be set to 5 which represent highest quality
# Additionally, it may be useful to change the prompt with text prefix "high quality",
# which match the training process and may further improve performance هذه هي المرة الأولى التي أقوم فيها بفتح مصدر مثل هذا المشروع ، والرمز ، والمؤسسة ، والمصدر المفتوح ، قد لا يكون مثاليًا. إذا كان لديك أي أسئلة حول نموذجنا ورمزنا ومجموعات البيانات ، فلا تتردد في الاتصال بي عبر الروابط أدناه ، وأنا أتطلع إلى أي اقتراحات:
سأبذل قصارى جهدي لتقديم المزيد من المشاريع على الموسيقى والصوت في المستقبل ~
إذا وجدت هذا المشروع مفيدًا ، فيرجى التفكير في:
@article{li2024quality,
title={Quality-aware Masked Diffusion Transformer for Enhanced Music Generation},
author={Li, Chang and Wang, Ruoyu and Liu, Lijuan and Du, Jun and Sun, Yixuan and Guo, Zilu and Zhang, Zhenrong and Jiang, Yuan},
journal={arXiv preprint arXiv:2405.15863},
year={2024}
}