FMA 音乐数据集:10 万级曲库到流派分类 baseline 的 30 分钟接入路径
FMA 音乐数据集:10 万级曲库到流派分类 baseline 的 30 分钟接入路径
【免费下载链接】fmaFMA: A Dataset For Music Analysis项目地址: https://gitcode.com/gh_mirrors/fm/fma
给 3000 首曲子逐首打标,人工排期要两周,特征流水线是否跑通还没底。FMA 提供 106,574 首 Creative Commons 音频与现成特征,用于流派分类,跳过数据收集直接进入模型对比。
能力速览:106,574 首曲目的元数据与特征文件
| 能力 | 说明 | 量化指标(来源) |
|---|---|---|
| 曲目元数据 | 标题、艺术家、标签、播放次数、官方 train/val/test 分割 | 106,574 行,16,341 位艺术家,14,854 张专辑(tracks.csv) |
| 流派层级 | 父-子流派关系,可推导 top-level 类别 | 163 个流派,large 子集覆盖 161 个(genres.csv) |
| 预计算音频特征 | mfcc、chroma_cens、tonnetz、spectral_contrast 等列组 | 覆盖全部曲目,与 tracks 行索引对齐(features.csv) |
| Echonest 特征 | 第三方音频、社会、时序特征 | 13,129 首(echonest.csv) |
| 四档音频子集 | 30 秒 44.1kHz 切片,full 为完整长度 | 7.2 / 22 / 93 / 879 GiB(fma_small 至 fma_full.zip) |
最短接入路径:clone 与依赖安装
环境搭建只需要两步命令(版本说明在下方):
git clone https://gitcode.com/gh_mirrors/fm/fma cd fma && pip install -r requirements.txt版本说明:requirements.txt 锁定的是 Python 3.6 时代的栈(pandas 0.19.2、librosa 0.5.0、Keras 1.2.2、tensorflow-gpu 1.0.1),新环境建议放宽版本约束后安装,核心用法不受影响。
- 必须依赖:numpy、pandas(加载分层表头 CSV)、scikit-learn(baseline 分类器)
- 可选依赖:librosa、pydub(原始音频解码)、tensorflow-gpu + Keras(训练深度网络)、系统级 ffmpeg(最快的解码通路)、jupyter notebook(跑 usage.ipynb)
数据流水线:从站点 API 到 MP3 子集
- 采集:webapi.ipynb 按曲目/专辑/艺术家 ID 查询 freemusicarchive.org 接口,creation.py 落盘生成 tracks.csv 与 genres.csv。
- 提特征:features.py 用 librosa 从音频提取标准化特征写入 features.csv,13,129 首额外汇入 Echonest 特征。
- 编码音频:全部曲目以 MP3 编码,30 秒切片按 ID 存入 3 级目录(如 000/000002.mp3),再打包成 4 档 zip。
- 消费:解压到 data/ 后,utils.py 的
load()自动按分层表头解析 CSV,get_audio_path(audio_dir, track_id)由 ID 拼出音频路径。
三个实战场景:加载元数据、训练流派分类、解码音频
场景一,离线加载元数据与特征;场景二,在 small 子集上用 SVC 跑流派分类 baseline(两块共用下方代码块):
import utils, sklearn.preprocessing as sp, sklearn.svm as svm tracks = utils.load('data/fma_metadata/tracks.csv') features = utils.load('data/fma_metadata/features.csv') small, tr, te = tracks['set','subset'] <= 'small', tracks['set','split']=='training', tracks['set','split']=='test' s = sp.StandardScaler(copy=False).fit(features.loc[small & tr, 'mfcc']) ytr = tracks.loc[small & tr, ('track','genre_top')] print(svm.SVC().fit(s.transform(features.loc[small & tr, 'mfcc']), ytr).score( s.transform(features.loc[small & te, 'mfcc']), tracks.loc[small & te, ('track','genre_top')]))预期输出:一次运行得到 small 子集(8 个平衡流派)上的一个准确率数值,可与 baselines.ipynb 里 13 个分类器的对比表逐项对照。
场景三,按 ID 解码 30 秒原始音频:
import os, utils path = utils.get_audio_path(os.environ['AUDIO_DIR'], 2) x = utils.FfmpegLoader().load(path) print(path, x.shape)预期输出:路径形如data/fma_small/000/000002.mp3,样本数约 1,321,967(44.1kHz 的 30 秒)。
高频坑与解法:大文件解压与多进程音频加载
- 现象:
unzip fma_large.zip报错或产物损坏。原因:归档压缩级别超出系统 unzip 能力(README 已知问题)。处理:改用 7-Zip 执行7z x fma_large.zip,解压后按 README 给出的 sha1 校验。 - 现象:
pip install -r requirements.txt在 resampy 处构建失败。原因:resampy 的 setup.py 会先 import numpy。处理:先单独pip install numpy==1.12.1再装其余包,makefile 的 install 目标就是这个两段式顺序。 - 现象:多进程批量读 mp3 时 librosa 报线程错误、整体慢。原因:librosa 重采样慢,audioread 后端不支持多进程。处理:改用 utils.py 的
FfmpegLoader(管道调用 ffmpeg,官方标注最快),或LibrosaLoader配合res_type='kaiser_fast'(约 3 倍速)。 - 现象:个别 mp3 读取失败,训练间歇报错。原因:数据集存在已知坏文件(官方 errata)。处理:用
utils.build_sample_loader,它对坏文件自动跳过并打印路径;先用 sha1sum 排除下载截断。
上下游生态:上游来源与下游衍生方向
- 上游:音频与元数据来自 freemusicarchive.org,全部曲目为 Creative Commons 许可,数据集面向研究用途;代码 MIT、元数据 CC BY 4.0。
- 下游:100 余篇论文引用(ISMIR 2017 论文 arXiv:1612.01840),已衍生 2 个数据集:OpenMIC-2018(多乐器识别)与 FMA_convnet_features(预提取 ConvNet 特征),可跳过解码直接训分类头。
- 维护方式:问题与提交走仓库 issue/pull request,已知坏文件清单集中在 issue #41。
- 延伸阅读:analysis.ipynb 复现论文全部图表,usage.ipynb 覆盖加载、可视化与训练全链路。
收束
回到开场:给 3000 首曲子打标签这件事,现在可以先拉 342 MiB 的 fma_metadata.zip 加 7.2 GiB 的 small 子集,按 usage.ipynb 跑通 SVC baseline,确认流水线无误后再升级到 medium 子集调自己的模型。
【免费下载链接】fmaFMA: A Dataset For Music Analysis项目地址: https://gitcode.com/gh_mirrors/fm/fma
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
