Openjmla
O
Openjmla
Developed by UniMus
OpenJMLA 是一个零样本音乐标签系统,通过联合音乐和语言注意力模型解决开放集音乐标签问题。
Downloads 116
Release Time : 12/5/2023
Model Overview
OpenJMLA 旨在解决开放集音乐标签问题,通过联合音乐和语言注意力(JMLA)模型实现零样本音乐标签系统,在相关数据集上取得了优异的成绩。
Model Features
开放集音乐标签
解决了传统封闭集音乐标签无法推广到新标签的问题。
创新的模型架构
结合音频编码器和语言解码器,引入预感知器重采样器和密集注意力连接。
大规模数据集
使用互联网收集的音乐和描述数据,并通过 ChatGPT 进行形式化和多样化处理。
优异的性能
在 GTZAN 数据集上实现了 64.82% 的零样本音频标签准确率。
Model Capabilities
音乐标签生成
音乐描述生成
零样本学习
Use Cases
音乐分类
流派识别
识别音乐的流派,如流行、摇滚等。
在 GTZAN 数据集上准确率 64.82%
情绪分析
分析音乐的情绪,如忧郁、快乐等。
音乐推荐
场景匹配
根据音乐标签推荐适合的场景,如酒吧、运动等。
🚀 统一音乐项目:OpenJMLA
统一音乐项目 OpenJMLA 旨在解决开放集音乐标签问题,通过联合音乐和语言注意力(JMLA)模型实现零样本音乐标签系统,在相关数据集上取得了优异的成绩。
🚀 快速开始
安装依赖
以下是安装项目所需依赖的命令:
conda create -name SpectPrompt python=3.9
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
pip install transformers datasets librosa einops_exts einops mmcls peft ipdb torchlibrosa
pip install -U openmim
mim install mmcv==1.7.1
使用🤗 Transformers 进行推理
使用 OpenJMLA 进行推理非常简单,只需输入以下几行代码:
from transformers import AutoModel, AutoTokenizer
import torch
import numpy as np
model = AutoModel.from_pretrained('UniMus/OpenJMLA', trust_remote_code=True)
device = model.device
# sample rate: 16k
music_path = '/path/to/music.wav'
# 1. get logmelspectrogram
# get the file wav_to_mel.py from https://github.com/taugastcn/SpectPrompt.git
from wav_to_mel import wav_to_mel
lms = wav_to_mel(music_path)
import os
from torch.nn.utils.rnn import pad_sequence
import random
# get the file transforms.py from https://github.com/taugastcn/SpectPrompt.git
from transforms import Normalize, SpecRandomCrop, SpecPadding, SpecRepeat
transforms = [ Normalize(-4.5, 4.5), SpecRandomCrop(target_len=2992), SpecPadding(target_len=2992), SpecRepeat() ]
lms = lms.numpy()
for trans in transforms:
lms = trans(lms)
# 2. template of input
input_dic = dict()
input_dic['filenames'] = [music_path.split('/')[-1]]
input_dic['ans_crds'] = [0]
input_dic['audio_crds'] = [0]
input_dic['attention_mask'] = torch.tensor([[1, 1, 1, 1, 1]]).to(device)
input_dic['input_ids'] = torch.tensor([[1, 694, 5777, 683, 13]]).to(device)
input_dic['spectrogram'] = torch.from_numpy(lms).unsqueeze(dim=0).to(device)
# 3. generation
model.eval()
gen_ids = model.forward_test(input_dic)
gen_text = model.neck.tokenizer.batch_decode(gen_ids.clip(0))
# 4. Post-processing
# Given that the training data may contain biases, the generated texts might need some straightforward post-processing to ensure accuracy.
# In future versions, we will enhance the quality of the data.
gen_text = gen_text[0].split('<s>')[-1].split('\n')[0].strip()
gen_text = gen_text.replace(' in Chinese','')
gen_text = gen_text.replace(' Chinese','')
print(gen_text)
✨ 主要特性
- 解决开放集音乐标签问题:以往的音乐标签研究主要集中在封闭集音乐标签任务上,无法推广到新标签。本项目提出的零样本音乐标签系统通过联合音乐和语言注意力(JMLA)模型,有效解决了开放集音乐标签问题。
- 创新的模型架构:JMLA 模型由一个基于预训练掩码自编码器的音频编码器和一个基于 Falcon7B 的解码器组成。引入了预感知器重采样器将任意长度的音频转换为固定长度的嵌入,并在编码器和解码器层之间引入了密集注意力连接,以改善信息流动。
- 大规模数据集:从互联网上收集了大规模的音乐和描述数据集,并使用 ChatGPT 将原始描述转换为形式化和多样化的描述,用于训练 JMLA 模型。
- 优异的性能:在 GTZAN 数据集上实现了 64.82% 的零样本音频标签准确率,优于以往的零样本系统,并在 FMA 和 MagnaTagATune 数据集上取得了与以往系统相当的结果。
📦 安装指南
按照以下步骤安装项目所需的依赖:
- 创建一个名为 SpectPrompt 的 conda 环境,Python 版本为 3.9:
conda create -name SpectPrompt python=3.9
- 安装 PyTorch 及其相关库:
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
- 安装其他依赖库:
pip install transformers datasets librosa einops_exts einops mmcls peft ipdb torchlibrosa
- 安装 OpenMIM 并使用它安装 MMCV:
pip install -U openmim
mim install mmcv==1.7.1
💻 使用示例
基础用法
以下是一个使用 OpenJMLA 进行推理的简单示例:
from transformers import AutoModel, AutoTokenizer
import torch
import numpy as np
model = AutoModel.from_pretrained('UniMus/OpenJMLA', trust_remote_code=True)
device = model.device
# sample rate: 16k
music_path = '/path/to/music.wav'
# 1. get logmelspectrogram
# get the file wav_to_mel.py from https://github.com/taugastcn/SpectPrompt.git
from wav_to_mel import wav_to_mel
lms = wav_to_mel(music_path)
import os
from torch.nn.utils.rnn import pad_sequence
import random
# get the file transforms.py from https://github.com/taugastcn/SpectPrompt.git
from transforms import Normalize, SpecRandomCrop, SpecPadding, SpecRepeat
transforms = [ Normalize(-4.5, 4.5), SpecRandomCrop(target_len=2992), SpecPadding(target_len=2992), SpecRepeat() ]
lms = lms.numpy()
for trans in transforms:
lms = trans(lms)
# 2. template of input
input_dic = dict()
input_dic['filenames'] = [music_path.split('/')[-1]]
input_dic['ans_crds'] = [0]
input_dic['audio_crds'] = [0]
input_dic['attention_mask'] = torch.tensor([[1, 1, 1, 1, 1]]).to(device)
input_dic['input_ids'] = torch.tensor([[1, 694, 5777, 683, 13]]).to(device)
input_dic['spectrogram'] = torch.from_numpy(lms).unsqueeze(dim=0).to(device)
# 3. generation
model.eval()
gen_ids = model.forward_test(input_dic)
gen_text = model.neck.tokenizer.batch_decode(gen_ids.clip(0))
# 4. Post-processing
# Given that the training data may contain biases, the generated texts might need some straightforward post-processing to ensure accuracy.
# In future versions, we will enhance the quality of the data.
gen_text = gen_text[0].split('<s>')[-1].split('\n')[0].strip()
gen_text = gen_text.replace(' in Chinese','')
gen_text = gen_text.replace(' Chinese','')
print(gen_text)
示例音乐及标签
- 音乐链接:https://www.youtube.com/watch?v=Q_yuO8UNGmY
- 标签信息:
- 乐器:人声、钢琴、弦乐
- 流派:流行
- 主题:心碎
- 情绪:忧郁
- 时代:当代
- 节奏:快
- 最佳场景:一个昏暗的小酒吧。这首歌的忧郁情绪将与舞台灵感的旋律相得益彰。
📚 详细文档
本项目是 JMLA 的重新实现。关于 JMLA 模型的详细信息,请参考上述论文。
🔧 技术细节
模型架构
JMLA 模型由一个基于预训练掩码自编码器的音频编码器和一个基于 Falcon7B 的解码器组成。
- 音频编码器:使用预训练的掩码自编码器对音频进行编码。
- 解码器:使用 Falcon7B 作为解码器。
- 预感知器重采样器:将任意长度的音频转换为固定长度的嵌入。
- 密集注意力连接:在编码器和解码器层之间引入密集注意力连接,以改善信息流动。
数据集
从互联网上收集了大规模的音乐和描述数据集,并使用 ChatGPT 将原始描述转换为形式化和多样化的描述,用于训练 JMLA 模型。
训练和评估
在 GTZAN、FMA 和 MagnaTagATune 等数据集上进行训练和评估。在 GTZAN 数据集上实现了 64.82% 的零样本音频标签准确率,优于以往的零样本系统,并在 FMA 和 MagnaTagATune 数据集上取得了与以往系统相当的结果。
📄 许可证
本项目采用 CC 许可证。
📚 引用
如果您在研究中发现我们的论文和代码有用,请考虑给项目加星并引用:
@article{JMLA,
title={JOINT MUSIC AND LANGUAGE ATTENTION MODELS FOR ZERO-SHOT MUSIC TAGGING},
author={Xingjian Du, Zhesong Yu, Jiaju Lin, Bilei Zhu, Qiuqiang Kong},
journal={arXiv preprint arXiv:2310.10159},
year={2023}
}
项目图标
Phi 4 Multimodal Instruct
MIT
Phi-4-multimodal-instruct是一款轻量级开源多模态基础模型,融合了Phi-3.5和4.0模型的语言、视觉及语音研究数据。支持文本、图像和音频输入,生成文本输出,并具备128K token的上下文长度。
文本生成音频
Transformers Supports Multiple Languages

P
microsoft
584.02k
1,329
Ultravox V0 5 Llama 3 2 1b
MIT
Ultravox是一个基于Llama3.2-1B和Whisper-large-v3构建的多模态语音大语言模型,能够同时处理语音和文本输入。
文本生成音频
Transformers Supports Multiple Languages

U
fixie-ai
167.25k
21
Seamless M4t V2 Large
SeamlessM4T v2 是 Facebook 发布的大规模多语言多模态机器翻译模型,支持近100种语言的语音和文本翻译。
文本生成音频
Transformers Supports Multiple Languages

S
facebook
64.59k
821
Ultravox V0 3
MIT
Ultravox 是一个基于 Llama3.1-8B-Instruct 和 Whisper-small 构建的多模态语音大语言模型,能够同时处理语音和文本输入。
文本生成音频
Transformers English

U
fixie-ai
48.30k
17
Ultravox V0 5 Llama 3 1 8b
MIT
Ultravox是一款基于Llama3.1-8B-Instruct和whisper-large-v3-turbo构建的多模态语音大语言模型,能够同时处理语音和文本输入。
文本生成音频
Transformers Supports Multiple Languages

U
fixie-ai
17.86k
12
Hf Seamless M4t Medium
SeamlessM4T 是一个多语言翻译模型,支持语音和文本的输入输出,实现跨语言交流。
文本生成音频
Transformers

H
facebook
14.74k
30
Granite Speech 3.3 8b
Apache-2.0
专为自动语音识别(ASR)和自动语音翻译(AST)设计的紧凑高效语音语言模型,采用双阶段设计处理音频和文本
文本生成音频
Transformers English

G
ibm-granite
5,532
35
Voila Tokenizer
MIT
Voila是一个大型语音-语言基础模型系列,旨在提升人机交互体验,支持多种音频任务和语言。
文本生成音频
Transformers Supports Multiple Languages

V
maitrix-org
4,912
3
Hf Seamless M4t Large
SeamlessM4T 是一个支持多语言语音和文本翻译的统一模型,能够实现语音到语音、语音到文本、文本到语音和文本到文本的翻译任务。
文本生成音频
Transformers

H
facebook
4,648
57
Minicpm O 2 6 Int4
MiniCPM-o 2.6的int4量化版本,显著降低GPU显存占用,支持多模态处理能力。
文本生成音频
Transformers Other

M
openbmb
4,249
42
Featured Recommended AI Models
Llama 3 Typhoon V1.5x 8b Instruct
专为泰语设计的80亿参数指令模型,性能媲美GPT-3.5-turbo,优化了应用场景、检索增强生成、受限生成和推理任务
大型语言模型
Transformers Supports Multiple Languages

L
scb10x
3,269
16
Cadet Tiny
Openrail
Cadet-Tiny是一个基于SODA数据集训练的超小型对话模型,专为边缘设备推理设计,体积仅为Cosmo-3B模型的2%左右。
对话系统
Transformers English

C
ToddGoldfarb
2,691
6
Roberta Base Chinese Extractive Qa
基于RoBERTa架构的中文抽取式问答模型,适用于从给定文本中提取答案的任务。
问答系统 Chinese
R
uer
2,694
98