BigVGAN

BigVGAN

大规模训练的通用神经网络声码器

BigVGAN是一个通过大规模训练实现的通用神经网络声码器。它可高质量合成多语言语音、环境声音和乐器声音等多种音频。项目提供多个预训练模型,支持44kHz采样率和512倍上采样比率。BigVGAN集成自定义CUDA内核,在单个A100 GPU上推理速度提升1.5-3倍。

BigVGAN神经声码器语音合成深度学习音频处理Github开源项目

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

Sang-gil Lee, Wei Ping, Boris Ginsburg, Bryan Catanzaro, Sungroh Yoon

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

PWC

<center><img src="https://yellow-cdn.veclightyear.com/835a84d5/e01ab129-1e7a-4b7f-9510-90417c4db09c.png" width="800"></center>

新闻

  • 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包上进行了测试,使用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]的np.ndarray,值在[-1, 1]之间 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]的FloatTensor,值在[-1, 1]之间 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]的np.ndarray,dtype为int16

本地gradio演示 <a href='https://github.com/gradio-app/gradio'><img src='https://img.shields.io/github/stars/gradio-app/gradio'></a>

您可以使用以下命令运行本地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, 通道, 帧][通道, 帧]。 它从 --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 上提供了预训练模型。 您可以在列出的模型库中下载生成器权重(名为 bigvgan_generator.pt)和其判别器/优化器状态(名为 bigvgan_discriminator_optimizer.pt)的检查点。

模型名称采样率Mel 频带fmax上采样比率参数量数据集步数是否微调
bigvgan_v2_44khz_128band_512x44 kHz12822050512122M大规模编译3M
bigvgan_v2_44khz_128band_256x44 kHz12822050256112M大规模编译3M
bigvgan_v2_24khz_100band_256x24 kHz10012000256112M大规模编译3M
bigvgan_v2_22khz_80band_256x22 kHz8011025256112M大规模编译3M
bigvgan_v2_22khz_80band_fmax8k_256x22 kHz808000256112M大规模编译3M
bigvgan_24khz_100band24 kHz10012000256112MLibriTTS5M
bigvgan_base_24khz_100band24 kHz1001200025614MLibriTTS5M
bigvgan_22khz_80band22 kHz808000256112MLibriTTS + VCTK + LJSpeech5M
bigvgan_base_22khz_80band22 kHz80800025614MLibriTTS + VCTK + LJSpeech5M

论文的结果基于在 LibriTTS 数据集上训练的原始 24kHz BigVGAN 模型(bigvgan_24khz_100bandbigvgan_base_24khz_100band)。 我们还提供了带有限频带设置(即 fmax=8000)的 22kHz BigVGAN 模型,用于 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 的评估结果

以下是24kHz模型(bigvgan_v2_24khz_100band_256x)在LibriTTS dev集上获得的客观结果。BigVGAN-v2在各项指标上都有显著改进。该模型还减少了感知上的伪音,特别是对于非语音音频。

模型数据集步数PESQ(↑)M-STFT(↓)MCD(↓)周期性(↓)V/UV F1(↑)
BigVGANLibriTTS1M4.0270.79970.37450.10180.9598
BigVGANLibriTTS5M4.2560.74090.29880.08090.9698
BigVGAN-v2大规模编译数据集3M4.3590.71340.30600.06210.9777

速度基准测试

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

GPUmel帧数使用CUDA内核速度 (kHz)实时倍数显存 (GB)
NVIDIA A1002561672.169.7x1.3
3916.5163.2x1.3
20481899.679.2x1.7
5330.1222.1x1.7
163841973.882.2x5.0
5761.7240.1x4.4
NVIDIA GeForce RTX 3080256841.135.0x1.3
1598.166.6x1.3
2048929.938.7x1.7
1971.382.1x1.6
16384943.439.3x5.0
2026.584.4x3.9
NVIDIA GeForce RTX 2080 Ti256515.621.5x1.3
811.333.8x1.3
2048576.524.0x1.7
1023.042.6x1.5
16384589.424.6x5.0
1068.144.5x3.2

致谢

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

参考文献

编辑推荐精选

Keevx

Keevx

AI数字人视频创作平台

Keevx 一款开箱即用的AI数字人视频创作平台,广泛适用于电商广告、企业培训与社媒宣传,让全球企业与个人创作者无需拍摄剪辑,就能快速生成多语言、高质量的专业视频。

即梦AI

即梦AI

一站式AI创作平台

提供 AI 驱动的图片、视频生成及数字人等功能,助力创意创作

扣子-AI办公

扣子-AI办公

AI办公助手,复杂任务高效处理

AI办公助手,复杂任务高效处理。办公效率低?扣子空间AI助手支持播客生成、PPT制作、网页开发及报告写作,覆盖科研、商业、舆情等领域的专家Agent 7x24小时响应,生活工作无缝切换,提升50%效率!

TRAE编程

TRAE编程

AI辅助编程,代码自动修复

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
蛙蛙写作

蛙蛙写作

AI小说写作助手,一站式润色、改写、扩写

蛙蛙写作—国内先进的AI写作平台,涵盖小说、学术、社交媒体等多场景。提供续写、改写、润色等功能,助力创作者高效优化写作流程。界面简洁,功能全面,适合各类写作者提升内容品质和工作效率。

AI辅助写作AI工具蛙蛙写作AI写作工具学术助手办公助手营销助手AI助手
问小白

问小白

全能AI智能助手,随时解答生活与工作的多样问题

问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。

热门AI助手AI对话AI工具聊天机器人
Transly

Transly

实时语音翻译/同声传译工具

Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

下拉加载更多