15
介绍
本文讨论神经网络对声音样本的音乐类型进行分类的任务。当我决定在声音处理领域工作时,我认为声音类型分类和图像分类是相同的问题。但是图像非常火热,我并没有找到太多关于深度学习来解决这个问题的相关资料。直到最近我找到一个关于使用深度学习技术的基于内容的音乐推荐。他们获取数据集的方式以及他们对声音所做的预处理确实启发了我,所以我决定用深度学习来对音乐流派进行分类。这个项目的一个子任务是学习一个新的深度学习SDK,该项目在Python中实现,机器学习部分使用TensorFlow。
数据集
数据预处理
拥有大数据集是不够的,与图像任务相反,我不能直接在原始声音样本上工作,快速计算:30秒×22050采样/秒= 661500矢量长度,这将是重载常规机器学习方法。
根据我阅读的所有论文并对声学分析进行了一些研究,业界正在使用Mel频率倒谱系数(MFCC)作为声音样本的特征向量,所以我使用了librosa来提取MFCC特征。
MFCC的推导如下:
对信号进行傅立叶变换(窗口摘录)。
使用三角形重叠窗口将上面获得的光谱的功率映射到梅尔尺度上。
记录每个梅尔频率的功率记录。
采用mel对数列表的离散余弦变换,就像它是一个信号一样。
MFCC是所得光谱的幅度。
我尝试了几个窗口大小和步幅值,我得到的最好结果是100毫秒的大小和40毫秒的步幅。
我尝试了两种方法,发现只使用mel频率我得到了非常好的结果,但权衡是当然的训练时间。在继续构建网络之前,我希望可视化预处理数据集,我通过t-SNE [10]算法实现了这一点。您可以看到MFCC的t-SNE图(步骤5)和Mel-Frequencies(步骤2)
网络结构
我采用卷积神经网络实现。该网络接收599个mea-frequency bean矢量,每个bean包含128个描述其窗口的频率。网络由3个隐藏层组成,在它们之间我正在进行最大池化。最后是一个完全连接的层,最终通过softmax得到了10个类型的10维向量。
结果
我发现了一篇题为“用于音频分类和聚类的基准数据集”的论文。并将其中一个非常类似的任务作为我的基准,它分类的类型:蓝调,电子,爵士,流行,嘻哈,摇滚,民谣,另类,恐怖。
我的结果
可以看到,使用CNN并没有带来效果上的太大提升,主要原因是特征提取过少,所以在后续的工作中将在特征提取上做适当的改进。通过提取更多特征信息来提高模型效果。
参考地址
github地址:https://github.com/mlachmish/MusicGenreClassification
领取专属 10元无门槛券
私享最新 技术干货