刚上完了王朝坤老师《数字媒体(2)》音频技术部分的课程,做了一个音乐情感分类的实验,特写出来分享一下。

实验要求简介

实验的任务就是对给定的音乐片段进行情感分类。实验要求输入一个音乐片段(mp3 格式),输出该音乐片段的情感标签。本实验中所有音乐片段的情感标签包括 Happy、 Sad、 Tender、 Fear、 Anger、 Surprise 一共 6 种。提供的数据为有标数据,每种情感类型包括 20 个音乐短片段( MP3 格式),即每个音乐片段已知其情感标签。本实验的评价指标为分类结果的准确度,即 #Right / (#Right + #Wrong),以及算法的创新性。建议将提供的有标数据划分成多份,便于进行交叉验证。

MFCC 特征提取

根据老师课上的介绍的内容以及查阅网上的资料,最终决定提取 MFCC 特征。 在本次实验中,每 50ms 的讯框(Frame)提取一个 13 维的 MFCC 特征,一段音频可以提取到约 400 个的 MFCC 特征。

BoW 特征表示

由于上面每个音频提取的 MFCC 数量不一,不便于做后续的分类,故需要将他们用等维度的特征来表示。 词袋模型(Bag of Words)是信息检索领域常用的模型之一。针对所有的特征进行聚类,得到具有代表性的 K 个词汇。将这 K 个词汇建立 k-d tree 高维索引,然后将每个 MFCC 特征在 K 个词汇上找到距离最近的词汇,从而每段音频的 MFCCs 都能映射到 K 维的向量上,得到一个 K 维的向量表示。 在本次实验中,总共有约 47000 个 MFCC 特征,聚类中心 K 分别取 1000, 5000 进行实验。

Multi-SVM 训练

在 BoW 的基础上,以及加上原有的标注类别,这样我们就可以利用 SVM 模型进行训练以及分类预测。我们知道,SVM 原本是用来解决二分类问题的,但是此处我们需要解决的是一个多分类的问题。我们采用最简单的 “1-V-R” 方式,就是每次仍然解一个二分类的问题。比如我们有 6 个类别,首先把类别 1 的样本定为正样本,其余的样本合起来定为负样本,得到一个二分类器,它能够指出新的样本是不是第 1 类的;然后我们把类别 2 的样本定为正样本,把 1、 3、 4、 5、 6 的样本合起来定为负样本,得到一个分类器,如此下去,最终可以得到 6 个这样的二分类器。

实验环境与工具

  • Windows 8(6G RAM, 4-core CPU)
  • MATLAB 2012b
  • MIRtoolbox 1.6.1
  • VLFeat 0.9.17

实验结果

本实验采用自己写的算法与 MIRtoolbox 自带的分类算法比较,都是采用交叉验证的方式得出的实验结果。其中 mirclassify1 是直接调用 mirclassify 函数,而 mirclassify2 是 mirclassify+GMM 模型。MFCC-1000 表示本次实现算法, 聚类中心 1000,采用 6 折交叉验证。同理,MFCC-5000 表示聚类中心为 5000。

Methods mirclassify1 mirclassify2 MFCC-1000 MFCC-5000
AP 0.34 0.33 0.25 0.243

实验代码与数据

下载链接 http://pan.baidu.com/s/1bnfbdkb