wavenet_vocoder

GitHub
2.4k 494 中等 1 次阅读 4天前NOASSERTION音频开发框架
AI 解读 由 AI 自动生成,仅供参考

wavenet_vocoder 是一个专注于生成高保真语音波形的开源深度学习项目。它的核心任务是将语言学特征或声学特征(如梅尔频谱图)转化为自然、清晰的原始音频信号,有效解决了传统语音合成中声音机械、缺乏细节的难题,显著提升了语音的自然度与表现力。

需要注意的是,wavenet_vocoder 本身并非完整的文本转语音(TTS)系统,它不负责将文字直接转为声音,而是作为后端“声码器”,需要配合 Tacotron2 等前端模型生成的频谱图来工作。因此,它特别适合人工智能研究人员、语音合成开发者以及希望深入探索波形建模技术的工程师使用。对于普通用户而言,若需直接体验文本朗读功能,建议结合 ESPnet 等集成平台使用。

在技术亮点方面,wavenet_vocoder 重点优化了 WaveNet 架构中的局部与全局条件控制机制,支持多种混合分布模型(如混合逻辑分布、混合高斯分布)进行 16 位高精度音频建模。此外,项目通过缓存卷积中间状态实现了快速推理,并提供了丰富的预训练模型及多语言(英、中、日)支持,方便用户快速复现高质量语音合成效果。

使用场景

某语音合成初创团队正在开发一款多语言有声书朗读系统,需要将文本转换为高保真的人声波形。

没有 wavenet_vocoder 时

  • 生成的语音带有明显的机械感和电子噪音,缺乏真实人声的呼吸感与情感起伏,听众体验较差。
  • 难以同时支持英语、中文和日语等多种语言的高质量发声,每种语言都需要单独训练复杂的端到端模型,维护成本极高。
  • 推理速度缓慢,无法在有限算力下实现准实时的音频生成,导致产品上线延迟。
  • 仅能输出低采样率音频,高频细节丢失严重,无法满足出版级有声书的音质标准。

使用 wavenet_vocoder 后

  • 利用混合逻辑分布(MoL)对原始音频进行建模,生成的语音清晰自然,完美还原了人声的细微质感与情感色彩。
  • 直接复用预训练模型并结合 ESPnet 生态,轻松通过梅尔频谱图条件控制,实现了英、中、日多语言的高品质统一合成。
  • 借助卷积中间状态缓存技术大幅加速推理过程,显著降低了生成延迟,满足了流畅播放的需求。
  • 支持 16 位原始音频建模,输出波形频响丰富,直接达到了专业有声读物的出版音质要求。

wavenet_vocoder 通过将声学特征转化为高保真波形,彻底解决了传统方案音质生硬且多语言适配难的瓶颈。

运行环境要求

操作系统
  • Linux
  • macOS
  • Windows
GPU

需要 NVIDIA GPU,CUDA >= 8.0,具体显存大小未说明(取决于训练批次和模型配置)

内存

未说明

依赖
notes该工具主要作为 PyTorch 库使用,也提供命令行工具和类似 ESPnet 的脚本。支持多种音频建模分布(MoL, Gaussian 等)。注意:README 中提到的部分功能(如无条件 WaveNet 训练、多说话人全局条件推理的某些脚本)在开发版本中可能已失效,建议使用稳定版 v0.1.1 或参考 ESPnet 集成版本。训练时若使用多 GPU,需确保 batch_size 能被 GPU 数量整除。
python3
PyTorch>=0.4.0
wavenet_vocoder hero image

快速开始

WaveNet 语音编码器

PyPI 构建状态 构建状态 DOI

注意: 这是开发版本。如果您需要稳定版本,请检出 v0.1.1。

该仓库的目标是提供一个 WaveNet 语音编码器的实现,它可以基于语言学或声学特征生成高质量的原始语音样本。

音频样本可在 https://r9y9.github.io/wavenet_vocoder/ 上找到。

最新消息

在线 TTS 演示

有一个应该在 https://colab.research.google.com 上运行的笔记本:

亮点

  • 专注于 WaveNet 的局部和全局条件化,这对语音编码器至关重要。
  • 使用混合分布对 16 位原始音频建模:支持物流混合 (MoL)、高斯混合以及单个高斯分布。
  • 多种音频样本和预训练模型
  • 通过缓存卷积中的中间状态实现快速推理。类似于 arXiv:1611.09482
  • 与 ESPnet 集成(https://github.com/espnet/espnet)

预训练模型

注意: 这本身并不是一个文本到语音 (TTS) 模型。使用此处提供的预训练模型,您可以根据 梅尔频谱图 合成波形,而不是原始文本。要将这些预训练模型用于 TTS,您还需要一个梅尔频谱图预测模型(例如 Tacotron2)。

注意: 对于 LJSpeech 的预训练模型,该模型经过多次微调,总共训练了超过 100 万步。有关模型的训练方式,请参阅相关问题(#1#75#45)。

模型链接 数据 超参数链接 Git 提交 步数
链接 LJSpeech 链接 2092a64 100万步左右
链接 CMU ARCTIC 链接 b1a1076 74万步

要使用预训练模型,首先检出上述指定的 Git 提交。即:

git checkout ${commit_hash}

然后按照 README 中的“从检查点合成”部分操作。请注意,旧版本的 synthesis.py 可能不接受 --preset=<json> 参数,您可能需要根据预设 (json) 文件修改 hparams.py

您可以尝试如下操作:

# 假设您已将 LJSpeech-1.1 下载到 ~/data/LJSpeech-1.1
# 预训练模型 (20180510_mixture_lj_checkpoint_step000320000_ema.pth)
# 超参数文件 (20180510_mixture_lj_checkpoint_step000320000_ema.json)
git checkout 2092a64
python preprocess.py ljspeech ~/data/LJSpeech-1.1 ./data/ljspeech \
  --preset=20180510_mixture_lj_checkpoint_step000320000_ema.json
python synthesis.py --preset=20180510_mixture_lj_checkpoint_step000320000_ema.json \
  --conditional=./data/ljspeech/ljspeech-mel-00001.npy \
  20180510_mixture_lj_checkpoint_step000320000_ema.pth \
  generated

您可以在 generated 目录中找到生成的 wav 文件。想知道它是如何工作的吗?那就看看代码吧 :)

仓库结构

该仓库由 1) PyTorch 库、2) 命令行工具以及 3) ESPnet-风格的配方组成。第一部分是一个 PyTorch 库,用于提供 WaveNet 功能。第二部分是一组用于运行 WaveNet 训练/推理、数据处理等的工具。第三部分则是结合 WaveNet 库和实用工具的可复现配方。请根据您的目的查看它们。如果您想在自己的数据集上构建 WaveNet(我想这可能是最常见的情况),那么配方就是适合您的方式。

需求

  • Python 3
  • CUDA >= 8.0
  • PyTorch >= v0.4.0

安装

git clone https://github.com/r9y9/wavenet_vocoder && cd wavenet_vocoder
pip install -e .

如果您只需要库部分,可以从 pypi 安装:

pip install wavenet_vocoder

入门

Kaldi 风格的配方

该仓库提供了 Kaldi 风格的配方,以使实验具有可重复性且易于管理。可用的配方如下:

  • mulaw256:使用分类输出分布的 WaveNet。输入为 8 位 mu-law 量化波形。
  • mol:物流混合(MoL)WaveNet。输入为 16 位原始音频。
  • gaussian:单高斯 WaveNet(又称 ClariNet 的教师模型)。输入为 16 位原始音频。

所有配方都包含 run.sh 脚本,其中指定了执行 WaveNet 训练/推理的所有步骤,包括数据预处理。详细信息请参阅 egs 目录中的 run.sh

注意:上述配方不支持多说话人 WaveNet 的全局条件化(尽管实现起来并不困难)。请查看 v0.1.12 版本以获取此功能,或者如果您确实需要此功能,请提交 issue。

将配方应用于您自己的数据集

这些配方设计为通用型,因此可以用于任何数据集。要将配方应用于您自己的数据集,您需要将所有 WAV 文件放入一个扁平目录中。例如:

> tree -L 1 ~/data/LJSpeech-1.1/wavs/ | head
/Users/ryuichi/data/LJSpeech-1.1/wavs/
├── LJ001-0001.wav
├── LJ001-0002.wav
├── LJ001-0003.wav
├── LJ001-0004.wav
├── LJ001-0005.wav
├── LJ001-0006.wav
├── LJ001-0007.wav
├── LJ001-0008.wav
├── LJ001-0009.wav

就是这样!最后一步是修改 run.sh 中的 db_root,或将 db_root 作为命令行参数传递给 run.sh

./run.sh --stage 0 --stop-stage 0 --db-root ~/data/LJSpeech-1.1/wavs/

分步操作

一个配方通常由多个步骤组成。强烈建议首次使用时分步运行配方,以便了解其工作原理。为此,请按如下方式指定 stagestop_stage

./run.sh --stage 0 --stop-stage 0
./run.sh --stage 1 --stop-stage 1
./run.sh --stage 2 --stop-stage 2

在典型情况下,尤其是在训练步骤中,您需要显式指定 CUDA 设备。

CUDA_VISIBLE_DEVICES="0,1" ./run.sh --stage 2 --stop-stage 2

命令行工具文档

命令行工具使用 docopt 编写。有关基本用法,请参阅每个 docstring。

tojson.py

将超参数转储到 JSON 文件中。

用法:

python tojson.py --hparams="您想要覆盖的参数" <output_json_path>

preprocess.py

用法:

python preprocess.py wavallin ${dataset_path} ${out_dir} --preset=<json>

train.py

注意:对于多 GPU 训练,最好确保 batch_size % num_gpu == 0。

用法:

python train.py --dump-root=${dump-root} --preset=<json>\
  --hparams="您想要覆盖的参数"

evaluate.py

给定一个包含局部条件特征的目录,为其合成波形。

用法:

python evaluate.py ${dump_root} ${checkpoint} ${output_dir} --dump-root="数据位置"\
    --preset=<json> --hparams="您想要覆盖的参数"

选项:

  • --num-utterances=<N>:要生成的语句数量。如果未指定,则生成所有语句。这对于调试非常有用。

synthesis.py

注意:这可能目前无法正常工作。请改用 evaluate.py。

根据给定的条件特征合成波形。

用法:

python synthesis.py ${checkpoint_path} ${output_dir} --preset=<json> --hparams="您想要覆盖的参数"

重要选项:

  • --conditional=<path>:(条件 WaveNet 必需)局部条件特征文件路径(.npy)。如果指定了此选项,生成的时间步长将由条件特征的大小决定。

训练场景

训练无条件 WaveNet

注意:这可能目前无法正常工作。请查看 v0.1.1 版本以获取可用版本。

python train.py --dump-root=./data/cmu_arctic/
    --hparams="cin_channels=-1,gin_channels=-1"

您必须通过将 gin_channelscin_channels 设置为负值来禁用全局和局部条件化。

训练基于梅尔谱的条件 WaveNet

python train.py --dump-root=./data/cmu_arctic/ --speaker-id=0 \
    --hparams="cin_channels=80,gin_channels=-1"

训练基于梅尔谱和说话人嵌入的条件 WaveNet

注意:这可能目前无法正常工作。请查看 v0.1.1 版本以获取可用版本。

python train.py --dump-root=./data/cmu_arctic/ \
    --hparams="cin_channels=80,gin_channels=16,n_speakers=7"

杂项

使用 TensorBoard 监控

日志默认会转储到 ./log 目录中。您可以使用 TensorBoard 监控日志:

tensorboard --logdir=log

使用本仓库的论文列表

非常感谢!!如果您发现了新的论文,请提交 PR。

赞助商

参考文献

版本历史

v0.1.12018/10/27

常见问题

相似工具推荐

openclaw

OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你

349.3k|★★★☆☆|昨天
Agent开发框架图像

stable-diffusion-webui

stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。

162.1k|★★★☆☆|2天前
开发框架图像Agent

everything-claude-code

everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上

143.9k|★★☆☆☆|今天
开发框架Agent语言模型

ComfyUI

ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。

107.9k|★★☆☆☆|昨天
开发框架图像Agent

markitdown

MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具,专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片(含 OCR)、音频(含语音转录)、HTML 乃至 YouTube 链接等多种格式的解析,能够精准提取文档中的标题、列表、表格和链接等关键结构信息。 在人工智能应用日益普及的今天,大语言模型(LLM)虽擅长处理文本,却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点,它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式,成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外,它还提供了 MCP(模型上下文协议)服务器,可无缝集成到 Claude Desktop 等 LLM 应用中。 这款工具特别适合开发者、数据科学家及 AI 研究人员使用,尤其是那些需要构建文档检索增强生成(RAG)系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性,但其核心优势在于为机器

93.4k|★★☆☆☆|昨天
插件开发框架

LLMs-from-scratch

LLMs-from-scratch 是一个基于 PyTorch 的开源教育项目,旨在引导用户从零开始一步步构建一个类似 ChatGPT 的大型语言模型(LLM)。它不仅是同名技术著作的官方代码库,更提供了一套完整的实践方案,涵盖模型开发、预训练及微调的全过程。 该项目主要解决了大模型领域“黑盒化”的学习痛点。许多开发者虽能调用现成模型,却难以深入理解其内部架构与训练机制。通过亲手编写每一行核心代码,用户能够透彻掌握 Transformer 架构、注意力机制等关键原理,从而真正理解大模型是如何“思考”的。此外,项目还包含了加载大型预训练权重进行微调的代码,帮助用户将理论知识延伸至实际应用。 LLMs-from-scratch 特别适合希望深入底层原理的 AI 开发者、研究人员以及计算机专业的学生。对于不满足于仅使用 API,而是渴望探究模型构建细节的技术人员而言,这是极佳的学习资源。其独特的技术亮点在于“循序渐进”的教学设计:将复杂的系统工程拆解为清晰的步骤,配合详细的图表与示例,让构建一个虽小但功能完备的大模型变得触手可及。无论你是想夯实理论基础,还是为未来研发更大规模的模型做准备

90.1k|★★★☆☆|昨天
语言模型图像Agent