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内核方面给予的慷慨支持。

参考文献

编辑推荐精选

问小白

问小白

全能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 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

Trae

Trae

字节跳动发布的AI编程神器IDE

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

热门AI工具生产力协作转型TraeAI IDE
咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

AI助手热门AI工具AI创作AI辅助写作讯飞绘文内容运营个性化文章多平台分发
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

openai-agents-python

openai-agents-python

OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。

openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。

下拉加载更多