sigsep musdb18数据集的python解析器

musdb的Python项目详细描述


musdb

生成状态覆盖状态最新版本支持的Python版本

一个python包,用于解析和处理musdb18数据集,这是用于音乐源分离的最大开放访问数据集。该工具最初是为音乐分离任务开发的,作为信号分离评估活动(SISEC)的一部分。

获取数据

musdb附带7秒的完整数据集摘录(自动下载),用于快速评估或原型制作。但是,完整的数据集需要通过zenodo下载并单独存储(解压缩)。< Buff行情>

数据集托管在Zenodo上,要求用户请求访问,因为这些曲目只能用于学术目的。我们手动检查这些请求。请不要重复填写此表格,通常需要不到一天的时间才能进入。

安装和设置

软件包安装

您可以使用pip安装musdb

pip install musdb

使用茎(默认)

musdb18编码在stems中,这是一种使用有损压缩的多声道音频格式。在内部,musdb包依赖于ffmpeg来解码多流文件。为了方便起见,我们开发了一个名为stempeg的python包,它可以方便地解析和解码stem文件。 当您安装musdb(这取决于stempeg)时,因此也需要安装ffmpeg库。安装可能因操作系统和python发行版而异:

  • 在anaconda上,您可以使用conda install-c conda forge ffmpeg安装ffmpeg。

或者,您可以手动安装ffmpeg,如下所示:

  • 在MacOS上,使用自制:brew安装ffmpeg
  • 在ubuntu/debian上:sudo apt get install ffmpeg

使用wav文件(可选)

如果要使用WAV文件(例如,用于更快的音频解码),musdb还支持分析和处理预解码的pcm/wav文件。musdb具有将stems数据集转换为wav版本的功能。这个脚本可通过命令行使用

musdbconvert path/to/musdb-stems-root path/to/new/musdb-wav-root

如果您不想使用python,我们还提供基于docker的脚本将数据集解码为wav文件。

使用解码的musdb时,初始化数据集时请使用is wav参数。

用法

这个包应该与现有的python numpy、tensorflow或pytorch代码很好地集成。在项目中使用musdb的大多数步骤可能都使用相同的第一步:

设置musdb

在主python函数中导入musdb包,并在7秒内迭代musdb曲目:

importmusdbmus=musdb.DB(download=True)mus[0].audio

要使用完整的数据集,请设置一个数据集rootdirectory

mus=musdb.DB(root="/path/to/musdb)

其中root是musdb18数据集根文件夹的路径。根参数也可以使用系统环境变量重写。只需在bash环境中export musdb_path=/path/to/musdb。在这种情况下,不需要将参数传递到db()

在musdb18轨迹上迭代

迭代musdb从而访问音频数据非常简单。假设,我们有一个监督训练方法,它以混合音为输入,以人声为输出,我们可以简单地使用:

fortrackinmus:train(track.audio,track.targets['vocals'].audio)

曲目属性

跟踪对象,使以pythonic方式轻松处理音频和元数据:

  • track.name,曲目名称,由track.artisttrack.title组成
  • track.path,混合物的绝对路径,可以方便地处理外部应用程序。
  • track.audio,立体声混合为一个numpy形状数组(nb_samples,2)
  • track.rate,混合物的采样率。
  • track.sources,用于此曲目的源字典。
  • track.stems,所有五个形状立体源的核张量。词干总是按以下顺序排列:['mixed','drums','bass','other','vocals']
  • track.targets,为此曲目提供的目标字典。 注意,对于musdb,源和目标只在存在伴奏时不同,这是所有源的总和,除了声音。musdb支持以下目标:['混音','鼓','低音','其他','人声','伴奏','线性混音']。注意,有些目标(如伴奏)在飞行中是动态混合的。

分别处理训练和测试子集

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

mus_train=musdb.DB(subsets="train")mus_test=musdb.DB(subsets="test")

使用列车/验证拆分

如果要访问单个曲目,可以通过其索引访问mus曲目列表,例如mus[2:。为了促进可重复的研究,我们提供了一个固定的验证数据集。

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

可以使用对象编辑验证轨迹列表。

用musdb训练深层神经网络

编写有效的数据集生成器在不同的深度学习框架中各不相同。一个非常简单的n_ive生成器

  • 使用替换项绘制随机轨迹
  • 使用替换绘制固定长度的随机块

可以使用musdb的track.chunk_starttrack.chunk_duration属性轻松实现,这些属性有效地寻找开始示例(以秒为单位提供)并执行请不要先将完整的音频加载到内存中。

whileTrue:track=random.choice(mus.tracks)track.chunk_duration=5.0track.chunk_start=random.uniform(0,track.duration-self.seq_duration)x=track.audio.Ty=track.targets['vocals'].audio.Tyieldx,y

评估

要使用流行的bsseval指标评估amusdb曲目,您可以使用我们的mus eval包。在pip install musdb对单个track的求值之后,可以通过

importmuseval# provide an estimateestimates={'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")

基线

神谕

对于Oracle方法,请查看我们的打开Unmix Oracle分离方法。 这将向您展示如何计算Oracle性能,并给出分隔质量的上限。

打开UNMIX

我们为Pythorch、TensorFlow和NNABLE提供了一种最先进的基于深度学习的分离方法,网址为open.unmix.app

常见问题

混合物并不完全是其来源的总和,这是有意的吗?

这不是虫子。因为我们采用了stems格式,所以我们使用了aac压缩。在这里,混合物的残余噪声不同于源的残余噪声之和。这种差异不会显著影响分离性能。

pip install musdb
0

引文

如果使用musdb数据集进行研究-请引用musdb18数据集

pip install musdb
1

<详细内容>

如果将您的结果与SISEC 2018参与者进行比较-请引用SISEC 2018 LVA/ICA论文

pip install musdb
2

<详细内容>

许可证

麻省理工学院< /P>

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java使用(BluetoothGattCharacteristic)特性中的数据创建、写入和保存csv文件。getValue()   java如何使用groupBy创建一个值为BigDecimal字段平均值的映射?   日期时间Java将iso_即时格式的字符串转换为日期   java如何检索和显示Android firebase的配置文件?   scala AWSJAVASDK:解压缩大小必须小于262144000字节   要应用于列表的java JSTL if条件   java在3个点之间画一个正方形   Kotlin java抽象类IllegaAccessError   java原语双值相等取决于大小?   java有没有一种方法可以对数据集使用compareTo()方法,而不必遍历数据集的每个元素?   java为什么我发送的每个UDP消息都会改变端口源?   重新选择文件时swing Java JTree冻结   java不知道我的游戏是怎么回事   Motif L&F中自定义组合框渲染器中的Java Swing消失文本   java Trade Me API访问前的OAuth