MUSDB18-HQ音乐分轨训练集和MUSDB调用方法

在这里插入图片描述

MUSDB18和MUSDB18-HQ简单介绍

musdb18是一个数据集,包含150首不同类型的全长音乐(大约10小时的长度),以及它们各自独立的鼓、贝斯、人声和其他词干。
musdb18包含两个文件夹,一个文件夹包含一个训练集:“训练”,由100首歌曲组成,另一个文件夹包含一个测试集:“测试”,由50首歌曲组成。监督方法应在训练集上进行训练,并在两集上进行测试。所有信号都是立体声,编码在44.1千赫。
来自musdb18的数据由几个不同的来源组成:100首曲目取自DSD100数据集,数据集本身来自“混合秘密”免费多曲目下载库。有关您使用DSD100数据的权利的任何问题,请参阅此原始资源。46首歌来自MedleyDB,根据知识共享协议(BY-NC-SA 4.0)授权。

MUSDB18- hq是MUSDB18数据集的未压缩版本。它由150首不同风格的全音轨歌曲组成,包括混合立体声和原始音源,分为训练子集和测试子集。其目的是为源分离算法的设计和评估提供参考数据库。这种信号处理方法的目的是估计一组混合物的一个或多个源,例如用于卡拉ok。它已被用作SiSEC 2018年专业制作的音乐录制任务的官方数据集,该任务是评价源分离算法的国际运动。
在这里插入图片描述

MUSDB 组成

musdb18-hq包含两个文件夹,一个文件夹包含一个训练集:train,由100首歌曲组成,另一个文件夹包含一个测试集:test,由50首歌曲组成。监督方法应在训练集上进行训练,并在两集上进行测试。所有来自musdb18-hq数据集的文件都保存为未压缩的wav文件。在每个音轨文件夹中,用户可以0 0 - The mixture, 混合声
1 - The drums,鼓声
2 - The bass,贝斯声
3 - The rest of the accompaniment, 伴奏部分
4 - The vocals.人声
所有的信号都是立体声,编码在44.1千赫。如果您使用MUSDB数据集进行研究,请引用MUSDB18数据集

Tools

解析器

musdb: Python based dataset parser
mus-io: Docker scripts for decoding/encoding STEMS <=> wav (i.e. MATLAB users go there)
musdb.jl: Julia based dataset parser

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)

musdb_convert应用于转换音频文件到音频的光谱图像

用法举例

这个软件包依赖 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’],某些目标(例如伴奏)是动态混合的。

分离训练集和测试集

我们为机器学习方法的训练和测试提供子集:

mus_train = musdb.DB(subsets="train")
mus_test = musdb.DB(subsets="test")
mus_train = musdb.DB(subsets="train", split='train')
mus_valid = musdb.DB(subsets="train", split='valid')

使用深度学习网络训练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 - track.chunk_duration)
    x = track.audio.T
    y = track.targets['vocals'].audio.T
    yield x, y

评估 Evaluation

要使用流行的BSSEval度量来评估一个musdb音轨,可以使用museval包。
在pip安装后,museval对单轨进行评估,可以通过

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")

参考链接

[1]https://github.com/sigsep/sigsep-mus-db
[2]https://pypi.org/project/musdb/
[3]https://sigsep.github.io/sigsep-mus-db/
[4]https://zenodo.org/record/3338373#.XoFGIYgzaUk

发布了157 篇原创文章 · 获赞 94 · 访问量 11万+

猜你喜欢

转载自blog.csdn.net/weixin_42462804/article/details/105191876
HQ