تطبيق Pytorch لـ MusicLM، وهو نموذج SOTA لتحويل النص إلى موسيقى تم نشره بواسطة Google، مع بعض التعديلات. نحن نستخدم CLAP كبديل لـ MuLan، وEncodec كبديل لـ SoundStream، وMERT كبديل لـ w2v-BERT.
CLAP هو نموذج نص صوتي مشترك تم تدريبه على LAION-Audio-630K. على غرار MuLan، يتكون من برج صوتي وبرج نصي يقومان بإسقاط الوسائط الخاصة بهما على مساحة كامنة مشتركة (512 بُعدًا في CLAP مقابل 128 بُعدًا في MuLan).
تم تدريب MuLan على 50 مليون زوج من النصوص والموسيقى. لسوء الحظ، ليس لدي البيانات اللازمة لتكرار ذلك، لذا أعتمد على نقاط التفتيش المدربة مسبقًا الخاصة بـ CLAP للاقتراب. تم تدريب CLAP على 2.6 مليون زوج نصي صوتي إجمالي من LAION-630k (حوالي 633 ألف زوج نصي صوتي) وAudioSet (2 مليون عينة مع تسميات توضيحية تم إنشاؤها بواسطة نموذج تحويل الكلمة الرئيسية إلى تسمية توضيحية). على الرغم من أن هذا يمثل جزءًا صغيرًا من البيانات المستخدمة لتدريب MuLan، فقد استخدمنا CLAP بنجاح لإنشاء عينات موسيقية متنوعة، والتي يمكنك الاستماع إليها هنا (ضع في اعتبارك أن هذه نتائج مبكرة جدًا). في حالة أن المساحة الكامنة لـ CLAP ليست معبرة بدرجة كافية لتوليد الموسيقى، فيمكننا تدريب CLAP على الموسيقى أو استبدال النموذج بتنفيذ MuLan الخاص بـ @lucidrain بمجرد تدريبه.
يعد كل من SoundStream وEncodec من برامج الترميز الصوتية العصبية التي تقوم بتشفير أي شكل موجي لسلسلة من الرموز الصوتية، والتي يمكن بعد ذلك فك تشفيرها إلى شكل موجة يشبه الشكل الأصلي. يمكن بعد ذلك تصميم هذه الرموز المميزة المتوسطة كمهمة seq2seq. تم إصدار برنامج Encodec بواسطة Facebook وتتوفر نقاط التفتيش المُدربة مسبقًا للعامة، في حين أن هذا ليس هو الحال مع SoundStream.
الهدف من هذا المشروع هو تكرار نتائج MusicLM في أسرع وقت ممكن دون الالتزام بالضرورة بالهندسة المعمارية في الورقة. بالنسبة لأولئك الذين يبحثون عن تطبيق أكثر واقعية، قم بمراجعة musiclm-pytorch.
نسعى أيضًا إلى الحصول على فهم أفضل للمساحة الكامنة في CLAP.
انضم إلينا في الخلاف إذا كنت ترغب في المشاركة!
conda env create -f environment.yaml
conda activate open-musiclm
يحتوي "تكوين النموذج" على معلومات حول بنية النموذج مثل عدد الطبقات، وعدد الكميات، وأطوال الصوت المستهدفة لكل مرحلة، وما إلى ذلك. ويتم استخدامه لإنشاء نموذج أثناء التدريب والاستدلال.
يحتوي "تكوين التدريب" على معلمات تشعبية لتدريب النموذج. يتم استخدامه لإنشاء مثيل لفصول المدرب أثناء التدريب.
راجع دليل ./configs
على سبيل المثال configs.
تتمثل الخطوة الأولى في تدريب مُكمم المتجهات المتبقي الذي يقوم بتعيين عمليات تضمين CLAP المستمرة لتسلسل رمزي منفصل.
python ./scripts/train_clap_rvq.py
--results_folder ./results/clap_rvq # where to save results and checkpoints
--model_config ./configs/model/musiclm_small.json # path to model config
--training_config ./configs/training/train_musiclm_fma.json # path to training config
بعد ذلك، نتعلم طبقة K-means التي نستخدمها لتكميم تضمينات MERT الخاصة بنا إلى رموز دلالية.
python ./scripts/train_hubert_kmeans.py
--results_folder ./results/hubert_kmeans # where to save results and checkpoints
--model_config ./configs/model/musiclm_small.json
--training_config ./configs/training/train_musiclm_fma.json
بمجرد أن يكون لدينا وسائل K وRVQ عاملة، يمكننا الآن تدريب المراحل الدلالية والخشنة والدقيقة. ويمكن تدريب هذه المراحل في وقت واحد.
python ./scripts/train_semantic_stage.py
--results_folder ./results/semantic # where to save results and checkpoints
--model_config ./configs/model/musiclm_small.json
--training_config ./configs/training/train_musiclm_fma.json
--rvq_path PATH_TO_RVQ_CHECKPOINT # path to previously trained rvq
--kmeans_path PATH_TO_KMEANS_CHECKPOINT # path to previously trained kmeans
python ./scripts/train_coarse_stage.py
--results_folder ./results/coarse # where to save results and checkpoints
--model_config ./configs/model/musiclm_small.json
--training_config ./configs/training/train_musiclm_fma.json
--rvq_path PATH_TO_RVQ_CHECKPOINT # path to previously trained rvq
--kmeans_path PATH_TO_KMEANS_CHECKPOINT # path to previously trained kmeans
python ./scripts/train_fine_stage.py
--results_folder ./results/fine # where to save results and checkpoints
--model_config ./configs/model/musiclm_small.json
--training_config ./configs/training/train_musiclm_fma.json
--rvq_path PATH_TO_RVQ_CHECKPOINT # path to previously trained rvq
--kmeans_path PATH_TO_KMEANS_CHECKPOINT # path to previously trained kmeans
في الحالة المذكورة أعلاه، نستخدم CLAP وHubert وEncodec لإنشاء رموز التصفيق والرموز الدلالية والصوتية مباشرة أثناء التدريب. ومع ذلك، فإن هذه النماذج تشغل مساحة على وحدة معالجة الرسومات، ومن غير الفعال إعادة حساب هذه الرموز المميزة إذا كنا نقوم بعمليات تشغيل متعددة على نفس البيانات. يمكننا بدلاً من ذلك حساب هذه الرموز المميزة مسبقًا وتكرارها أثناء التدريب.
للقيام بذلك، قم بملء الحقل data_preprocessor_cfg
في التكوين وقم بتعيين use_preprocessed_data
على True في تكوينات المدرب (انظر إلى Train_fma_preprocess.json للحصول على الإلهام). ثم قم بتشغيل ما يلي للمعالجة المسبقة لمجموعة البيانات، متبوعًا بالبرنامج النصي للتدريب الخاص بك.
python ./scripts/preprocess_data.py
--model_config ./configs/model/musiclm_small.json
--training_config ./configs/training/train_fma_preprocess.json
--rvq_path PATH_TO_RVQ_CHECKPOINT # path to previously trained rvq
--kmeans_path PATH_TO_KMEANS_CHECKPOINT # path to previously trained kmeans
أنشئ عينات متعددة واستخدم CLAP لاختيار أفضلها:
python scripts/infer_top_match.py
" your text prompt "
--num_samples 4 # number of samples to generate
--num_top_matches 1 # number of top matches to return
--semantic_path PATH_TO_SEMANTIC_CHECKPOINT # path to previously trained semantic stage
--coarse_path PATH_TO_COARSE_CHECKPOINT # path to previously trained coarse stage
--fine_path PATH_TO_FINE_CHECKPOINT # path to previously trained fine stage
--rvq_path PATH_TO_RVQ_CHECKPOINT # path to previously trained rvq
--kmeans_path PATH_TO_KMEANS_CHECKPOINT # path to previously trained kmeans
--model_config ./configs/model/musiclm_small.json
--duration 4
إنشاء عينات لمطالبات الاختبار المختلفة:
python scripts/infer.py
--semantic_path PATH_TO_SEMANTIC_CHECKPOINT # path to previously trained semantic stage
--coarse_path PATH_TO_COARSE_CHECKPOINT # path to previously trained coarse stage
--fine_path PATH_TO_FINE_CHECKPOINT # path to previously trained fine stage
--rvq_path PATH_TO_RVQ_CHECKPOINT # path to previously trained rvq
--kmeans_path PATH_TO_KMEANS_CHECKPOINT # path to previously trained kmeans
--model_config ./configs/model/musiclm_small.json
--duration 4
يمكنك استخدام علامة --return_coarse_wave
لتخطي المرحلة الدقيقة وإعادة بناء الصوت من الرموز الخشنة وحدها.
يمكنك تنزيل نقاط التفتيش التجريبية لنموذج musiclm_large_small_context هنا. لضبط النموذج، قم باستدعاء البرامج النصية للقطار باستخدام علامة --fine_tune_from
.
@inproceedings { Agostinelli2023MusicLMGM ,
title = { MusicLM: Generating Music From Text } ,
author = { Andrea Agostinelli and Timo I. Denk and Zal{'a}n Borsos and Jesse Engel and Mauro Verzetti and Antoine Caillon and Qingqing Huang and Aren Jansen and Adam Roberts and Marco Tagliasacchi and Matthew Sharifi and Neil Zeghidour and C. Frank } ,
year = { 2023 }
}
@article { wu2022large ,
title = { Large-scale Contrastive Language-Audio Pretraining with Feature Fusion and Keyword-to-Caption Augmentation } ,
author = { Wu, Yusong and Chen, Ke and Zhang, Tianyu and Hui, Yuchen and Berg-Kirkpatrick, Taylor and Dubnov, Shlomo } ,
journal = { arXiv preprint arXiv:2211:06687 } ,
year = { 2022 } ,
}
@article { defossez2022highfi ,
title = { High Fidelity Neural Audio Compression } ,
author = { Défossez, Alexandre and Copet, Jade and Synnaeve, Gabriel and Adi, Yossi } ,
journal = { arXiv preprint arXiv:2210.13438 } ,
year = { 2022 }
}
@misc { li2023mert ,
title = { MERT: Acoustic Music Understanding Model with Large-Scale Self-supervised Training } ,
author = { Yizhi Li and Ruibin Yuan and Ge Zhang and Yinghao Ma and Xingran Chen and Hanzhi Yin and Chenghua Lin and Anton Ragni and Emmanouil Benetos and Norbert Gyenge and Roger Dannenberg and Ruibo Liu and Wenhu Chen and Gus Xia and Yemin Shi and Wenhao Huang and Yike Guo and Jie Fu } ,
year = { 2023 } ,
eprint = { 2306.00107 } ,
archivePrefix = { arXiv } ,
primaryClass = { cs.SD }
}