Mobile wallpaper 1Mobile wallpaper 2Mobile wallpaper 3Mobile wallpaper 4Mobile wallpaper 5Mobile wallpaper 6Mobile wallpaper 7Mobile wallpaper 8Mobile wallpaper 9Mobile wallpaper 10
1168 字
6 分钟
VoxCPM| 一个高效的跨语言语音合成小钢炮
2025-12-11
统计加载中...

前言#

最近一直在寻找能够平替GPT-SoVITS的语音合成项目,于是找到了很合适的VoxCPM。他不像IndexTTS 2那样占用巨大,反而占用极小的情况下能够实现完美的自然语音克隆,音色还原的确不如其他项目,但是他最近的1.5版本支持了lora训练,弥补了这一个缺点。

OpenBMB
/
VoxCPM
Waiting for api.github.com...
00K
0K
0K
Waiting...

使用体验#

语音克隆我只使用过GPT-SoVITS,相比之下,我认为VoxCPM最大的优点就是语音自然拟真,且流式输出流畅。但是也存在缺点,显存占用比GPT-SoVITS大,在断句时有时也会断句过长或过短。

整体表现有很高的上限,也有稍微不可接受的下限。

而且对参考音频的质量要求很高,而且语气断句会很多模仿参考音频。

整体感觉就是不错的,如果显存占用小一些(还是说有部分是缓存的问题?),稳定性强一点,再添加情感向量支持,就是一个很全面的模型了,期待后续更新。

再就是lora训练方面,我在韩语和日语上测试了,适配效果特别棒,尽管只是在模仿训练数据,模型还是学会了在小语种上进行地道的断句和语气。


LoRA微调#

本来是没有打算写这篇文章,出这期视频的,但是项目的issue有很多在问lora的效果如何,怎么训练lora,于是就打算写这篇文章。

我在VoxCPM更新时就进行了lora微调,效果表现很惊人。于是我也提交了PR给了一个WebUI,官方也适配移植,给出了现在的WebUI

那么接下来就讲一下怎么利用这个WebUI进行微调

数据集准备#

数据集是要存放在JSONL文件内,每一行是一条数据:

{"audio": "path/to/audio1.wav", "text": "Transcript of audio 1."}
{"audio": "path/to/audio2.wav", "text": "Transcript of audio 2."}
{"audio": "path/to/audio3.wav", "text": "Optional duration field.", "duration": 3.5}
{"audio": "path/to/audio4.wav", "text": "Optional dataset_id for multi-dataset.", "dataset_id": 1}

必要元素#

Field描述
audio文件路径 (绝对路径或相对路径)
text配对的文本

可选元素#

Field描述
duration时长(秒) (加速 sample filtering)
dataset_id数据集编号区分多个数据集 (default: 0)

要求#

  • 数据格式: WAV
  • 采样率: 16kHz for VoxCPM-0.5B, 44.1kHz for VoxCPM1.5
  • 文本: 配对准确的文本

可以查看 examples/train_data_example.jsonl 这个完整的示例.


我是直接从GPT-SoVITS的数据集转过来的,不过需要重采样(GPT-SoVITS 是32k,VoxCPM要求44.1k)

开始训练#

在根目录下运行:

python lora_ft_webui.py

打开http://127.0.0.1:7860/ 进入WebUI

image-20251211133334096

预训练模型路径和数据集的JSONL文件自己填写

eval数据集一般人也用不到

参数讲解#

  • 学习率:模型学习的快慢,默认即可

  • 最大迭代次数:最大步数,根据数据集调整,默认也可以

  • 批次大小:根据自己显存调整

  • LoRA Rank:控制LoRA对模型的影响程度,默认即可

  • LoRA Alpha:同上

  • 保存间隔 (Steps):每XXX步保存一次

  • 梯度累积:默认即可,显存小可以在降低批次大小时调大,时间换空间,

    • 注: 真实的批次大小=批次大小×梯度累积真实的批次大小 = 批次大小 \quad \times \quad 梯度累积
  • 数据加载线程:默认即可

  • 日志间隔:默认即可

  • 验证间隔:无eval无需理会

  • 权重衰减:默认即可

  • 热身步数:建议0.03×Steps0.03 \times Steps

  • 最大步数:默认等于最大迭代次数

  • 采样率:与基座模型匹配即可

  • Tensorboard 路径:会自动创建,默认即可

WARNING

接下来是十分重要的内容,涉及到训练的参数激活部分

是否启用LoRA LM#

是否训练语言模型,如果你的训练内容需要模仿语气,断句等等语言习惯,特别是非中英文语言训练时,必须开启!!!

一般都是默认要开启!!!

启用 LoRA DIT#

是否训练扩散模型,如果需要克隆数据集的音色,必须开启!如果只是非中英文语言适配,可以不开启。

启用proj训练#

一般不开启,这些层对于模型性能有着显著影响!

LoRA Dropout#

丢弃的参数的占比,用于防止过拟合,一般默认即可

最后一步#

当全部参数设好之后就可以开始训练了

可以在文件夹下找到日志文件运行tensorborad,观察训练情况

LoRA推理#

我写的WebUI是支持热拔插LoRA的,所以可以随意切换LoRA文件。

推理部分我就不赘述了,各位自己探索就好了。

VoxCPM| 一个高效的跨语言语音合成小钢炮
https://www.hokma.top/posts/voxcpm/
作者
Ayin
发布于
2025-12-11
许可协议
Unlicensed

部分信息可能已经过时