当前位置: 首页 > news >正文

政安晨【零基础玩转各类开源AI项目】基于本地Linux Ubuntu系统部署及应用DDSP-SVC:基于DDSP(可微分数字信号处理)的实时端到端歌声转换系统

目录

简介

下载项目

建立虚拟环境

安装依赖库

下载预训练模型

1. 特征编码器

2.声编码器或增强器

3.音高提取器

应用前的预处理

1. 配置训练数据集和验证数据集

1.1 手动配置:

1.2 程序随机选择:

1.3 文件夹结构目录展示:

2. 样例合成器模型训练

训练

可视化

非实时变声

实时变声


政安晨的个人主页:政安晨

欢迎 👍点赞✍评论⭐收藏

希望政安晨的博客能够对您有所裨益,如有不足之处,欢迎在评论区提出指正!

简介

DDSP-SVC 是一个新的开源歌声转换项目,致力于开发可以在个人电脑上普及的自由 AI 变声器软件。

相比于著名的 SO-VITS-SVC, 它训练和合成对电脑硬件的要求要低的多,并且训练时长有数量级的缩短,和 RVC 的训练速度接近。

另外在进行实时变声时,本项目的硬件资源消耗显著低于 SO-VITS-SVC , 但可能略高于 RVC 最新版本。

虽然 DDSP 的原始合成质量不是很理想(训练时在 tensorboard 中可以听到原始输出),但在使用基于预训练声码器的增强器(老版本)或使用浅扩散模型(新版本)增强音质后,对于部分数据集可以达到不亚于 SOVITS-SVC 和 RVC 的合成质量。

老版本的模型仍然是兼容的,以下章节是老版本的使用说明。新版本部分操作是相同的,见之前章节。

免责声明:请确保仅使用合法获得的授权数据训练 DDSP-SVC 模型,不要将这些模型及其合成的任何音频用于非法目的。 本库作者不对因使用这些模型检查点和音频而造成的任何侵权,诈骗等违法行为负责。

1.1 更新:支持多说话人和音色混合。

2.0 更新:开始支持实时 vst 插件,并优化了 combsub 模型, 训练速度极大提升。旧的 combsub 模型仍然兼容,可用 combsub-old.yaml 训练,sins 模型不受影响,但由于训练速度远慢于 combsub, 目前版本已经不推荐使用。

3.0 更新:由于作者删库 vst 插件取消支持,转为使用独立的实时变声前端;支持多种编码器,并将 contentvec768l12 作为默认编码器;引入浅扩散模型,合成质量极大提升。

4.0 更新:支持最先进的 RMVPE 音高提取器,联合训练 DDSP 与扩散模型,提升推理与训练速度,进一步提升合成质量。

5.0 更新:支持更快速的 FCPE 音高提取器,改进 DDSP 模型与扩散模型,提升推理与训练速度,进一步提升合成质量。

下载项目

建立虚拟环境

小伙伴们可以尝试其它python版本,如果在安装依赖的过程中出现错误而且小伙伴们又没有能力解决的话,建议更换为 python 3.8的版本。

conda create -n DdspSvc python=3.8

安装依赖库

pip install -r requirements.txt

下载预训练模型

1. 特征编码器

(1)

Boxicon-default.png?t=O83Ahttps://ibm.ent.box.com/s/z1wgl1stco8ffooyatzdwsqn2psd9lrr下载后放至项目的pretrain/contentvec 文件夹中。

(2)

     https://github.com/bshall/hubert/releases/download/v0.1/hubert-soft-0d54a1f4.pticon-default.png?t=O83Ahttps://github.com/bshall/hubert/releases/download/v0.1/hubert-soft-0d54a1f4.pt下载后放至项目的pretrain/hubert 文件夹中。

同时需要修改配置文件中标明使用的是哪一个特征编码器。

2.声编码器或增强器

(1)声编码器(已经训练好的)

https://github.com/openvpi/vocoders/releases/download/nsf-hifigan-44.1k-hop512-128bin-2024.02/nsf_hifigan_44.1k_hop512_128bin_2024.02.zipicon-default.png?t=O83Ahttps://github.com/openvpi/vocoders/releases/download/nsf-hifigan-44.1k-hop512-128bin-2024.02/nsf_hifigan_44.1k_hop512_128bin_2024.02.zipOR

(2)小伙伴们可以自己微调声编码器以获得更高质量的声音。

https://github.com/openvpi/SingingVocodersicon-default.png?t=O83Ahttps://github.com/openvpi/SingingVocoders

注意:

重命名权重文件并放置在配置文件中 'vocoder.ckpt' 参数指定的位置,默认值是 pretrain/nsf_hifigan/model

声码器的 'config.json' 需要在同目录,比如 pretrain/nsf_hifigan/config.json

 

3.音高提取器

https://github.com/yxlllc/RMVPE/releases/download/230917/rmvpe.zipicon-default.png?t=O83Ahttps://github.com/yxlllc/RMVPE/releases/download/230917/rmvpe.zip将该预训练的提取器解压至 pretrain/ 文件夹。

应用前的预处理

1. 配置训练数据集和验证数据集

1.1 手动配置:

将所有的训练集数据 (.wav 格式音频切片) 放到 data/train/audio

将所有的验证集数

据 (.wav 格式音频切片) 放到 data/val/audio

1.2 程序随机选择:

运行python draw.py,程序将帮助你挑选验证集数据(可以调整 draw.py 中的参数修改抽取文件的数量等参数)。

1.3 文件夹结构目录展示:
  • 单人物目录结构:

data
├─ train
│    ├─ audio
│    │    ├─ aaa.wav
│    │    ├─ bbb.wav
│    │    └─ ....wav
├─ val
│    ├─ audio
│    │    ├─ eee.wav
│    │    ├─ fff.wav
│    │    └─ ....wav

  • 多人物目录结构:

data
├─ train
│    ├─ audio
│    │    ├─ 1
│    │    │   ├─ aaa.wav
│    │    │   ├─ bbb.wav
│    │    │   └─ ....wav
│    │    ├─ 2
│    │    │   ├─ ccc.wav
│    │    │   ├─ ddd.wav
│    │    │   └─ ....wav
│    │    └─ ...
|
├─ val
|    ├─ audio
│    │    ├─ 1
│    │    │   ├─ eee.wav
│    │    │   ├─ fff.wav
│    │    │   └─ ....wav
│    │    ├─ 2
│    │    │   ├─ ggg.wav
│    │    │   ├─ hhh.wav
│    │    │   └─ ....wav
│    │    └─ ...

2. 样例合成器模型训练

训练基于梳齿波减法合成器的模型 (推荐):

python preprocess.py -c configs/combsub.yaml

训练基于正弦波加法合成器的模型:

python preprocess.py -c configs/sins.yaml

注意:

  1. 请保持所有音频切片的采样率与 yaml 配置文件中的采样率一致!如果不一致,程序可以跑,但训练过程中的重新采样将非常缓慢。(可选:使用 Adobe Audition™ 的响度匹配功能可以一次性完成重采样修改声道和响度匹配。)

  2. 训练数据集的音频切片总数建议为约 1000 个,另外长音频切成小段可以加快训练速度,但所有音频切片的时长不应少于 2 秒。如果音频切片太多,则需要较大的内存,配置文件中将 cache_all_data 选项设置为 false 可以解决此问题。

  3. 验证集的音频切片总数建议为 10 个左右,不要放太多,不然验证过程会很慢。

  4. 如果您的数据集质量不是很高,请在配置文件中将 'f0_extractor' 设为 'rmvpe'.

  5. 配置文件中的 ‘n_spk’ 参数将控制是否训练多说话人模型。如果您要训练多说话人模型,为了对说话人进行编号,所有音频文件夹的名称必须是不大于 ‘n_spk’ 的正整数

训练

# 以训练 combsub 模型为例
python train.py -c configs/combsub.yaml

  1. 训练其他模型方法类似。

  2. 可以随时中止训练,然后运行相同的命令来继续训练。

  3. 微调 (finetune):在中止训练后,重新预处理新数据集或更改训练参数(batchsize、lr 等),然后运行相同的命令。

可视化

# 使用tensorboard检查训练状态
tensorboard --logdir=exp

第一次验证 (validation) 后,在 TensorBoard 中可以看到合成后的测试音频。

注:TensorBoard 中的测试音频是 DDSP-SVC 模型的原始输出,并未通过增强器增强。 如果想测试模型使用增强器的合成效果(可能具有更高的合成质量),请使用下一章中描述的方法。

非实时变声

推荐)使用预训练声码器增强 DDSP 的输出结果:

# 默认 enhancer_adaptive_key = 0 正常音域范围内将有更高的音质
# 设置 enhancer_adaptive_key > 0 可将增强器适配于更高的音域
python main.py -i <input.wav> -m <model_file.pt> -o <output.wav> -k <keychange (semitones)> -id <speaker_id> -e true -eak <enhancer_adaptive_key (semitones)>
  1. DDSP 的原始输出结果:
# 速度快,但音质相对较低(像您在tensorboard里听到的那样)
python main.py -i <input.wav> -m <model_file.pt> -o <output.wav> -k <keychange (semitones)> -e false -id <speaker_id>
  1. 关于 f0 提取器、响应阈值及其他参数,参见:
python main.py -h
  1. 如果要使用混合说话人(捏音色)功能,增添 “-mix” 选项来设计音色,下面是个例子:
# 将1号说话人和2号说话人的音色按照0.5:0.5的比例混合
python main.py -i <input.wav> -m <model_file.pt> -o <output.wav> -k <keychange (semitones)> -mix "{1:0.5, 2:0.5}" -e true -eak 0

实时变声

用以下命令启动简易操作界面:

python gui.py

该前端使用了滑动窗口,交叉淡化,基于 SOLA 的拼接和上下文语义参考等技术,在低延迟和资源占用的情况下可以达到接近非实时合成的音质。

更新:

现在加入了基于相位声码器的衔接算法,但是大多数情况下 SOLA 算法已经具有足够高的拼接音质,所以它默认是关闭状态。如果您追求极端的低延迟实时变声音质,可以考虑开启它并仔细调参,有概率音质更高。但大量测试发现,如果交叉淡化时长大于 0.1 秒,相位声码器反而会造成音质明显劣化。


有一定编程经验的小伙伴们可以尝试尝试,没有编程经验的小伙伴们政安晨这里就不建议了,大家看一看、感觉一下即可。

祝玩得愉快。嘻嘻。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 操作系统迁移(CentOs -> Ubuntu)
  • 先导小型五轴数控加工中心助力职业教育
  • 数据结构和算法之线性结构
  • C++中模板的初级使用函数模板(刚刚接触模板概念的小白也能明白)
  • 基于python+django+vue的影视推荐系统
  • 【Kubernetes】常见面试题汇总(十七)
  • 【计算机网络】第一章
  • 容器内的Nodejs应用如何获取宿主机的基础信息-系统、内存、cpu、启动时间,以及一个df -h的坑
  • 【计网】从零开始使用TCP进行socket编程 ---服务端业务模拟Xshell
  • 变脸大师:基于OpenCV与Dlib的人脸换脸技术实现
  • 掌握Spring Boot数据库集成:用JPA和Hibernate构建高效数据交互与版本控制
  • 【学习笔记】数据结构(六 ②)
  • 如何切换淘宝最新镜像源npm
  • 数字化转型中的企业蓝图构建:基于业务能力建模的全面解读与战略实施指南
  • 基于C语言+SQL Server2008实现(控制台)图书管理系统
  • 230. Kth Smallest Element in a BST
  • Consul Config 使用Git做版本控制的实现
  • JavaScript HTML DOM
  • Laravel 实践之路: 数据库迁移与数据填充
  • Meteor的表单提交:Form
  • Python3爬取英雄联盟英雄皮肤大图
  • TCP拥塞控制
  • 从0到1:PostCSS 插件开发最佳实践
  • 聊聊directory traversal attack
  • 如何用vue打造一个移动端音乐播放器
  • 如何正确配置 Ubuntu 14.04 服务器?
  • 《码出高效》学习笔记与书中错误记录
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • ​ 无限可能性的探索:Amazon Lightsail轻量应用服务器引领数字化时代创新发展
  • ​​​​​​​STM32通过SPI硬件读写W25Q64
  • ​一帧图像的Android之旅 :应用的首个绘制请求
  • $con= MySQL有关填空题_2015年计算机二级考试《MySQL》提高练习题(10)
  • (3)选择元素——(14)接触DOM元素(Accessing DOM elements)
  • (delphi11最新学习资料) Object Pascal 学习笔记---第13章第6节 (嵌套的Finally代码块)
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (待修改)PyG安装步骤
  • (算法二)滑动窗口
  • (五)MySQL的备份及恢复
  • (原創) 博客園正式支援VHDL語法著色功能 (SOC) (VHDL)
  • ******IT公司面试题汇总+优秀技术博客汇总
  • .equal()和==的区别 怎样判断字符串为空问题: Illegal invoke-super to void nio.file.AccessDeniedException
  • .NET 6 在已知拓扑路径的情况下使用 Dijkstra,A*算法搜索最短路径
  • .net core MVC 通过 Filters 过滤器拦截请求及响应内容
  • .net framework 4.8 开发windows系统服务
  • .Net mvc总结
  • .NET NPOI导出Excel详解
  • .NET处理HTTP请求
  • .Net开发笔记(二十)创建一个需要授权的第三方组件
  • .net开源工作流引擎ccflow表单数据返回值Pop分组模式和表格模式对比
  • .NET企业级应用架构设计系列之技术选型
  • ;号自动换行
  • @manytomany 保存后数据被删除_[Windows] 数据恢复软件RStudio v8.14.179675 便携特别版...
  • [ vulhub漏洞复现篇 ] Celery <4.0 Redis未授权访问+Pickle反序列化利用
  • [AIGC] CompletableFuture的重要方法有哪些?
  • [Algorithm][综合训练][体育课测验(二)][合唱队形][宵暗的妖怪]详细讲解