Project Icon

BigVGAN

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

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

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

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

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

PWC

新闻

  • 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演示

您可以使用以下命令运行本地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内核方面给予的慷慨支持。

参考文献

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

稿定AI

稿定设计 是一个多功能的在线设计和创意平台,提供广泛的设计工具和资源,以满足不同用户的需求。从专业的图形设计师到普通用户,无论是进行图片处理、智能抠图、H5页面制作还是视频剪辑,稿定设计都能提供简单、高效的解决方案。该平台以其用户友好的界面和强大的功能集合,帮助用户轻松实现创意设计。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号