
Coqui TTS 新手入门指南从零训练 GlowTTS、HiFi-GAN 并合成语音【免费下载链接】TTS - a deep learning toolkit for Text-to-Speech, battle-tested in research and production项目地址: https://gitcode.com/GitHub_Trending/tt/TTS本指南面向首次接触 Coqui TTS 开源项目的新手完整梳理环境安装 → 下载数据 → 训练 TTS 模型 → 训练 Vocoder → 终端合成/网页试听的端到端流程并对照当前仓库的源码recipes 下的训练脚本、TTS/bin 下的 CLI 入口逐行讲解每个环节的配置含义与运行方式。读完本文你将能独立跑通 LJSpeech 数据集上的 GlowTTS声学模型与 HiFi-GAN声码器训练并掌握tts与tts-server两条语音合成使用路径。本文是对仓库文档 docs/source/tutorial_for_nervous_beginners.md 的完整展开与源码级补充。一、环境安装两种模式任选其一Coqui TTS 提供了两种安装方式适用于不同角色。面向纯使用场景推荐仅用于语音合成直接安装 PyPI 发布包即可命令会在环境中注册tts与tts-server两个可执行入口$ pip install TTS面向开发者场景需要改代码、跑训练实验建议从源码克隆并以可编辑模式安装这样你对源码的改动会即时生效$ git clone https://github.com/coqui-ai/TTS $ cd TTS $ pip install -e .从 setup.py 可以看出该项目要求 Python 版本满足 3.9, 3.12安装前请确认解释器版本符合要求。另外该安装包还会借助 Cython 编译 TTS/tts/utils/monotonic_align/core.pyx 扩展模块这是 GlowTTS 等模型做单调对齐时用到的核心算子首次安装时会自动构建。两个命令行入口也是在 setup.py 中通过console_scripts声明的tts→TTS.bin.synthesize:maintts-server→TTS.server.server:main也就是说只要安装成功tts和tts-server就属于可直接调用的终端命令。二、训练一个 TTS 模型以 GlowTTS LJSpeech 为例TTS 模型负责把文本转成中间声学表征通常是梅尔频谱。下面以 GlowTTS 在 LJSpeech 数据集上的训练为例拆解训练脚本的每个组成部分。2.1 数据集准备LJSpeech 是单说话人英文语音数据集仓库在 TTS/utils/downloaders.py 中提供了官方下载助手它会从数据源下载LJSpeech-1.1.tar.bz2并自动解压到目标目录。$ python -c from TTS.utils.downloaders import download_ljspeech; download_ljspeech(../recipes/ljspeech/);上面的../recipes/ljspeech/是下载目录参数按你的偏好改即可。解压后数据集结构应包含metadata.csv文本-音频清单与wavs/音频目录这正是后续训练脚本与 config 所引用的路径结构。2.2 纯 Python 方式编写 train.py与很多配置驱动的训练框架不同Coqui TTS 的训练脚本本身就是一段可读的 Python 代码通过具名对象完成装配。完整脚本见 recipes/ljspeech/glow_tts/train_glowtts.py下面按逻辑分段讲解。1) 定义数据集配置使用BaseDatasetConfig描述数据集的 formatter、清单文件名与所在路径。dataset_config BaseDatasetConfig( formatterljspeech, meta_file_trainmetadata.csv, pathos.path.join(output_path, ../LJSpeech-1.1/) )formatter告诉数据加载器用哪个解析器去读数据集元数据ljspeech 格式解析见 TTS/tts/datasets/formatters.pymeta_file_train训练清单文件名对应下载数据里的metadata.csvpath数据集根目录脚本里用os.path.join(output_path, ../LJSpeech-1.1/)表示与训练脚本同级的 LJSpeech-1.1 目录。2) 初始化训练配置GlowTTSConfig继承了所有模型共用的BaseTTSConfig见 TTS/tts/configs/shared_configs.py配置了训练循环、文本前端与数据集config GlowTTSConfig( batch_size32, eval_batch_size16, num_loader_workers4, num_eval_loader_workers4, run_evalTrue, test_delay_epochs-1, epochs1000, text_cleanerphoneme_cleaners, use_phonemesTrue, phoneme_languageen-us, phoneme_cache_pathos.path.join(output_path, phoneme_cache), print_step25, print_evalFalse, mixed_precisionTrue, output_pathoutput_path, datasets[dataset_config], )关键参数的含义如下参数作用参考值/说明batch_size/eval_batch_size训练/验证批大小32 / 16根据显存调整num_loader_workers/num_eval_loader_workers训练/验证数据加载子进程数4run_eval训练过程中是否周期性跑验证Truetest_delay_epochs延迟多少个 epoch 才开始验证-1表示一上来就验证epochs最大训练轮数GlowTTS 训练常配置为 1000配合早停实际收敛远早于此text_cleaner文本清洗器教程示例脚本为phoneme_cleanersCLI JSON 示例用的是english_cleaners二者对应不同的文本前端策略见下文说明use_phonemes是否使用音素而非字符序列Truephoneme_language音素化所用语言en-usphoneme_cache_path音素缓存目录避免重复音素化建议放脚本同级的phoneme_cacheprint_step每多少步打印一次训练日志25print_eval是否打印验证结果Falsemixed_precision是否开启混合精度训练以省显存本脚本开为Trueoutput_path实验产物checkpoint、TensorBoard 日志等输出目录本脚本为当前目录datasets数据集配置列表支持多数据集[dataset_config]此外GlowTTSConfig本身还封装了大量模型结构超参例如编码器类型encoder_type默认rel_pos_transformers、解码器隐藏通道数hidden_channels_dec、时长预测器通道hidden_channels_dp、推理噪声尺度inference_noise_scale等完整字段定义可查阅 TTS/tts/configs/glow_tts_config.py。3) 初始化音频处理器与分词器ap AudioProcessor.init_from_config(config) tokenizer, config TTSTokenizer.init_from_config(config)AudioProcessor负责音频读写与特征提取梅尔频谱等其参数从 config 内嵌的音频配置读取实现位于 TTS/utils/audio/processor.pyTTSTokenizer把文本转成 token ID 序列当 config 未显式给出字符表时init_from_config会把默认字符集写回 config。可参考 TTS/tts/utils/text/tokenizer.py。4) 加载数据样本train_samples, eval_samples load_tts_samples( dataset_config, eval_splitTrue, eval_split_max_sizeconfig.eval_split_max_size, eval_split_sizeconfig.eval_split_size, )每个样本是一个[text, audio_file_path, speaker_name]列表。load_tts_samples的实现位于 TTS/tts/datasets/init.py它内部会调用注册表里formatter对应的解析函数并在返回前完成训练/验证集的切分。5) 初始化模型并交给 Trainermodel GlowTTS(config, ap, tokenizer, speaker_managerNone) trainer Trainer( TrainerArgs(), config, output_path, modelmodel, train_samplestrain_samples, eval_sampleseval_samples ) trainer.fit()speaker_manager用于多说话人模型LJSpeech 是单说话人数据传NoneTrainer是 TTS 统一复用的训练器来自外部trainer包提供混合精度、分布式训练、checkpoint 与 TensorBoard 日志等能力。这里传入空TrainerArgs()所有命令行参数走默认值。6) 运行训练脚本$ CUDA_VISIBLE_DEVICES0 python train.py除一次性启动外Trainer内置三种常用断点续训/迁移场景# 从某个历史实验目录恢复训练自动沿用其 config 与最新 checkpoint $ CUDA_VISIBLE_DEVICES0 python train.py --continue_path path/to/previous/run/folder/ # 从指定 checkpoint 恢复常用于断点续训或微调 $ CUDA_VISIBLE_DEVICES0 python train.py --restore_path path/to/model/checkpoint.pth # 多 GPU 分布式训练trainer.distribute 会自动按每卡分配数据与同步梯度 $ CUDA_VISIBLE_DEVICES0,1,2 python -m trainer.distribute --script train.py--continue_path的语义差异在 TTS/bin/train_tts.py 中也有体现该 CLI 若给定continue_path会直接加载上一轮实验的config.json从而实现无缝续训。2.3 CLI 方式config.json train_tts.py除了 Python 脚本项目仍保留了配置 JSON 通用入口的经典 CLI 训练方式。做法是先写一个config.json{ run_name: my_run, model: glow_tts, batch_size: 32, eval_batch_size: 16, num_loader_workers: 4, num_eval_loader_workers: 4, run_eval: true, test_delay_epochs: -1, epochs: 1000, text_cleaner: english_cleaners, use_phonemes: false, phoneme_language: en-us, phoneme_cache_path: phoneme_cache, print_step: 25, print_eval: true, mixed_precision: false, output_path: recipes/ljspeech/glow_tts/, datasets:[{formatter: ljspeech, meta_file_train:metadata.csv, path: recipes/ljspeech/LJSpeech-1.1/}] }这份 JSON 与 2.2 节 Python 脚本配置是等价的注意此例中text_cleaner为english_cleaners且use_phonemesfalse即以字符/grapheme 为建模单元而 2.2 节官方脚本用phoneme_cleanersuse_phonemestrue以音素为建模单元——两种文本前端都可行选择会影响训练效果与推理时对文本规范化的要求。随后执行$ CUDA_VISIBLE_DEVICES0 python TTS/bin/train_tts.py --config_path config.json其运行逻辑在 TTS/bin/train_tts.py 中一目了然解析命令行后通过load_config(args.config_path)载入 JSONregister_config/setup_model依据model: glow_tts自动装配对应模型类再load_tts_samples加载数据并用同一个Trainer启动trainer.fit()。这意味着CLI 方式与纯 Python 方式底层走的是完全相同的训练管线只是配置载入方式不同。仓库还针对各模型维护了多份 recipe 配置例如 recipes/ljspeech/vits_tts、recipes/ljspeech/tacotron2-DDC 等都可以用同样的config_path方式训练作为换模型的参考。三、训练一个 Vocoder 模型以 HiFi-GAN 为例TTS 模型输出的是声学特征真正转成可听波形需要声码器vocoder。以 HiFi-GAN 为例训练脚本为 recipes/ljspeech/hifigan/train_hifigan.py其装配流程与 GlowTTS 几乎一一对应只是换成了生成对抗网络GAN的配置与模型config HifiganConfig( batch_size32, eval_batch_size16, num_loader_workers4, num_eval_loader_workers4, run_evalTrue, test_delay_epochs5, epochs1000, seq_len8192, pad_short2000, use_noise_augmentTrue, eval_split_size10, print_step25, print_evalFalse, mixed_precisionFalse, lr_gen1e-4, lr_disc1e-4, data_pathos.path.join(output_path, ../LJSpeech-1.1/wavs/), output_pathoutput_path, ) ap AudioProcessor(**config.audio.to_dict()) eval_samples, train_samples load_wav_data(config.data_path, config.eval_split_size) model GAN(config, ap) trainer Trainer( TrainerArgs(), config, output_path, modelmodel, train_samplestrain_samples, eval_sampleseval_samples ) trainer.fit()与 TTS 模型训练的差异点差异说明训练样本来源声码器只吃波形因此用load_wav_data见 TTS/vocoder/datasets/preprocess.py直接按目录扫描 wav 文件无需metadata.csveval_split_size10表示从全量中抽出若干文件做验证关键训练超参seq_len8192为每个样本截取的采样点长度pad_short2000对过短音频补零use_noise_augment是否对输入做噪声增强双学习率GAN 的生成器与判别器分开配置学习率lr_gen/lr_disc均取 1e-4模型与配置类HifiganConfig与GAN定义见 TTS/vocoder/configs/hifigan_config.py 与 TTS/vocoder/models/gan.py启动方式与 TTS 模型一致python train_hifigan.py支持--continue_path/--restore_path/ 多卡。需要补充说明的是仓库在声码器侧也保留了通用 CLI 入口既然 TTS 模型可经 TTS/bin/train_tts.py 训练声码器同样可以用 TTS/bin/train_vocoder.py 配合config.json走 CLI 训练两种训练对象在该 bin 层已被统一封装。四、合成语音tts 终端命令完成或直接使用预训练模型后即可在终端直接合成语音。安装时注册的tts命令是最快的上手路径$ tts -h # 查看所有命令行参数 $ tts --list_models # 列出可用的预训练 TTS 模型与声码器tts的实现入口对应 TTS/bin/synthesize.py即setup.py中tts命令指向的TTS.bin.synthesize:main。配合--list_models返回的模型名可把--model_name/--vocoder_name指到具体的预训练权重输入文本、输出音频路径等均通过参数指定。若未单独指定声码器合成器会自动选用与 TTS 模型匹配的默认声码器完整合成管线含 mel → 波形的级联由 TTS/utils/synthesizer.py 提供。该 GIF 展示了tts命令在终端完成文本输入与语音生成的完整过程。仓库自带的端到端测试 tests/inference_tests/test_synthesize.py 也覆盖了文本 → 波形的合成链路可作为命令行用法的自动化对照。五、合成语音tts-server 网页演示若想用浏览器图形界面快速试听各模型可启动本地演示服务器$ tts-server -h # 查看帮助 $ tts-server --list_models # 列出可选模型启动后按终端提示在浏览器打开本地地址即可选模型、填文本、点合成并在线试听。tts-server的实现位于 TTS/server/server.py其前端模板在 TTS/server/templates含 index.html 与 results 详情页这些模板会随 pip 包一并安装见 setup.py 的package_data。仓库另有 tests/bash_tests/test_demo_server.sh 用于自动化校验服务器能否正常启动与响应。六、总结与下一步把整条链路串起来看download_ljspeech获取数据 →BaseDatasetConfigGlowTTSConfig描述训练任务 →AudioProcessor/TTSTokenizer完成特征与文本预处理 →load_tts_samples切分数据 →GlowTTS模型训练得到文本→梅尔映射 →HiFi-GAN声码器把梅尔还原为波形 → 最终通过tts或tts-server对外提供合成服务。这四步覆盖了 Coqui TTS 从入门到实战的最短闭环。若希望继续深入建议按需查阅同一仓库的以下资料更系统的模型文档与 API 说明docs/source/models/glow_tts.md、docs/source/main_classes/model_api.md数据集格式化规范docs/source/formatting_your_dataset.md决定formatter如何编写与 docs/source/tts_datasets.md详细训练参数以 GlowTTS 为例查看 TTS/tts/configs/glow_tts_config.py公共参数见 TTS/config/init.py 中的BaseTrainingConfig/BaseAudioConfig/BaseDatasetConfig更多现成 recipe 与对应测试多语言/多模型训练入口统一位于 recipes可对照相应 recipe 目录下的train_*.py使用。【免费下载链接】TTS - a deep learning toolkit for Text-to-Speech, battle-tested in research and production项目地址: https://gitcode.com/GitHub_Trending/tt/TTS创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考