昇思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://xiahunao.cn/news/3270305.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

【秋招笔试题】小O的01矩阵

输入 2 2 01 10 10 01 2 01 01 11 00 输出 2 -1解析&#xff1a;此题看到数据范围&#xff0c;直接DFS暴力即可&#xff0c;暴力枚举每行每列是否需要翻转&#xff0c;因为翻转两次是没有意义的。 #include <iostream> #include <cstring> #include <algorithm…

vue3 tree组件slots特性实践

上一小节我们实现了SvgIcon组件来支持组件开发中用到字体图标的地方&#xff0c;并应用在了tree节点折叠、展开的图标上&#xff0c;本小节我们将其用到tree的插槽内容中&#xff0c;一起来学习基于Vue3 tsx的插槽用法吧~ 先看要实现的效果&#xff1a; 要实现的文档部分&…

C嘎嘎浅谈模板

这篇文章给大家介绍一下c嘎嘎内存管理和模板&#xff0c;那么我们直接进入正题 c/c的程序内存分布 这里的了解一下即可 new和delete的定义和操作 格式&#xff1a;类型* 对象名 new 类型&#xff1b; 数组(对象)定义格式&#xff1a;类型* 对象名 new 类型[元素个数]&…

【机器学习】智驭未来:机器学习如何重塑制造业的转型与升级

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀目录 &#x1f50d;1. 引言&#x1f4d2;2. 机器学习重塑制造业生产流程&#x1f338;预测性维护&#xff1a;减少停机时间&#xff0c;提高设…

简单快捷!Yarn的安装与使用指南

Yarn 是由 Facebook (现 Meta) 开发的包管理工具。 今天&#xff0c;我将介绍如何使用 Yarn。 目录 Yarn 的官方网站 关于安装 版本确认 开始一个新项目&#xff08;创建 package.json 文件&#xff09; 安装软件包 升级包 运行脚本 执行包的命令 卸载包 总结 Yarn 的…

【MySQL进阶之路 | 高级篇】简述Bin Log日志

1. 日志类型 MySQL有不同类型的日志文件&#xff0c;用来存储不同类型的日志&#xff0c;分为二进制日志、错误日志、通用查询日志和慢查询日志&#xff0c;这也是常用的4种。MySQL 8又新增两种支持的日志:中继日志和数据定义语句日志。使用这些日志文件&#xff0c;可以查看M…

exo-tinggrad 架构解析

目录 exo-tinggrad 架构解析 8B 模型配置 70B 模型配置 exo-tinggrad 架构解析 这个项目目录包含了一系列与Python相关的文件和文件夹,它们共同构成了一个可能的项目或库。这些文件和文件夹按照特定的命名和组织方式被放置在了一起,以便于管理、开发和维护。 tinygrad: 这…

解决:Nacos无法获取远程配置数据,导致项目启动各种配置异常

解决&#xff1a;Nacos无法获取远程配置数据&#xff0c;导致项目启动各种配置异常 一问题描述&#xff1a;1.项目pom依赖版本&#xff1a;2.bootstrap.yml配置信息3.远程配置&#xff1a;默认public命名空间4.启动报异常&#xff0c;显示没有配置数据源&#xff0c;实际远程已…

金字塔监督在人脸反欺骗中的应用

介绍 论文地址&#xff1a;https://arxiv.org/pdf/2011.12032.pdf 近年来&#xff0c;人脸识别技术越来越普及。在智能手机解锁和进出机场时&#xff0c;理所当然地会用到它。人脸识别也有望被用于管理今年奥运会的相关人员。但与此同时&#xff0c;人们对人脸欺骗的关注度也…

邦布带你从零开始实现图书管理系统(java版)

今天我们来从零开始实现图书管理系统。 图书管理系统 来看我们的具体的实现&#xff0c;上述视频。 我们首先来实现框架&#xff0c;我们要实现图书管理系统&#xff0c;首先要搭框架。 我们首先定义一个书包&#xff0c;在书包中定义一个书类和一个书架类&#xff0c;再定义…

51单片机15(直流电机实验)

一、序言&#xff1a;我们知道在单片机当中&#xff0c;直流电机的控制也是非常多的&#xff0c;所以有必要了解一些这个电机相关的一些知识&#xff0c;以及如何使用单片机来控制这个电机&#xff0c;那么在没有学习PWM之前&#xff0c;我们先简单的使用GPIO这个管脚来控制电机…

女人内裤怎么洗才是最干净?内衣裤洗衣机怎么样?哪个牌子更好?

最近刚好用到一款比较好用的洗内衣裤洗衣机&#xff01;如果你也和我一样有洗内衣裤烦恼的&#xff0c;或者可以看看&#xff01; 内衣裤作为贴身穿的衣服&#xff0c;我是不会把它和外衣一起清洗的&#xff0c;而家里面的大洗衣机已经担起了清洗外衣的工作&#xff01; 朋友们…

jdk的major version和minor version是啥意思?

写在前面 1&#xff1a;正文 major version是大版本号&#xff0c;minor version是小版本号&#xff0c;但目前minor version都是0&#xff08;也可能是我没有发现&#x1f605;&#xff09;&#xff0c;如jdk8就是52&#xff0c;如下表&#xff1a; 可以看到jdk版本号和ma…

优思学院:六西格玛黑带的价值仍在吗?

六西格玛自20世纪80年代由摩托罗拉提出以来&#xff0c;已经深刻地影响了全球的质量管理实践。六西格玛方法论中的一个关键角色就是“黑带”&#xff0c;这些人经过培训&#xff0c;能够领导问题解决项目。随着进入数字化时代&#xff0c;自动化和数据分析在商业运营中变得越来…

【区块链】JavaScript连接web3钱包,实现测试网络中的 Sepolia ETH余额查询、转账功能

审核看清楚了 &#xff01; 这是以太坊测试网络&#xff01;用于学习的测试网络&#xff01;&#xff01;&#xff01; 有关web3 和区块链的内容为什么要给我审核不通过&#xff1f; 别人凭什么可以发&#xff01; 目标成果&#xff1a; 实现功能分析&#xff1a; 显示账户信…

第N8周:图解NLP中的注意力机制

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 一、前期知识储备 注意力机制是一种模拟人类大脑注意力分配方式的计算模型&#xff0c;它能够在处理大量信息时&#xff0c;聚焦于重要的部分&#xff0c;而忽…

打卡第二十五天:递增子序列、全排列、全排列II、重新安排行程、N皇后、解数独

1、递增子序列 题目 文章 视频 这个递增子序列比较像是取有序的子集。而且本题也要求不能有相同的递增子序列。在子集一题中通过排序&#xff0c;再加一个标记数组来达到去重的目的。而本题求自增子序列&#xff0c;是不能对原数组进行排序的&#xff0c;排完序的数组都是自…

数据结构:(1)线性表

一、基本概念 概念&#xff1a;零个或多个数据元素的有限序列 元素之间是有顺序了。如果存在多个元素&#xff0c;第一个元素无前驱&#xff0c;最后一个没有后继&#xff0c;其他的元素只有一个前驱和一个后继。 当线性表元素的个数n&#xff08;n>0&am…

NzN的C语言全解析--C语言常见概念

目录 1. C语言是什么&#xff1f; 2. C语言的历史 3. 编译器的选择--VS2022 (1) 编译和链接 (2) VS2022 的优缺点 4. VS项目和源文件、头文件介绍 5. 第一个C语言程序 6. main函数 7. printf和库函数 8. 关键字 9. 字符和ASCII编码 10. 字符串和\0 11. 转义字符 …

文件系统基础(一)

目录 一 . 文件的基本概念文件的结构文件的属性文件的分类 二. 文件控制块和索引节点文件控制块&#xff08;FCB&#xff09;索引节点磁盘索引节点内存索引节点 三. 文件的操作文件的基本操作文件的打开与关闭文件打开文件关闭文件名与文件描述符的应用 四. 文件的保护访问类型…