M4-RAG, WikiMT-X
收藏CLaMP 3 数据集概述
数据集简介
CLaMP 3(Cross-Modal and Multilingual Processing for Music Information Retrieval)是一个用于音乐信息检索的多模态和多语言框架。该框架支持所有主要音乐格式,包括乐谱、音频和表演信号,以及多语言文本。CLaMP 3 经过训练,支持 27 种语言,并能推广到支持 100 种语言。通过对比学习,CLaMP 3 将这些不同格式对齐到共享的表示空间,实现了跨模态检索的无缝进行。实验表明,CLaMP 3 显著优于之前的强基线,在多模态和多语言音乐信息检索领域设立了新的最佳性能。
关键特性
- 多模态支持:
- 乐谱:使用 Interleaved ABC notation,上下文大小为 512 小节。
- 表演信号:处理 MIDI Text Format (MTF) 数据,上下文大小为 512 MIDI 消息。
- 音频记录:使用 MERT 提取的特征,上下文大小为 640 秒音频。
- 多语言能力:
- 经过 27 种语言训练,可推广到支持 XLM-R 支持的所有 100 种语言。
- 数据集与基准测试:
应用场景
CLaMP 3 支持广泛的音乐研究任务,包括但不限于:
- 语义检索:基于描述查找音乐或为音频或符号输入检索文本元数据。
- 零样本分类:在没有标签训练数据的情况下,按流派、地区或其他属性对音乐进行分类。
- 音乐质量评估:计算参考音乐特征和生成音乐特征之间的语义距离,类似于 Fréchet Inception Distance (FID)。
- 跨模态生成模型评估:评估文本到音乐生成、音乐字幕和符号到音频合成模型。
- 计算音乐学:通过可视化数据在共享表示空间中的分布,研究人员可以探索地区音乐模式、风格相似性和跨文化影响。
存储库结构
- code/:训练和特征提取脚本。
- classification/:线性分类训练和预测。
- preprocessing/:将数据转换为 Interleaved ABC、MTF 或 MERT 提取的特征。
- retrieval/:语义搜索、检索评估和相似度计算。
开始使用
环境设置
使用以下命令设置 CLaMP 3 的环境: bash conda env create -f environment.yml conda activate clamp3
数据准备
转换音乐数据到兼容格式
在使用 CLaMP 3 之前,需要将音乐数据预处理为兼容的格式。
转换 MusicXML 到 Interleaved ABC 记号
CLaMP 3 需要乐谱的 Interleaved ABC 记号。首先,使用 batch_xml2abc.py 将 MusicXML 转换为标准 ABC:
bash
python batch_xml2abc.py
然后,使用 batch_interleaved_abc.py 将标准 ABC 转换为 Interleaved ABC 记号:
bash
python batch_interleaved_abc.py
转换 MIDI 到 MTF 格式
CLaMP 3 处理表演信号的 MTF 格式。使用 batch_midi2mtf.py 将 MIDI 文件转换为 MTF 格式:
bash
python batch_midi2mtf.py
使用 MERT 提取音频特征
CLaMP 3 使用 MERT 提取的音频特征而不是原始波形。使用 extract_mert.py 从原始音频中提取 MERT 基于的特征:
bash
python extract_mert.py --input_path <input_path> --output_path <output_path> --model_path m-a-p/MERT-v1-95M --mean_features
训练和特征提取
训练模型
修改 config.py 来调整超参数和数据路径。
-
对于符号音乐训练,使用
train_clamp3_symbolic.py: bash python -m torch.distributed.launch --nproc_per_node=<GPUs> --use_env train_clamp3_symbolic.py -
对于音频数据训练,使用
train_clamp3_audio.py: bash python -m torch.distributed.launch --nproc_per_node=<GPUs> --use_env train_clamp3_audio.py
或者,可以使用预训练的权重:
特征提取
训练(或使用预训练权重)后,使用 extract_clamp3.py 提取特征:
bash
accelerate launch extract_clamp3.py --epoch <epoch> <input_dir> <output_dir> [--get_global]
检索和分类
语义搜索
使用 semantic_search.py 检索相似音乐特征:
bash
python semantic_search.py <query_file> <reference_folder> [--top_k TOP_K]
分类
使用 train_cls.py 训练线性分类器:
bash
python train_cls.py --train_folder <path> --eval_folder <path> [--num_epochs <int>] [--learning_rate <float>] [--balanced_training]
使用 inference_cls.py 进行推理:
bash
python inference_cls.py <weights_path> <feature_folder> <output_file>
引用
即将到来...




