Musicgen Stereo Small
模型简介
模型特点
模型能力
使用案例
🚀 MusicGen - 立体声 - 小型 - 300M
MusicGen 是一个文本到音乐的模型,能够根据文本描述或音频提示生成高质量的音乐样本。本项目发布了一组支持立体声的模型,为音乐生成研究提供了更多可能。
🚀 快速开始
你可以使用 🤗 Transformers 库从 main
分支开始本地运行 MusicGen 立体声模型。以下是具体步骤:
- 首先安装 🤗 Transformers 库 和 scipy:
pip install --upgrade pip
pip install --upgrade git+https://github.com/huggingface/transformers.git scipy
- 通过
Text-to-Audio
(TTA) 管道运行推理。你可以使用几行代码通过 TTA 管道推理 MusicGen 模型!
import torch
import soundfile as sf
from transformers import pipeline
synthesiser = pipeline("text-to-audio", "facebook/musicgen-stereo-small", device="cuda:0", torch_dtype=torch.float16)
music = synthesiser("lo-fi music with a soothing melody", forward_params={"max_new_tokens": 256})
sf.write("musicgen_out.wav", music["audio"][0].T, music["sampling_rate"])
- 通过 Transformers 建模代码运行推理。你可以使用处理器 + 生成代码将文本转换为单声道 32 kHz 音频波形,以实现更精细的控制。
from transformers import AutoProcessor, MusicgenForConditionalGeneration
processor = AutoProcessor.from_pretrained("facebook/musicgen-stereo-small")
model = MusicgenForConditionalGeneration.from_pretrained("facebook/musicgen-stereo-small").to("cuda")
inputs = processor(
text=["80s pop track with bassy drums and synth", "90s rock song with loud guitars and heavy drums"],
padding=True,
return_tensors="pt",
).to("cuda")
audio_values = model.generate(**inputs, max_new_tokens=256)
- 在 ipynb 笔记本中收听音频样本:
from IPython.display import Audio
sampling_rate = model.config.audio_encoder.sampling_rate
Audio(audio_values[0].cpu().numpy(), rate=sampling_rate)
或者使用第三方库(如 soundfile
)将它们保存为 .wav
文件:
import soundfile as sf
sampling_rate = model.config.audio_encoder.sampling_rate
audio_values = audio_values.cpu().numpy()
sf.write("musicgen_out.wav", audio_values[0].T, sampling_rate)
更多关于使用 🤗 Transformers 库进行 MusicGen 模型推理的详细信息,请参考 MusicGen 文档。
✨ 主要特性
- 立体声支持:发布了一组支持立体声的模型,从单声道模型开始微调 200k 次更新。立体声通过从 EnCodec 模型获取 2 个令牌流,并使用延迟模式交错这些令牌来实现。
- 高质量音乐生成:能够根据文本描述或音频提示生成高质量的音乐样本。
- 单阶段自回归:MusicGen 是一个单阶段自回归 Transformer 模型,在 32kHz EnCodec 分词器上进行训练,具有 4 个码本,采样率为 50 Hz。与现有方法不同,它不需要自监督语义表示,并且可以一次性生成所有 4 个码本。
- 简单 API 和多模型支持:提供简单的 API 和 10 个预训练模型,包括不同大小和功能的模型。
📦 安装指南
使用 🤗 Transformers 库
pip install --upgrade pip
pip install --upgrade git+https://github.com/huggingface/transformers.git scipy
使用 Audiocraft 库
pip install git+https://github.com/facebookresearch/audiocraft.git
确保安装 ffmpeg
:
apt get install ffmpeg
💻 使用示例
基础用法
通过 Text-to-Audio
(TTA) 管道运行推理:
import torch
import soundfile as sf
from transformers import pipeline
synthesiser = pipeline("text-to-audio", "facebook/musicgen-stereo-small", device="cuda:0", torch_dtype=torch.float16)
music = synthesiser("lo-fi music with a soothing melody", forward_params={"max_new_tokens": 256})
sf.write("musicgen_out.wav", music["audio"][0].T, music["sampling_rate"])
高级用法
通过 Transformers 建模代码运行推理:
from transformers import AutoProcessor, MusicgenForConditionalGeneration
processor = AutoProcessor.from_pretrained("facebook/musicgen-stereo-small")
model = MusicgenForConditionalGeneration.from_pretrained("facebook/musicgen-stereo-small").to("cuda")
inputs = processor(
text=["80s pop track with bassy drums and synth", "90s rock song with loud guitars and heavy drums"],
padding=True,
return_tensors="pt",
).to("cuda")
audio_values = model.generate(**inputs, max_new_tokens=256)
📚 详细文档
模型详情
属性 | 详情 |
---|---|
开发组织 | Meta AI 的 FAIR 团队 |
模型日期 | 2023 年 4 月至 2023 年 5 月训练 |
模型版本 | 版本 1 |
模型类型 | 由用于音频分词的 EnCodec 模型和基于 Transformer 架构的自回归语言模型组成,有不同大小(300M、1.5B 和 3.3B 参数)和两种变体(文本到音乐生成和旋律引导音乐生成) |
参考论文 | Simple and Controllable Music Generation |
引用详情 | @misc{copet2023simple, title={Simple and Controllable Music Generation}, author={Jade Copet and Felix Kreuk and Itai Gat and Tal Remez and David Kant and Gabriel Synnaeve and Yossi Adi and Alexandre Défossez}, year={2023}, eprint={2306.05284}, archivePrefix={arXiv}, primaryClass={cs.SD}} |
许可证 | 代码遵循 MIT 许可证,模型权重遵循 CC-BY-NC 4.0 许可证 |
问题反馈 | 可通过项目的 Github 仓库 发送问题和评论,或创建 issue |
预期用途
- 主要预期用途:MusicGen 主要用于基于人工智能的音乐生成研究,包括探索和理解生成模型的局限性以改进科学现状,以及让机器学习爱好者通过文本或旋律引导生成音乐来了解生成式 AI 模型的当前能力。
- 主要预期用户:主要用户为音频、机器学习和人工智能领域的研究人员,以及希望更好理解这些模型的爱好者。
- 超出范围的用例:在未进行进一步风险评估和缓解的情况下,不应将该模型用于下游应用。不得使用该模型故意创建或传播会给人们造成敌对或疏离环境的音乐作品。
评估指标
- 模型性能指标:使用以下客观指标在标准音乐基准上评估模型:基于预训练音频分类器(VGGish)提取的特征计算的 Frechet 音频距离;基于预训练音频分类器(PaSST)提取的标签分布计算的 Kullback-Leibler 散度;基于预训练 CLAP 模型提取的音频嵌入和文本嵌入计算的 CLAP 分数。此外,还进行了人类参与者的定性研究,从音乐样本的整体质量、与输入文本的相关性以及旋律引导音乐生成的旋律遵循度等方面评估模型性能。
- 决策阈值:不适用。
评估数据集
模型在 MusicCaps 基准 和一个领域内保留评估集上进行评估,评估集与训练集无艺术家重叠。
训练数据集
模型在许可数据上进行训练,数据来源包括 Meta Music Initiative Sound Collection、Shutterstock 音乐集 和 Pond5 音乐集。
评估结果
以下是发布的模型在 MusicCaps 上获得的客观指标:
模型 | Frechet 音频距离 | KLD | 文本一致性 | 色度余弦相似度 |
---|---|---|---|---|
facebook/musicgen-small | 4.88 | 1.42 | 0.27 | - |
facebook/musicgen-medium | 5.14 | 1.38 | 0.28 | - |
facebook/musicgen-large | 5.48 | 1.37 | 0.28 | - |
facebook/musicgen-melody | 4.93 | 1.41 | 0.27 | 0.44 |
局限性和偏差
- 数据方面:用于训练模型的数据源由音乐专业人士创建,并与权利持有者签订了法律协议。模型在 20K 小时的数据上进行训练,扩大数据集规模可能会进一步提高模型性能。
- 缓解措施:使用相应标签和最先进的音乐源分离方法(开源的 Hybrid Transformer for Music Source Separation (HT - Demucs))从数据源中去除人声。
- 局限性:模型无法生成逼真的人声;以英语描述进行训练,在其他语言中的表现不佳;对所有音乐风格和文化的表现不一致;有时会生成歌曲结尾并陷入沉默;有时难以确定哪种文本描述能产生最佳生成效果,可能需要进行提示工程。
- 偏差:数据源可能缺乏多样性,并非所有音乐文化在数据集中都得到平等代表。模型在各种音乐流派上的表现可能不一致,生成的样本会反映训练数据的偏差。
- 风险和危害:模型的偏差和局限性可能导致生成被认为有偏差、不适当或冒犯性的样本。
- 使用建议:用户必须了解模型的偏差、局限性和风险。MusicGen 是为可控音乐生成的人工智能研究而开发的模型,在未进行进一步调查和风险缓解的情况下,不应将其用于下游应用。
🔧 技术细节
MusicGen 是一个单阶段自回归 Transformer 模型,在 32kHz EnCodec 分词器上进行训练,具有 4 个码本,采样率为 50 Hz。与现有方法(如 MusicLM)不同,它不需要自监督语义表示,并且可以一次性生成所有 4 个码本。通过在码本之间引入小的延迟,可以并行预测它们,从而每秒音频仅需 50 个自回归步骤。
立体声模型通过从 EnCodec 模型获取 2 个令牌流,并使用延迟模式交错这些令牌来实现。立体声是一种用于重现具有深度和方向感的声音的技术,使用两个独立的音频通道通过扬声器或耳机播放,使听众感觉从不同角度聆听。
📄 许可证
代码遵循 MIT 许可证,模型权重遵循 CC - BY - NC 4.0 许可证。







