目前发布的模型支持 零样本语音转换 🔊 、零样本实时语音转换 🗣️ 和 零样本歌声转换 🎶。无需任何训练,只需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-10length-adjust 长度调整因子,默认值为 1.0,设置 <1.0 加速语音,>1.0 减慢语音inference-cfg-rate classifier free guidance rate,默认为 0.7f0-condition 是否对输出音高进行调节,默认为 False,设置为 True 用于歌声转换auto-f0-adjust 是否自动调整源音高到目标音高,默认为 False,通常不用于歌声转换semi-tone-shift 歌声转换中的音高移位(半音),默认值为 0checkpoint 如果已训练或微调自己的模型,请指定模型检查点路径,若留空将自动下载 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 界面。
运行命令前先设置环境变量:
export export HUGGING_FACE_HUB_TOKEN={从https://huggingface.co/settings/tokens获取}
歌声转换 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.py 或 app_svc.py。
实时语音转换 GUI:
python real-time-gui.py --checkpoint-path <path-to-checkpoint> --config-path <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 的任务(如游戏、看视频),推理速度可能会下降。
实时转换界面的参数说明:
Diffusion Steps 是扩散步数,推荐实时转换设置为4~10;Inference CFG Rate 是classifier free guidance rate,默认0.7,设置为0.0可以获得1.5x的加速;Max Prompt Length 是最大音频提示长度,设置为较低值可以加快推理速度,但可能会降低与提示语音的相似度;Block Time 是每块时间,值越高延迟越高,该值必须大于每块推理时间,根据硬件条件设置;Crossfade Length 是交叉淡化长度,通常不需要更改;Extra context (left) 是推理的额外上下文,设置为较高值可以增加稳定性,但会增加每块推理时间;Extra context (right) 是推理的额外上下文,设置为较高值可以增加稳定性,但会增加每块推理时间以及延迟;算法延迟大约为 Block Time * 2 + Extra context (right),设备侧延迟通常为100ms左右。总体延迟为两者之和。
你可以使用 VB-CABLE 将变声器输出映射到一个虚拟麦克风上,以便其它应用读取.
(GUI and audio chunking logic are modified from RVC, thanks for their brilliant implementation!)
在自定义数据上进行微调可以让模型更精确地克隆某个人的声音。这将大幅提高特定说话人的相似度,但可能会略微增加 WER(词错误率)。
这里是一个简单的Colab示例以供参考:
.wav .flac .mp3 .m4a .opus .oggconfigs/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 用于歌声转换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如果需要从上次停止的地方继续训练,只需运行同样的命令即可。通过传入相同的 run-name 和 config 参数,程序将能够找到上次训练的检查点和日志。
训练完成后,您可以通过指定检查点和配置文件的路径来进行推理。
./runs/<run-name>/ 下,检查点命名为 ft_model.pth,配置文件名称与训练配置文件相同。python train.py --config /workspace/configs/01/config.yml --dataset-dir /workspace/audio/01/ --run-name 01 --batch-size 2 --max-steps 1000 --max-epochs 1000 --save-every 500 --num-workers 0