当前位置: 首页 > news >正文

《昇思 25 天学习打卡营第 15 天 | 基于MindNLP+MusicGen生成自己的个性化音乐 》

《昇思 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结构,分为三个阶段:

  1. 文本编码:用户输入的文本描述通过文本编码器模型转换为一系列隐形状态表示。
  2. 解码预测:训练MusicGen解码器来预测离散的隐形状态音频token。
  3. 音频恢复:使用音频压缩模型(如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模型的灵活性和易用性使其成为音乐创作和研究的有力工具。未来,可以探索更多基于文本和音频提示的音乐生成应用,以及如何进一步优化生成音乐的质量和多样性。

http://www.lryc.cn/news/403907.html

相关文章:

  • Gitee 使用教程1-SSH 公钥设置
  • 理解Cookie、Session和Token
  • 概率论原理精解【1】
  • 数据结构(二叉树-1)
  • 巴黎奥运会倒计时 一个非常不错的倒计时提醒
  • 【Python】使用库 -- 详解
  • Web3D:WebGL为什么在渲染性能上输给了WebGPU。
  • SpringBoot面试高频总结01
  • Linux 工作队列(Workqueue):概念与实现
  • 前端页面是如何禁止被查看源码、被下载,被爬取,以及破解方法
  • 51单片机嵌入式开发:14、STC89C52RC 之HX1838红外解码NEC+数码管+串口打印+LED显示
  • 在不同环境中,Java应用程序和MySQL等是如何与Docker进行交互和操作的?
  • 《DRL》P10-P15-损失函数-优化(梯度下降和误差的反向传播)
  • Spring Boot项目的404是如何发生的
  • <数据集>手势识别数据集<目标检测>
  • 【Vue3】选项式 API
  • 2、如何发行自己的数字代币(truffle智能合约项目实战)
  • 百日筑基第二十三天-23种设计模式-创建型总汇
  • 张量的基本使用
  • Oracle(14)什么是唯一键(Unique Key)?
  • PostgreSQL的引号、数据类型转换和数据类型
  • Mad MAD Sum-Codeforces Round 960 (Div. 2)
  • Flutter 插件之 package_info_plus
  • 如何实现布隆过滤器?
  • 运维团队如何高效监控容器化环境中的PID及其他关键指标
  • 通过vue3 + TypeScript + uniapp + uni-ui 实现下拉刷新和加载更多的功能
  • Pointnet++改进即插即用系列:全网首发WTConv2d大接受域的小波卷积|即插即用,提升特征提取模块性能
  • 4核16G服务器支持多少人?4C16G服务器性能测评
  • 塔子哥的平均数-美团2023笔试(codefun2000)
  • 故障诊断 | 基于小波包能量谱对滚动轴承的故障诊断Matlab代码