香橙派 AIpro 根据心情生成专属音乐
- 一、开机
- 1.1 开发板开机
- 1.2 远程连接到 OrangePi AIpro
- 二、开发环境搭建
- 2.1 创建环境、代码部署文件夹
- 2.2 安装 miniconda
- 2.3 为 miniconda 更新国内源
- 2.4 创建一个 python 3.9 版本的开发环境
- 三、基于MindNLP + MusicGen生成自己的个性化音乐
- 3.1 模型介绍
- 3.2 下载模型
- 3.3 生成音乐
- 3.4 无提示生成
- 3.5 文本提示生成
- 3.6 音频提示生成
- 四、总结
这篇博客 用 OrangePi AIpro 实现了根据文字、音频、生成音乐
一、开机
关于 香橙派 AIpro 板子的简介和参数,以及一些已有的官方样例,这里我就不再赘述了,后续如果有机会会给大家把这些样例都单独拿出来写其他的博客,这里就对 香橙派 AIpro 板子的开机做一个说明。(开了两三次没打开,以为是板子坏了,自己还满心愤懑,后来发现是自己操作不对–确实没看说明书)
1.1 开发板开机
首先 将烧好系统的 TF 卡查到对应位置上,将两个启动方式拨码开关都向右拨(图示为两个启动方式拨码开关都拨向左)
之后将电源插入电源插口
1.2 远程连接到 OrangePi AIpro
默认的用户名:root
默认的密码:Mind@123
二、开发环境搭建
2.1 创建环境、代码部署文件夹
# 创建环境目录
mkdir ~/env
# 创建代码目录
mkdir ~/workshop
2.2 安装 miniconda
下载 miniconda 到 ~/env
目录,这里需要注意的是 OrangePi AIpro 是 arm 架构的
bash ~/env/Miniconda3-py312_24.3.0-0-Linux-aarch64.sh
conda 安装完成如如图所示:
2.3 为 miniconda 更新国内源
更新 miniconda 的源,如果有梯子的话这一步可以不做,但是如果梯子的网速感人的话,还是建议将源更新为清华源
# 修改 .condarc 文件
vi ~/.condarc
将 .condarc
文件修改如下
channels:
- defaults
show_channel_urls: true
default_channels:
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
custom_channels:
conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
menpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
pytorch-lts: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
simpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
deepmodeling: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/
清理之前预留的缓存
conda clean -i
2.4 创建一个 python 3.9 版本的开发环境
通过 conda 创建一个 python 3.9 的开发环境,并安装 mindspore 框架,以及一些其他必要的库函数
# 创建一个 python 3.9 的环境
conda create -n py39 python=3.9
# 激活环境
conda activate py39
安装 mindspore 框架,版本必须选择 2.3.0rc2
conda install mindspore=2.3.0rc2 -c mindspore -c conda-forge
# 安装 mindnlp 包
pip install -i https://pypi.mirrors.ustc.edu.cn/simple mindnlp==0.2.4 jieba
三、基于MindNLP + MusicGen生成自己的个性化音乐
3.1 模型介绍
这里简单介绍一下 MusicGen 模型。MusicGen 是基于单个语言模型(LM)的音乐生成模型,能够根据文本描述或音频提示生成高质量的音乐样本,相关研究成果参考论文《Simple and Controllable Music Generation》。
MusicGen 模型基于Transformer结构,可以分解为三个不同的阶段:
- 用户输入的文本描述作为输入传递给一个固定的文本编码器模型,以获得一系列隐形状态表示。
- 训练 MusicGen 解码器来预测离散的隐形状态音频 token。
- 对这些音频 token 使用音频压缩模型(如 EnCodec)进行解码,以恢复音频波形。
MusicGen 直接使用谷歌的 t5-base 及其权重作为文本编码器模型,并使用EnCodec 32kHz及其权重作为音频压缩模型。MusicGen 解码器是一个语言模型架构,针对音乐生成任务从零开始进行训练。
MusicGen取消了多层级的多个模型结构,例如分层或上采样,这使得MusicGen 能够生成单声道和立体声的高质量音乐样本,同时提供更好的生成输出控制。因此,MusicGen 不仅能够生成符合文本描述的音乐,还能够通过旋律条件控制生成的音调结构。
Figure 1: MusicGen使用的码本延迟模式,来源于 MusicGen paper.
3.2 下载模型
MusicGen提供了small、medium和big三种规格的 预训练权重文件,本次指南默认使用 small 规格的权重,生成的音频质量较低,但是生成的速度是最快的(我的板子内存只有 8G大家可以选择 16G 的板子):
from mindnlp.transformers import MusicgenForConditionalGeneration
# 下载并导入模型
model = MusicgenForConditionalGeneration.from_pretrained("facebook/musicgen-small")
3.3 生成音乐
MusicGen 支持两种生成模式:贪心(greedy)和采样(sampling)。在实际执行过程中,采样模式得到的结果要显著优于贪心模式。因此我们默认启用采样模式,并且可以在调用 MusicgenForConditionalGeneration.generate
时设置 do_sample=True
来显式指定使用采样模式。
3.4 无提示生成
我们可以通过方法 MusicgenForConditionalGeneration.get_unconditional_inputs
获得网络的随机输入,然后使用 .generate
方法进行自回归生成,指定 do_sample=True
来启用采样模式:
unconditional_inputs = model.get_unconditional_inputs(num_samples=1)
audio_values = model.generate(**unconditional_inputs, do_sample=True, max_new_tokens=256)
音频输出是格式是: a Torch tensor of shape (batch_size,num_channels,sequence_length)
。
使用第三方库scipy
将输出的音频保存为 musicgen_out.wav
文件。
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())
3.5 文本提示生成
首先基于文本提示,通过 AutoProcessor
对输入进行预处理。然后将预处理后的输入传递给 .generate
方法以生成文本条件音频样本。同样,我们通过设置 do_sample=True 来启用采样模式。
其中,guidance_scale
用于无分类器指导(CFG),设置条件对数之间的权重(从文本提示中预测)和无条件对数(从无条件或空文本中预测)。guidance_scale
越高表示生成的模型与输入的文本更加紧密。通过设置guidance_scale > 1
来启用 CFG。为获得最佳效果,使用guidance_scale=3
(默认值)生成文本提示音频。
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())
# from IPython.display import Audio
# # 要收听生成的音频样本,可以使用 Audio 进行播放
# Audio(audio_values[0].asnumpy(), rate=sampling_rate)
3.6 音频提示生成
AutoProcessor
同样可以对用于音频预测的音频提示进行预处理。在以下示例中,我们首先加载音频文件,然后进行预处理,并将输入给到网络模型来进行音频生成。最后,我们将生成出来的音频文件保存为musicgen_out_audio.wav
from datasets import load_dataset
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]
# 使用音视频提示生成,耗时较久
processor = AutoProcessor.from_pretrained("facebook/musicgen-small")
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())
# from IPython.display import Audio
# # 要收听生成的音频样本,可以使用 Audio 进行播放
# Audio(audio_values[0].asnumpy(), rate=sampling_rate)
四、总结
总体使用下来我将从 用户友好程度、开发文档支持程度、性能三个方面 对 Orange Pi AI Pro 进行总结:
- 用户友好程度:烧录好的系统和日常经常使用 Unbutu 系统体验上并无任何不同,更为绚丽的界面、精简的系统、完整的开发资料都极大的有助于新手快速玩转开发板。我做的是一个音频生成的模型,模型参数超过了 2G,在 c 上可以顺利的运行、并生成相应风格的音乐。此外,OrangePi AIpro 系统的烧录和启动都很为新手着想(我就是新手),可以选择TF卡、eMMC 或 SSD 作为启动介质,每种方式都有详细的官方指南,系统玩出问题了,恢复起来也很简单。
- 开发文档支持:作为新手,其实我们最担心的问题就是文档全不全、教程多不多、教程详细不详细!很幸运,OrangePi AIpro 有着详尽的教程;用户手册内容详实,从硬件参数到软件配置,乃至进阶功能均有详细解说(收集到的一些教程我也会附在后面,方便大家查阅)。每个模块都有单独的说明,比较丰富的应用示例,一站式找到所有文档的服务极大的降低了新手在开发中走弯路的可能。
- 性能:Orange Pi AI Pro 主打一个性价比!搭载的华为昇腾AI处理器,以 8TOPS 的INT8 算力和 4 TFLOPS FP16 的浮点运算能力,为复杂AI模型提供了强大的计算支撑。我在 8G 版本的 Orange Pi AI Pro 上 成功的运行了 MusicGen模型,其模型参数大小为 2.2G 这对于 8G 版本的 Orange Pi AI Pro 来说,无疑是一个极大的挑战。