Skip to content

Latest commit

 

History

History
190 lines (163 loc) · 11.9 KB

README-ZH.md

File metadata and controls

190 lines (163 loc) · 11.9 KB

Seed-VC

Hugging Face arXiv

English | 简体中文 | 日本語

real-time-demo.webm

目前发布的模型支持 零样本语音转换 🔊 、零样本实时语音转换 🗣️ 和 零样本歌声转换 🎶。无需任何训练,只需1~30秒的参考语音,即可克隆声音。

我们支持进一步使用自定义数据进行微调,以提高特定说话人的性能,数据需求门槛极低 (每位说话人至少1条语音) ,训练速度极快 (最少100步,在T4上只需2分钟)

实时语音转换 支持约300ms的算法延迟和约100ms的设备侧延迟,适用于在线会议、游戏和直播。

要查看演示和与之前语音转换模型的比较,请访问我们的演示页面🌐 和 评估结果📊。

我们会不断改进模型质量并增加更多功能。

评估📊

查看 EVAL.md 获取客观评估结果和与其他基准模型的比较。

使用🛠️

我们已发布用于不同目的的3个模型:

版本 模型名称 用途 采样率 Content编码器 声码器 隐藏层维度 层数 参数量 备注
v1.0 seed-uvit-tat-xlsr-tiny (🤗📄) 声音转换 (VC) 22050 XLSR-large HIFT 384 9 25M 适合实时语音转换
v1.0 seed-uvit-whisper-small-wavenet (🤗📄) 声音转换 (VC) 22050 Whisper-small BigVGAN 512 13 98M 性能更好但推理稍慢,适合离线语音转换
v1.0 seed-uvit-whisper-base (🤗📄) 歌声转换 (SVC) 44100 Whisper-small BigVGAN 768 17 200M 强大的零样本推理能力,用于歌声转换

首次推理时将自动下载最新模型的检查点。 如果因网络原因无法访问 Hugging Face,请尝试在每个命令前添加 HF_ENDPOINT=https://hf-mirror.com 使用镜像站。

命令行推理:

python inference.py --source <source-wav>
--target <referene-wav>
--output <output-dir>
--diffusion-steps 25 # 推荐为歌声转换设置为30~50
--length-adjust 1.0
--inference-cfg-rate 0.7
--f0-condition False # 设置为 True 进行歌声转换
--auto-f0-adjust False # 设置为 True 自动调整源音高至目标音高,通常不用于歌声转换(会导致歌声与BGM调性不一致)
--semi-tone-shift 0 # 歌声转换中的音高移位(半音)
--checkpoint <path-to-checkpoint>
--config <path-to-config>

参数说明:

  • source 要转换为参考声音的语音文件路径
  • target 作为声音参考的语音文件路径
  • output 输出目录的路径
  • diffusion-steps 使用的扩散步数,默认为 25,质量最佳使用 30-50,最快推理使用 4-10
  • length-adjust 长度调整因子,默认值为 1.0,设置 <1.0 加速语音,>1.0 减慢语音
  • inference-cfg-rate classifier free guidance rate,默认为 0.7
  • f0-condition 是否对输出音高进行调节,默认为 False,设置为 True 用于歌声转换
  • auto-f0-adjust 是否自动调整源音高到目标音高,默认为 False,通常不用于歌声转换
  • semi-tone-shift 歌声转换中的音高移位(半音),默认值为 0
  • checkpoint 如果已训练或微调自己的模型,请指定模型检查点路径,若留空将自动下载 Hugging Face 的默认模型(seed-uvit-whisper-small-wavenet if f0-condition is False else seed-uvit-whisper-base)
  • config 如果已训练或微调自己的模型,请指定模型配置文件路径,若留空将自动下载 Hugging Face 的默认配置

语音转换 Web UI:

python app_vc.py --checkpoint <path-to-checkpoint> --config <path-to-config>
  • checkpoint 模型检查点路径,若为空将自动下载默认模型 (seed-uvit-whisper-small-wavenet)
  • config 模型配置文件路径,若为空将自动下载默认配置

然后在浏览器中打开 http://localhost:7860/ 使用 Web 界面。

歌声转换 Web UI:

python app_svc.py --checkpoint <path-to-checkpoint> --config <path-to-config>
  • checkpoint 模型检查点路径,若为空将自动下载默认模型 (seed-uvit-whisper-base)
  • config 模型配置文件路径,若为空将自动下载默认配置

集成 Web UI:

python app.py

此命令将仅加载预训练模型进行零样本推理。要使用自定义检查点,请按上述步骤运行 app_vc.pyapp_svc.py

实时语音转换 GUI:

python real-time-gui.py --checkpoint <path-to-checkpoint> --config <path-to-config>
  • checkpoint 模型检查点路径,若为空将自动下载默认模型 (seed-uvit-tat-xlsr-tiny)
  • config 模型配置文件路径,若为空将自动下载默认配置

重要提示: 强烈建议使用 GPU 进行实时语音转换。 在 NVIDIA RTX 3060 笔记本 GPU 上进行了一些性能测试,结果和推荐参数设置如下:

模型配置 扩散步数 Inference CFG Rate 最大prompt长度 每块时间 (s) 交叉淡化长度 (s) 额外上下文(左)(s) 额外上下文(右)(s) 延迟 (ms) 每块推理时间 (ms)
seed-uvit-xlsr-tiny 10 0.7 3.0 0.18s 0.04s 2.5s 0.02s 430ms 150ms

你可以根据设备性能调整 GUI 中的参数,只要推理时间小于块时间,语音转换流就可以正常工作。 注意,如果你正在运行其他占用 GPU 的任务(如游戏、看视频),推理速度可能会下降。

你可以使用 VB-CABLE 将变声器输出映射到一个虚拟麦克风上,以便其它应用读取.

(GUI and audio chunking logic are modified from RVC, thanks for their brilliant implementation!)

训练🏋️

在自定义数据上进行微调可以让模型更精确地克隆某个人的声音。这将大幅提高特定说话人的相似度,但可能会略微增加 WER(词错误率)。
这里是一个简单的Colab示例以供参考: Open In Colab

  1. 准备您的数据集。必须满足以下要求:
    • 文件结构不重要
    • 所有音频文件必须是以下格式之一:.wav .flac .mp3 .m4a .opus .ogg
    • 不需要说话人标签,但请确保每位说话人至少有 1 条语音
    • 当然,数据越多,模型的表现就越好
    • 训练样本应该选择尽量干净,不带背景音乐或噪音的音频
  2. configs/presets/ 中选择一个模型配置文件进行微调,或者创建自己的配置文件从头开始训练。
    • 对于微调,可以选择以下配置之一:
      • ./configs/presets/config_dit_mel_seed_uvit_xlsr_tiny.yml 用于实时语音转换
      • ./configs/presets/config_dit_mel_seed_uvit_whisper_small_wavenet.yml 用于离线语音转换
      • ./configs/presets/config_dit_mel_seed_uvit_whisper_base_f0_44k.yml 用于歌声转换
  3. 运行以下命令开始训练:
python train.py 
--config <path-to-config> 
--dataset-dir <path-to-data>
--run-name <run-name>
--batch-size 2
--max-steps 1000
--max-epochs 1000
--save-every 500
--num-workers 0

where:

  • config 模型配置文件路径,选择上面之一进行微调,或者创建自己的配置文件从头开始训练
  • dataset-dir 数据集目录路径,应为包含所有音频文件的文件夹
  • run-name 运行名称,用于保存模型检查点和日志
  • batch-size 训练的批大小,根据 GPU 内存选择
  • max-steps 最大训练步数,取决于数据集大小和训练时间
  • max-epochs 最大训练轮数,取决于数据集大小和训练时间
  • save-every 保存模型检查点的步数
  • num-workers 数据加载的工作线程数量,建议 Windows 上设置为 0
  1. 训练完成后,您可以通过指定检查点和配置文件的路径来进行推理。
    • 它们应位于 ./runs/<run-name>/ 下,检查点命名为 ft_model.pth,配置文件名称与训练配置文件相同。
    • 在推理时,您仍需指定要使用的说话人的参考音频文件,类似于零样本推理。

TODO📝

  • 发布代码
  • 发布预训练模型: Hugging Face
  • Hugging Face Space 演示: Hugging Face
  • HTML 演示页面: Demo
  • 流式推理
  • 降低延迟
  • 实时变声Demo视频
  • 歌声转换
  • 提高源音频抗噪性
  • 潜在的架构改进
    • 类似U-ViT 的skip connection
    • 将输入更改为 OpenAI Whisper
    • Time as Token
  • 自定义数据训练代码
  • 单样本/少样本说话人微调
  • 歌声解码器更改为 NVIDIA 的 BigVGAN
  • 44k Hz 歌声转换模型
  • 歌声转换的客观指标评估以及与RVC/SoVITS模型的比较
  • 提升音质
  • 用于改善歌声转换的NSF歌声解码器
  • 实时变声脚本添加了VAD模型,避免没有说话时模型输出杂音
  • Google Colab 笔记本训练脚本以及样例
  • 更多待添加

更新日志 🗒️

  • 2024-11-26:
    • 更新 v1.0 更小版本的预训练模型,优化实时语音转换
    • 支持单样本/少样本的单/多说话人微调
    • 支持在 WebUI 和实时变声 GUI 中使用自定义检查点
  • 2024-11-19:
    • paper已提交至arXiv
  • 2024-10-27:
    • 更新了实时变声脚本
  • 2024-10-25:
    • 添加了详尽的歌声转换评估结果以及与RVCv2模型的比较
  • 2024-10-24:
    • 更新了44kHz歌声转换模型
  • 2024-10-07:
    • 更新了 v0.3 预训练模型,将语音内容编码器更改为 OpenAI Whisper
    • 添加了 v0.3 预训练模型的客观指标评估结果
  • 2024-09-22:
    • 将歌声转换模型的解码器更改为 BigVGAN,解决了大部分高音部分无法正确转换的问题
    • 在Web UI中支持对长输入音频的分段处理以及流式输出
  • 2024-09-18:
    • 更新了用于歌声转换的模型
  • 2024-09-14:
    • 更新了 v0.2 预训练模型,具有更小的尺寸和更少的扩散步骤即可达到相同质量,且增加了控制韵律保留的能力
    • 添加了命令行推理脚本
    • 添加了安装和使用说明