模型简介
模型特点
模型能力
使用案例
🚀 MusicGen - Stereo - Large - 3.3B
MusicGen是一个文本到音乐的模型,能够根据文本描述或音频提示生成高质量的音乐样本。本项目进一步发布了一组支持立体声的模型,这些模型是在单声道模型的基础上进行了20万次更新的微调。
🚀 快速开始
使用🤗 Transformers库运行MusicGen立体声模型
你可以按照以下步骤在本地运行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-large")
model = MusicgenForConditionalGeneration.from_pretrained("facebook/musicgen-stereo-large").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)
使用Audiocraft库运行MusicGen模型
你也可以通过原始的 Audiocraft库 在本地运行MusicGen模型:
- 安装Audiocraft库:
pip install git+https://github.com/facebookresearch/audiocraft.git
- 安装
ffmpeg
:
apt get install ffmpeg
- 运行Python代码:
from audiocraft.models import MusicGen
from audiocraft.data.audio import audio_write
model = MusicGen.get_pretrained("large")
model.set_generation_params(duration=8) # generate 8 seconds.
descriptions = ["happy rock", "energetic EDM"]
wav = model.generate(descriptions) # generates 2 samples.
for idx, one_wav in enumerate(wav):
# Will save under {idx}.wav, with loudness normalization at -14 db LUFS.
audio_write(f'{idx}', one_wav.cpu(), model.sample_rate, strategy="loudness")
✨ 主要特性
- 立体声支持:进一步发布了一组支持立体声的模型,这些模型是在单声道模型的基础上进行微调得到的。
- 高质量音乐生成:能够根据文本描述或音频提示生成高质量的音乐样本。
- 单阶段自回归模型:是一个单阶段自回归Transformer模型,不需要自监督语义表示,并且可以一次性生成所有4个码本。
- 简单可控:通过引入码本之间的小延迟,可以并行预测码本,从而每秒音频只有50个自回归步骤。
📦 安装指南
使用🤗 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
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-large")
model = MusicgenForConditionalGeneration.from_pretrained("facebook/musicgen-stereo-large").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)
📚 详细文档
预训练模型
我们提供了10个预训练模型,具体如下:
facebook/musicgen-small
:300M模型,仅支持文本到音乐 - 🤗 Hubfacebook/musicgen-medium
:1.5B模型,仅支持文本到音乐 - 🤗 Hubfacebook/musicgen-melody
:1.5B模型,支持文本到音乐和文本+旋律到音乐 - 🤗 Hubfacebook/musicgen-large
:3.3B模型,仅支持文本到音乐 - 🤗 Hubfacebook/musicgen-melody-large
:3.3B模型,支持文本到音乐和文本+旋律到音乐 - 🤗 Hubfacebook/musicgen-stereo-*
:所有之前的模型针对立体声生成进行了微调 - small medium large melody melody large
试用MusicGen
你可以通过以下方式试用MusicGen:
模型详情
- 开发组织:Meta AI的FAIR团队。
- 模型日期:MusicGen于2023年4月至5月期间进行训练。
- 模型版本:这是模型的第1版。
- 模型类型:MusicGen由一个用于音频分词的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许可证发布。
- 问题反馈:关于MusicGen的问题和评论可以通过项目的 Github仓库 发送,或通过创建问题进行反馈。
预期用途
- 主要预期用途:MusicGen的主要用途是基于人工智能的音乐生成研究,包括:
- 研究工作,如探索和更好地理解生成模型的局限性,以进一步推动科学发展。
- 由文本或旋律引导的音乐生成,以便机器学习爱好者更好地了解生成式人工智能模型的当前能力。
- 主要预期用户:该模型的主要预期用户是音频、机器学习和人工智能领域的研究人员,以及希望更好地了解这些模型的爱好者。
- 超出范围的用例:在没有进一步的风险评估和缓解措施的情况下,该模型不应用于下游应用。该模型不应被用于故意创建或传播会给人们造成敌对或疏离环境的音乐作品。这包括生成人们可预见会感到不安、痛苦或冒犯的音乐;或传播历史或当前刻板印象的内容。
评估指标
- 模型性能指标:我们使用以下客观指标在标准音乐基准上评估模型:
- 基于预训练音频分类器(VGGish)提取的特征计算的Frechet音频距离。
- 基于预训练音频分类器(PaSST)提取的标签分布的Kullback-Leibler散度。
- 基于预训练CLAP模型提取的音频嵌入和文本嵌入之间的CLAP分数。
- 定性研究:我们还进行了有人类参与者的定性研究,从以下几个方面评估模型的性能:
- 音乐样本的整体质量。
- 与提供的文本输入的文本相关性。
- 旋律引导的音乐生成对旋律的遵循程度。
评估数据集
该模型在 MusicCaps基准 和一个领域内保留的评估集上进行评估,评估集与训练集没有艺术家重叠。
训练数据集
该模型使用以下来源的许可数据进行训练:Meta Music Initiative Sound Collection、Shutterstock音乐集 和 Pond5音乐集。有关训练集和相应预处理的更多详细信息,请参阅论文。
评估结果
以下是发布的模型在MusicCaps上获得的客观指标。请注意,对于公开发布的模型,我们让所有数据集通过了最先进的音乐源分离方法,即使用开源的 Hybrid Transformer for Music Source Separation (HT-Demucs),以仅保留乐器部分。这解释了与论文中使用的模型在客观指标上的差异。
模型 | 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 |
🔧 技术细节
立体声模型通过从EnCodec模型获取2个令牌流,并使用延迟模式交错这些令牌来工作。立体声技术用于再现具有深度和方向的声音,它使用通过扬声器(或耳机)播放的两个独立音频通道,从而产生声音来自多个方向的印象。
MusicGen是一个单阶段自回归Transformer模型,在一个32kHz的EnCodec分词器上进行训练,该分词器有4个以50 Hz采样的码本。与现有的方法(如MusicLM)不同,MusicGen不需要自监督语义表示,并且可以一次性生成所有4个码本。通过在码本之间引入小延迟,我们可以并行预测它们,从而每秒音频只有50个自回归步骤。
📄 许可证
代码遵循MIT许可证发布,模型权重遵循CC-BY-NC 4.0许可证发布。







