用深度学习找到一首歌的流派风格

我们人类特别擅长的事情之一是分类歌曲。在短短几秒钟内,我们可以判断我们是在听古典音乐、Rap,Blues还是EDM。然而,这个任务对我们一些人来说很简单,但是还有数百万人仍然生活在未分类的数字音乐库。

使用这个机器学习开源项目就能让您的计算机成为音乐专家。
https://github.com/despoisj/DeepAudioClassification

针对7,160首歌曲,如果人类是能花费3秒钟进行了分类(无​​论是通过收听还是由于您已经知道),所有这些歌曲需要花费约6小时来对它们进行分类。如果需要添加手动标记,这样的体力劳动很容易上升到超过10个小时, 没有人愿意这样做。

在这篇文章中,我们将看到我们如何使用深度学习 ,以帮助我们在这个劳动密集型的任务。
下面对我们将做什么首先做一个一般概述:
1.提取库中每首歌曲的简化表达
2.训练一个深层神经网络来分类歌曲
3.使用分类器来获得歌曲流派

数据

首先,我们需要一个数据集。 为此,先从自己的iTunes库开始 -虽然它不像我们可以找到的其他数据集那么多样化,完整,甚至一样大,但它是一个好的开始。 注意,我只使用了2000首歌曲,因为它已经代表了大量的数据。

优化数据集

首先我们发现这些歌曲有太多的流派和其他风格 ,我们并不真正需要协奏曲风格、古典风格。

一旦每个类型有一定数量的歌曲,我们就可以开始从数据中提取重要的信息。每首歌只是非常长的一系列值。 典型的采样频率为44100Hz -每秒存储44100个音频,立体声是两倍。这意味着,3分钟长的歌曲立体声含有7938000样本 。 这是很多信息,如果我们想要做任何事情,我们需要将其减少到更易于管理的水平。我们可以丢弃立体声通道 ,因为它包含高度冗余的信息。

我们使用傅立叶变换将我们的音频数据转换到频域。这将作为频谱导出更简单和紧凑。这个过程会给我们一个PNG文件,包含歌曲所有频率基于时间的演变。

这里,我们将使用每秒50像素(每像素20ms),这足以确保使用我们需要的所有信息。

接下来我们要做的是处理歌曲的长度。 这个问题有两种方法。

第一个是使用一个回归神经网络,按顺序喂给图像的每一列。

如果我们可以在3秒内通过耳朵分类歌曲,为什么机器不能做同样的?

我们可以创建频谱的固定长度的片,并把它们作为代表流派独立样本。 方便起见我们可以使用方片,这意味着我们将频谱降低到128×128像素的切片。这表示每个切片中的2.56s的数据。

我们可以使用数据增强扩大数据集,例如,我们可以向图像添加随机噪声,或者水平轻微拉伸,然后裁剪它们。但是,我们必须确保我们不会破坏数据的模式。我们不能旋转图像,也没有水平翻转他们,因为声音是不是对称的。

现在开始选择模型 - 让我们建立一个分类器!

在我们把所有的歌曲切成方形光谱图像之后,我们有一个数据集,每个类型包含数万个样本。现在,我们可以用深层卷积神经网络来对这些样本进行训练分类。

为此,我使用了Tensorflow的包装器TFLearn。

实现细节
1.数据集拆分:训练(70%),验证(20%),测试(10%)
2.模型 :卷积神经网络。
3.层 :尺寸2x2,步幅2
4.优化 :RMSProp。
5.激活函数:ELU(指数线性单位)
6.初始化 :在所有层中的权重矩阵Xavier。
6.正则 :丢失的概率0.5

库包:https://github.com/despoisj/DeepAudioClassification