DiffSinger(OpenVPI 维护版)v2.0.0 更新日志
v2.0.0:完全重构、全新唱法模型、通用词典支持、半精度/多卡训练支持与诸多改进
项目开源地址:https://github.com/openvpi/DiffSinger
交流QQ群:907879266

不兼容更改及迁移指南
数据集制作
旧功能移除
MIDI-A/B 模式的训练和推理
PitchExtracter (xiaoma_pe) 的训练和推理
环境依赖
环境依赖已重置,需要重新安装依赖。ONNX 导出依赖已从 PyTorch 1.8 更改为 PyTorch 1.13。
模型加载
旧的声学模型权重在加载前需要根据报错信息使用脚本进行迁移:
若要使用旧权重继续训练,需要在配置文件添加一行:
数据集
配置文件
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 文件
全新唱法模型、参数与机制
唱法模型
包含功能(可自由搭配):
自动预测音素长度(Duration Predictor)
自动预测音高曲线(Pitch Diffusion)
自动联合预测其他唱法参数(Multi-Variance Diffusion)
若要训练唱法模型,现有的数据标注需要进行迁移。根据选配功能与所用词典的不同,需要采取的措施有所区别(部分情况需要人工进行补充标注),详情可见:
在 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 互不影响;
全新的唱法模型与音素标注方案支持任意词典与音素系统(包括两段式与任意多段式)。具体请查看唱法标注迁移指南 (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)。
其他新增内容与调整
代码结构与依赖项进行了大幅重构和化简,对部分依赖进行了更新。
预处理、训练、推理与导出的脚本已重构并统一移至 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。
错误修复
修复了读取数据集时可能存在的文件句柄争用。
修复了联合数据增强实现结果与公式不一致的问题。
修复了部分终端无法渲染超参颜色的问题。
许可证
本项目的许可证由 MIT 许可证更改为 Apache 2.0 许可证。
特别鸣谢
免费提供的实验计算资源。