RAVE: 实时音频变分自动编码器
Antoine Caillon 和 Philippe Esling 所著的 RAVE: 一种用于快速和高质量神经音频合成的变分自动编码器 的官方实现 (文章链接)。
如果您将 RAVE 用作音乐表演或装置的一部分,请务必引用这个代码库或这篇文章!
如果您想分享/讨论/询问有关 RAVE 的事情,您可以在我们的 Discord 服务器 上进行交流!
请在发布问题之前查阅 FAQ!
RAVE VST 适用于 Windows、Mac 和 Linux 的 RAVE VST 测试版现已在 相应的 IRCAM 论坛网页 提供。如有问题,请在此处或 IrCAM 论坛讨论页面 上发布问题。
教程 : 新教程已在 IRCAM 论坛网页发布,并且视频版本即将推出!
以前的版本
可以使用以下命令恢复 RAVE 模型的原始实现
git checkout v1
安装
使用以下命令安装 RAVE
pip install acids-rave
警告 强烈建议在安装 acids-rave
之前安装 torch
和 torchaudio
,以便您可以在 库网站 上选择适当版本的 torch。为了与新设备(和现代 Python 环境)未来的兼容性,rave-acids
不再强制要求 torch==1.13。
您的计算机上需要安装 ffmpeg。您可以在虚拟环境中本地安装它,命令如下
conda install ffmpeg
Colab
多亏了 hexorcismos,现在可以使用 Colab 来训练 RAVEv2!
使用方法
训练 RAVE 模型通常涉及三个独立的步骤,即 数据集准备、训练 和 导出。
数据集准备
您可以使用两种方法来准备数据集:常规方法和懒惰方法。懒惰预处理允许 RAVE 直接在原始文件(即 mp3、ogg)上训练,而无需先转换它们。警告:懒惰数据集加载将在训练期间大幅增加您的 CPU 负载,尤其是在 Windows 上。然而,这在训练大型音频语料库时很有用,因为未压缩时这些语料库不会适合硬盘存储。在任何情况下,使用以下命令准备您的数据集
rave preprocess --input_path /audio/folder --output_path /dataset/path --channels X (--lazy)
训练
RAVEv2 有许多不同的配置。v1 的改进版本称为 v2
,因此可以使用以下命令进行训练
rave train --config v2 --db_path /dataset/path --out_path /model/out --name give_a_name --channels X
我们还提供了一个离散配置,类似于 SoundStream 或 EnCodec
rave train --config discrete ...
默认情况下,RAVE 使用非因果卷积构建。如果您希望使模型因果化(从而降低模型的整体延迟),可以使用因果模式
rave train --config discrete --config causal ...
2.3 新增数据增强功能,可以在低数据环境中提高模型的泛化能力。您可以通过在命令中添加 --augment
关键字来添加数据增强
rave train --config v2 --augment mute --augment compress
rave/configs
中还有许多其他配置文件,可以组合使用。以下是所有可用配置和增强的列表:
增强 静音 随机静音数据批次(默认概率:0.1)。强制模型学习静音。
压缩 随机压缩波形(相当于轻微的非线性放大批次)。
增益 对波形应用随机增益(默认范围:[-6, 3])。
导出
训练完成后,使用如下命令将您的模型导出为 torchscript 文件:
rave export --run /path/to/your/run (--streaming)
设置 --streaming
标志将启用缓存卷积,使模型兼容实时处理。如果您忘记使用流模式并尝试在 Max 中加载模型,您将听到点击伪影。
先验
对于离散模型,我们建议用户使用 msprior
库,可以在此处找到。但是,由于该库仍处于实验阶段,1.x 版本的先验已重新集成到 v2.3 中。
训练
要为预训练的 RAVE 模型训练一个先验:
rave train_prior --model /path/to/your/run --db_path /path/to/your_preprocessed_data --out_path /path/to/output
这将训练先验通过预训练模型 path/to/your/run
的潜变量,并将模型和 tensorboard 日志保存到文件夹 /path/to/output
。
脚本
要将先验与 RAVE 模型一起脚本化,请为您的预训练先验提供 --prior
关键字来导出您的模型:
rave export --run /path/to/your/run --prior /path/to/your/prior (--streaming)
预训练模型
多个预训练的流模型可以在这里找到。我们将保持列表更新,新模型随时可用。
实时使用
本节介绍如何在 nn~
中加载 RAVE 以便与 Max/MSP 或 PureData 实时使用。
重建
名为 darbouka.gin
的预训练 RAVE 模型可以按照如下语法在 nn~
中加载,默认方法设置为向前(即编码然后解码)
这与以下补丁做的事情相同,但速度略快。
高级操作
显式访问 RAVE 产生的潜表示允许我们使用 Max/MSP 或 PureData 信号处理工具与表示交互:
风格迁移
默认情况下,RAVE 可以用作风格迁移工具,基于模型的大压缩比。我们最近添加了一种受 StyleGAN 启发的技术,将自适应实例归一化纳入重建过程中,有效地允许在 Max/MSP 或 PureData 中直接定义 源 和 目标 风格,使用 nn~
的属性系统。
其他属性,如 enable
或 gpu
,可以启用/禁用计算,或使用 gpu 加速(仍在实验中)。
离线使用
v2.3 中发布了批量生成脚本,允许转换大量文件
rave generate model_path path_1 path_2 --out out_path
其中 model_path
是训练模型的路径(原始或脚本化),path_X
是音频文件或目录的列表,out_path
是生成的输出目录。
讨论
如果您有任何问题,想分享您对 RAVE 的经验或使用该模型创作的音乐作品,您可以使用讨论标签!
演示
RAVE x nn~
展示您可以使用 RAVE 和 nn~ 扩展在 maxmsp 上实现的功能!
嵌入式 RAVE
将 nn~ 用于 puredata,RAVE 可在嵌入式平台上实时使用!
常见问题解答 (FAQ)
问题: 我的预处理卡住了,显示 0it[00:00, ?it/s]
答案: 这意味着您的数据集中的音频文件太短,无法为 RAVE 提供足够的时间范围。尝试使用 --num_signal XXX(samples)
减小信号窗口,使用 preprocess
,之后不要忘记在 train
中添加 --n_signal XXX(samples)
。
问题: 训练过程中出现异常 ValueError: n_components=128 must be between 0 and min(n_samples, n_features)=64 with svd_solver='full'
答案: 这意味着您的数据集没有足够的数据批次来计算内部特征主成分分析(PCA),需要至少 128 个示例(然后批次)。
资金
此项工作由 IRCAM 领导,并由以下项目资助:
- ANR MakiMono
- ACTOR
- DAFNE+ N° 101061548
类型 | 名称 | 描述 |
---|---|---|
架构 | v1 | 原始连续模型(最低 GPU 内存:8GB) |
v2 | 改进的连续模型(更快,更高质量)(最低 GPU 内存:16GB) | |
v2_small | 具有较小感受野的 v2,适应对抗训练和噪声生成器,适用于定常信号的音色转移(最低 GPU 内存:8GB) | |
v2_nopqmf | (实验性)生成器中无 pqmf 的 v2(更适用于弯曲用途)(最低 GPU 内存:16GB) | |
v3 | 带有 Snake 激活、描述判别器和自适应实例规范化的 v2,用于真实风格转移(最低 GPU 内存:32GB) | |
discrete | 离散模型(类似于 SoundStream 或 EnCodec)(最低 GPU 内存:18GB) | |
onnx | 用于 ONNX 使用的无噪声 v1 配置(最低 GPU 内存:6GB) | |
raspberry | 与实时 RaspberryPi 4 推理兼容的轻量级配置(最低 GPU 内存:5GB) | |
正则化(仅 v2) | default | 变分自动编码器目标(ELBO) |
wasserstein | Wasserstein 自动编码器目标(MMD) | |
spherical | 球面自动编码器目标 | |
判别器 | spectral_discriminator | 使用 EnCodec 的多尺度判别器。 |
其他 | causal | 使用因果卷积 |
noise | 启用噪声合成器 V2 | |
hybrid | 启用梅尔频谱图输入 |