最近有一个新的任务,音乐分类——给到一首MP3,把它分到正确的类别。
在github上找啊找,找到3个有可能实现的方法。
1.MSD dataset (Million Song Dataset)
参考1:https://github.com/mlachmish/MusicGenreClassification
参考2:http://millionsongdataset.com/pages/code/
第一个方法是这个,我跑了MusicGenreClassification-master,它是9个类别分类的,分别是blues,classical,country,disco,hiphop,jazz,metal,pop,reggae,rock。并且下载了1.8G的MillionSongSubset(全部的MSD大约是290G,这里是MSD网站给出的较小的数据集),里面都是h5格式的文件,但是我还没有搞清楚文件目录是什么意思,目录如图1

图1:MillionSongSubset目录
代码中实现分类效果的方式有两种,一种是分析mfcc,另一种是分析mel-spec。
梅尔频率倒谱系数(MFCC):
MFCCs(Mel Frequency Cepstral Coefficents)是一种在自动语音和说话人识别中广泛使用的特征。
Mel频谱分析(Mel-Spec) :
mel-scaled power (energy-squared) spectrogram
最后我跑的时候,代码需要MP3文件,我不知道怎么搞到MP3文件,不知道怎么把这些h5文件变成MP3,这个代码没有跑成功
2.FMA: A Dataset For Music Analysis
参考https://github.com/mdeff/fma
感觉这个写的很清楚,也很容易做出来。数据集也有,下载了22G的中等数据集fma_medium.zip: 25,000 tracks of 30s, 16 unbalanced genres (22 GiB)和fma_metadata.zip,各种的操作代码在jupyter notebook也都有,但是它使用的track.csv文件好像有一些问题,我连最前面的数据集操作也没有跑完,这个也以失败告终。
3.音乐推荐系统
参考https://github.com/mattmurray/music_recommender
https://zhuanlan.zhihu.com/p/44188154
这个是可以跑成功的!!!
这个代码,作者是给模型的,可以直接进行测试。
9类:
0:'Breakbeat',#霹雳1:'Dancehall/Ragga',#雷鬼音乐2:'Downtempo',#慢摇3:'Drum and Bass',#鼓打贝司4:'Funky House',#经典电音5:'Hip Hop/R&B',#嘻哈6:'Minimal House',#极简音乐7:'Rock/Indie',#摇滚8:'Trance'#迷幻音乐
python moel_classify_genre.py(把MP3文件导入进去就可以),结果如图2

图2
我的任务类别和这些不同,我有33个类别,我需要重新整理数据集进行模型训练,之后再进行测试。
1.下载对应的MP3文件,一个MP3文件30s就行
2.把MP3转化成频谱图,1个30s的MP3估计有5-6张频谱图,我的每一类大约都有10000张图像。把这些图片分成train,val,holdout三个文件夹,比例是6:3:1。每个大文件夹有33个小文件,分别是这些类。
3.修改model_train.py,之后进行训练。
4.训练完成,得到model.h5,可以进行测试。