Audiocraft|可根据旋律自动编曲的音乐生成工具
Audiocraft 是一个 PyTorch 库,用于音频生成的深度学习研究。 目前,它包含 MusicGen 的代码,这是一种最先进的可控文本到音乐模型。
Audiocraft提供了MusicGen的代码和模型,这是一个简单且可控的音乐生成模型。MusicGen是一个单阶段自回归Transformer模型,使用32kHz的EnCodec tokenizer进行训练,采样频率为50 Hz,使用4个码本。与现有的方法(如MusicLM)不同,MusicGen不需要自监督语义表示,它可以在一次通过中生成所有4个码本。通过在码本之间引入一个小的延迟,我们展示了可以同时预测它们,因此每秒只需要50个自回归步骤即可生成音频。
在训练MusicGen时,我们使用了20K小时的授权音乐。具体来说,我们依靠一个内部数据集,其中包含10K个高质量的音乐曲目,以及来自ShutterStock和Pond5的音乐数据。
项目仓库
GitHub:facebookresearch/audiocraft
前置条件
在执行项目安装之前,我们还需要安装Git
和Conda
,还有FFMpeg
,如果您的电脑还未安装这几个软件,请先根据本站所给出的教程安装。
Windows系统安装Git请参阅此文章:
Windows系统安装Conda请参阅此文章:
Windows系统安装FFMpeg请参阅此文章:
网络问题
在安装过程中,你可能即便开启了魔法上网也无法下载一些编程依赖库,关于魔法上网的相关配置问题不方便在站内讲解,请前往查看【魔法上网】的教程内容。
安装教程
如果您是初学者,对于命令行不太理解,那么请按下键盘上的Win键+R键
后,在弹出的新窗口内输入CMD并按下回车,打开CMD窗口,按顺序执行如下的每一条命令。
首先我们需要确认一个工作目录,用来存放该项目的相关环境依赖文件。本站所选择的目录为D盘
的根目录下openai.wiki
文件夹,完整路径为:D:\openai.wiki
。
检测D盘
是否在openai.wiki
目录,没有则创建该文件夹。
if not exist D:\openai.wiki mkdir D:\openai.wiki
强制切换工作路径为D盘的openai.wiki
文件夹。
cd /d D:\openai.wiki
拉取该项目的Github仓库文件,将其下载至openai.wiki
文件夹内。
git clone https://github.com/facebookresearch/audiocraft.git
环境部署
在CMD中执行如下命令,强制切换至audiocraft
的项目目录。
cd /d D:\openai.wiki\audiocraft
在CMD中执行下面的命令行,创建Conda虚拟环境至该项目的目录中,方便日后重装系统也能够正常使用,无需重新部署环境。
conda create -y -p D:\openai.wiki\audiocraft\ENV python=3.9
初始化Conda环境,防止后续操作可能存在报错等问题。
conda init cmd.exe
激活已创建的Conda环境,这样我们可以将我们后续所需要的所有环境依赖都安装至此环境下。
conda activate D:\openai.wiki\audiocraft\ENV
PyTorch
此部分内容比较特殊且复杂,本文中仅做简单安装介绍,详细安装教程可以【点此查看】。
1. 在安装PyTorch之前,您需要先前往官网(PyTorch)查看自己应该安装哪个版本。
2.请您像下图一样按顺序选择即可,依次选择
Stable
->Windows
->Conda
->Python
->CUDA 11.8
。备注:如果您看到的不是CUDA 11.8,而是CUDA 11.9或更高的版本也没关系,只要前缀是CUDA即可。
3.在您按顺序选择好之后,复制下面的<
Run this Command
>的内容即可,例如本站所得到的为:
conda install pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia
提示:将您所复制的代码直接粘贴至CMD窗口内执行,此时将会自动安装PyTorch和对应版本的CUDA,因为PyTorch比较大,所以等待时间会比较长,请不要中断该操作。
注意:一定要复制你自己得到的,尽量不要直接使用本站所给出的示例命令行!
为了可以拥有更高的执行效率,我们还需要执行如下命令,安装xformers
依赖库。
pip install xformers
执行如下命令,安装该项目的相关依赖库。
pip install -e .
模型下载
该项目提供了4个预训练模型,预训练模型包括:
- small
- 300M模型,仅支持文本到音乐
- medium
- 1.5B模型,仅支持文本到音乐
- melody
- 1.5B模型,支持文本到音乐和文本+旋律到音乐
- large
- 3.3B模型,仅支持文本到音乐
我们观察到,medium或melody模型在质量和计算性能之间达到了最佳平衡。要在本地使用MusicGen,您必须具备GPU。我们建议使用16GB内存,但较小的GPU也可以生成短序列,或使用small模型生成较长的序列。
注意:在使用较新版本的torchaudio时,请确保已安装ffmpeg。
官方下载
- small
- medium
- melody
- large
网盘下载
关于此项目的模型,本站已为您下载并整理好。如果你不方便通过官网下载,可以使用本站所提供的网盘下载地址。
模型配置
在你首次运行生成代码或运行GUI界面生成音频时,将会自动下载模型,但自动下载的地址在国外,所以下载速度会非常慢,而WebUI的界面中没有配置模型路径的界面,所以我们需要将模型放置在系统的默认路径内,以下是关于配置模型路径的方法。
在CMD中输入如下命令行,可以在运行中执行以下代码,这将会自动打开huggingface的模型缓存目录,我们将模型文件夹移动至该目录中即可。
%USERPROFILE%\.cache\huggingface\hub
运行方式
在以后每次运行该项目时,只需要先激活我们刚刚所创建的Conda虚拟Python环境,然后运行启动文件即可。
在CMD中执行如下命令,强制切换至项目目录文件夹。
cd /d D:\openai.wiki\audiocraft
激活已创建的Conda环境,这样才可以正常使用该项目,否则将会自动调用系统中的默认Python。
conda activate D:\openai.wiki\audiocraft\ENV
执行如下代码,运行程序的GUI界面。
python app.py
启动成功后将会在CMD窗口内看到如下内容:
Running on local URL: http://127.0.0.1:7860
此时我们在浏览器内打开该网址,即可看到该WebUI界面。
我们可以看到,在该界面的下方存在一个Examples区域,表格中的各项就是示例,我们可以通过点击表格来快速载入示范配置。
使用教程
由功能较多,所以本站将各功能模块拆分出来单独讲解,这样大家更容易理解。
Input Text
:描述文本区域,也可以理解为Prompt,目前只支持英文。比如本站本次输入的内容可以翻译中文为:一首20世纪的流行歌曲,背景音是重鼓和钢琴。
Melody Condition (optional)
:旋律加载区域,如果你希望加载一段和弦,那么可以将和弦加载至此处。
关于什么是旋律,本站提供几段示例给大家,而且为了避免与官方音频完全一致,本站本次演示时使用了苹果来电铃声来做为演示。
注意:旋律并不是每个模型都可以加载,目前只有通过melody
模型生成音频才可以加载旋律。
Submit
:生成按钮,在我们设置好所有参数之后,点击该按钮进行音频生成。
Model
:模型选择区域,目前官方提供了四张模型方法,前面已经讲到过各模型的区别,这里还是再复述一下吧。
small
|medium
|large
都是只支持通过文本生成音频;而melody
比较特殊,它支持通过文本生成音频的同时,还支持加载旋律。
这些模型中large
模型需要16GB显存,其它模型对于显存要求较小。
各模型的质量分为small
<medium
<melody
<large
,所以越靠后的模型效果越好,但对显存要求同样越高。
Duration
:该区域为音频时长设置,默认生成的音频时长为10秒,如果你的显存够大,可以适当增加音频时长。
以下参数不建议调整,采用默认值即可。
Top_k
:用于采样,默认为250。
T
op_p
:用于采样,设置为0时使用top_k。默认为 0.0。
Softmax
:温度参数,默认为 1.0。
Classifier Free Guidance
:用于分类器自由指导的系数,默认为3.0。
效果示例
以下是本站通过iPhone铃声所生成的音频效果,具体的参数设置如下图所示。
命令行
除了通过WebUI界面来进行操作之外,我们也可以使用命令行来控制各模型的使用,以下是各模型通过代码生成的示范。
small
import torchaudio # 导入torchaudio库 from audiocraft.models import MusicGen # 从audiocraft.models库导入MusicGen from audiocraft.data.audio import audio_write # 从audiocraft.data.audio库导入audio_write方法 model = MusicGen.get_pretrained('small') # 获取预训练的small模型 model.set_generation_params(duration=8) # 设置生成的音频时间为8秒 descriptions = ['happy rock', 'energetic EDM', 'sad jazz'] # 定义三个音乐风格描述 wav = model.generate(descriptions) # 根据描述生成3个音频样本 for idx, one_wav in enumerate(wav): # 将生成的音频保存为{idx}.wav,音量标准化为-14dB LUFS audio_write(f'{idx}', one_wav.cpu(), model.sample_rate, strategy="loudness")
medium
import torchaudio # 导入torchaudio库 from audiocraft.models import MusicGen # 从audiocraft.models库导入MusicGen from audiocraft.data.audio import audio_write # 从audiocraft.data.audio库导入audio_write方法 model = MusicGen.get_pretrained('medium') # 获取预训练的medium模型 model.set_generation_params(duration=8) # 设置生成的音频时间为8秒 descriptions = ['happy rock', 'energetic EDM', 'sad jazz'] # 定义三个音乐风格描述 wav = model.generate(descriptions) # 根据描述生成3个音频样本 for idx, one_wav in enumerate(wav): # 将生成的音频保存为{idx}.wav,音量标准化为-14dB LUFS audio_write(f'{idx}', one_wav.cpu(), model.sample_rate, strategy="loudness")
melody
import torchaudio # 导入torchaudio库 from audiocraft.models import MusicGen # 从audiocraft.models库导入MusicGen from audiocraft.data.audio import audio_write # 从audiocraft.data.audio库导入audio_write方法 model = MusicGen.get_pretrained('melody') # 获取预训练的melody模型 model.set_generation_params(duration=8) # 生成的音频时间为 8 秒 wav = model.generate_unconditional(4) # 生成 4 个无条件音频样本 descriptions = ['happy rock', 'energetic EDM', 'sad jazz'] # 定义三个音乐风格描述 wav = model.generate(descriptions) # 生成 3 个样本。 melody, sr = torchaudio.load('./assets/bach.mp3') # 加载旋律文件 # 使用给定音频和提供的描述中的旋律生成 wav = model.generate_with_chroma(descriptions, melody[None].expand(3, -1, -1), sr) for idx, one_wav in enumerate(wav): # 将生成的音频保存为{idx}.wav,音量标准化为-14dB LUFS audio_write(f'{idx}', one_wav.cpu(), model.sample_rate, strategy="loudness")
large
import torchaudio # 导入torchaudio库 from audiocraft.models import MusicGen # 从audiocraft.models库导入MusicGen from audiocraft.data.audio import audio_write # 从audiocraft.data.audio库导入audio_write方法 model = MusicGen.get_pretrained('large') # 获取预训练的large模型 model.set_generation_params(duration=8) # 生成的音频时间为 8 秒 descriptions = ['happy rock', 'energetic EDM', 'sad jazz'] # 定义三个音乐风格描述 wav = model.generate(descriptions) # 生成 3 个样本。 for idx, one_wav in enumerate(wav): # 将生成的音频保存为{idx}.wav,音量标准化为-14dB LUFS audio_write(f'{idx}', one_wav.cpu(), model.sample_rate, strategy="loudness")
模型详情
- 开发模型的组织:Meta AI 的 FAIR 团队。
- 模型日期:MusicGen 在 2023 年 4 月至 2023 年 5 月间进行训练。
- 模型版本:这是模型的第 1 个版本。
- 模型类型:MusicGen 包括用于音频标记化的 EnCodec 模型,以及基于 Transformer 架构的自回归语言模型,用于音乐建模。模型有不同的大小:300M、1.5B 和 3.3B 参数;以及两个变体:针对文本到音乐生成任务的训练模型和针对旋律引导音乐生成的训练模型。
- 更多信息的论文或资源:可以在论文 Simple and Controllable Music Generation 中找到更多信息。
- 引用详细信息:请参阅我们的论文。
- 许可证:代码使用 MIT 许可发布,模型权重使用 CC-BY-NC 4.0 许可发布。
- 如何发送关于模型的问题或评论:可以通过项目的 Github 仓库发送关于 MusicGen 的问题和评论,或者通过创建一个 issue。
预期用途
- 主要预期用途:MusicGen 的主要用途是研究基于 AI 的音乐生成,包括:
- 研究工作,例如探究并更好地了解生成模型的局限性,以进一步提高科学水平
- 通过文本或旋律引导生成音乐,以了解生成型 AI 模型在机器学习爱好者中的现有能力
- 主要预期用户:模型的主要预期用户是音频、机器学习和人工智能领域的研究人员,以及希望更好地了解这些模型的业余爱好者。
- 范围外用例:在进一步评估和减轻风险之前,不应将模型用于下游应用。模型不应用于故意创建或传播使人感到敌对或疏远的音乐作品。这包括生成人们可以预见的令人不安、痛苦或冒犯的音乐;或者传播历史或现实的刻板印象。
指标
- 模型性能衡量:我们在标准音乐基准上使用以下客观衡量标准来评估模型:
- 基于预训练音频分类器(VGGish)提取的特征计算 Frechet 音频距离
- 基于预训练音频分类器(PaSST)提取的标签分布计算 Kullback-Leibler 散度
- 预训练 CLAP 模型提取的音频嵌入和文本嵌入之间的 CLAP 分数
- 此外,我们还进行了与人类参与者的定性研究,从以下几个方面评估模型的性能:
- 音乐样本的整体质量;
- 与提供的文本输入的文本相关性;
- 对于旋律引导音乐生成,坚持旋律。
- 关于性能衡量和人类研究的更多细节可以在论文中找到。
- 决策阈值:不适用。
评估数据集
- 模型在 MusicCaps 基准和一个与培训集无艺术家重叠的内部领域评估集上进行评估。
训练数据集
- 模型使用以下来源的许可数据进行训练:Meta Music Initiative Sound Collection、Shutterstock 音乐收藏和 Pond5 音乐收藏。有关训练集及相应预处理的更多详细信息,请参阅论文。
定量分析
- 更多信息可以在论文 Simple and Controllable Music Generation 的实验设置部分找到。
局限性和偏见
- 数据:用于训练模型的数据源由音乐专业人士创建,并通过与权利人的法律协议进行保护。模型在 20K 小时的数据上进行训练,我们相信在更大的数据集上扩展模型可以进一步提高模型的性能。
- 缓解措施:使用相应标签从数据源中删除人声,然后使用最先进的音乐源分离方法,即使用开源 Hybrid Transformer for Music Source Separation (HT-Demucs)。
- 局限性:
- 该模型无法生成逼真的人声。
- 该模型已针对英语描述进行训练,在其他语言上表现可能不佳。
- 该模型对所有音乐风格和文化的表现并不都很好。
- 该模型有时会生成歌曲的结尾,崩溃为静音。
- 有时难以评估哪种类型的文本描述能提供最佳生成结果。可能需要提示工程以获得满意的结果。
- 偏见:数据来源可能缺乏多样性,所有音乐文化都没有在数据集中得到平等的代表。模型可能无法在广泛的音乐类型上表现得同样出色。模型生成的样本将反映训练数据的偏见。对此模型的进一步工作应包括平衡和公正地表示文化的方法,例如,通过扩展训练数据使其既多样又包容。
风险和损害
- 偏见和局限性可能导致生成被认为是偏见、不适当或冒犯的样本。我们相信,提供重现研究和训练新模型的代码将有助于将应用拓展到新的、更具代表性的数据。
- 用例:用户必须了解模型的偏见、局限性和风险。MusicGen 是为人工智能研究可控音乐生成而开发的模型。因此,在对风险进行进一步调查和减轻之前,不应将其用于下游应用。
总结
最后的效果其实还可以,但是并没有超出站长的预期,但是也能凑合。
其实理论上音频领域是比图像领域的AI进化速度更快的,因为图像是更复杂的,所以音频领域的春天也快到了,后面可能可以根据哼唱的一句调调就生成完整的音乐啦。
(f:\openai.wiki\audiocraft\ENV) f:\openai.wiki\audiocraft>python app.py python: can’t open file ‘f:\openai.wiki\audiocraft\app.py’: [Errno 2] No such file or directory 您好请问这个怎么解决呢
@01 app.py我百度了也没找到解决方法TT
@01 还有这个C:\Users\Administrator>%USERPROFILE%\.cache\huggingface\hub
‘C:\Users\Administrator\.cache\huggingface\hub’ 不是内部或外部命令,也不是可运行的程序
或批处理文件。
@01 官方文档显示已经将app.py更名musicgen_app.py并置于demos文件夹下