[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"tool-keunwoochoi--music-auto_tagging-keras":3,"similar-keunwoochoi--music-auto_tagging-keras":51},{"id":4,"github_repo":5,"name":6,"description_en":7,"description_zh":8,"ai_summary_zh":8,"readme_en":9,"readme_zh":10,"quickstart_zh":11,"use_case_zh":12,"hero_image_url":13,"owner_login":14,"owner_name":15,"owner_avatar_url":16,"owner_bio":17,"owner_company":18,"owner_location":19,"owner_email":20,"owner_twitter":14,"owner_website":21,"owner_url":22,"languages":23,"stars":28,"forks":29,"last_commit_at":30,"license":31,"difficulty_score":32,"env_os":33,"env_gpu":33,"env_ram":33,"env_deps":34,"category_tags":43,"github_topics":20,"view_count":45,"oss_zip_url":20,"oss_zip_packed_at":20,"status":46,"created_at":47,"updated_at":48,"faqs":49,"releases":50},3002,"keunwoochoi\u002Fmusic-auto_tagging-keras","music-auto_tagging-keras","Music auto-tagging models and trained weights in keras\u002Ftheano","music-auto_tagging-keras 是一个基于 Keras 框架开发的音乐自动标签开源项目，旨在利用深度学习模型自动识别音频文件的风格、情绪及乐器特征。它有效解决了传统音乐分类依赖人工标注、效率低下且成本高昂的痛点，能够直接从音频数据中提取特征并预测如“摇滚”、“爵士”、“欢快”或\"80 年代”等丰富标签。\n\n该项目主要面向 AI 研究人员、音频算法开发者以及对音乐信息检索感兴趣的技术人员。其核心亮点在于提供了多种预训练模型架构，包括经典的 MusicTaggerCNN（5 层 2D 卷积）和性能更优的 MusicTaggerCRNN（结合卷积与 GRU 循环神经网络），在百万歌曲数据集上训练得出，AUC 评分高达 0.86 以上。此外，项目还推荐了计算效率更高的 compact_cnn 模型作为现代替代方案。需要注意的是，由于部分旧模型依赖早期版本的 Keras 及 Theano 后端配置，使用者需具备一定的深度学习环境搭建能力，并根据文档调整版本兼容性，以便顺利运行示例代码或进行迁移学习研究。","# Music Auto-Tagger\nMusic auto-tagger using keras\n\n\n# WARNING! Alternatives available\n\n* IF YOU WANT A TAGGER, please also look at\n  - [compact_cnn](https:\u002F\u002Fgithub.com\u002Fkeunwoochoi\u002Fmusic-auto_tagging-keras\u002Ftree\u002Fmaster\u002Fcompact_cnn) \n* IF YOU WANT A FEATURE EXTRACTOR, lookg at either\n  - [compact_cnn](https:\u002F\u002Fgithub.com\u002Fkeunwoochoi\u002Fmusic-auto_tagging-keras\u002Ftree\u002Fmaster\u002Fcompact_cnn) \n  - [transfer learning music](https:\u002F\u002Fgithub.com\u002Fkeunwoochoi\u002Ftransfer_learning_music)\n\n..because `MusicTaggerCNN` and `MusicTaggerCRNN` is based on an old (and a bit incorrect) implementation of Batch Normalization of old Keras (thanks god it worked anyway), it's quite tricky to fix. \n\n## Keras Versions\n* use keras == 1.0.6 for `MusicTaggerCNN`.\n* use 1.2 >= keras > 1.0.6 for `MusicTaggerCRNN`. \n* use 1.2 >= keras >= 1.1 for `compact_cnn`.\n\n\n### The prerequisite -- READ IT!\n* You need [`keras`](http:\u002F\u002Fkeras.io) to run `example.py`.\n  * To use your own audio file, you need [`librosa`](http:\u002F\u002Flibrosa.github.io\u002Flibrosa\u002F).\n* The input data shape is `(None, channel, height, width)`, i.e. following theano convention. If you're using tensorflow as your backend, you should check out `~\u002F.keras\u002Fkeras.json` if `image_dim_ordering` is set to `th`, i.e.\n\n```json\n\"image_dim_ordering\": \"th\",\n```\n* To use `compact_cnn`, You need to install [Kapre](https:\u002F\u002Fgithub.com\u002Fkeunwoochoi\u002Fkapre).\n\n### Files (1)\nFor `MusicTaggerCNN` and `MusicTaggerCRNN`.\n\n* [example_tagging.py](https:\u002F\u002Fgithub.com\u002Fkeunwoochoi\u002Fmusic-auto_tagging-keras\u002Fblob\u002Fmaster\u002Fexample_tagging.py): tagging example, [example_feat_extract.py](https:\u002F\u002Fgithub.com\u002Fkeunwoochoi\u002Fmusic-auto_tagging-keras\u002Fblob\u002Fmaster\u002Fexample_feat_extract.py): feature extraction example\n* [music_tagger_cnn.py](https:\u002F\u002Fgithub.com\u002Fkeunwoochoi\u002Fmusic-auto_tagging-keras\u002Fblob\u002Fmaster\u002Fmusic_tagger_cnn.py), [music_tagger_crnn.py](https:\u002F\u002Fgithub.com\u002Fkeunwoochoi\u002Fmusic-auto_tagging-keras\u002Fblob\u002Fmaster\u002Fmusic_tagger_crnn.py): Models\n\n### Files (2)\nFor [compact_cnn](https:\u002F\u002Fgithub.com\u002Fkeunwoochoi\u002Fmusic-auto_tagging-keras\u002Ftree\u002Fmaster\u002Fcompact_cnn)\n* [`main.py`](https:\u002F\u002Fgithub.com\u002Fkeunwoochoi\u002Fmusic-auto_tagging-keras\u002Fblob\u002Fmaster\u002Fcompact_cnn\u002Fmain.py) for examples. \n* More info on the sub [`README.md`](https:\u002F\u002Fgithub.com\u002Fkeunwoochoi\u002Fmusic-auto_tagging-keras\u002Fblob\u002Fmaster\u002Fcompact_cnn\u002FREADME.md).\n\n\n### Structures\n\nLeft: compact_cnn CNN, music_tager_cnn. Right: music_tagger_crnn\n![alt text](https:\u002F\u002Fgithub.com\u002Fkeunwoochoi\u002Fmusic-auto_tagging-keras\u002Fblob\u002Fmaster\u002Fimgs\u002Fdiagrams.png \"structures\")\n\n#### MusicTaggerCNN\n * 5-layer 2D Convolutions\n * num_parameter: 865,950\n * AUC score of 0.8654\n * **WARNING** with keras >1.0.6, this model does not work properly.\n Please use MusicTaggerCRNN until it is updated!\n(FYI: with 3M parameter, a deeper ConvNet showed 0.8595 AUC.)\n\n#### MusicTaggerCRNN\n * 4-layer 2D Convolutions + 2 GRU \n * num_parameter: 396,786\n * AUC score: 0.8662\n\n### How was it trained?\n * Using 29.1s music files in [Million Song Dataset](http:\u002F\u002Flabrosa.ee.columbia.edu\u002Fmillionsong\u002F)\n * split setting: [A repo for split setting](https:\u002F\u002Fgithub.com\u002Fkeunwoochoi\u002FMSD_split_for_tagging\u002F) for an identical setting.\n * See [papers](#credits)\n * The tags are...\n\n```python\n['rock', 'pop', 'alternative', 'indie', 'electronic', 'female vocalists', \n'dance', '00s', 'alternative rock', 'jazz', 'beautiful', 'metal', \n'chillout', 'male vocalists', 'classic rock', 'soul', 'indie rock',\n'Mellow', 'electronica', '80s', 'folk', '90s', 'chill', 'instrumental',\n'punk', 'oldies', 'blues', 'hard rock', 'ambient', 'acoustic', 'experimental',\n'female vocalist', 'guitar', 'Hip-Hop', '70s', 'party', 'country', 'easy listening',\n'sexy', 'catchy', 'funk', 'electro' ,'heavy metal', 'Progressive rock',\n'60s', 'rnb', 'indie pop', 'sad', 'House', 'happy']\n```\n\n### Which is the better predictor?\n * UPDATE: The most efficient computation, use [`compact_cnn`](https:\u002F\u002Fgithub.com\u002Fkeunwoochoi\u002Fmusic-auto_tagging-keras\u002Ftree\u002Fmaster\u002Fcompact_cnn). Otherwise read below.\n * Training: `MusicTaggerCNN` is faster than `MusicTaggerCRNN` (wall-clock time)\n * Prediction: They are more or less the same. \n * Memory Usage: `MusicTaggerCRNN` have smaller number of trainable parameters. Actually you can even decreases the number of feature maps. The `MusicTaggerCRNN` still works quite well in the case - i.e., the current setting is a little bit rich (or redundant). With `MusicTaggerCNN`, you will see the performance decrease if you reduce down the parameters. \n\nTherefore, if you just wanna use the pre-trained weights, use `MusicTaggerCNN`. If you wanna train by yourself, it's up to you. I would use `MusicTaggerCRNN` after downsizing it to, like, 0.2M parameters (then the training time would be similar to `MusicTaggerCNN`) in general. To reduce the size, change number of feature maps of convolution layers.\n\n### Which is the better feature extractor?\nBy setting `include_top=False`, you can get 256-dim (`MusicTaggerCNN`) or 32-dim (`MusicTaggerCRNN`) feature representation.\n\nIn general, I would recommend to use `MusicTaggerCRNN` and 32-dim feature as for predicting 50 tags, 256 features actually sound bit too large. I haven't looked into 256-dim feature but only 32-dim features. I thought of using PCA to reduce the dimension more, but ended up not applying it because `mean(abs(recovered - original) \u002F original)` are `.12` (dim: 32->16), `.05` (dim: 32->24) - which don't seem good enough.\n\nProbably the 256-dim features are redundant (which then you can reduce them down effectively with PCA), or they just include more information than 32-dim ones (e.g., features in different hierarchical levels). If the dimension size would not matter, it's worth choosing 256-dim ones. \n\n### Usage\n```bash\n$ python example_tagging.py\n$ python example_feat_extract.py\n```\n\n### Result\n*theano, MusicTaggerCRNN*\n```python\ndata\u002Fbensound-cute.mp3\n[('jazz', '0.444'), ('instrumental', '0.151'), ('folk', '0.103'), ('Hip-Hop', '0.103'), ('ambient', '0.077')]\n[('guitar', '0.068'), ('rock', '0.058'), ('acoustic', '0.054'), ('experimental', '0.051'), ('electronic', '0.042')]\n\ndata\u002Fbensound-actionable.mp3\n[('jazz', '0.416'), ('instrumental', '0.181'), ('Hip-Hop', '0.085'), ('folk', '0.085'), ('rock', '0.081')]\n[('ambient', '0.068'), ('guitar', '0.062'), ('Progressive rock', '0.048'), ('experimental', '0.046'), ('acoustic', '0.046')]\n\ndata\u002Fbensound-dubstep.mp3\n[('Hip-Hop', '0.245'), ('rock', '0.183'), ('alternative', '0.081'), ('electronic', '0.076'), ('alternative rock', '0.053')]\n[('metal', '0.051'), ('indie', '0.028'), ('instrumental', '0.027'), ('electronica', '0.024'), ('hard rock', '0.023')]\n\ndata\u002Fbensound-thejazzpiano.mp3\n[('jazz', '0.299'), ('instrumental', '0.174'), ('electronic', '0.089'), ('ambient', '0.061'), ('chillout', '0.052')]\n[('rock', '0.044'), ('guitar', '0.044'), ('funk', '0.033'), ('chill', '0.032'), ('Progressive rock', '0.029')]\n```\n\n### And...\n\n* More info - CNN: \n  * [on this paper](https:\u002F\u002Farxiv.org\u002Fabs\u002F1606.00298), or [blog post](https:\u002F\u002Fkeunwoochoi.wordpress.com\u002F2016\u002F06\u002F02\u002Fpaper-is-out-automatic-tagging-using-deep-convolutional-neural-networks\u002F).\n  * Also please take a look on the [slide](https:\u002F\u002Fgithub.com\u002Fkeunwoochoi\u002Fmusic-auto_tagging-keras\u002Fblob\u002Fmaster\u002Fslide-ismir-2016.pdf) at ismir 2016. It includes some results that are not in the paper.\n* More info - RNN:\n  * [paper](https:\u002F\u002Farxiv.org\u002Fabs\u002F1609.04243), or [blog post](https:\u002F\u002Fkeunwoochoi.wordpress.com\u002F2016\u002F09\u002F15\u002Fpaper-is-out-convolutional-recurrent-neural-networks-for-music-classification\u002F)\n\n### Reproduce the experiment\n* [A repo for split setting](https:\u002F\u002Fgithub.com\u002Fkeunwoochoi\u002FMSD_split_for_tagging\u002F) for an identical setting of experiments in [two papers](#credits). \n* Audio file: find someone around you who happened to have the preview clips. or you have to crawl the files. I would recommend you to crawl your colleagues...\n\n### Credits\n* Compact CNN: will be updated.\n* Convnet: [*Automatic Tagging using Deep Convolutional Neural Networks*](https:\u002F\u002Fscholar.google.co.kr\u002Fcitations?view_op=view_citation&hl=en&user=ZrqdSu4AAAAJ&citation_for_view=ZrqdSu4AAAAJ:3fE2CSJIrl8C), Keunwoo Choi, George Fazekas, Mark Sandler\n17th International Society for Music Information Retrieval Conference, New York, USA, 2016\n* ConvRNN : [*Convolutional Recurrent Neural Networks for Music Classification*](https:\u002F\u002Fscholar.google.co.kr\u002Fcitations?view_op=view_citation&hl=en&user=ZrqdSu4AAAAJ&sortby=pubdate&citation_for_view=ZrqdSu4AAAAJ:ULOm3_A8WrAC), Keunwoo Choi, George Fazekas, Mark Sandler, Kyunghyun Cho, arXiv:1609.04243, 2016\n\n* Test music items are from [http:\u002F\u002Fwww.bensound.com](http:\u002F\u002Fwww.bensound.com).\n","# 音乐自动标签器\n使用 Keras 的音乐自动标签器\n\n\n# 警告！有替代方案可用\n\n* 如果您想要一个标签器，请也看看：\n  - [compact_cnn](https:\u002F\u002Fgithub.com\u002Fkeunwoochoi\u002Fmusic-auto_tagging-keras\u002Ftree\u002Fmaster\u002Fcompact_cnn) \n* 如果您想要一个特征提取器，可以考虑以下两者之一：\n  - [compact_cnn](https:\u002F\u002Fgithub.com\u002Fkeunwoochoi\u002Fmusic-auto_tagging-keras\u002Ftree\u002Fmaster\u002Fcompact_cnn) \n  - [迁移学习音乐](https:\u002F\u002Fgithub.com\u002Fkeunwoochoi\u002Ftransfer_learning_music)\n\n由于 `MusicTaggerCNN` 和 `MusicTaggerCRNN` 是基于旧版 Keras 中批归一化的一个较旧且略有问题的实现（谢天谢地它仍然能工作），修复起来相当棘手。\n\n## Keras 版本\n* 对于 `MusicTaggerCNN`，请使用 keras == 1.0.6。\n* 对于 `MusicTaggerCRNN`，请使用 1.2 >= keras > 1.0.6。\n* 对于 `compact_cnn`，请使用 1.2 >= keras >= 1.1。\n\n\n### 前提条件——请务必阅读！\n* 您需要 [`keras`](http:\u002F\u002Fkeras.io) 才能运行 `example.py`。\n  * 如果要使用您自己的音频文件，还需要 [`librosa`](http:\u002F\u002Flibrosa.github.io\u002Flibrosa\u002F)。\n* 输入数据的形状是 `(None, channel, height, width)`，即遵循 Theano 的约定。如果您使用 TensorFlow 作为后端，应检查 `~\u002F.keras\u002Fkeras.json` 文件中是否将 `image_dim_ordering` 设置为 `th`，例如：\n\n```json\n\"image_dim_ordering\": \"th\",\n```\n* 要使用 `compact_cnn`, 您需要安装 [Kapre](https:\u002F\u002Fgithub.com\u002Fkeunwoochoi\u002Fkapre)。\n\n### 文件（1）\n适用于 `MusicTaggerCNN` 和 `MusicTaggerCRNN`。\n\n* [example_tagging.py](https:\u002F\u002Fgithub.com\u002Fkeunwoochoi\u002Fmusic-auto_tagging-keras\u002Fblob\u002Fmaster\u002Fexample_tagging.py)：标签示例；[example_feat_extract.py](https:\u002F\u002Fgithub.com\u002Fkeunwoochoi\u002Fmusic-auto_tagging-keras\u002Fblob\u002Fmaster\u002Fexample_feat_extract.py)：特征提取示例\n* [music_tagger_cnn.py](https:\u002F\u002Fgithub.com\u002Fkeunwoochoi\u002Fmusic-auto_tagging-keras\u002Fblob\u002Fmaster\u002Fmusic_tagger_cnn.py)、[music_tagger_crnn.py](https:\u002F\u002Fgithub.com\u002Fkeunwoochoi\u002Fmusic-auto_tagging-keras\u002Fblob\u002Fmaster\u002Fmusic_tagger_crnn.py)：模型\n\n### 文件（2）\n适用于 [compact_cnn](https:\u002F\u002Fgithub.com\u002Fkeunwoochoi\u002Fmusic-auto_tagging-keras\u002Ftree\u002Fmaster\u002Fcompact_cnn)\n* [`main.py`](https:\u002F\u002Fgithub.com\u002Fkeunwoochoi\u002Fmusic-auto_tagging-keras\u002Fblob\u002Fmaster\u002Fcompact_cnn\u002Fmain.py) 提供示例。\n* 更多信息请参阅子目录中的 [`README.md`](https:\u002F\u002Fgithub.com\u002Fkeunwoochoi\u002Fmusic-auto_tagging-keras\u002Fblob\u002Fmaster\u002Fcompact_cnn\u002FREADME.md)。\n\n\n### 结构图\n\n左：compact_cnn CNN、music_tager_cnn。右：music_tagger_crnn\n![alt text](https:\u002F\u002Fgithub.com\u002Fkeunwoochoi\u002Fmusic-auto_tagging-keras\u002Fblob\u002Fmaster\u002Fimgs\u002Fdiagrams.png \"结构图\")\n\n#### MusicTaggerCNN\n * 5 层 2D 卷积\n * 参数量：865,950\n * AUC 分数：0.8654\n * **警告** 当使用 keras >1.0.6 时，此模型无法正常工作。\n 请在更新之前使用 MusicTaggerCRNN！\n（补充说明：使用 300 万参数的更深层卷积神经网络显示出 0.8595 的 AUC。）\n\n#### MusicTaggerCRNN\n * 4 层 2D 卷积 + 2 个 GRU\n * 参数量：396,786\n * AUC 分数：0.8662\n\n### 训练过程是怎样的？\n * 使用 [Million Song Dataset](http:\u002F\u002Flabrosa.ee.columbia.edu\u002Fmillionsong\u002F) 中的 29.1 秒音乐文件\n * 划分设置：[用于划分设置的仓库](https:\u002F\u002Fgithub.com\u002Fkeunwoochoi\u002FMSD_split_for_tagging\u002F) 提供了完全相同的设置。\n * 参见 [论文](#credits)\n * 标签如下……\n\n```python\n['摇滚', '流行', '另类', '独立', '电子', '女声主唱', \n'舞曲', '00年代', '另类摇滚', '爵士', '优美', '金属', \n'轻松', '男声主唱', '经典摇滚', '灵魂乐', '独立摇滚',\n'舒缓', '电子音乐', '80年代', '民谣', '90年代', '休闲', '纯音乐',\n'朋克', '老歌', '布鲁斯', '硬摇滚', '氛围音乐', '原声', '实验',\n'女歌手', '吉他', '嘻哈', '70年代', '派对', '乡村', '轻松听',\n'性感', '抓耳', '放克', '电音' ,'重金属', '前卫摇滚',\n'60年代', 'R&B', '独立流行', '伤感', '浩室', '欢快']\n```\n\n### 哪个预测效果更好？\n * 更新：如果追求最高效的计算，请使用 [`compact_cnn`](https:\u002F\u002Fgithub.com\u002Fkeunwoochoi\u002Fmusic-auto_tagging-keras\u002Ftree\u002Fmaster\u002Fcompact_cnn)。否则请继续阅读下方内容。\n * 训练方面：`MusicTaggerCNN` 比 `MusicTaggerCRNN` 更快（实际耗时）。\n * 预测方面：两者相差不大。\n * 内存占用：`MusicTaggerCRNN` 的可训练参数较少。实际上，您甚至可以减少特征图的数量。在这种情况下，`MusicTaggerCRNN` 仍然表现良好——也就是说，当前的设置略显冗余。而使用 `MusicTaggerCNN` 时，如果减少参数数量，性能会明显下降。\n\n因此，如果您只想使用预训练权重，建议选择 `MusicTaggerCNN`。如果您想自行训练，则由您决定。我建议在将参数量缩减至约 20 万之后再使用 `MusicTaggerCRNN`（这样训练时间就会与 `MusicTaggerCNN` 相似）。要减小模型规模，只需调整卷积层的特征图数量即可。\n\n### 哪个更适合用作特征提取器？\n通过设置 `include_top=False`，您可以获得 256 维（`MusicTaggerCNN`）或 32 维（`MusicTaggerCRNN`）的特征表示。\n\n一般来说，我推荐使用 `MusicTaggerCRNN` 和 32 维特征来预测 50 个标签，因为 256 维特征显得有些过大。我只研究过 32 维特征，而没有深入探讨过 256 维特征。我曾考虑使用 PCA 进一步降维，但最终并未实施，原因是 `mean(abs(recovered - original) \u002F original)` 分别为 `.12`（维度从 32 降至 16）、`.05`（维度从 32 降至 24），这些结果并不理想。\n\n或许 256 维特征确实存在冗余（可以通过 PCA 有效压缩），或者它们包含的信息比 32 维特征更多（例如不同层次的特征）。如果维度大小不是关键因素，那么选择 256 维特征也是值得的。\n\n### 使用方法\n```bash\n$ python example_tagging.py\n$ python example_feat_extract.py\n```\n\n### 结果\n*theano, MusicTaggerCRNN*\n```python\ndata\u002Fbensound-cute.mp3\n[('爵士', '0.444'), ('纯音乐', '0.151'), ('民谣', '0.103'), ('嘻哈', '0.103'), ('氛围音乐', '0.077')]\n[('吉他', '0.068'), ('摇滚', '0.058'), ('原声', '0.054'), ('实验', '0.051'), ('电子音乐', '0.042')]\n\ndata\u002Fbensound-actionable.mp3\n[('爵士', '0.416'), ('纯音乐', '0.181'), ('嘻哈', '0.085'), ('民谣', '0.085'), ('摇滚', '0.081')]\n[('氛围音乐', '0.068'), ('吉他', '0.062'), ('前卫摇滚', '0.048'), ('实验', '0.046'), ('原声', '0.046')]\n\ndata\u002Fbensound-dubstep.mp3\n[('嘻哈', '0.245'), ('摇滚', '0.183'), ('另类', '0.081'), ('电子音乐', '0.076'), ('另类摇滚', '0.053')]\n[('金属', '0.051'), ('独立', '0.028'), ('纯音乐', '0.027'), ('电子音乐', '0.024'), ('硬摇滚', '0.023')]\n\ndata\u002Fbensound-thejazzpiano.mp3\n[('爵士', '0.299'), ('纯音乐', '0.174'), ('电子音乐', '0.089'), ('氛围音乐', '0.061'), ('轻松音乐', '0.052')]\n[('摇滚', '0.044'), ('吉他', '0.044'), ('放克', '0.033'), ('休闲', '0.032'), ('前卫摇滚', '0.029')]\n```\n\n### 还有……\n\n* 更多信息——CNN：\n  * 关于这篇论文：[arXiv链接](https:\u002F\u002Farxiv.org\u002Fabs\u002F1606.00298)，或[博客文章](https:\u002F\u002Fkeunwoochoi.wordpress.com\u002F2016\u002F06\u002F02\u002Fpaper-is-out-automatic-tagging-using-deep-convolutional-neural-networks\u002F)。\n  * 也请查看在 ISMIR 2016 上的[演示文稿](https:\u002F\u002Fgithub.com\u002Fkeunwoochoi\u002Fmusic-auto_tagging-keras\u002Fblob\u002Fmaster\u002Fslide-ismir-2016.pdf)。其中包含了一些论文中未提及的结果。\n* 更多信息——RNN：\n  * 论文：[arXiv链接](https:\u002F\u002Farxiv.org\u002Fabs\u002F1609.04243)，或[博客文章](https:\u002F\u002Fkeunwoochoi.wordpress.com\u002F2016\u002F09\u002F15\u002Fpaper-is-out-convolutional-recurrent-neural-networks-for-music-classification\u002F)。\n\n### 复现实验\n* 一个用于划分数据集的仓库：[MSD_split_for_tagging](https:\u002F\u002Fgithub.com\u002Fkeunwoochoi\u002FMSD_split_for_tagging\u002F)，提供了与[两篇论文](#credits)中完全一致的实验设置。\n* 音频文件：可以找身边恰好拥有试听片段的人获取；或者自行抓取文件。我建议你可以从同事那里开始收集……\n\n### 致谢\n* 紧凑型CNN：待更新。\n* 卷积神经网络：[*使用深度卷积神经网络进行自动标签*](https:\u002F\u002Fscholar.google.co.kr\u002Fcitations?view_op=view_citation&hl=en&user=ZrqdSu4AAAAJ&citation_for_view=ZrqdSu4AAAAJ:3fE2CSJIrl8C)，崔根宇、乔治·法泽卡斯、马克·桑德勒  \n  第17届国际音乐信息检索学会会议，美国纽约，2016年  \n* 卷积循环神经网络：[*用于音乐分类的卷积循环神经网络*](https:\u002F\u002Fscholar.google.co.kr\u002Fcitations?view_op=view_citation&hl=en&user=ZrqdSu4AAAAJ&sortby=pubdate&citation_for_view=ZrqdSu4AAAAJ:ULOm3_A8WrAC)，崔根宇、乔治·法泽卡斯、马克·桑德勒、曹庆贤，arXiv:1609.04243，2016年\n\n* 测试音乐素材来自[http:\u002F\u002Fwww.bensound.com](http:\u002F\u002Fwww.bensound.com)。","# music-auto_tagging-keras 快速上手指南\n\n## 环境准备\n\n### 系统要求\n- **Python**: 建议 Python 2.7 或 3.6+（取决于 Keras 版本兼容性）\n- **后端框架**: Theano 或 TensorFlow\n- **核心依赖**:\n  - `Keras`: 不同模型对应不同版本（见下文）\n  - `librosa`: 用于加载和处理自定义音频文件\n  - `Kapre`: 仅在使用 `compact_cnn` 模型时需要\n\n### 版本兼容性警告\n本项目包含多个模型，对 Keras 版本有严格要求：\n- **MusicTaggerCNN**: 必须使用 `keras == 1.0.6`（高版本会导致 Batch Normalization 错误）。\n- **MusicTaggerCRNN**: 适用 `1.0.6 \u003C keras \u003C= 1.2`。\n- **compact_cnn** (推荐): 适用 `1.1 \u003C= keras \u003C= 1.2`，计算效率最高。\n\n> **注意**: 输入数据格式遵循 Theano 约定 `(None, channel, height, width)`。如果你使用 TensorFlow 作为后端，请确保修改 `~\u002F.keras\u002Fkeras.json` 配置：\n> ```json\n> \"image_dim_ordering\": \"th\"\n> ```\n\n## 安装步骤\n\n1. **安装基础依赖**\n   建议使用国内镜像源加速安装（如清华源）：\n   ```bash\n   pip install -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple keras==1.2.0 librosa\n   ```\n   *注：若需使用 `compact_cnn`，还需安装 Kapre：*\n   ```bash\n   pip install -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple git+https:\u002F\u002Fgithub.com\u002Fkeunwoochoi\u002Fkapre.git\n   ```\n\n2. **克隆项目代码**\n   ```bash\n   git clone https:\u002F\u002Fgithub.com\u002Fkeunwoochoi\u002Fmusic-auto_tagging-keras.git\n   cd music-auto_tagging-keras\n   ```\n\n3. **下载预训练权重**\n   项目本身不包含权重文件，需根据你选择的模型（CNN 或 CRNN）从原作者提供的链接下载 `.h5` 文件，并放置在项目根目录或代码指定的路径下。\n\n## 基本使用\n\n本项目提供了两个主要功能的示例脚本：自动打标（Tagging）和特征提取（Feature Extraction）。\n\n### 1. 音乐自动打标\n运行以下命令对示例音频进行风格预测：\n```bash\npython example_tagging.py\n```\n**输出示例**：\n脚本将输出音频文件最可能的标签及其置信度，例如：\n```text\ndata\u002Fbensound-cute.mp3\n[('jazz', '0.444'), ('instrumental', '0.151'), ('folk', '0.103'), ...]\n```\n支持识别的标签包括：rock, pop, jazz, electronic, Hip-Hop 等共 50 种风格。\n\n### 2. 特征提取\n若需将音乐转换为向量特征（用于其他机器学习任务），运行：\n```bash\npython example_feat_extract.py\n```\n- **MusicTaggerCNN**: 输出 256 维特征向量。\n- **MusicTaggerCRNN**: 输出 32 维特征向量（推荐，冗余度更低）。\n\n### 进阶提示\n- **推荐模型**: 除非有特定历史版本需求，否则建议优先使用 `compact_cnn` 目录下的模型，其计算效率更高且维护较好。\n- **自定义音频**: 修改示例脚本中的文件路径，即可处理本地任意音频文件（需确保已安装 `librosa`）。","一家初创音乐流媒体平台的技术团队正面临海量无标签曲库的整理难题，急需为数十万首用户上传的音频自动补充流派、情绪及年代等元数据以优化推荐系统。\n\n### 没有 music-auto_tagging-keras 时\n- **人工成本高昂**：运营团队需手动聆听并标记每首歌曲，面对数万首新歌入库，耗时数周且极易疲劳出错。\n- **标签标准不一**：不同审核人员对“独立摇滚”或“忧郁”等主观标签的理解存在偏差，导致数据库风格混乱，推荐算法准确率低下。\n- **历史数据沉睡**：大量老旧音频文件因缺乏结构化标签（如年代、乐器、人声性别），无法被检索引擎有效索引，沦为死数据。\n- **技术门槛受限**：团队若想自研深度学习模型，需从头构建复杂的 CNN 或 CRNN 架构并寻找百万级歌曲数据集训练，研发周期长达数月。\n\n### 使用 music-auto_tagging-keras 后\n- **自动化高效处理**：直接调用预训练的 MusicTaggerCRNN 或 compact_cnn 模型，批量输入音频即可秒级输出包括摇滚、电子、80 年代等 50+ 维度的精准标签。\n- **标准化数据输出**：基于百万歌曲数据集（Million Song Dataset）训练的权重确保了标签定义的一致性，显著提升了用户个性化推荐的匹配度。\n- **激活存量资产**：快速为历史曲库补充了“器乐”、“女声”、“氛围”等细粒度特征，使老歌能通过多维筛选重新获得曝光机会。\n- **低代码快速落地**：依托 Keras 框架和现成示例脚本，工程师无需深究底层数学原理，仅需配置 Librosa 和 Kapre 即可在一天内完成部署集成。\n\nmusic-auto_tagging-keras 将原本需要数周的人工标注工作压缩至小时级，用成熟的深度学习模型低成本解决了音乐元数据标准化的核心痛点。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fkeunwoochoi_music-auto_tagging-keras_b5b6a156.png","keunwoochoi","Keunwoo Choi","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002Fkeunwoochoi_3184cc2d.jpg","MIR, machine learning, music recommendation, LLMs.","Upstage","New York, USA",null,"http:\u002F\u002Fkeunwoochoi.github.io","https:\u002F\u002Fgithub.com\u002Fkeunwoochoi",[24],{"name":25,"color":26,"percentage":27},"Python","#3572A5",100,611,141,"2026-03-28T00:17:22","MIT",4,"未说明",{"notes":35,"python":33,"dependencies":36},"该工具基于非常旧的 Keras 版本（1.0.6-1.2），与现代深度学习环境兼容性较差。若使用 TensorFlow 作为后端，必须手动修改 ~\u002F.keras\u002Fkeras.json 配置文件，将 image_dim_ordering 设置为 'th' (Theano 维度顺序)。MusicTaggerCNN 模型在 Keras > 1.0.6 版本中无法正常工作。建议仅用于研究参考或复现旧论文结果，生产环境请考虑 README 中提到的替代方案 (compact_cnn 或 transfer_learning_music)。",[37,38,39,40,41,42],"keras==1.0.6 (MusicTaggerCNN)","1.0.6 \u003C keras \u003C= 1.2 (MusicTaggerCRNN)","1.1 \u003C= keras \u003C= 1.2 (compact_cnn)","librosa","Kapre (仅 compact_cnn 需要)","Theano 或 TensorFlow (作为 Keras 后端)",[44],"音频",2,"ready","2026-03-27T02:49:30.150509","2026-04-06T10:26:25.654151",[],[],[52,68,77,85,93,101],{"id":53,"name":54,"github_repo":55,"description_zh":56,"stars":57,"difficulty_score":45,"last_commit_at":58,"category_tags":59,"status":46},2268,"ML-For-Beginners","microsoft\u002FML-For-Beginners","ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程，旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周，包含 26 节精炼课程和 52 道配套测验，内容涵盖从基础概念到实际应用的完整流程，有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。\n\n无论是希望转型的开发者、需要补充算法背景的研究人员，还是对人工智能充满好奇的普通爱好者，都能从中受益。课程不仅提供了清晰的理论讲解，还强调动手实践，让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持，通过自动化机制提供了包括简体中文在内的 50 多种语言版本，极大地降低了全球不同背景用户的学习门槛。此外，项目采用开源协作模式，社区活跃且内容持续更新，确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路，ML-For-Beginners 将是理想的起点。",84991,"2026-04-05T10:45:23",[60,61,62,63,64,65,66,67,44],"图像","数据工具","视频","插件","Agent","其他","语言模型","开发框架",{"id":69,"name":70,"github_repo":71,"description_zh":72,"stars":73,"difficulty_score":74,"last_commit_at":75,"category_tags":76,"status":46},4128,"GPT-SoVITS","RVC-Boss\u002FGPT-SoVITS","GPT-SoVITS 是一款强大的开源语音合成与声音克隆工具，旨在让用户仅需极少量的音频数据即可训练出高质量的个性化语音模型。它核心解决了传统语音合成技术依赖海量录音数据、门槛高且成本大的痛点，实现了“零样本”和“少样本”的快速建模：用户只需提供 5 秒参考音频即可即时生成语音，或使用 1 分钟数据进行微调，从而获得高度逼真且相似度极佳的声音效果。\n\n该工具特别适合内容创作者、独立开发者、研究人员以及希望为角色配音的普通用户使用。其内置的友好 WebUI 界面集成了人声伴奏分离、自动数据集切片、中文语音识别及文本标注等辅助功能，极大地降低了数据准备和模型训练的技术门槛，让非专业人士也能轻松上手。\n\n在技术亮点方面，GPT-SoVITS 不仅支持中、英、日、韩、粤语等多语言跨语种合成，还具备卓越的推理速度，在主流显卡上可实现实时甚至超实时的生成效率。无论是需要快速制作视频配音，还是进行多语言语音交互研究，GPT-SoVITS 都能以极低的数据成本提供专业级的语音合成体验。",56375,3,"2026-04-05T22:15:46",[44],{"id":78,"name":79,"github_repo":80,"description_zh":81,"stars":82,"difficulty_score":74,"last_commit_at":83,"category_tags":84,"status":46},2863,"TTS","coqui-ai\u002FTTS","🐸TTS 是一款功能强大的深度学习文本转语音（Text-to-Speech）开源库，旨在将文字自然流畅地转化为逼真的人声。它解决了传统语音合成技术中声音机械生硬、多语言支持不足以及定制门槛高等痛点，让高质量的语音生成变得触手可及。\n\n无论是希望快速集成语音功能的开发者，还是致力于探索前沿算法的研究人员，亦或是需要定制专属声音的数据科学家，🐸TTS 都能提供得力支持。它不仅预置了覆盖全球 1100 多种语言的训练模型，让用户能够即刻上手，还提供了完善的工具链，支持用户利用自有数据训练新模型或对现有模型进行微调，轻松实现特定风格的声音克隆。\n\n在技术亮点方面，🐸TTS 表现卓越。其最新的 ⓍTTSv2 模型支持 16 种语言，并在整体性能上大幅提升，实现了低于 200 毫秒的超低延迟流式输出，极大提升了实时交互体验。此外，它还无缝集成了 🐶Bark、🐢Tortoise 等社区热门模型，并支持调用上千个 Fairseq 模型，展现了极强的兼容性与扩展性。配合丰富的数据集分析与整理工具，🐸TTS 已成为科研与生产环境中备受信赖的语音合成解决方案。",44971,"2026-04-03T14:47:02",[44,67,60],{"id":86,"name":87,"github_repo":88,"description_zh":89,"stars":90,"difficulty_score":74,"last_commit_at":91,"category_tags":92,"status":46},2375,"LocalAI","mudler\u002FLocalAI","LocalAI 是一款开源的本地人工智能引擎，旨在让用户在任意硬件上轻松运行各类 AI 模型，包括大语言模型、图像生成、语音识别及视频处理等。它的核心优势在于彻底打破了高性能计算的门槛，无需昂贵的专用 GPU，仅凭普通 CPU 或常见的消费级显卡（如 NVIDIA、AMD、Intel 及 Apple Silicon）即可部署和运行复杂的 AI 任务。\n\n对于担心数据隐私的用户而言，LocalAI 提供了“隐私优先”的解决方案，确保所有数据处理均在本地基础设施内完成，无需上传至云端。同时，它完美兼容 OpenAI、Anthropic 等主流 API 接口，这意味着开发者可以无缝迁移现有应用，直接利用本地资源替代云服务，既降低了成本又提升了可控性。\n\nLocalAI 内置了超过 35 种后端支持（如 llama.cpp、vLLM、Whisper 等），并集成了自主 AI 代理、工具调用及检索增强生成（RAG）等高级功能，且具备多用户管理与权限控制能力。无论是希望保护敏感数据的企业开发者、进行算法实验的研究人员，还是想要在个人电脑上体验最新 AI 技术的极客玩家，都能通过 LocalAI 获",44782,"2026-04-02T22:14:26",[60,44,66,64,67,61,63],{"id":94,"name":95,"github_repo":96,"description_zh":97,"stars":98,"difficulty_score":74,"last_commit_at":99,"category_tags":100,"status":46},3108,"bark","suno-ai\u002Fbark","Bark 是由 Suno 推出的开源生成式音频模型，能够根据文本提示创造出高度逼真的多语言语音、音乐、背景噪音及简单音效。与传统仅能朗读文字的语音合成工具不同，Bark 基于 Transformer 架构，不仅能模拟说话，还能生成笑声、叹息、哭泣等非语言声音，甚至能处理带有情感色彩和语气停顿的复杂文本，极大地丰富了音频表达的可能性。\n\n它主要解决了传统语音合成声音机械、缺乏情感以及无法生成非语音类音效的痛点，让创作者能通过简单的文字描述获得生动自然的音频素材。无论是需要为视频配音的内容创作者、探索多模态生成的研究人员，还是希望快速原型设计的开发者，都能从中受益。普通用户也可通过集成的演示页面轻松体验其神奇效果。\n\n技术亮点方面，Bark 支持商业使用（MIT 许可），并在近期更新中实现了显著的推理速度提升，同时提供了适配低显存 GPU 的版本，降低了使用门槛。此外，社区还建立了丰富的提示词库，帮助用户更好地驾驭模型生成特定风格的声音。只需几行 Python 代码，即可将创意文本转化为高质量音频，是连接文字与声音世界的强大桥梁。",39067,"2026-04-04T03:33:35",[44],{"id":102,"name":103,"github_repo":104,"description_zh":105,"stars":106,"difficulty_score":107,"last_commit_at":108,"category_tags":109,"status":46},3788,"airi","moeru-ai\u002Fairi","airi 是一款开源的本地化 AI 伴侣项目，旨在将虚拟角色（如“二次元老婆”或赛博生命）带入用户的现实世界。它的核心目标是复刻并超越知名 AI 主播 Neuro-sama 的能力，让用户能够拥有完全自主掌控、可私有化部署的智能伙伴。\n\nairi 主要解决了用户对高度定制化、具备情感交互能力且数据隐私安全的 AI 角色的需求。不同于依赖云端服务的通用助手，airi 允许用户在本地运行，不仅保护了对话隐私，还赋予了用户定义角色性格与灵魂的自由。它支持实时语音聊天，甚至能直接参与《我的世界》（Minecraft）和《异星工厂》（Factorio）等游戏，实现了从单纯对话到共同娱乐的跨越。\n\n这款工具非常适合喜爱虚拟角色的普通用户、希望搭建个性化 AI 陪伴的技术爱好者，以及研究多模态交互的开发者。其独特的技术亮点在于跨平台支持（涵盖 Web、macOS 和 Windows）以及强大的游戏交互能力，让 AI 不仅能“说”，还能“玩”。通过容器化的灵魂设计，airi 为每个人创造专属数字生命提供了可能，让虚拟陪伴变得更加真实且触手可及。",37086,1,"2026-04-05T10:54:25",[66,44,64]]