欢迎光临散文网 会员登陆 & 注册

DiffSinger(OpenVPI 维护版)v2.0.0 更新日志

2023-07-17 12:00 作者:YQ之神  | 我要投稿

v2.0.0:完全重构、全新唱法模型、通用词典支持、半精度/多卡训练支持与诸多改进

项目开源地址:https://github.com/openvpi/DiffSinger

交流QQ群:907879266

总体架构图

不兼容更改及迁移指南

数据集制作

数据集制作流程(MFA)已迁移至专用仓库 MakeDiffSinger。原有的 Jupyter Notebook 已被移除并替换为了更加灵活、分步执行的命令行脚本。

旧功能移除

以下功能已移除并不再支持:

  • MIDI-A/B 模式的训练和推理

  • PitchExtracter (xiaoma_pe) 的训练和推理

  • 旧版 24 kHz 声码器(HiFi-GAN, PWG)的训练和推理

环境依赖

环境依赖已重置,需要重新安装依赖。ONNX 导出依赖已从 PyTorch 1.8 更改为 PyTorch 1.13。

模型加载

旧的声学模型权重在加载前需要根据报错信息使用脚本进行迁移:

若要使用旧权重继续训练,需要在配置文件添加一行:

数据集

旧数据集在开始训练前需要重新预处理。

旧数据标注(transcriptions.txt)在加载前需要根据报错信息使用脚本迁移至新的 transcriptions.csv:

配置文件

以下配置项的名称已更改:

  • g2p_dictionary => dictionary

  • max_tokens => max_batch_frames

  • max_sentences => max_batch_size

  • max_eval_tokens => max_val_batch_frames

  • max_eval_sentences => max_val_batch_size

  • lr => optimizer_args.lr

  • optimizer_adam_beta1 -> optimizer_args.beta1

  • optimizer_adam_beta2 -> optimizer_args.beta2

  • weight_decay -> optimizer_args.weight_decay

  • warmup_updates -> lr_scheduler_args.warmup_steps

  • decay_steps => lr_scheduler_args.step_size

  • gamma => lr_scheduler_args.gamma

数据增强相关配置新增开关属性,需要额外设置开启才可启用,例如:

DS 文件

旧的 DS 文件格式已不再兼容。请使用最新版本 OpenUTAU for DiffSinger (https://github.com/xunmengshe/OpenUtau) 导出新版本格式的 DS 文件进行推理。

全新唱法模型、参数与机制

唱法模型

全新唱法模型已开放训练与推理,主要基于扩散模型,具备高表现力、高还原度、高自由度与高可控性。

包含功能(可自由搭配):

  • 自动预测音素长度(Duration Predictor)

  • 自动预测音高曲线(Pitch Diffusion)

  • 自动联合预测其他唱法参数(Multi-Variance Diffusion)

若要训练唱法模型,现有的数据标注需要进行迁移。根据选配功能与所用词典的不同,需要采取的措施有所区别(部分情况需要人工进行补充标注),详情可见:https://github.com/openvpi/MakeDiffSinger/tree/main/variance-temp-solution

音素时长

在声学模型中,用户需要输入每个音素的具体时长,因此声学模型的推理依赖于音素时长预测模型。唱法模型中的音素时长预测模块可根据音素序列、词划分、词长与近似 MIDI 序列预测每个音素的时长。

音高曲线

声学模型的推理依赖于外部输入的给定音高曲线。唱法模型中的音高曲线预测模块可根据音素信息与平滑 MIDI 基准音高自动预测唱段的实际音高曲线。特别设计的 MIDI 标注方案使得音准不佳的数据依然可参与训练并得到音准良好的模型(语音数据除外)。

唱法参数

唱法参数可在音素时长、音高曲线以外为模型赋予更高表现力与可控性。唱法参数由唱法模型根据音素信息与音高曲线进行预测输出并由声学模型接受参数输入,从而实现控制。

注:唱法参数均为实际值表示而非相对偏移表示,因此不存在默认值曲线。若需要控制唱法参数,除需训练对应参数的唱法预测模块以外,还需额外训练开启了相应参数输入的声学模型。

能量

能量(Energy)定义为唱段的 RMS 响度曲线,单位为 dB,可在一定程度上控制演唱的力度。

在 DS 文件中,可使用 energy 和 energy_timestep 对能量参数进行控制。

气声

气声(Breathiness)定义为唱段中非周期性部分的 RMS 响度曲线,单位为 dB,可控制演唱的气流强度与清辅音的发声强度。

在 DS 文件中,可使用 breathiness 和 breathiness_timestep 对气声参数进行控制。

唱法融合机制

所有唱法模型支持的参数(音素时长、音高参数、其他唱法参数)均适配动态唱法融合。其中,音素时长序列以音素为单位融合,其余参数以帧为单位融合。不同参数的唱法融合、唱法融合与声学模型的声线融合之间互相独立,互不影响。

唱法融合在 DS 文件中的控制方式与声线融合类似:

  • 使用 ph_spk_mix 对音素时长融合比例进行控制。

  • 使用 spk_mix 与 spk_mix_timestep 对其余参数融合比例进行控制。

局部重录机制

音高参数与所有唱法参数均支持局部重录,即给定已有的参数曲线,补全或重录任意连续子区间的参数曲线。同时,该机制可使得重录部分的参数与给定的参数平滑衔接。

在重录音高参数时,需要给定完整音素信息、需要重录的片段位置、非重录部分的音高参数。重录音高参数时,将根据给定条件重新生成对应区间的音高曲线。

在重录其他唱法参数时,需要给定完整音素信息、完整音高曲线、需要重录的唱法参数名称(支持同时重录多个参数)、需要重录的片段位置(支持不同参数重录不同位置)、非重录部分的对应唱法参数。重录唱法参数时,将根据给定条件重新生成每个参数对应区间的曲线。

参数耦合机制

总体耦合逻辑

唱法模型的总体耦合顺序为:曲谱信息 => 音素时长 => 音高 => 其他唱法参数。

自定义唱法耦合

借助局部重录机制,除音高外的其他唱法参数可在每次推理时灵活自定义耦合顺序。以下为使用场景示例:

  • 联合预测参数 A、参数 B 与参数 C,三者一次性生成,但彼此无耦合关系,修改其中一种参数不会影响另外两种参数;

  • 使参数 C 耦合于参数 A 与 B,即先一次性生成参数 A 与 B,再根据前置条件与参数 A、B 匹配预测参数 C,对参数 A 与 B 进行修改后参数 C 将随之改变,但参数 A 与 B 互不影响;

  • 冻结参数 A,使得参数 B 与 C 互相耦合,根据前置条件与参数 A 自动预测匹配参数 B 与 C,修改 B、C 中任意一种参数后,另一种参数将随之改变。

通用词典与音素系统支持

全新的唱法模型与音素标注方案支持任意词典与音素系统(包括两段式与任意多段式)。具体请查看唱法标注迁移指南 (https://github.com/openvpi/MakeDiffSinger/tree/main/variance-temp-solution) 与自定义词典说明 (https://github.com/openvpi/DiffSinger/blob/main/docs/BestPractices.md#using-custom-dictionaries)。

混合精度、多 GPU 与梯度累积

项目已适配最新版本的 Lightning 框架,并新增了对混合精度(FP16、BF16 AMP)、多 GPU 训练(DDP)、梯度累积的支持,可提速训练过程或节省显存。详情请见性能调优说明 (https://github.com/openvpi/DiffSinger/blob/main/docs/BestPractices.md#performance-tuning)。

其他新增内容与调整

  • 项目的文档已进行重构,在 README 中进行了罗列,并为重要参考链接添加了指引。

  • 代码结构与依赖项进行了大幅重构和化简,对部分依赖进行了更新。

  • 预处理、训练、推理与导出的脚本已重构并统一移至 scripts/ 目录下。

  • 新增一个可从模型权重文件中删除特定说话人标签的脚本(drop_spk.py)。

  • 从命令行执行预处理与训练时,不再需要设置 PYTHONPATH 与 CUDA_VISIBLE_DEVICES

  • 现可通过 spk_ids 配置项自定义控制每个数据集分配到的说话人 ID,并支持为多个数据集赋予相同的说话人 ID。

  • 支持了多进程加速预处理,并可自定义进程数量。

  • 数据集二进制格式已更改为 HDF5,并移除了冗余内容。

  • 学习率与优化器现可通过 lr_scheduler_args 与 optimizer_args 进行更灵活的自定义。

  • 新增 DDIM、DPM-Solver++(替代 DPM-Solver)、UniPC 扩散加速算法支持。

  • ONNX 模型中集成的扩散加速算法已更改为 DDIM。

  • 导出 ONNX 多说话人模型时,若不指定 --export_spk 参数,将默认导出所有说话人。

  • ONNX 模型算子版本号已升级至 15。

部分更改可能未列出,具体请查阅仓库 README。

错误修复

  • 修复了训练时终端输出的 epoch 数仅为实际 epoch 数的 1/1000 的问题。

  • 修复了读取数据集时可能存在的文件句柄争用。

  • 修复了联合数据增强实现结果与公式不一致的问题。

  • 修复了部分终端无法渲染超参颜色的问题。

  • 修复了训练时代码备份目录结构错乱的问题。

许可证

本项目的许可证由 MIT 许可证更改为 Apache 2.0 许可证。

特别鸣谢

  • 感谢由 AutoDL 算力云 (https://www.autodl.com/) 免费提供的实验计算资源。

  • 感谢由河南冰月凛文化传媒有限公司赞助的 GPU 租赁费用。


DiffSinger(OpenVPI 维护版)v2.0.0 更新日志的评论 (共 条)

分享到微博请遵守国家法律