从几小时录音到专属音色:用VoiceStudio微调TTS模型实战指南
【免费下载链接】VoiceStudioVoiceStudio is the open-source, fully-local ElevenLabs alternative — voice cloning, voice design, video dubbing, dictation, transcription & audiobook creation in 646 languages.项目地址: https://gitcode.com/GitHub_Trending/om/VoiceStudio
做完这件事,你拿到一个把音色写进参数的检查点目录。以后合成不用再喂参考音频,只给文本,出来的就是你的声音。VoiceStudio 是一个开源、完全本地运行的语音平台,默认 TTS 引擎是 OmniVoice,本文微调链路全在它之上。
🧮 先算账:微调到底值不值
这一节的目的:把算力、时间、数据三笔成本摆上桌,再决定动不动手。
- 算力:微调路线占 2 张卡,大规模路线占 8 张,差 4 倍。
- 时间:微调跑 5000 步;大规模路线 30 万步,是两个量级的事。
- 数据:个人音色几小时干净人声就够,大模型要上 Emilia 全量数据集。
| 想要的结果 | 路线 | 配置要点 |
|---|---|---|
| 个人专属音色 | 预训练上微调 | 2 卡,5000 步,峰值学习率 5e-5 |
| 多语言 / 大模型能力 | 从零训练 | 8 卡,30 万步,学习率 1e-4 |
| 嘈杂参考下更稳 | 叠噪声增强 | 两个可选脚本,按需开启 |
判断标准就三条,中一条才值得动手:音色是内部资产,参考片段不能外流;单条参考不稳,音色发飘;实录音带混响和杂音,会被模型一起学走。三条都不中,零样本克隆足够用了。
路线定了,先盘环境。
☑️ 开工前置清单
逐项打勾,漏一项就要重跑一遍分词:
- GPU:微调路线至少 2 张。accelerate 按卡起进程,进程数必须和卡数一致;大规模路线直接按 8 张准备。
- 磁盘:tar 分片、检查点、评估资产全部落在本地目录,提前留足余量。
- 音频格式:wav、flac、mp3 均可,采样率由分词器统一处理到 24 kHz,不用手工转码。
- 数据量:微调几小时干净人声即可,训练集与开发集拆成两份清单。
清单过完,开工。
🛠️ 主链路:从原始录音到检查点
这一节的目的:把手上的音频变成推理能加载的 checkpoint 目录。
把录音写成 JSONL 清单
一行一条样本,四个字段:唯一 id、音频绝对路径、转写文本、可选语言代码:
{"id": "s001", "audio_path": "/data/audio/s001.wav", "text": "你好,世界", "language_id": "zh"}训练集与开发集拆成两个文件,开发集只参与评估、不进梯度。字段细节见 docs/data_preparation.md。
音频批量转 token
分词是一次性预处理,训练阶段不重复跑。调omnivoice.scripts.extract_audio_tokens模块,传入清单、分片输出模式和音频分词器(默认eustlb/higgs-audio-v2-tokenizer)。每条音频被编码成 8 层离散 token,打进 WebDataset 格式的 tar 分片,配对一份 jsonl 元数据,最后生成data.lst清单。
CUDA_VISIBLE_DEVICES="0,1" \ python -m omnivoice.scripts.extract_audio_tokens \ --input_jsonl data/train.jsonl \ --tar_output_pattern data/tokens/audios/shard-%06d.tar \ --jsonl_output_pattern data/tokens/txts/shard-%06d.jsonl \ --tokenizer_path eustlb/higgs-audio-v2-tokenizer \ --nj_per_gpu 3 \ --shuffle True开发集换清单再跑一遍,输出目录分开放。
一条命令拉起 2 卡微调
微调不从零开始:配置里init_from_checkpoint指向 OmniVoice 预训练检查点,继承基础能力,只学你的音色。默认配置对几小时数据刚好够用,可直接用 examples/config/ 下现成文件。
accelerate launch \ --gpu_ids "0,1" \ --num_processes 2 \ -m omnivoice.cli.train \ --train_config config/train_config_finetune.json \ --data_config config/data_config_finetune.json \ --output_dir exp/omnivoice_finetune训练中断后,把resume_from_checkpoint指向已有检查点即可接续。日志落在输出目录的tensorboard子目录,--logdir指过去就能盯曲线。
数字都收在表里。
📊 关键参数速查
改配置只动这几项,其余默认即可:
| 参数 | 微调路线 | 大规模路线 |
|---|---|---|
| 总步数 | 5000 | 300,000 |
| 峰值学习率 | 5e-5 | 1e-4 |
| 每卡每 batch token | 8192 | 8192 |
| 混合精度 | bf16 | bf16 |
| 检查点保存间隔 | 每 500 步 | 每 10000 步 |
| 预训练初始化 | k2-fsa/OmniVoice | 无,从零学起 |
默认参数跑完,看数字。
🚀 进阶路线
路线 A:Emilia 大规模训练。结论先行:8 卡、30 万步、学习率 1e-4,不做预训练初始化,从零学起。做法三步:Emilia 原始数据(EN、ZH)与四份 JSONL 清单放进data/emilia/manifests/;对四个分割逐一跑同一个分词步骤;最后按 8 进程拉起训练。examples/run_emilia.sh 覆盖全程,参数细节见 docs/training.md。
路线 B:降噪加噪声增强。两个可选脚本:omnivoice.scripts.denoise_audio把原始音频先过一遍 Sidon 语音增强模型,剥掉背景噪声;omnivoice.scripts.extract_audio_tokens_add_noise思路相反,分词时故意掺入环境噪声与房间混响,让推理时喂嘈杂参考也能稳住。两者都不强制,可叠在微调或大规模路线之上。
跑完别急着接工作台,先验数字。
📏 验收清单
损失曲线本身不是验收单,要拿客观数字。核对三项:
- WER:合成语音用 ASR 转回,与原文比对。越低说得越清楚。
- SIM-o:参考与合成的说话人嵌入相似度。越高越像你本人。
- UTMOS:神经网络预测的 MOS。越高听起来越自然。
仓库自带一键评估脚本 examples/run_eval.sh,覆盖 LibriSpeech-PC、Seed-TTS、MiniMax 等标准测试集,比人耳判断可靠。三项达标再接入。
🔌 接入日常
检查点只有天天能合才算数。输出目录下任一 checkpoint(比如checkpoint-5000)可直接当模型路径用于推理,无需单独安装。在 VoiceStudio 工作台进入 Settings → Models / Model Catalogue,把 OmniVoice 引擎管理并启用,语音克隆、配音、有声书等能力都随这张音色工作。
完成态很具体:打开工作台,输入一句台词,扬声器里出来的那个声音,就是你的。
【免费下载链接】VoiceStudioVoiceStudio is the open-source, fully-local ElevenLabs alternative — voice cloning, voice design, video dubbing, dictation, transcription & audiobook creation in 646 languages.项目地址: https://gitcode.com/GitHub_Trending/om/VoiceStudio
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考