
?我们已经更新了CLMP培训,微调代码和文档!快来检查一下〜[2024-11-09]
?我们发布了MelodySet数据集。 [2024-11-08]
?我们发布了Musicset数据集!快来尝试一下〜? [2024-11-05]
→←单击此处!
→←单击此处!
→←单击此处!
→←单击此处!
该存储库包含音乐发电Model Mg 2的实现,这是一种使用旋律来指导音乐发电的第一种小说方法,尽管一种非常简单的方法和极为有限的资源,但仍取得了出色的性能。
任何人都可以使用此模型在Tiktok,YouTube短裤和Meta Reels等平台上为其简短视频生成个性化的背景音乐。此外,使用自己的私人音乐数据集微调模型非常成本效益。
您可以观看介绍视频
→←单击此处!
→←单击此处!
现在您可以在我们的提示中尝试使用自己的提示
→←单击此处!
提示:要使用MG 2产生高质量的音乐,您需要制作详细的描述性提示,以提供丰富的上下文和特定的音乐元素。
要开始使用MG 2 ,请按照以下步骤操作:
git clone https://github.com/shaopengw/Awesome-Music-Generation.git
cd Awesome-Music-Generation # Create and activate the environment from the provided environment file
conda env create -f environment.yml
conda activate MMGen_quickstart # Ensure that the checkpoints are stored in the following directory structure
Awesome-Music-Generation/
└── data/
└── checkpoints/ # Update the paths to reflect your local environment setup
# Replace:
export PYTHONPATH=/mnt/sda/quick_start_demonstration/Awesome-Music-Generation: $PYTHONPATH
export PYTHONPATH=/mnt/sda/quick_start_demonstration/Awesome-Music-Generation/data: $PYTHONPATH
# With:
export PYTHONPATH=/your/local/path/Awesome-Music-Generation: $PYTHONPATH
export PYTHONPATH=/your/local/path/Awesome-Music-Generation/data: $PYTHONPATHchmod +x quick_start.shbash quick_start.shAwesome-Music-Generation/log/latent_diffusion/quick_start/quick_start我们介绍了新提出的Musicset数据集,其中大约有150,000个高质量的10秒音乐 - 音乐文本对。
我们建议在训练扩散模块之前,提出CLMP(对比性语言训练预处理),以使文本描述,音乐波形和旋律对齐。我们将WebDataSet用作音乐波形和文本描述的数据装载机,并使用另一个数据级加载器进行旋律。 Musicset已被构成以下是CLMP的传播:
# Ensure that the training data packaged with Webdataset format is orginized as following:
clmp/
└── dataset/
└── MusicSet/
└──train/pretrain0.tar
pretrain1.tar
pretrain2.tar
...
└──valid/
└──test/扩散模块的数据集结构如下:
(注意到您必须将.flac文件转换为.wav格式。)
Awesome-Music-Generation/
└── data/
└── dataset/
└── audioset/
└── wav/00040020.wav
00009570.wav
...
└── metadata/dataset_root.json
└── MusicSet/
└── datafiles/train.json
valid.json
test.json以下是dataset_root.json的示例:
{
" MusicSet " : " /mnt/data/wmz/Awesome-Music-Generation/data/dataset/audioset " ,
" comments " : {},
" metadata " : {
" path " : {
" MusicSet " : {
" train " : " ./data/dataset/metadata/MusicSet/datafiles/train.json " ,
" test " : " ./data/dataset/metadata/MusicSet/datafiles/test.json " ,
" val " : " ./data/dataset/metadata/MusicSet/datafiles/valid.json " ,
" class_label_indices " : " "
}
}
}
}以下是train.json的示例:
{
" data " : [
{
" wav " : " wav/00040020.wav " ,
" seg_label " : " " ,
" labels " : " " ,
" caption " : " The song starts with the high and fuzzy tone of an alarm bell beeping until a button is pressed, which triggers the grungy sound of an electric guitar being played in a rock style. " , " The beat then counts to four, enhancing the overall rhythm. "
},
{
" wav " : " wav/00009570.wav " ,
" seg_label " : " " ,
" labels " : " " ,
" caption " : " This lively song features a male vocalist singing humorous lyrics over a medium-fast tempo of 106. " , " 0 beats per minute. " , " Accompanied by keyboard harmony, acoustic guitar, steady drumming, and simple bass lines, the catchy tune is easy to sing along with. " , " Set in the key of B major, the chord sequence includes Abm7, F#/G#, and Emaj7. " , " With its spirited and animated feel, this fun track is sure to keep listeners engaged from start to finish. "
}
]
}我们将发布旋律,其中包含用于音乐播放和音乐台的加工旋律。我们使用基本式触发提取旋律,并使用旋律三重态组织它们。 MelodySet是每个波形文件的子集.wav具有相应的旋律文件.txt ,带有相同的文件名前缀。例如, 00040020.wav对应于00040020.txt ,所有旋律都放在单个目录中。
音乐波形和文本描述的原理与Musicset相同。因此,我们仅显示旋律部分的数据集结构如下:
your_path/
└── melody_text/00040020.txt
00009570.txt以下是旋律的示例,由旋律三重态组成:
<G4>,<114>,<79>|<A4>,<119>,<81>|<B2>,<159>,<0>|<G4>,<117>,<62>|<A4>,<91>,<77>|<D3>,<202>,<0>|<B4>,<92>,<72>|<A4>,<95>,<77>|<B4>,<98>,<80>|<G3>,<200>,<0>|<A4>,<151>,<30>|<G4>,<95>,<77>|<A4>,<93>,<82>|<F#3>,<146>,<0>|<A2>,<201>,<0>|<G2>,<116>,<117>|<G3>,<149>,<0>|<B2>,<122>,<75>|<D3>,<110>,<77>|<B4>,<206>,<0>|<B4>,<113>,<111>|<B3>,<90>,<95>|<A3>,<110>,<57>|<E5>,<113>,<41>|<G3>,<177>,<0>|<D#5>,<119>,<73>|<B3>,<119>,<32>|<C4>,<108>,<78>|<E5>,<111>,<49>|<F#5>,<117>,<82>|<E5>,<111>,<78>|<F#5>,<114>,<82>|<G3>,<151>,<0>|<G5>,<95>,<73>|<F#5>,<91>,<81>|<G5>,<92>,<78>|<A3>,<143>,<43>|<E4>,<202>,<0>|<F#5>,<152>,<30>|<E5>,<98>,<86>|<D#4>,<139>,<8>|<B3>,<142>,<0>|<F#5>,<94>,<68>|<B3>,<111>,<120>|<G3>,<114>,<84>|<B3>,<118>,<83>|<E3>,<122>,<81>|<G5>,<231>,<0>|<E4>,<234>,<0>|<F#5>,<118>,<63>|<E5>,<114>,<79>|<G3>,<118>,<37>|<D5>,<122>,<76>|<C#5>,<119>,<78>|<E5>,<119>,<77>|<B3>,<100>,<78>|<B4>,<123>,<57>|<E5>,<112>,<71>|<A3>,<209>,<0>|<G5>,<123>,<105>|<A4>,<154>,<0>|<F#5>,<124>,<73>|<A3>,<136>,<22>|<C#4>,<205>,<0>|<E5>,<125>,<28>|<F#5>,<121>,<74>|<A5>,<115>,<72>|<D3>,<144>,<0>|<E3>,<95>,<81>|<E5>,<122>,<62>|<A5>,<115>,<76>|<F#3>,<106>,<84>|<D5>,<117>,<48>|<C5>,<125>,<74>|<D3>,<102>,<74>|<B4>,<120>,<50>|<A4>,<123>,<76>|<B4>,<116>,<80>|<D5>,<117>,<79>|<D4>,<319>,<0>|<A4>,<113>,<65>|<C4>,<114>,<42>|<D5>,<116>,<78>|<B3>,<108>,<84>|<G4>,<114>,<43>假设您已经经历了快速入门指南,那么让我们研究培训和微调过程!
conda activate MMGen_quickstart本节涵盖了CLMP的培训和微调过程。
cd your_path/MMGen_train/modules/clmp在运行培训脚本之前,请根据需要查看和更新(至关重要的)路径/MMGEN_TRAIN/模块/CLMP/Traine.sh 。该文件包含必要的培训详细信息。
bash training.sh同样,在进行微调之前,请审查和更新(至关重要) Awesome -Music Generation/MMGEN_TRAIN/MMGEN_TRAIN/模块/clmp/fine_tuning.sh中的路径。
bash fine_tuning.sh在CLMP模型训练或微调之后,您需要生成嵌入并构建FAISS指数,以在潜在的扩散训练阶段实现有效的相似性搜索。遵循这个两步的过程:
通过将以下标志添加到您的培训配置:
--collect-audio-melody-feature True使用此标志执行培训或微调脚本:
bash training.sh # or fine_tuning.sh该模型将在以下目录中生成音频和旋律功能嵌入:
your_path/Awesome-Music-Generation/MMGen_train/modules/clmp/faiss_indexing/clmp_embeddings构建Faiss索引导航到索引目录并执行索引构造脚本:
cd your_path/Awesome-Music-Generation/MMGen_train/modules/clmp/faiss_indexing # you should modify the path of embeddings in this script
python build_faiss_indices.py 该脚本将在:
your_path/Awesome-Music-Generation/MMGen_train/modules/clmp/faiss_indexing/faiss_indices在扩散模块的培训或填充之前,您应该准备所需的文件并替换脚本中相应的文件路径。
首先,您应该设置模式。在脚本中, MMGen_train/train/latent_diffusion.py为了评估目的,请仅设置only_validation = True ;为了培训目的,请仅设置only_validation = False 。
然后,您应该为Melody Vector数据库准备所需的文件,包括.faiss和.npy ,可以在HuggingFace中找到。请替换脚本中的.faiss和.npy的路径MMGen_train/modules/latent_diffusion/ddpm.py
# change the melody_npy and melody.faiss to the local path
melody_npy = np.load( " MMGen/melody.npy " )
melody_builder = FaissDatasetBuilder(melody_npy)
melody_builder.load_index( " MMGen/melody.faiss " )之后,您可以运行以下命令从头开始训练:
python3 MMGen_train/train/latent_diffusion.py -c MMGen_train/config/train.yaml关于培训数据集,请参阅数据集部分
您也可以使用我们验证的模型进行淡化,该检查点是mg2-diffusion-checkpoint.ckpt ,可以在此处找到。
然后,您可以运行以下命令来捕获自己的模型:
python3 MMGen_train/train/latent_diffusion.py -c MMGen_train/config/train.yaml --reload_from_ckpt data/checkpoints/mg2-diffusion-checkpoint.ckpt指出不允许MG 2用于商业用途。
我们真诚地承认了以下开源代码库的开发人员。这些资源是无价的火花,在现实世界中激发了创新和进步?
这项研究得到了主要技术研发计划的支持,根据2020YFC0832702赠款,以及中国国家自然科学基金会根据授予7191010107002,62376227,61906159,62376159,623024,00 2023NSFSC0114,以及西南金融与经济学大学的广告人才项目。
@article { wei2024melodyneedmusicgeneration ,
title = { Melody Is All You Need For Music Generation } ,
author = { Shaopeng Wei and Manzhen Wei and Haoyu Wang and Yu Zhao and Gang Kou } ,
year = { 2024 } ,
eprint = { 2409.20196 } ,
archivePrefix = { arXiv } ,
primaryClass = { cs.SD } ,
url = { https://arxiv.org/abs/2409.20196 } ,
}