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

一、MusicGen 模型原理

MusicGen 是由 Meta AI 的 Jade Copet 等人提出的基于单个语言模型(LM)的音乐生成模型。它能够依据文本描述或音频提示生成高质量的音乐样本,相关研究成果可参考论文《Simple and Controllable Music Generation》。

MusicGen 模型基于 Transformer 结构,可分解为以下三个阶段:

阶段描述
文本编码用户输入的文本描述被传递给固定的文本编码器模型(如谷歌的 t5-base),以获取一系列隐性状态表示。
音频 token 预测训练 MusicGen 解码器来预测离散的隐性状态音频 token。
音频解码使用音频压缩模型(如 EnCodec 32kHz)对音频 token 进行解码,以恢复音频波形。

MusicGen 解码器是针对音乐生成任务从零开始训练的语言模型架构。其创新之处在于音频代码的预测方式,采用单个 stage 的 Transformer LM 结合高效的 token 交织模式,取消了多层级的多个模型结构,如分层或上采样,从而能够生成单声道和立体声的高质量音乐样本,并提供更好的生成输出控制。此外,MusicGen 不仅能生成符合文本描述的音乐,还能通过旋律条件控制生成的音调结构。

二、下载模型

MusicGen 提供了 small、medium 和 big 三种规格的预训练权重文件,本指南默认使用 small 规格的权重。

操作代码
卸载旧版本 MindSpore!pip uninstall mindspore -y
安装指定版本 MindSpore!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
查看 MindSpore 版本!pip show mindspore
导入模型from mindnlp.transformers import MusicgenForConditionalGeneration
model = MusicgenForConditionalGeneration.from_pretrained("facebook/musicgen-small")

三、生成音乐

MusicGen 支持贪心(greedy)和采样(sampling)两种生成模式,采样模式的结果通常优于贪心模式,默认启用采样模式,可在调用 MusicgenForConditionalGeneration.generate 时设置 do_sample=True 来显式指定。

  1. 无提示生成
操作代码
获取随机输入unconditional_inputs = model.get_unconditional_inputs(num_samples=1)
生成音频audio_values = model.generate(**unconditional_inputs, do_sample=True, max_new_tokens=256)
保存音频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].asnumpy())

音频输出格式为 a Torch tensor of shape (batch_size, num_channels, sequence_length)

参数计算方式
生成音频长度(秒)audio_length_in_s = 256 / model.config.audio_encoder.frame_rate
  1. 文本提示生成
操作代码
预处理输入from mindnlp.transformers import AutoProcessor
processor = AutoProcessor.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="ms")
生成音频audio_values = model.generate(**inputs, do_sample=True, guidance_scale=3, max_new_tokens=256)
保存音频scipy.io.wavfile.write("musicgen_out_text.wav", rate=sampling_rate, data=audio_values[0, 0].asnumpy())
  1. 音频提示生成
操作代码
数据准备和预处理from datasets import load_dataset
processor = AutoProcessor.from_pretrained("facebook/musicgen-small")
dataset = load_dataset("sanchit-gandhi/gtzan", split="train", streaming=True)
sample = next(iter(dataset))["audio"]
# take the first half of the audio sample
sample["array"] = sample["array"][: len(sample["array"]) // 2]
inputs = processor(audio=sample["array"], sampling_rate=sample["sampling_rate"], text=["80s blues track with groovy saxophone"], padding=True, return_tensors="ms")
生成音频audio_values = model.generate(**inputs, do_sample=True, guidance_scale=3, max_new_tokens=256)
保存音频scipy.io.wavfile.write("musicgen_out_audio.wav", rate=sampling_rate, data=audio_values[0, 0].asnumpy())

为演示批量音频提示生成,可对样本音频进行不同比例的切片,并在传递给模型前进行填充处理。

四、生成配置

参数默认值可修改值
采样模式do_sample=True可改为 do_sample=False
指导比例guidance_scale=3可增大,如 guidance_scale=4.0
最大生成 token 数max_new_tokens=1500可修改,如 max_new_tokens=256
Softmax 采样温度temperature可修改,如 temperature=1.5

控制生成过程的默认参数(如采样、指导比例和生成的令牌数量)可在模型的生成配置中找到并按需更新。

model.generation_config# increase the guidance scale to 4.0
model.generation_config.guidance_scale = 4.0# set the max new tokens to 256
model.generation_config.max_new_tokens = 256# set the softmax sampling temperature to 1.5
model.generation_config.temperature = 1.5audio_values = model.generate(**inputs)

需注意,传递给 generate 方法的参数会取代生成配置中的参数。

综上所述,通过上述步骤和配置,我们能够基于 MindNLP 和 MusicGen 生成个性化的音乐。在实际应用中,可根据具体需求灵活调整参数和输入,以获得满意的音乐生成效果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/50471.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java 8 中 20 个高频面试题及答案

文章目录 前言20 道高频题问题 1:给定一个整数列表,使用 Stream 函数找出列表中所有的偶数?问题 2:给定一个整数列表,使用 Stream 函数找出所有以 1 开头的数字?问题 3:如何使用 Stream 函数在给…

【C++题解】1782. 字符图形2-星号倒直角

问题&#xff1a;1782. 字符图形2-星号倒直角 类型&#xff1a;嵌套循环、图形输出 题目描述&#xff1a; 打印字符图形。 输入&#xff1a; 一个整数&#xff08; 0<n<10 &#xff09;。 输出&#xff1a; 一个字符图形。 样例&#xff1a; 输入&#xff1a; 3…

Python --NumPy库基础方法(2)

NumPy Numpy(Numerical Python) 是科学计算基础库&#xff0c;提供大量科学计算相关功能&#xff0c;比如数据统计&#xff0c;随机数生成等。其提供最核心类型为多维数组类型&#xff08;ndarray&#xff09;&#xff0c;支持大量的维度数组与矩阵运算&#xff0c;Numpy支持向…

深度学习中的损失函数和网络优化方法

深度学习中的损失函数和网络优化方法是构建和训练神经网络的核心部分。损失函数用于衡量模型预测值与实际值之间的差距&#xff0c;而网络优化方法用于调整模型参数以最小化损失函数&#xff0c;从而提升模型的性能。以下是对损失函数和网络优化方法的详细介绍。 损失函数 损…

微信Android一面凉经(2024)

微信Android一面凉经(2024) 笔者作为一名双非二本毕业7年老Android, 最近面试了不少公司, 目前已告一段落, 整理一下各家的面试问题, 打算陆续发布出来, 供有缘人参考。今天给大家带来的是《微信Android一面凉经(2024)》。 面试职位: 微信-客户端开发工程师-基础功能(广州) And…

D语言

提起编程语言&#xff0c;相信大家第一时间想到的肯定都是C,但是相信资历较大的程序员们都不会忘记D语言 D语言自 1999 年发布至今已发展了 20 年 它既拥有 Java 那样强大的表现力 又具有 C 相当的性能 却因为 2.x 版本破坏性升级 导致社区大量核心开发者将其放弃。 2010 年——…

Unity GameObject: 构建游戏世界的基本元素

在Unity这个游戏开发平台中&#xff0c;GameObject是构成游戏世界的基础构件。无论是角色、敌人、道具还是环境元素&#xff0c;它们都是GameObject的不同表现形式。本文将深入探讨Unity中GameObject的概念、重要性以及如何使用它们来构建和丰富你的游戏世界。 GameObject简介…

Ubuntu22.04系统安装nodejs 14 保姆级教程

下载软件包 从NodeSource 的官方源下载并安装 Node.js 14.x 版本的软件包&#xff0c;适用于 Debian 和 Ubuntu 系统&#xff1a; curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash - 更新软件源 更新软件源 sudo apt-get update 下载bodejs14 下载nodejs14 sud…

双指针算法的实现(三题详解)

这是C算法基础-基础算法专栏的第十五篇文章&#xff0c;专栏详情请见此处。 ps&#xff1a;转眼间暑假已过半&#xff0c;我在这段时间也积累了很多文章&#xff0c;所以到开学&#xff08;9月1日&#xff09;为止&#xff0c;每个周我将会在周三和周六发文章(o&#xff9f;▽&…

Springboot项目的行为验证码AJ-Captcha(源码解读)

目录 前言1. 复用验证码2. 源码解读2.1 先走DefaultCaptchaServiceImpl类2.2 核心ClickWordCaptchaServiceImpl类 3. 具体使用 前言 对于Java的基本知识推荐阅读&#xff1a; java框架 零基础从入门到精通的学习路线 附开源项目面经等&#xff08;超全&#xff09;【Java项目…

针对datax-web 中Swagger UI接口未授权访问

application.yml 添加以下配置 实现访问doc.html 以及/v2/api-docs 接口时需要进行简单的校验 swagger:basic:enable: trueusername: adminpassword: 12345 配置重启后再进行相关访问则需要输入用户名和密码

Ubuntu 24.04 LTS Noble安装 FileZilla Server

FileZilla Server 是一款使用图形用户界面快速创建 FTP 服务器的软件。它有助于测试需要 FTP 服务器功能的各种项目。虽然早期的 FileZilla FTP 服务器仅适用于 Windows 和 macOS&#xff0c;但现在我们也可以在 Linux&#xff08;例如 Ubuntu 24.04&#xff09;上安装 FileZil…

c++红黑树,插入公式

概念 红黑树&#xff0c;是一种二叉搜索树&#xff0c;但在每个结点上增加一个存储位表示结点的颜色&#xff0c;可以是Red或 Black。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制&#xff0c;红黑树确保没有一条路 径会比其他路径长出俩倍&#xff0c;因而是接近…

C++ STL set_symmetric_difference

一&#xff1a;功能 给定两个集合A&#xff0c;B&#xff1b;求出两个集合的对称差&#xff08;只属于其中一个集合&#xff0c;而不属于另一个集合的元素&#xff09;&#xff0c;即去除那些同时在A&#xff0c;B中出现的元素。 二&#xff1a;用法 #include <vector>…

【前端手写代码】手写Object.create

思路&#xff1a;将传入的对象作为原型 // 思路&#xff1a;将传入的对象作为原型 function create(obj) {function F() { }F.prototype objreturn new F() }

Go 语言单例化利器 Once

Once 可以用来执行仅仅执行一次的动作,常常被应用于单个对象的初始化场景。 1. Once 的使用方法 sync.Once 只暴露了一个方法 Do,你可以多次调用 Do 方法,但是只有第一次调用 Do 方法时参数 f 才会执行,这里的 f 是一个无参数、无返回值的函数。 func (o *Once) do(f func…

学习java第一百四十二天

ApplicationContext通常的实现是什么&#xff1f; FileSystemXmlApplicationContext &#xff1a;此容器从一个XML文件中加载beans的定义&#xff0c;XML Bean配置文件的全路径名必须提供给它的构造函数 ApplicationContext context new FileSystemXmlApplicationContext(&quo…

Docker安装 OpenResty详细教程

OpenResty 是一个基于 Nginx 的高性能 Web 平台&#xff0c;它集成了 Lua 脚本语言&#xff0c;使得开发者可以在 Nginx 服务器上轻松地进行动态 Web 应用开发。OpenResty 的核心目标是通过将 Nginx 的高性能与 Lua 的灵活性结合起来&#xff0c;提供一个强大且高效的 Web 开发…

Redis备份策略面试三道题

关于Redis备份策略的面试题&#xff0c;由简单到困难&#xff0c;可以给出以下三道题目及其参考答案&#xff1a; 1. 简单题&#xff1a;Redis支持哪些主要的备份方式&#xff1f; 参考答案&#xff1a; Redis支持两种主要的备份方式&#xff1a; RDB&#xff08;Redis Data…

Hadoop3.3.5的安装与单机/伪分布式配置

文章目录 一、安装须知二、安装jdk三、安装shh四、安装配置hadoop五、运行hadoop 一、安装须知 本次安装的Hadoop版本为hadoop3.3.5。 在这之前完成了VMware虚拟软件的安装&#xff0c;并安装了Ubuntu22.04&#xff0c;在这基础上进行相关配置。 二、安装jdk 在Ubuntu中使用…