BigVGAN

GitHub
1.2k 145 中等 1 次阅读 昨天MIT音频
AI 解读 由 AI 自动生成,仅供参考

BigVGAN 是一款由英伟达推出的通用神经声码器,旨在将梅尔频谱图等声学特征高保真地还原为自然流畅的音频波形。它主要解决了传统声码器在合成语音时容易出现的机械感强、细节丢失以及在跨语言或复杂声音场景下表现不佳的问题,能够高质量地处理多语言语音、环境音效及乐器声音。

这款工具非常适合从事语音合成(TTS)、歌声合成研究的科研人员,以及需要部署高质量音频生成模型的开发者。得益于其大规模训练策略,BigVGAN 具备极强的泛化能力。其技术亮点在于最新的 v2 版本引入了自定义的融合 CUDA 内核,将上采样与激活操作合并,使得在单张 A100 GPU 上的推理速度提升了 1.5 至 3 倍。此外,模型采用了多尺度子带 CQT 判别器和多尺度梅尔频谱损失函数,并支持高达 44kHz 的采样率。BigVGAN 已集成至 Hugging Face Hub,提供预训练权重和交互式演示,方便用户快速上手体验或进行二次开发。

使用场景

某多语言有声书制作团队正在构建自动化配音流水线,需要将文本转语音模型生成的梅尔频谱图转换为高保真音频,以支持全球不同语种听众的收听需求。

没有 BigVGAN 时

  • 音质失真严重:在处理复杂发音或非英语语种时,传统声码器生成的音频常带有明显的金属音或背景嘶嘶声,听感生硬不自然。
  • 泛化能力不足:为中文训练的模型难以直接应用于法语或日语场景,团队不得不针对每种语言单独训练和维护多个专用声码器,运维成本极高。
  • 细节丢失明显:乐器伴奏或环境音效等高频细节在合成过程中被过度平滑,导致最终成品缺乏真实录音的空间感和丰富度。
  • 推理速度瓶颈:为了保证基本音质,往往需要牺牲推理速度,难以满足实时互动或大规模批量生成的时效要求。

使用 BigVGAN 后

  • 音质显著提升:得益于大规模多样化数据训练和抗混叠激活函数,BigVGAN 生成的音频消除了金属伪影,人声饱满且背景干净,接近真实录音水平。
  • 实现“万能”通用:单个 BigVGAN 模型即可完美支持多种语言、乐器及环境音的合成,团队无需再维护多套模型,大幅简化了技术架构。
  • 高频细节还原:即使是复杂的背景音乐或细微的呼吸声,BigVGAN 也能精准还原,使得有声书的沉浸感和情感表达力大幅增强。
  • 加速推理流程:通过集成自定义 CUDA 融合内核,BigVGAN 在单张 A100 GPU 上的推理速度提升了 1.5 至 3 倍,显著缩短了整体制作周期。

BigVGAN 通过其强大的通用性和高保真合成能力,将多语言音频生产从“勉强可用”提升至“广播级”标准,同时大幅降低了算力与运维成本。

运行环境要求

操作系统
  • Linux
GPU
  • 必需 NVIDIA GPU
  • 推理建议使用 A100(测试显示加速效果),支持 CUDA 11.8 或 12.1
  • 若使用自定义 CUDA 加速内核,需安装 nvcc 且版本需与 PyTorch 构建版本一致
内存

未说明

依赖
notes1. 官方仅在 Linux 环境下使用 conda 进行了测试(PyTorch 2.3.1 + CUDA 11.8/12.1)。2. 若启用自定义 CUDA 内核进行加速推理,系统必须安装 nvcc 和 ninja,首次运行会自动编译内核。3. 提供多种预训练模型,最高支持 44kHz 采样率和 512 倍上采样率,参数量高达 1.22 亿。4. 训练时需手动创建数据集的符号链接。
python3.10
torch>=2.3.1
torchaudio
torchvision
librosa
ninja
gradio
BigVGAN hero image

快速开始

BigVGAN:基于大规模训练的通用神经声码器

李尚吉、魏平、鲍里斯·金斯堡、布莱恩·卡坦扎罗、尹成浩

[论文] - [代码] - [展示] - [项目页面] - [权重] - [演示]

PWC

新闻

  • 2024年9月(v2.4):

    • 我们更新了经过500万步训练的预训练检查点。这是BigVGAN-v2检查点的最终版本。
  • 2024年7月(v2.3):

    • 进行了全面重构和代码改进,以提高可读性。
    • 实现了抗混叠激活(上采样 + 激活 + 下采样)的完全融合CUDA核,并进行了推理速度基准测试。
  • 2024年7月(v2.2): 该仓库现在包含一个使用Gradio的交互式本地演示。

  • 2024年7月(v2.1): BigVGAN现已集成到Hugging Face Hub中,用户可以轻松访问预训练检查点进行推理。我们还在Hugging Face Spaces上提供了一个交互式演示。

  • 2024年7月(v2): 我们发布了BigVGAN-v2及其预训练检查点。以下是主要亮点:

    • 自定义CUDA推理核:我们提供了一个用CUDA编写的融合上采样与激活核,以加速推理速度。测试显示,在单个A100 GPU上,速度提升了1.5至3倍。
    • 改进的判别器和损失函数:BigVGAN-v2使用了多尺度子带CQT判别器多尺度梅尔谱损失进行训练。
    • 更大的训练数据集:BigVGAN-v2使用包含多种音频类型的大型数据集进行训练,其中包括多语言语音、环境音效和乐器音等。
    • 我们提供了适用于不同音频配置的BigVGAN-v2预训练检查点,支持最高44 kHz采样率和512倍上采样比。

安装

该代码库已在Python 3.10 和 PyTorch 2.3.1 的conda环境中测试通过,使用的CUDA版本为pytorch-cuda=12.1pytorch-cuda=11.8。以下是一个创建conda环境的示例命令:

conda create -n bigvgan python=3.10 pytorch torchvision torchaudio pytorch-cuda=12.1 -c pytorch -c nvidia
conda activate bigvgan

克隆仓库并安装依赖项:

git clone https://github.com/NVIDIA/BigVGAN
cd BigVGAN
pip install -r requirements.txt

使用Hugging Face Hub快速进行推理

以下示例展示了如何使用BigVGAN:从Hugging Face Hub加载预训练的BigVGAN生成器,从输入波形计算梅尔频谱图,并将梅尔频谱图作为模型输入生成合成波形。

device = 'cuda'

import torch
import bigvgan
import librosa
from meldataset import get_mel_spectrogram

# 实例化模型。您可以选择设置use_cuda_kernel=True以获得更快的推理速度。
model = bigvgan.BigVGAN.from_pretrained('nvidia/bigvgan_v2_24khz_100band_256x', use_cuda_kernel=False)

# 移除模型中的权重归一化,并将其设置为评估模式
model.remove_weight_norm()
model = model.eval().to(device)

# 加载wav文件并计算梅尔频谱图
wav_path = '/path/to/your/audio.wav'
wav, sr = librosa.load(wav_path, sr=model.h.sampling_rate, mono=True) # wav是形状为[T_time]、值在[-1, 1]之间的np.ndarray
wav = torch.FloatTensor(wav).unsqueeze(0) # wav是形状为[B(1), T_time]的FloatTensor

# 从真实音频中计算梅尔频谱图
mel = get_mel_spectrogram(wav, model.h).to(device) # mel是形状为[B(1), C_mel, T_frame]的FloatTensor

# 从梅尔频谱图生成波形
with torch.inference_mode():
    wav_gen = model(mel) # wav_gen是形状为[B(1), 1, T_time]、值在[-1, 1]之间的FloatTensor
wav_gen_float = wav_gen.squeeze(0).cpu() # wav_gen是形状为[1, T_time]的FloatTensor

# 您可以将生成的波形转换为16位线性PCM
wav_gen_int16 = (wav_gen_float * 32767.0).numpy().astype('int16') # wav_gen现在是形状为[1, T_time]、数据类型为int16的np.ndarray

本地Gradio演示

您可以通过以下命令运行本地Gradio演示:

pip install -r demo/requirements.txt
python demo/app.py

训练

为数据集根目录创建符号链接。代码库使用相对于数据集路径的文件列表。以下是LibriTTS数据集的示例命令:

cd filelists/LibriTTS && \
ln -s /path/to/your/LibriTTS/train-clean-100 train-clean-100 && \
ln -s /path/to/your/LibriTTS/train-clean-360 train-clean-360 && \
ln -s /path/to/your/LibriTTS/train-other-500 train-other-500 && \
ln -s /path/to/your/LibriTTS/dev-clean dev-clean && \
ln -s /path/to/your/LibriTTS/dev-other dev-other && \
ln -s /path/to/your/LibriTTS/test-clean test-clean && \
ln -s /path/to/your/LibriTTS/test-other test-other && \
cd ../..

训练BigVGAN模型。以下是使用LibriTTS数据集在24kHz下训练BigVGAN-v2的示例命令,输入为完整的100频带梅尔频谱图:

python train.py \
--config configs/bigvgan_v2_24khz_100band_256x.json \
--input_wavs_dir filelists/LibriTTS \
--input_training_file filelists/LibriTTS/train-full.txt \
--input_validation_file filelists/LibriTTS/val-full.txt \
--list_input_unseen_wavs_dir filelists/LibriTTS filelists/LibriTTS \
--list_input_unseen_validation_file filelists/LibriTTS/dev-clean.txt filelists/LibriTTS/dev-other.txt \
--checkpoint_path exp/bigvgan_v2_24khz_100band_256x

合成

使用 BigVGAN 模型进行合成。以下是使用该模型生成音频的示例命令。 它会从 --input_wavs_dir 中的 WAV 文件计算梅尔谱,并将生成的音频保存到 --output_dir

python inference.py \
--checkpoint_file /path/to/your/bigvgan_v2_24khz_100band_256x/bigvgan_generator.pt \
--input_wavs_dir /path/to/your/input_wav \
--output_dir /path/to/your/output_wav

inference_e2e.py 支持直接从以 .npy 格式保存的梅尔谱进行合成,其形状为 [1, channel, frame][channel, frame]。 它会从 --input_mels_dir 加载梅尔谱,并将生成的音频保存到 --output_dir

请确保用于生成梅尔谱的 STFT 超参数与模型一致,这些超参数在对应模型的 config.json 文件中定义。

python inference_e2e.py \
--checkpoint_file /path/to/your/bigvgan_v2_24khz_100band_256x/bigvgan_generator.pt \
--input_mels_dir /path/to/your/input_mel \
--output_dir /path/to/your/output_wav

使用自定义 CUDA 内核进行合成

您可以在实例化 BigVGAN 时通过参数 use_cuda_kernel 来应用快速的 CUDA 推理内核:

generator = BigVGAN(h, use_cuda_kernel=True)

您也可以在 inference.pyinference_e2e.py 中传递 --use_cuda_kernel 来启用此功能。

首次应用时,它会使用 nvccninja 构建内核。如果构建成功,内核会被保存到 alias_free_activation/cuda/build 目录下,模型会自动加载该内核。该代码库已在 CUDA 12.1 上进行了测试。

请确保您的系统中已安装这两者,并且系统中的 nvcc 版本与您 PyTorch 的构建版本一致。

我们建议先运行 test_cuda_vs_torch_model.py 来构建并检查 CUDA 内核的正确性。以下是示例命令及其输出,其中返回了 [Success] test CUDA fused vs. plain torch BigVGAN inference

python tests/test_cuda_vs_torch_model.py \
--checkpoint_file /path/to/your/bigvgan_generator.pt
loading plain Pytorch BigVGAN
...
loading CUDA kernel BigVGAN with auto-build
Detected CUDA files, patching ldflags
Emitting ninja build file /path/to/your/BigVGAN/alias_free_activation/cuda/build/build.ninja..
Building extension module anti_alias_activation_cuda...
...
Loading extension module anti_alias_activation_cuda...
...
Loading '/path/to/your/bigvgan_generator.pt'
...
[Success] test CUDA fused vs. plain torch BigVGAN inference
 > mean_difference=0.0007238413265440613
...

如果您看到 [Fail] test CUDA fused vs. plain torch BigVGAN inference,则表示 CUDA 内核推理不正确。请检查您系统中安装的 nvcc 是否与您的 PyTorch 版本兼容。

预训练模型

我们在 Hugging Face Collections 上提供了预训练模型:https://huggingface.co/collections/nvidia/bigvgan-66959df3d97fd7d98d97dc9a。 用户可以从列出的模型仓库中下载生成器权重(名为 bigvgan_generator.pt)以及判别器和优化器的状态(名为 bigvgan_discriminator_optimizer.pt)。

模型名称 采样率 梅尔带数 fmax 上采样倍数 参数量 数据集 步数 微调
bigvgan_v2_44khz_128band_512x 44 kHz 128 22050 512 122M 大规模语料库 5M
bigvgan_v2_44khz_128band_256x 44 kHz 128 22050 256 112M 大规模语料库 5M
bigvgan_v2_24khz_100band_256x 24 kHz 100 12000 256 112M 大规模语料库 5M
bigvgan_v2_22khz_80band_256x 22 kHz 80 11025 256 112M 大规模语料库 5M
bigvgan_v2_22khz_80band_fmax8k_256x 22 kHz 80 8000 256 112M 大规模语料库 5M
bigvgan_24khz_100band 24 kHz 100 12000 256 112M LibriTTS 5M
bigvgan_base_24khz_100band 24 kHz 100 12000 256 14M LibriTTS 5M
bigvgan_22khz_80band 22 kHz 80 8000 256 112M LibriTTS + VCTK + LJSpeech 5M
bigvgan_base_22khz_80band 22 kHz 80 8000 256 14M LibriTTS + VCTK + LJSpeech 5M

论文中的结果基于原始的 24kHz BigVGAN 模型(bigvgan_24khz_100bandbigvgan_base_24khz_100band),这些模型是在 LibriTTS 数据集上训练的。 我们还提供了 22kHz 的 BigVGAN 模型,采用带限设置(即 fmax=8000),适用于 TTS 应用。 请注意,这些检查点使用带有对数尺度参数化的 snakebeta 激活函数,这种激活函数具有最佳的整体质量。

您可以通过以下步骤对模型进行微调:

  1. 下载检查点(包括生成器权重及其判别器/优化器状态)
  2. 使用您的音频数据集继续训练,在启动 train.py 时指定包含检查点的 --checkpoint_path 参数

BigVGAN-v2 训练细节

与原始的 BigVGAN 相比,BigVGAN-v2 的预训练检查点使用了 batch_size=32 和更长的 segment_size=65536,并在 8 张 A100 GPU 上进行训练。

需要注意的是,./configs 中的 BigVGAN-v2 json 配置文件默认使用 batch_size=4,以便在单张 A100 GPU 上进行训练。您可以根据自己的 GPU 资源调整 batch_size 来微调模型。

当使用较小的批量大小从头开始训练 BigVGAN-v2 时,可能会遇到论文中提到的早期发散问题。在这种情况下,我们建议在训练的早期阶段(例如前 20000 步)降低 clip_grad_norm 值(例如设置为 100),然后将其恢复到默认值 500。

BigVGAN-v2 评估结果

以下是基于 LibriTTS dev 数据集得到的 24kHz 模型 (bigvgan_v2_24khz_100band_256x) 的客观评估结果。BigVGAN-v2 在各项指标上均有显著提升。此外,该模型还减少了听感上的伪影,尤其是在非语音音频方面表现更为突出。

模型 数据集 步数 PESQ(↑) M-STFT(↓) MCD(↓) Periodicity(↓) V/UV F1(↑)
BigVGAN LibriTTS 1M 4.027 0.7997 0.3745 0.1018 0.9598
BigVGAN LibriTTS 5M 4.256 0.7409 0.2988 0.0809 0.9698
BigVGAN-v2 Large-scale Compilation 3M 4.359 0.7134 0.3060 0.0621 0.9777
BigVGAN-v2 Large-scale Compilation 5M 4.362 0.7026 0.2903 0.0593 0.9793

速度基准测试

以下是来自 tests/test_cuda_vs_torch_model.py 的 BigVGAN 速度和显存占用基准测试结果,以 bigvgan_v2_24khz_100band_256x 作为参考模型。

GPU num_mel_frame use_cuda_kernel 速度 (kHz) 实时因子 显存 (GB)
NVIDIA A100 256 False 1672.1 69.7x 1.3
True 3916.5 163.2x 1.3
2048 False 1899.6 79.2x 1.7
True 5330.1 222.1x 1.7
16384 False 1973.8 82.2x 5.0
True 5761.7 240.1x 4.4
NVIDIA GeForce RTX 3080 256 False 841.1 35.0x 1.3
True 1598.1 66.6x 1.3
2048 False 929.9 38.7x 1.7
True 1971.3 82.1x 1.6
16384 False 943.4 39.3x 5.0
True 2026.5 84.4x 3.9
NVIDIA GeForce RTX 2080 Ti 256 False 515.6 21.5x 1.3
True 811.3 33.8x 1.3
2048 False 576.5 24.0x 1.7
True 1023.0 42.6x 1.5
16384 False 589.4 24.6x 5.0
True 1068.1 44.5x 3.2

致谢

我们感谢 Vijay Anand Korthikanti 和 Kevin J. Shih 在实现推理用 CUDA 核心方面的慷慨支持。

参考文献

版本历史

v2.42024/09/05
v2.32024/07/22
v2.22024/07/17
v2.12024/07/16
v22024/07/10
v12024/07/09

相似工具推荐

ML-For-Beginners

ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。

85.1k|★★☆☆☆|6天前
图像数据工具视频

GPT-SoVITS

GPT-SoVITS 是一款强大的开源语音合成与声音克隆工具,旨在让用户仅需极少量的音频数据即可训练出高质量的个性化语音模型。它核心解决了传统语音合成技术依赖海量录音数据、门槛高且成本大的痛点,实现了“零样本”和“少样本”的快速建模:用户只需提供 5 秒参考音频即可即时生成语音,或使用 1 分钟数据进行微调,从而获得高度逼真且相似度极佳的声音效果。 该工具特别适合内容创作者、独立开发者、研究人员以及希望为角色配音的普通用户使用。其内置的友好 WebUI 界面集成了人声伴奏分离、自动数据集切片、中文语音识别及文本标注等辅助功能,极大地降低了数据准备和模型训练的技术门槛,让非专业人士也能轻松上手。 在技术亮点方面,GPT-SoVITS 不仅支持中、英、日、韩、粤语等多语言跨语种合成,还具备卓越的推理速度,在主流显卡上可实现实时甚至超实时的生成效率。无论是需要快速制作视频配音,还是进行多语言语音交互研究,GPT-SoVITS 都能以极低的数据成本提供专业级的语音合成体验。

56.4k|★★★☆☆|1周前
音频

TTS

🐸TTS 是一款功能强大的深度学习文本转语音(Text-to-Speech)开源库,旨在将文字自然流畅地转化为逼真的人声。它解决了传统语音合成技术中声音机械生硬、多语言支持不足以及定制门槛高等痛点,让高质量的语音生成变得触手可及。 无论是希望快速集成语音功能的开发者,还是致力于探索前沿算法的研究人员,亦或是需要定制专属声音的数据科学家,🐸TTS 都能提供得力支持。它不仅预置了覆盖全球 1100 多种语言的训练模型,让用户能够即刻上手,还提供了完善的工具链,支持用户利用自有数据训练新模型或对现有模型进行微调,轻松实现特定风格的声音克隆。 在技术亮点方面,🐸TTS 表现卓越。其最新的 ⓍTTSv2 模型支持 16 种语言,并在整体性能上大幅提升,实现了低于 200 毫秒的超低延迟流式输出,极大提升了实时交互体验。此外,它还无缝集成了 🐶Bark、🐢Tortoise 等社区热门模型,并支持调用上千个 Fairseq 模型,展现了极强的兼容性与扩展性。配合丰富的数据集分析与整理工具,🐸TTS 已成为科研与生产环境中备受信赖的语音合成解决方案。

45k|★★★☆☆|1周前
音频开发框架图像

LocalAI

LocalAI 是一款开源的本地人工智能引擎,旨在让用户在任意硬件上轻松运行各类 AI 模型,包括大语言模型、图像生成、语音识别及视频处理等。它的核心优势在于彻底打破了高性能计算的门槛,无需昂贵的专用 GPU,仅凭普通 CPU 或常见的消费级显卡(如 NVIDIA、AMD、Intel 及 Apple Silicon)即可部署和运行复杂的 AI 任务。 对于担心数据隐私的用户而言,LocalAI 提供了“隐私优先”的解决方案,确保所有数据处理均在本地基础设施内完成,无需上传至云端。同时,它完美兼容 OpenAI、Anthropic 等主流 API 接口,这意味着开发者可以无缝迁移现有应用,直接利用本地资源替代云服务,既降低了成本又提升了可控性。 LocalAI 内置了超过 35 种后端支持(如 llama.cpp、vLLM、Whisper 等),并集成了自主 AI 代理、工具调用及检索增强生成(RAG)等高级功能,且具备多用户管理与权限控制能力。无论是希望保护敏感数据的企业开发者、进行算法实验的研究人员,还是想要在个人电脑上体验最新 AI 技术的极客玩家,都能通过 LocalAI 获

44.8k|★★★☆☆|2周前
图像音频语言模型

bark

Bark 是由 Suno 推出的开源生成式音频模型,能够根据文本提示创造出高度逼真的多语言语音、音乐、背景噪音及简单音效。与传统仅能朗读文字的语音合成工具不同,Bark 基于 Transformer 架构,不仅能模拟说话,还能生成笑声、叹息、哭泣等非语言声音,甚至能处理带有情感色彩和语气停顿的复杂文本,极大地丰富了音频表达的可能性。 它主要解决了传统语音合成声音机械、缺乏情感以及无法生成非语音类音效的痛点,让创作者能通过简单的文字描述获得生动自然的音频素材。无论是需要为视频配音的内容创作者、探索多模态生成的研究人员,还是希望快速原型设计的开发者,都能从中受益。普通用户也可通过集成的演示页面轻松体验其神奇效果。 技术亮点方面,Bark 支持商业使用(MIT 许可),并在近期更新中实现了显著的推理速度提升,同时提供了适配低显存 GPU 的版本,降低了使用门槛。此外,社区还建立了丰富的提示词库,帮助用户更好地驾驭模型生成特定风格的声音。只需几行 Python 代码,即可将创意文本转化为高质量音频,是连接文字与声音世界的强大桥梁。

39.1k|★★★☆☆|1周前
音频

ChatTTS

ChatTTS 是一款专为日常对话场景打造的生成式语音模型,特别适用于大语言模型助手等交互式应用。它主要解决了传统文本转语音(TTS)技术在对话中缺乏自然感、情感表达单一以及难以处理停顿、笑声等细微语气的问题,让机器生成的语音听起来更像真人在聊天。 这款工具非常适合开发者、研究人员以及希望为应用增添自然语音交互功能的设计师使用。普通用户也可以通过社区开发的衍生产品体验其能力。ChatTTS 的核心亮点在于其对对话任务的深度优化:它不仅支持中英文双语,还能精准控制韵律细节,自动生成自然的 laughter(笑声)、pauses(停顿)和 interjections(插入语),从而实现多说话人的互动对话效果。在韵律表现上,ChatTTS 超越了大多数开源 TTS 模型。目前开源版本基于 4 万小时数据预训练而成,虽主要用于学术研究与教育目的,但已展现出强大的潜力,并支持流式音频生成与零样本推理,为后续的多情绪控制等进阶功能奠定了基础。

39k|★★★☆☆|1周前
语言模型Agent开发框架