《昇思 25 天学习打卡营第 15 天 | 基于MindNLP+MusicGen生成自己的个性化音乐 》
活动地址:https://xihe.mindspore.cn/events/mindspore-training-camp
签名:Sam9029
MusicGen概述
MusicGen是由Meta AI的Jade Copet等人提出的一种基于单个语言模型(LM)的音乐生成模型,能够根据文本描述或音频提示生成高质量的音乐样本。该模型的研究成果发表在论文《Simple and Controllable Music Generation》中。
MusicGen模型结构
MusicGen模型基于Transformer结构,分为三个阶段:
- 文本编码:用户输入的文本描述通过文本编码器模型转换为一系列隐形状态表示。
- 解码预测:训练MusicGen解码器来预测离散的隐形状态音频token。
- 音频恢复:使用音频压缩模型(如EnCodec)解码音频token,以恢复音频波形。
MusicGen的特点
- 使用谷歌的t5-base作为文本编码器模型。
- 使用EnCodec 32kHz作为音频压缩模型。
- 解码器是针对音乐生成任务训练的语言模型架构。
- 采用单阶段Transformer LM结合高效的token交织模式,取消了分层或上采样的多层级结构。
实验环境配置
实验环境已预装MindSpore 2.2.14,可以通过以下命令安装或更新MindSpore及相关库:
!pip uninstall mindspore -y
!pip install -i https://pypi.mirrors.ustc.edu.cn/simple mindspore==2.2.14
!pip install -i https://pypi.mirrors.ustc.edu.cn/simple mindnlp jieba soundfile librosa
MusicGen模型使用
MusicGen提供了small、medium和big三种规格的预训练权重文件。本指南使用small规格的权重,以快速生成质量较低的音频。
from mindnlp.transformers import MusicgenForConditionalGeneration
model = MusicgenForConditionalGeneration.from_pretrained("facebook/musicgen-small")
生成音乐
MusicGen支持贪心和采样两种生成模式。采样模式通常能得到更好的结果。以下代码展示了如何使用无提示生成和文本提示生成:
unconditional_inputs = model.get_unconditional_inputs(num_samples=1)
audio_values = model.generate(**unconditional_inputs, do_sample=True, max_new_tokens=256)
# 保存音频
sampling_rate = model.config.audio_encoder.sampling_rate
scipy.io.wavfile.write("musicgen_out.wav", rate=sampling_rate, data=audio_values[0, 0].asnumpy())
思考与见解
- 生成质量与速度:small规格的权重文件虽然生成速度快,但音频质量较低。在实际应用中,需要在速度和质量之间做出权衡。
- 文本提示生成:通过文本提示生成音乐时,
guidance_scale
参数对生成结果的影响显著。较高的guidance_scale
可以生成与文本描述更匹配的音乐。 - 音频提示生成:MusicGen同样支持音频提示,这为音乐创作提供了更多可能性,例如在现有旋律基础上进行变奏。
通过本实验,学习了如何使用MindNLP和MusicGen生成个性化音乐。MusicGen模型的灵活性和易用性使其成为音乐创作和研究的有力工具。未来,可以探索更多基于文本和音频提示的音乐生成应用,以及如何进一步优化生成音乐的质量和多样性。