音乐分轨训练集Musdb18与Musdb介绍
Musdb18&Musdb介绍
Musdb18是150个全长度的音乐曲目的数据集(〜10H持续时间),数据集中包含不同流派的鼓、低音、人声和其它音轨的分轨文件。而Musdb是一个用于解析和处理 Musdb18数据集的Python库,有点类似pydub,通俗来说就是将音频的波形文件进行切割拼接或读取保存等一系列操作。Musdb18训练集通常用于音乐分轨等深度学习模型的训练(例如Facebook的Demucs音频分轨模型就是采用的这个训练集)。
Musdb18 训练集的数据格式
musdb18数据集中的所有文件均以Native Instruments(.mp4)格式进行编码(用Adobe的Audition可以看到分轨的音频文件)。musdb18包含两个文件夹,一个带有训练集的文件夹:“ train”,由100首歌曲组成;一个带有测试集的文件夹:“ test”,由50首歌曲组成。有监督的方法应在训练集上进行训练,并在两组上进行测试,所有信号均为立体声,并以 44.1kHz编码。它是一种多轨格式,由5个立体声流组成,每个立体声流都以AAC ( 256kbps)编码,混合轨道对应于所有信号的总和,所有的轨道分别对应于:
0 - 混合轨道,1 - 架子鼓轨道,2 -贝斯轨道,3 -其余的伴奏轨道,4 -人声轨道
附上下载链接(数据集下载需要申请,请不要用作商业用途):
https://zenodo.org/record/1117372(压缩格式 4.4G)
https://zenodo.org/record/3338373 (未压缩格式 27G左右)
Musdb库API介绍
class musdb.DB(root=None, setup_file=None, is_wav=False, download=False, subsets=['train', 'test'], split=None)[source]
The musdb DB Object
主要参量介绍:
root(str路径 ,可选)– musdb根路径。如果设置为None,它将从MUSDB_PATH环境变量中读取
is_wav(boolean ,optional)–期望每个源都有wav文件的子文件夹,而不是轨道,默认为False
download(布尔值,可选)–下载MUSDB18的样本版本,其中包括7s摘录,默认为False
subsets –选择_musdb_子集训练或测试。默认无加载
class musdb.audio_classes.MultiTrack(path=None, name=None, artist=None, title=None, sources=None, targets=None, *args, **kwargs)
音频类MultiTrack是一种数组格式的类型,数据格式为:[shape=(stems, num_samples, num_channels)]
class musdb.audio_classes.Source(multitrack, name=None, path=None, stem_id=None, gain=1.0, *args, **kwargs)
Source类是一种音频目标,它是几个源的线性混合
参数介绍:
name: 音频源的名称(字符串)
stem_id: 这里设置了stem/substream ID(整型)
is_wav: 是否以wav读取音频流(布尔)
path: 音频绝对路径(字符串)
gain: 源的混合大小(浮点)
class musdb.audio_classes.Target(multitrack, sources, name=None)
Target类同样是一种音频目标,它是几个源的线性混合
参数介绍:
multitrack: 轨道
sources: 这个目标的音源列表
class musdb.audio_classes.Track(path='None', is_wav=False, stem_id=None, subset=None, chunk_start=0, chunk_duration=None)
通用的音轨,可以是wav或stem文件
参数介绍:
name: 轨道名称(字符串)
path: 混合音轨的绝对路径(字符串)
stem_id: stem/substream ID(整型)
is_wav: 是否读取wav格式(布尔)
subset: 音轨所在的子集
chunk_start: 设置加载音频时的偏移量,默认为0开始(浮点)
chunk_duration: 设置音频的持续时间,默认为None (浮点)
musdb.tools.musdb_convert(inargs=None)
cli应用于转换音频文件到音频的光谱图像
用法举例
这个软件包依赖 numpy,tensorflow或pytorch
设置musdb
导入musdb包,并在musdb轨道上进行迭代:
import musdb
mus = musdb.DB(download=True)
mus[0].audio
设置数据集root目录,例如:
mus = musdb.DB (root = "/path/to/musdb")
遍历MUSDB18曲目
遍历musdb并访问音频数据非常简单。假设我们有一种监督训练方法train(x, y),该方法将混轨道为输入,将人声作为输出,可以使用:
for track in mus:
train(track.audio, track.targets['vocals'].audio)
跟踪属性
这些Track对象可以轻松地以pythonic方式处理音频和元数据:
Track.name,曲目名称,由Track.artist和Track.title组成。
Track.path,这是混合轨道的绝对路径,可能易于使用外部应用程序进行处理。
Track.audio,立体混合轨道形状的numpy数组。
Track.rate,混合轨道的采样率。
Track.sources,该曲目使用的来源。
Track.stems是所有五个立体形状源的numpy张量,按以下顺序轨道:[‘mixture’, ‘drums’, ‘bass’, ‘other’, ‘vocals’],
Track.targets,为此轨道提供的目标,对于MUSDB,来源和目标的区别仅在于存在accompaniment,这是所有来源(人声除外)的总和。MUSDB支持以下目标:[‘mixture’, ‘drums’, ‘bass’, ‘other’, ‘vocals’, ‘accompaniment’, ‘linear_mixture’],某些目标(例如伴奏)是动态混合的。
分别处理训练和测试子集
musdb提供训练和测试机器学习方法的子集:
mus_train = musdb.DB(subsets="train")
mus_test = musdb.DB(subsets="test")
使用 训练/验证 拆分
如果要访问单个轨道,可以让mus按其索引访问轨道列表,例如mus[2:]。为了促进可重复的研究,musdb提供了一个固定的验证数据集。
mus_train = musdb.DB(subsets="train", split='train')
mus_valid = musdb.DB(subsets="train", split='valid')
验证轨道列表可以使用mus.setup[‘validation_tracks’]对象进行编辑。
利用musdb训练深度神经网络
这是一个样本生成器,可以很容易地实现使用musdb的轨道。chunk_start和跟踪。chunk_duration属性。
while True:
track = random.choice(mus.tracks)
track.chunk_duration = 5.0
track.chunk_start = random.uniform(0, track.duration - self.seq_duration)
x = track.audio.T
y = track.targets['vocals'].audio.T
yield x, y
评价
要使用流行的BSSEval度量来评估一个musdb音轨,可以使用museval包(需要 pip install 一下):
import museval
# provide an estimate
estimates = {
'vocals': np.random.random(track.audio.shape),
'accompaniment': np.random.random(track.audio.shape)
}
# evaluates using BSSEval v4, and writes results to `./eval`
print(museval.eval_mus_track(track, estimates, output_dir="./eval")
文章写得有点仓促,主要是对Musdb进行简单介绍,当中可能有些翻译过来的表述不够准确,欢迎大家留言。
参考连接
[1] https://pypi.org/project/musdb/
[2] https://sigsep.github.io/sigsep-mus-db/