gantts
基于GAN的文本转语音与声音转换PyTorch实现,提升合成语音自然度
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
基于GAN的文本转语音与声音转换PyTorch实现,提升合成语音自然度
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象一下:你对着电脑输入一段文字,几秒钟后,AI 用你指定的声音念出来——这不是科幻,而是 r9y9/gantts 这款开源工具正在做的事。这是一个纯 PyTorch 实现的基于生成对抗网络(GAN)的文本转语音合成(TTS)和声音转换(VC) 项目,由日本研究者 r9y9 开发,至今已在 GitHub 收获超过 500 颗星,被广泛用于语音合成研究。
传统语音合成(如 Merlin、Wavenet 等系统)依赖均方误差(MSE)损失函数来训练神经网络。然而 MSE 损失有一个天然缺陷:它倾向于生成"平均"的输出,导致合成语音听起来模糊、缺乏表现力——就像把所有人的脸平均化后得到的那张"大众脸",虽然正确,但毫无特色。
GAN 的引入解决了这个问题。 2017 年,日本研究团队 Saitoh 等人发表论文,提出了将 GAN 应用于参数语音合成的框架,用判别器(Discriminator)的对抗训练来引导生成器(Generator)产生更自然、更具表现力的语音。这一思路后来被多篇论文引用和扩展,成为语音合成领域的重要研究方向。gantts 项目正是这一方向最早的开源实现之一。

图1:GAN TTS 生成的频谱图,展示了语音参数的时频分布特征
gantts 实现了两个核心功能模块,可通过 hparams.py 中的配置自由切换:
将文本转换为声学参数,再由声码器(如 WORLD)合成语音。项目支持两种生成器架构:
训练流程通过 train.py 统一管理,配合 prepare_features_tts.py 完成文本到语言特征、持续时间特征、声学特征的提取。train_gan.sh 脚本则封装了对抗训练逻辑,包含 MSE 损失、最小生成误差(MGE)损失和对抗损失(ADV)的加权组合。
将一个人的声音转换为另一个人的声音,同时保留语言内容。demo 脚本 vc_demo.sh 提供了 CMU ARCTIC 数据集上的 clb→clt 转换示例。evaluation_vc.py 提供了 ABX 主观评测支持。

图2:声音转换前后的波形对比,直观展示声学特征的转换效果
项目定义了多种生成器,全部继承自 AbstractModel 接口:
| 生成器 | 类型 | 特点 |
|---|---|---|
| In2OutHighwayNet | MLP 前馈 | 含参数生成(MLPG),参数量适中 |
| In2OutRNNHighwayNet | LSTM 循环 | 双向支持,适合长序列 |
| SRURNN | SRU 循环 | GPU 高效,适合大规模训练 |
| GRURNN / LSTMRNN | 标准 RNN | 通用循环结构 |
所有生成器都使用 Unit Variance MLPG(最大似准参数生成)作为输出层,这是一套经典的声学参数后处理方法,源自 Merlin 工具包。
判别器采用 MLP 结构,输入为声学特征(如 MCEP - Mel-cepstral coefficients),输出为 0~1 的真实度分数。关键超参数:
adversarial_streams:指定哪些声学流参与对抗损失计算mask_nth_mgc_for_adv_loss:忽略 MGC 前 N 阶系数(实验发现 0 阶/1 阶 MGC 参与对抗损失会影响音质)discriminator_linguistic_condition:是否将语言特征作为条件输入给判别器(对应论文 [2] 的配置)train.py 的训练逻辑非常灵活,支持:
cudnn.benchmark声学特征提取依赖 nnmnkwii 和 PyWorld(WORLD vocoder 的 Python 封装),包括:
项目针对 CMU ARCTIC 数据集设计,这是一个标准英语语音数据库,包含 7 个发音人的录音。README 提供了完整的数据目录结构要求。此外,TTS 训练还支持 Merlin 项目使用的 slt_arctic_full_data 数据集。
gantts 不是面向普通用户的开箱即用工具,而是面向语音研究者的实验框架。典型上手流程:
hparams.py 中的超参数prepare_features_*.py 提取特征train_gan.sh 启动训练evaluation_*.py 评估模型对于有深度学习基础的研究者来说,整个流程约需 1~2 小时完成配置,但真正有意义的实验需要 GPU 算力和调参经验。
batch_size。作者在 Issue #3 中记录了此问题。adversarial_streams 和 mask_nth_mgc_for_adv_loss 对音质影响显著,需要反复实验。gantts 是 GAN 在语音合成领域应用的开创性开源实现之一,引用了 2017 年 IEEE/ACM TASLP 的两篇核心论文。在它之后,陆续出现了更先进的 GAN-TTS 系统(如 Parallel WaveGAN、HiFi-GAN 等),但 gantts 的代码结构清晰、模块化良好,至今仍是理解 GAN-TTS 原理的绝佳入门教材。对于想深入研究对抗训练在语音合成中作用的研究者,这个项目提供了最直接的低门槛入口。

图3:Jupyter Notebook 中的 TTS 测试示例,直观展示语音合成效果
gantts 是一款学术导向的语音合成工具,通过 GAN 对抗训练提升合成语音的自然度和表现力。它不是生产级应用,而是一套可扩展的实验框架,适合有深度学习背景的研究者用于算法验证和学术研究。如果你正在探索语音合成的前沿技术,或想理解 GAN 在语音领域的工作原理,gantts 值得深入研究;如果你的目标是快速获得高质量语音合成服务,建议转向更现代的方案(如 VALL-E、XTTS、Coqui TTS 等)。