MusicGen: 基于文本和音频提示的高质量音乐生成模型
MusicGen是一个强大的音乐生成模型,由Meta AI的Jade Copet等研究人员提出,旨在通过文本描述或音频提示生成高质量的音乐样本。该模型的详细内容可以参考相关论文《简单且可控的音乐生成》(链接)。与传统的音乐生成方法不同,MusicGen在模型架构和训练策略上做了显著改进,以提高音乐生成的质量和速度。
模型概览
MusicGen模型分为三个关键阶段:
- 文本编码:将输入的文本描述通过一个冻结的文本编码模型编码,以生成隐藏状态表示。这些隐藏状态用于捕捉音乐的情绪、风格和内容。
- 音频标记预测:MusicGen解码器在这些隐藏状态的条件下被训练来预测离散的音频标记(音频代码),从而生成音乐序列。与传统的逐层或上采样生成方式不同,MusicGen采用了一种称为标记交错模式的策略,从而在单次前向传递中生成完整的音频代码集,大幅提升了生成效率。
- 音频解码:这些音频代码随后通过一个音频压缩模型(例如EnCodec)解码为可播放的音频波形。
预训练模型与组件
预训练的MusicGen模型使用了以下组件:
- 文本编码模型:MusicGen使用Google的t5-base作为文本编码器,将输入的文本描述转换为隐含的语义表示。
- 音频压缩模型:使用EnCodec 32kHz对音频进行编码和解码,以实现高效的音频存储和还原。
- MusicGen解码器:这是一个自定义的语言模型,专门用于从音频代码生成完整音乐波形。
标记交错模式
传统的音乐生成模型在预测音频代码时往往采用分层预测或上采样的策略。然而,这些方法通常需要多层模型的级联或不断精炼Transformer模型的输出,因而在推理速度上存在瓶颈。MusicGen创新性地采用了标记交错模式,通过在单次前向传递中并行生成完整的音频代码集,避免了级联多个模型的需求,显著提升了推理速度。这种模式极大地优化了生成效率,使得MusicGen在实际应用中更具可操作性。
图1: MusicGen使用的代码本延迟模式。图取自MusicGen论文arxiv上的230605284。
模型加载
预训练的MusicGen模型检查点(小型、中型和大型)可以从hf-hub加载。以下代码展示了如何加载小型检查点:
from mindnlp.transformers import MusicgenForConditionalGeneration
model = MusicgenForConditionalGeneration.from_pretrained("facebook/musicgen-small")
音乐生成模式
MusicGen支持两种生成模式:贪婪生成和采样生成。相比贪婪生成,采样生成在音乐生成任务上通常能够获得更好的结果,因而更受推荐。在实际应用中,我们鼓励在可能的情况下启用采样模式(do_sample=True
)。
无条件生成
无条件生成即不输入任何文本提示,通过随机采样生成音乐。可以使用get_unconditional_inputs
方法获取无条件输入,随后调用generate
方法生成音乐。
unconditional_inputs = model.get_unconditional_inputs(num_samples=1)
audio_values = model.generate(**unconditional_inputs, do_sample=True, max_new_tokens<