摘要:
合集:AI案例-NLP-零售业
数据集:GTzan2002音乐流派数据集
AI问题:语音等多模态识别
数据集价值:GTzan数据集成为了音乐流派分类研究的标准数据集,许多基于机器学习和深度学习的音频分类研究都使用这个数据集进行验证。
解决方案:音频特征提取与学习
一、问题描述
GTzan数据集由George Tzanetakis教授及其团队在2002年开发,作为多媒体音频分析和音乐信息检索研究的一部分。George Tzanetakis是音频信号处理、音乐信息检索(MIR)领域的专家,他的工作对音频分类和音乐流派识别的研究产生了重要影响。该数据集也被用于音频信号处理的其他任务,如音频识别、音频聚类和音频情感分析等。
数据集的价值:
- 音乐流派分类:GTzan数据集成为了音乐流派分类研究的标准数据集,许多基于机器学习和深度学习的音频分类研究都使用这个数据集进行验证。
- 音频特征提取与学习:该数据集为音频特征提取方法和算法的研究提供了实践基础。常见的特征包括梅尔频率倒谱系数(MFCC)、音高、节奏等。
- 模型性能评估:许多基于音频信号处理的分类模型和算法,如支持向量机(SVM)、卷积神经网络(CNN)、递归神经网络(RNN)等,都是在GTzan数据集上进行评估和测试的。
数据集的局限性: 尽管GTzan数据集在音频分析中具有很高的声誉和应用价值,但它也存在一些局限性:
- 数据质量问题:一些曲目可能并不完全符合其标定的流派,例如某些混合流派或采样问题,影响了数据集的准确性。
- 类间不平衡:某些流派可能比其他流派包含更多的变体,导致类别不平衡。
- 更新和多样性问题:该数据集已开发多年,缺乏现代流行音乐的多样性,且随着音乐风格的发展,某些类别可能已经变得过时。
尽管如此,GTzan数据集仍然是音频分类和音乐信息检索领域的重要资源,尤其是在教育、基准测试和初步实验中。
二、数据集内容
GTzan数据集是一个用于音乐流派分类的标准数据集,由10种不同的音乐流派组成,每种流派包含100首30秒长的音频片段。GTzan数据集包含1000条音频录音,每条时长30秒,分为10个不同的音乐流派:蓝调、古典、乡村、迪斯科、嘻哈、爵士、金属、流行、雷鬼和摇滚。所有音频文件均为WAV格式,采样率为22,050 Hz,且为单声道。该数据集提供了一个结构良好且多样化的音乐流派集合,使其适合用于训练和评估音乐流派分类的机器学习模型。
数据集要素
- 音频数量:1000首
- 时长:每首30秒
- 流派:
- 蓝调(Blues)
- 古典(Classical)
- 乡村(Country)
- 迪斯科(Disco)
- 嘻哈(Hip-Hop)
- 爵士(Jazz)
- 金属(Metal)
- 流行(Pop)
- 雷鬼(Reggae)
- 摇滚(Rock)
- 所有音频文件均为WAV格式。
- 采样率为22,050 Hz。
- 单声道。
音频特征
文件夹data中包含GTzan数据集,其中包括两个CSV文件,这些文件包含了各种流派的音频特征。此外,该文件夹还包含子文件夹,其中genres_original目录包含音频文件及其对应的images_original目录中的波形图像。
features_3_sec.csv样例:
filename | length | chroma_stft_mean | chroma_stft_var | rms_mean | rms_var | spectral_centroid_mean | spectral_centroid_var | spectral_bandwidth_mean | spectral_bandwidth_var | rolloff_mean | rolloff_var | zero_crossing_rate_mean | zero_crossing_rate_var | harmony_mean | harmony_var | perceptr_mean | perceptr_var | tempo | mfcc1_mean | mfcc1_var | mfcc2_mean | mfcc2_var | mfcc3_mean | mfcc3_var | mfcc4_mean | mfcc4_var | mfcc5_mean | mfcc5_var | mfcc6_mean | mfcc6_var | mfcc7_mean | mfcc7_var | mfcc8_mean | mfcc8_var | mfcc9_mean | mfcc9_var | mfcc10_mean | mfcc10_var | mfcc11_mean | mfcc11_var | mfcc12_mean | mfcc12_var | mfcc13_mean | mfcc13_var | mfcc14_mean | mfcc14_var | mfcc15_mean | mfcc15_var | mfcc16_mean | mfcc16_var | mfcc17_mean | mfcc17_var | mfcc18_mean | mfcc18_var | mfcc19_mean | mfcc19_var | mfcc20_mean | mfcc20_var | label |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
blues.00000.0.wav | 66149 | 0.335406363 | 0.091048293 | 0.130405024 | 0.003521004 | 1773.065032 | 167541.6309 | 1972.744388 | 117335.7716 | 3714.560359 | 1080789.886 | 0.081850962 | 0.000557687 | -7.85E-05 | 0.00835359 | -6.82E-05 | 0.005535193 | 129.1992188 | -118.6279144 | 2440.286621 | 125.0836258 | 260.9569092 | -23.44372368 | 364.0817261 | 41.32148361 | 181.6948547 | -5.976108074 | 152.9631348 | 20.11514091 | 75.65229797 | -16.04541016 | 40.22710419 | 17.85519791 | 84.32028198 | -14.6334343 | 83.43723297 | 10.27052689 | 97.00133514 | -9.708278656 | 66.66989136 | 10.18387508 | 45.10361099 | -4.681614399 | 34.16949844 | 8.417439461 | 48.26944351 | -7.233476639 | 42.7709465 | -2.853603363 | 39.68714523 | -3.241280317 | 36.4882431 | 0.722208977 | 38.09915161 | -5.050335407 | 33.61807251 | -0.243026793 | 43.77176666 | blues |
features_30_sec.csv样例:
filename | length | chroma_stft_mean | chroma_stft_var | rms_mean | rms_var | spectral_centroid_mean | spectral_centroid_var | spectral_bandwidth_mean | spectral_bandwidth_var | rolloff_mean | rolloff_var | zero_crossing_rate_mean | zero_crossing_rate_var | harmony_mean | harmony_var | perceptr_mean | perceptr_var | tempo | mfcc1_mean | mfcc1_var | mfcc2_mean | mfcc2_var | mfcc3_mean | mfcc3_var | mfcc4_mean | mfcc4_var | mfcc5_mean | mfcc5_var | mfcc6_mean | mfcc6_var | mfcc7_mean | mfcc7_var | mfcc8_mean | mfcc8_var | mfcc9_mean | mfcc9_var | mfcc10_mean | mfcc10_var | mfcc11_mean | mfcc11_var | mfcc12_mean | mfcc12_var | mfcc13_mean | mfcc13_var | mfcc14_mean | mfcc14_var | mfcc15_mean | mfcc15_var | mfcc16_mean | mfcc16_var | mfcc17_mean | mfcc17_var | mfcc18_mean | mfcc18_var | mfcc19_mean | mfcc19_var | mfcc20_mean | mfcc20_var | label |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
blues.00000.wav | 661794 | 0.35008812 | 0.088756569 | 0.130227923 | 0.002826696 | 1784.16585 | 129774.0645 | 2002.44906 | 85882.76132 | 3805.839606 | 901505.4255 | 0.083044821 | 0.000766946 | -4.53E-05 | 0.008172282 | 7.78E-06 | 0.005698182 | 123.046875 | -113.5706482 | 2564.20752 | 121.5717926 | 295.9138184 | -19.16814232 | 235.5744324 | 42.36642075 | 151.1068726 | -6.364664078 | 167.9347992 | 18.62349892 | 89.18083954 | -13.7048912 | 67.66049194 | 15.34315014 | 68.93257904 | -12.27410984 | 82.20420074 | 10.97657204 | 63.38631058 | -8.326573372 | 61.77309418 | 8.803792 | 51.24412537 | -3.6723001 | 41.21741486 | 5.7479949 | 40.55447769 | -5.162881851 | 49.77542114 | 0.752740204 | 52.42090988 | -1.690214634 | 36.52407074 | -0.408979177 | 41.59710312 | -2.303522587 | 55.06292343 | 1.221290708 | 46.93603516 | blues |
学术使用
GTzan数据集主要用于学术研究、教育和非商业目的。这意味着研究人员、开发者和学生通常可以免费使用该数据集进行研究和实验。
引用要求
如果在论文、研究或项目中使用GTzan数据集,通常需要引用相关的研究论文。例如,可以引用其最初的论文:
Tzanetakis, G., & Cook, P. (2002). "Musical genre classification of audio signals." IEEE Transactions on Speech and Audio Processing, 10(5), 293-302.
三、分类样例
特征提取与主成分分析(PCA)
我们使用主成分分析(PCA)从音频数据中提取相关特征。PCA通过识别数据中最具信息量的特征来帮助降低维度,这可以提高模型性能和训练效率。
分类模型评估
为了建立基准并比较性能,我们在提取的特征上训练并评估了几种机器学习模型。这些模型包括K最近邻(KNN)、决策树、支持向量机(SVM)、Adaboost、逻辑回归和人工神经网络。通过在验证集上评估它们的准确性,我们可以比较不同的方法并找出哪种模型表现最佳。
安装
conda create -n sound python=3.10
conda acitvate sound
conda install librosa==0.10.1
conda install soundfile==0.12.1
conda install pandas
conda install streamlit
conda install seaborn
说明:
librosa
是一个用于音乐和音频分析的 Python 库。它提供了创建音乐信息检索系统所需的基本构建块,包括音频和音乐信号的时域、频域和时频域分析工具。librosa
特别适用于音乐信号处理,但也可以用于处理其他类型的音频信号。
soundfile
是一个用于读写音频文件的 Python 库,支持多种音频格式,包括 WAV、FLAC、OGG 等。它建立在 libsndfile
库之上,这是一个非常流行且高效的 C 库,用于处理音频文件。
Streamlit
是一个开源 Python 库,用于快速创建美观且交互式的 Web 应用程序。它特别适合数据科学家和分析师,因为它允许他们轻松地分享他们的分析和机器学习模型,而无需编写大量的前端代码。
seaborn
是一个基于matplotlib
的数据可视化库,提供了更高级的界面和美观的默认样式。使用seaborn
可以使数据可视化更加简单和吸引人。
资源
music_classification.ipynb
music_classification.ipynb:该文件作为音频流派分类的核心代码库,实现了分类任务的各种算法和流程。
genre_classifier.keras
genre_classifier.keras:该文件存储了人工神经网络(ANN)模型的预训练权重和偏差,使得主代码文件在执行音频流派分类时能够更快运行。
Mid-Progress Report.pdf
Mid-Progress Report.pdf:该文件提供了所使用数据集的详细描述,并概述了实现音乐流派分类的拟议方法。
model_history.pkl
model_history.pkl:它记录了人工神经网络模型的历史,使得可以在多个周期内可视化损失和准确性曲线。
pca.sav
pca.sav:它保留了在GTzan数据集上训练的主成分分析(PCA)模型,用于在Web应用程序中转换任何新的音频文件。
prediction_web_app.py
prediction_web_app.py:一个交互式的Web应用程序,展示了表现最佳的模型,允许用户检查他们上传的任何音频文件的流派。
scaler.sav
scaler.sav:它保留了在GTzan数据集上训练的MinMaxScaler模型,用于在Web应用程序中转换任何新的音频文件。
trained_model.sav
trained_model.sav:它保存了表现最佳的模型,用于在Web应用程序内预测新音频文件的流派,确保准确高效的分类。
report.pdf
report.pdf:它详细解释了到目前为止所做的所有工作,包括数据集解释、实施的方法、使用的库和技术栈等。
运行
运行交互式的Web应用程序:prediction_web_app.py,展示了表现最佳的模型,允许用户检查他们上传的任何音频文件的流派。
在工程目录下输入:
streamlit run prediction_web_app.py
在浏览器中输入:http://localhost:8501/
通过页面选择一个wave音频文件。
运行 music_classification.ipynb。该Jupyter Notebook 文件作为音频流派分类的核心代码库,实现了分类任务的各种算法和流程。
四、获取案例套件
文件包大小:1,400 MB
需要登录后才允许下载文件包。登录