🚀 MusicGen - Small - 300M
MusicGen是一个文本到音乐的模型,能够根据文本描述或音频提示生成高质量的音乐样本。它为音乐生成研究提供了新的解决方案,也让机器学习爱好者能体验基于文本或旋律的音乐生成。
🚀 快速开始
你可以通过以下方式体验MusicGen:
- Audiocraft Colab:
- Hugging Face Colab:
- Hugging Face Demo:
✨ 主要特性
- 单阶段自回归:MusicGen是一个单阶段自回归Transformer模型,在32kHz的EnCodec分词器上进行训练,有4个以50Hz采样的码本。与现有方法(如MusicLM)不同,它不需要自监督语义表示,并且可以一次性生成所有4个码本。
- 并行预测:通过在码本之间引入小的延迟,可以并行预测它们,因此每秒音频只有50个自回归步骤。
📦 安装指南
使用🤗 Transformers库
- 首先安装🤗 Transformers库 和
scipy
:
pip install --upgrade pip
pip install --upgrade transformers scipy
- 安装
ffmpeg
(如果需要):
apt-get install ffmpeg
使用Audiocraft库
- 安装
audiocraft
库:
pip install git+https://github.com/facebookresearch/audiocraft.git
- 确保安装了
ffmpeg
:
apt-get install ffmpeg
💻 使用示例
基础用法
使用🤗 Transformers库的pipeline
from transformers import pipeline
import scipy
synthesiser = pipeline("text-to-audio", "facebook/musicgen-small")
music = synthesiser("lo-fi music with a soothing melody", forward_params={"do_sample": True})
scipy.io.wavfile.write("musicgen_out.wav", rate=music["sampling_rate"], data=music["audio"])
使用🤗 Transformers库的建模代码
from transformers import AutoProcessor, MusicgenForConditionalGeneration
processor = AutoProcessor.from_pretrained("facebook/musicgen-small")
model = MusicgenForConditionalGeneration.from_pretrained("facebook/musicgen-small")
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",
)
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].numpy(), rate=sampling_rate)
使用 scipy
保存为 .wav
文件
import scipy
sampling_rate = model.config.audio_encoder.sampling_rate
scipy.io.wavfile.write("musicgen_out.wav", rate=sampling_rate, data=audio_values[0, 0].numpy())
高级用法
使用Audiocraft库
from audiocraft.models import MusicGen
from audiocraft.data.audio import audio_write
model = MusicGen.get_pretrained("small")
model.set_generation_params(duration=8)
descriptions = ["happy rock", "energetic EDM"]
wav = model.generate(descriptions)
for idx, one_wav in enumerate(wav):
audio_write(f'{idx}', one_wav.cpu(), model.sample_rate, strategy="loudness")
📚 详细文档
更多关于使用🤗 Transformers库进行MusicGen模型推理的详细信息,请参考 MusicGen文档。
🔧 技术细节
模型详情
属性 |
详情 |
开发组织 |
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许可证发布。 |
反馈渠道 |
关于MusicGen的问题和评论可以通过项目的 Github仓库 发送,或通过创建issue。 |
预期用途
- 主要用途:MusicGen的主要用途是基于人工智能的音乐生成研究,包括探索和理解生成模型的局限性以改进科学现状,以及让机器学习爱好者通过文本或旋律引导生成音乐来了解生成式AI模型的当前能力。
- 主要用户:主要用户是音频、机器学习和人工智能领域的研究人员,以及希望更好理解这些模型的业余爱好者。
- 非预期用途:在没有进一步风险评估和缓解措施的情况下,模型不应用于下游应用。模型不应被用于故意创建或传播会给人带来敌对或疏离环境的音乐作品。
评估指标
模型性能指标
- 客观指标:
- 在预训练音频分类器(VGGish)提取的特征上计算的Frechet音频距离。
- 在预训练音频分类器(PaSST)提取的标签分布上的Kullback - Leibler散度。
- 从预训练CLAP模型提取的音频嵌入和文本嵌入之间的CLAP分数。
- 主观指标:通过人类参与者进行定性研究,从音乐样本的整体质量、与输入文本的相关性、旋律引导音乐生成中对旋律的遵循等方面评估模型性能。
评估数据集
模型在 MusicCaps基准 和一个领域内保留评估集上进行评估,评估集与训练集没有艺术家重叠。
训练数据集
模型在以下来源的许可数据上进行训练:Meta音乐倡议声音集、Shutterstock音乐集 和 Pond5音乐集。
📄 许可证
代码采用MIT许可证发布,模型权重采用CC - BY - NC 4.0许可证发布。
⚠️ 重要提示
模型的偏差和局限性可能导致生成的样本被认为有偏差、不适当或冒犯性。MusicGen是为可控音乐生成的人工智能研究而开发的模型,在没有进一步调查和风险缓解的情况下,不应用于下游应用。
💡 使用建议
由于模型有时难以评估哪种文本描述能提供最佳生成效果,可能需要进行提示工程以获得满意的结果。同时,要注意模型在不同音乐风格和文化上的表现可能不同,生成的音乐可能存在局限性。