Diffusion-SVC

Diffusion-SVC

高效实时语音转换系统

Diffusion-SVC是一个基于扩散模型的语音转换项目,专注于实现高质量的实时语音转换。该系统以低显存占用、快速训练和推理为特点,并针对浅扩散和实时应用进行了优化。Diffusion-SVC支持多种预训练模型和编码器,适用于不同规模的GPU,可灵活搭配使用。通过与其他声学模型级联,系统能进一步提升音频质量并降低性能消耗,为语音转换技术带来新的可能性。

Diffusion-SVC语音转换AI模型扩散模型ContentVecGithub开源项目

语言: 英文 简体中文

Diffusion-SVC

在 OpenXLab 中打开 Colab_CN 用爱制作 Discord

此仓库是DDSP-SVC仓库的扩散部分的单独存放。可单独训练和推理。


Diffusion SVC 2.0 即将到来,可在v2.0_dev分支提前体验:前往分支


最近更新:使用本仓库的naive模型和浅扩散模型搭配可以用极低训练成本达到比单纯扩散模型更好的效果,强力推荐。但是小网络的naive模型泛化能力较弱,在小数据集上可能会有音域问题,这个时候naive模型微调不能训练太多步数(这会让底模退化),前级也可以考虑更换为无限音域的ddsp模型。 <br>效果和介绍见[介绍视频(暂未完成)] 欢迎加群交流讨论:882426004 图示

0.简介

Diffusion-SVC 是DDSP-SVC仓库的扩散部分的单独存放。可单独训练和推理。

相比于比较著名的 Diff-SVC, 本项目的显存占用少得多,训练和推理速度更快,并针对浅扩散和实时用途有专门优化。可以在较强的GPU上实时推理。配合本项目的naive模型进行浅扩散,即使是较弱的GPU也可以实时生成质量优秀的音频。

如果训练数据和输入源的质量都非常高,Diffusion-SVC可能拥有最好的转换效果。

本项目可以很容易的级联在别的声学模型之后进行浅扩散,以改善最终的输出效果或降低性能占用。例如在DDSP-SVC和本项目的naive模型后级联Diffusion-SVC,可进一步减少需要的扩散步数并得到高质量的输出。

除此之外,本项目还可以单独训练浅扩散所需的降噪步数而不训练完整的从高斯噪声开始的降噪过程,这可以提高训练速度并改善质量,更多信息见下文。

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

1. 安装依赖

  1. 安装PyTorch:我们推荐从 PyTorch 官方网站 下载 PyTorch.

  2. 安装依赖

pip install -r requirements.txt

2. 配置预训练模型

  • (必要操作) 下载预训练 ContentVec 编码器并将其放到 pretrain 文件夹。经过裁剪的ContentVec镜像有完全一样的效果,但大小只有190MB。
    • 注意:也可以使用别的特征提取,但仍然优先推荐ContentVec。支持的所有特征提取见tools/tools.py中的Units_Encoder类。
  • (必要操作)DiffSinger 社区声码器项目 下载预训练声码器,并解压至 pretrain/ 文件夹。
    • 注意:你应当下载名称中带有nsf_hifigan的压缩文件,而非nsf_hifigan_finetune
  • 如果需要使用声纹模型,则需要将配置文件的use_speaker_encoder设置为true, 并从这里下载预训练声纹模型,该模型来自mozilla/TTS

3. 预处理

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

1.1 手动配置:

将所有的训练集数据 (.wav 格式音频切片) 放到 data/train/audio,也可以是配置文件中指定的文件夹如xxxx/yyyy/audio。 将所有验证集数据(.wav 格式音频切片)放到 data/val/audio 目录下,也可以是配置文件中指定的文件夹,如 aaaa/bbbb/audio

1.2 程序随机选择:

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

1.3 文件夹结构目录展示:

注意:说话人 ID 必须从 1 开始,不能从 0 开始;如果只有一个说话人,则该说话人 ID 必须为 1

  • 目录结构:
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/config.yaml

您可以在预处理之前修改配置文件 configs/config.yaml

3. 备注:

  1. 请保持所有音频切片的采样率与 yaml 配置文件中的采样率一致!(推荐使用 fap 进行重采样等前处理)

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

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

  4. 如果您的数据集质量不是很高,请在配置文件中将 'f0_extractor' 设为 'crepe'。crepe 算法的抗噪性最好,但代价是会极大增加数据预处理所需的时间。

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

4. 训练

1. 不使用预训练数据进行训练:

python train.py -c configs/config.yaml

2. 预训练模型:

  • 我们强烈建议使用预训练模型进行微调,这将比直接训练容易和节省得多,并能达到比小数据集更高的上限。

  • 注意,在底模上微调需要使用和底模一样的编码器,如同为 ContentVec,对别的编码器(如声纹)也是同理,还要注意模型的网络大小等参数相同。


!!!!!!!!!推荐训练浅扩散模型+naive模型!!!!!!!!!

只训练 k_step_max 深度的浅扩散模型与 naive 模型的组合比单纯完全扩散的质量可能还要更高,同时训练速度更快。但是 naive 模型可能存在音域问题。


2.1 训练完整过程的扩散预训练模型

(注意:whisper-ppg 对应 whisper 的 medium 权重,whisper-ppg-large 对应 whisper 的 large-v2 权重)

Units 编码器网络大小数据集下载
contentvec768l12(推荐)512*20VCTK<br/>m4singerHuggingFace
hubertsoft512*20VCTK<br/>m4singerHuggingFace
whisper-ppg(仅支持 sovits)512*20VCTK<br/>m4singer<br/>opencpop<br/>kiritanHuggingFace

补充一个用 contentvec768l12 编码的整活底模,数据集为 m4singer/opencpop/vctk,不推荐使用,不保证没问题:下载

2.2 仅训练k_step_max深度的扩散预训练模型

(注意:whisper-ppg对应whisper的medium权重,whisper-ppg-large对应whisper的large-v2权重)

使用的编码器网络大小k_step_max数据集浅扩散模型下载
contentvec768l12512*30100VCTK<br/>m4singerHuggingFace
contentvec768l12512*20200VCTK<br/>m4singerHuggingFace
contentvec256l9512*20200VCTK<br/>m4singerHuggingFace
contentvec256l9768*30200VCTK<br/>m4singerHuggingFace
whisper-ppg(仅支持sovits)768*30200PTDB<br/>m4singerHuggingFace
  • 实验表明,naive模型在小数据集上存在音域问题,建议优先考虑使用较少步数微调naive模型或直接使用无限音域的ddsp模型

2.3 与2.2配套的Naive预训练模型和DDSP预训练模型

使用的编码器网络大小数据集类型Naive模型下载
contentvec768l123*256VCTK<br/>m4singerNaiveHuggingFace
  • 注意:naive预训练模型也可用作完整扩散模型的前级naive模型。微调shallow模型时建议将配置文件中的decay_step改小(如10000)。

3. 使用预训练数据(底模)进行训练:

  1. 欢迎PR训练的多人底模(请使用授权同意开源的数据集进行训练)。
  2. 预训练模型见上文,需要特别注意使用相同编码器的模型。
  3. 将名为model_0.pt的预训练模型放到config.yaml中"expdir: exp/*****"参数指定的模型导出文件夹内,如果没有就新建一个,程序会自动加载该文件夹下的预训练模型。
  4. 按照不使用预训练数据进行训练的方式启动训练。

4.1. Naive模型与组合模型

Naive模型

Naive模型是一个轻量级的svc模型,可以作为浅扩散的前级,训练方式与扩散模型一致,示例配置文件在configs/config_naive.yaml。其所需的预处理和扩散模型是一样的。

python train.py -c configs/config_naive.yaml

推理时使用-nmodel指向模型文件以使用,此时必须要指定浅扩散深度-kstep

组合模型

使用combo.py可以将一个扩散模型和一个naive模型组合为一个combo模型,只需此模型就能实现浅扩散。这两个模型需要使用相同的参数训练(如相同的说话人id),因为推理时它们也使用相同的参数推理。

python combo.py -model <model> -nmodel <nmodel> -exp <exp> -n <name>

使用以上命令将两个模型组合。其中-model是扩散模型的路径,-nmodel是naive模型的路径;与模型同目录下的配置文件也会自动读取。-exp是输出组合模型的目录,-n是保存的组合模型名。上述命令会在<exp>下输出组合模型为<name>.ptc

组合模型可直接在推理时作为扩散模型被正确加载用于浅扩散,而无需额外输入-nmodel来加载naive模型。

4.2. 关于k_step_max与浅扩散

(示意图见readme开头)

在浅扩散过程中,扩散模型只从一定加噪深度开始扩散,而无需从高斯噪声开始。因此,在浅扩散用途下,扩散模型也可以只训练一定加噪深度而不用从高斯噪声开始。 在配置文件中指定k_step_max为扩散深度来进行这种训练,该值必须小于1000(这是完整扩散的步数)。这样训练的模型不能单独推理,必须在前级模型的输出结果上或输入源上进行浅扩散;扩散的最大深度不能超过k_step_max

示例配置文件见configs/config_shallow.yaml

建议将这种只能浅扩散的扩散模型与naive模型组合为组合模型使用。

5. 可视化

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

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

6. 非实时推理

python main.py -i <input.wav> -model <model_ckpt.pt> -o <output.wav> -k <keychange> -id <speaker_id> -speedup <speedup> -method <method> -kstep <kstep> -nmodel <nmodel> -pe <f0_extractor>

-model是模型的路径,-k是变调,-speedup为加速倍速,-methodpndmddimunipcdpm-solver-kstep为浅扩散步数,-id为扩散模型的说话人id。

如果-kstep不为空,则以输入源的mel进行浅扩散,若-kstep为空,则进行完整深度的高斯扩散。

-nmodel(可选,需要单独训练)是naive模型的路径,用来提供一个大致的mel给扩散模型进行k_step深度的浅扩散,其参数需要与主模型匹配。

-pe可选项为crepeparselmouthdioharvestrmvpe,默认为crepe

如果使用了声纹编码,那么可以通过-spkemb指定一个外部声纹,或者通过-spkembdict覆盖模型的声纹词典。

7. Units索引(可选,不推荐)

RVCso-vits-svc类似的特征索引。

注意,此为可选功能,无索引也可正常使用,索引会占用大量存储空间,索引时还会大量占用CPU,此功能不推荐使用。

# 训练特征索引,需要先完成预处理 python train_units_index.py -c config.yaml

推理时,使用-lr参数使用。此参数为检索比率。

8. 实时推理

推荐使用本仓库自带的GUI进行实时推理,如果需要使用浅扩散请先组合模型。

python gui_realtime.py

本项目也可配合rtvc实现实时推理。

注意:目前flask_api为实验性功能,rtvc也未完善,不推荐使用此方式。

pip install rtvc python rtvc python flask_api.py

9. 兼容性

9.1. Units编码器

Diffusion-SVCDDSP-SVCso-vits-svc
ContentVec
HubertSoft
Hubert(Base,Large)×
CNHubert(Base,Large)√*
CNHubertSoft×
Wav2Vec2-xlsr-53-espeak-cv-ft√*××
DPHubert××
Whisper-PPG××√*
WavLM(Base,Large)××√*

10. Colab

可以使用TheMandateOfRock写的笔记Diffusion_SVC_CN.ipynb;由于我没有条件测试,所以有关问题请向笔记作者反馈。(我摸了)

11. Onnx导出

在exp文件夹下创建一个新文件夹(该文件夹的名字就是等会命令中的ProjectName),将模型和配置文件放置入其中,模型重命名为model.pt,配置为config.yaml

然后执行以下命令进行导出。

python diffusion/onnx_export.py --project <ProjectName>

导出完成之后会自动创建MoeVS的配置文件,感谢NaruseMioShirakana(同时也是MoeVS的作者)提供的onnx导出支持。

感谢

感谢所有贡献者作出的努力

<a href="https://github.com/CNChTu/Diffusion-SVC/graphs/contributors"> <img src="https://contrib.rocks/image?repo=CNChTu/Diffusion-SVC" /> </a>

编辑推荐精选

Trae

Trae

字节跳动发布的AI编程神器IDE

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
问小白

问小白

全能AI智能助手,随时解答生活与工作的多样问题

问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。

热门AI助手AI对话AI工具聊天机器人
Transly

Transly

实时语音翻译/同声传译工具

Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

热门AI辅助写作AI工具讯飞绘文内容运营AI创作个性化文章多平台分发AI助手
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

openai-agents-python

openai-agents-python

OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。

openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。

下拉加载更多