资讯动态

PaddleSpeech HiFiGAN 声码器实战指南:基于 VCTK 数据集完成数据预处理、模型训练与波形合成

发布时间:2026/9/25 6:12:56 来源:尧图企业网站定制
人工智能语音音频NLP媒体生成【免费下载链接】PaddleSpeechEasy-to-use Speech Toolkit including Self-Supervised Learning model, SOTA/Streaming ASR with punctuation, Streaming TTS with text frontend, Speaker Verification System, End-to-End Speech Translation and Keyword Spotting. Won NAACL2022 Best Demo Award.项目地址https://gitcode.com/paddlepaddle/PaddleSpeech点击查看免费下载导读本文是 PaddleSpeech 仓库中examples/vctk/voc5示例的技术详解它演示了如何使用HiFiGAN论文声码器在VCTK多说话人英文语料库上完成从数据准备、静音裁剪、特征提取、模型训练到最终波形合成的完整流程。读完本文你将掌握VCTK-0.92 数据集的获取与整理细节含 MFA 强制对齐静音裁剪、dump目录结构与metadata.jsonl的作用、conf/default.yaml中 HiFiGAN V1 生成器/判别器架构与训练超参的完整含义以及train.py/synthesize.py的逐参数用法和预训练模型清单。一、示例整体结构与工作流程examples/vctk/voc5目录下包含一个可直接运行的完整配方recipe文件组织如下文件作用run.sh一键脚本按 stage 依次执行预处理、训练、合成三个环节path.sh设置MAIN_ROOT、PYTHONPATH等环境变量并导出BIN_DIR指向 HiFiGAN 训练脚本目录conf/default.yamlHiFiGAN 的全部配置特征提取、生成器/判别器架构、损失权重、优化器、训练间隔local/preprocess.sh数据预处理生成时长文件 → 提取特征 → 统计 → 归一化local/train.sh调用train.py训练 HiFiGANlocal/synthesize.sh调用synthesize.py从metadata.jsonl合成波形其中 path.sh 将BIN_DIR设置为paddlespeech/t2s/exps/gan_vocoder/hifigan并导出MAIN_ROOT${PWD}/../../../即仓库根目录与MAIN_ROOT/utils到PATH从而保证后续脚本能直接使用仓库根目录下的公共工具。整体流程由 run.sh 驱动默认参数为gpus0、conf_pathconf/default.yaml、train_output_pathexp/default、ckpt_namesnapshot_iter_5000.pdz./run.sh脚本内部通过source ${MAIN_ROOT}/utils/parse_options.sh支持--stage/--stop-stage参数实现阶段化执行。例如只跑数据预处理./run.sh --stage 0 --stop-stage 0阶段编号含义stage 0 为预处理、stage 1 为训练、stage 2 为合成默认stop_stage100会执行到最后一个阶段为止。二、数据集准备VCTK-0.92 下载与 MFA 对齐2.1 下载并解压从 VCTK 官方页面下载VCTK-0.92约 110 位英文说话人、每人朗读多句新闻文本的 44.1kHz 录音解压到~/datasets目录得到~/datasets/VCTK-Corpus-0.92。每个说话人目录下包含*_mic1.flac与*_mic2.flac两种录音其中mic2声道近距离麦克风音质更佳后续处理会优先使用。2.2 获取 MFA 对齐结果用于静音裁剪本示例使用蒙特利尔强制对齐工具 MFA 的发音时长结果来裁剪音频边缘的静音。有两种途径获得直接下载官方提供的对齐结果vctk_alignment.tar.gz解压后得到./vctk_alignment目录文档中假定该路径参考仓库中 examples/other/mfa 示例自行训练 MFA 模型。值得注意的是MFA 预处理阶段移除了 VCTK-0.92 中的三个说话人见 reorganize_vctk.pyp315没有对应的文本标注p280与p362缺少质量更好的*_mic2.flac录音。2.3 数据预处理数据预处理由local/preprocess.sh完成直接运行./local/preprocess.sh ${conf_path}该脚本内部依次执行 4 个 stageStage 0 — 生成时长文件调用 utils/gen_duration_from_textgrid.py从./vctk_alignment的 MFA 结果TextGrid生成durations.txtpython3 ${MAIN_ROOT}/utils/gen_duration_from_textgrid.py \ --inputdir./vctk_alignment \ --outputdurations.txt \ --config${config_path}Stage 1 — 提取特征调用paddlespeech/t2s/exps/gan_vocoder/preprocess.py输入原始音频目录、durations.txt输出到dump目录python3 ${BIN_DIR}/../preprocess.py \ --rootdir~/datasets/VCTK-Corpus-0.92/ \ --datasetvctk \ --dumpdirdump \ --dur-filedurations.txt \ --config${config_path} \ --cut-silTrue \ --num-cpu20从 preprocess.py 源码看--cut-silTrue时利用 MFA 得到的音素时长计算句首sil与句尾sil的边界并通过librosa.time_to_samples将起止时间转换为采样点后裁切音频实现去除边缘静音。同时脚本对每个*_mic2.flac文件去除_mic2后缀作为话语 IDutt_id并对音频做重采样srconfig.fs与幅度归一化超过 1.0 时除以最大值。Stage 2 — 统计特征均值/方差调用 utils/compute_statistics.py 基于训练集 raw 特征计算归一化所需的统计量python3 ${MAIN_ROOT}/utils/compute_statistics.py \ --metadatadump/train/raw/metadata.jsonl \ --field-namefeatsStage 3 — 归一化对train、dev、test三个子集分别调用normalize.py且dev 与 test 必须使用 train 的统计量保证数据分布一致python3 ${BIN_DIR}/../normalize.py \ --metadatadump/train/raw/metadata.jsonl \ --dumpdirdump/train/norm \ --statsdump/train/feats_stats.npy \ --skip-wav-copy # 同理处理 dump/dev/raw 与 dump/test/raw--stats 均指向 dump/train/feats_stats.npy2.4 dump 目录结构预处理完成后当前目录下会生成dump文件夹dump ├── dev │ ├── norm │ └── raw ├── test │ ├── norm │ └── raw └── train ├── norm ├── raw └── feats_stats.npy数据集被划分为train、dev、test三部分每部分含norm归一化后特征与raw原始特征子目录raw存放每条话语的 mel 频谱对数幅度log magnitudenorm存放归一化后的频谱归一化统计量均值/方差保存在dump/train/feats_stats.npy每个子目录中都有metadata.jsonl这是一个表格式文件记录每条话语的utt_id及频谱文件路径供训练与合成阶段读取。三、HiFiGAN 配置详解conf/default.yamlconf/default.yaml 是训练与合成的唯一配置来源。该配置基于 HiFiGAN 官方 V1 配置但对优化器与上采样参数做了适配修改配置注释中明确说明优化器由 AdamW 改为 Adambetas 由[0.8, 0.99]改为[0.5, 0.9]学习率调度由 ExponentialLR 改为 MultiStepLR并因 hop size 与官方 256 shift 不同而调整了上采样尺度。3.1 特征提取设置参数值说明fs24000采样率Hzn_fft2048FFT 大小采样点数n_shift300帧移hop size即 12.5mswin_length1200窗长采样点数即 50mswindowhann窗函数类型n_mels80mel 滤波器组个数fmin80mel 计算最低频率Hzfmax7600mel 计算最高频率Hz3.2 生成器架构generator_paramsHiFiGAN 生成器为多感受野融合的全卷积网络配置如下参数值说明in_channels80输入通道数即 mel 维数out_channels1输出通道数单声道波形channels512初始通道数kernel_size7首尾卷积层核大小upsample_scales[5, 5, 4, 3]上采样倍数与 300 帧移匹配5×5×4×3300upsample_kernel_sizes[10, 10, 8, 6]上采样层核大小resblock_kernel_sizes[3, 7, 11]残差块核大小多感受野融合resblock_dilations[[1,3,5]]×3每个残差块对应 3 组膨胀率use_additional_convsTrue残差块中是否使用额外卷积层nonlinear_activationleakyrelu非线性激活函数nonlinear_activation_params.negative_slope0.1LeakyReLU 负斜率use_weight_normTrue是否使用权重归一化上采样总倍数5×5×4×3 300恰好等于n_shift这正是生成器将 80 维 mel 频谱逐级上采样还原为 24kHz 波形的关键。3.3 判别器架构discriminator_params判别器由多尺度判别器Multi-Scale Discriminator, MSD与多周期判别器Multi-Period Discriminator, MPD两部分构成MSDscales: 33 个尺度通过AvgPool1Dkernel 4、stride 2、padding 2逐级下采样原始波形每个尺度内部为 1D 卷积堆叠核大小列表[15, 41, 5, 3]初始通道 128最大下采样通道 1024最大分组 16下采样尺度[4, 4, 4, 4, 1]MPDperiods: [2, 3, 5, 7, 11]5 个不同周期将一维波形按周期 reshape 成二维后使用 2D 卷积判别每个周期判别器初始通道 32下采样尺度[3, 3, 3, 3, 1]核大小[5, 3]并启用权重归一化use_weight_norm: True、关闭谱归一化use_spectral_norm: False两者均使用 LeakyReLU负斜率 0.1且follow_official_norm: True表示遵循官方归一化设置。3.4 损失函数设置参数值说明use_stft_lossFalse是否使用多分辨率 STFT 损失use_mel_lossTrue是否使用 mel 频谱损失use_feat_match_lossTrue是否使用特征匹配损失lambda_aux45.0辅助损失STFT/mel 损失的平衡系数lambda_adv1.0对抗损失的平衡系数lambda_feat_match2.0特征匹配损失的平衡系数mel_loss_params与特征提取设置一致fs: 24000, fft_size: 2048, hop_size: 300, win_length: 1200, window: hann, num_mels: 80其中 mel 损失的频带范围为fmin: 0至fmax: 12000比特征提取的 80~7600Hz 更宽用于更严格的频谱监督。对抗损失与特征匹配损失均默认average_by_discriminators: False特征匹配损失默认不包含判别器最终输出include_final_outputs: False。3.5 优化器与调度设置生成器与判别器采用独立的 Adam 优化器与 MultiStepLR 调度器优化器beta1: 0.5, beta2: 0.9, weight_decay: 0.0学习率2.0e-4gamma: 0.5里程碑[200000, 400000, 600000, 800000]每到一个里程碑学习率减半梯度裁剪generator_grad_norm: -1、discriminator_grad_norm: -1负值表示不裁剪。3.6 数据加载与训练间隔参数值说明batch_size16批大小batch_max_steps8400每个 batch 的音频长度采样点需能被 hop_size 整除num_workers2DataLoader 工作进程数generator_train_start_steps1从第 1 步开始训练判别器discriminator_train_start_steps0从第 0 步开始训练判别器train_max_steps2500000总训练步数save_interval_steps5000每 5000 步保存一次 checkpointeval_interval_steps1000每 1000 步评估一次num_snapshots10训练期间最多保留的 checkpoint 数seed42随机种子四、模型训练4.1 训练脚本与参数直接运行 local/train.shCUDA_VISIBLE_DEVICES${gpus} ./local/train.sh ${conf_path} ${train_output_path}脚本内部调用${BIN_DIR}/train.py并设置FLAGS_cudnn_exhaustive_searchtrue、FLAGS_conv_workspace_size_limit4000以加速 cuDNN 卷积搜索训练数据使用dump/train/norm/metadata.jsonl验证数据使用dump/dev/norm/metadata.jsonl输出目录为exp/default。train.py的完整帮助信息如下usage: train.py [-h] [--config CONFIG] [--train-metadata TRAIN_METADATA] [--dev-metadata DEV_METADATA] [--output-dir OUTPUT_DIR] [--ngpu NGPU] Train a HiFiGAN model. optional arguments: -h, --help show this help message and exit --config CONFIG HiFiGAN config file. --train-metadata TRAIN_METADATA training data. --dev-metadata DEV_METADATA dev data. --output-dir OUTPUT_DIR output dir. --ngpu NGPU if ngpu 0, use cpu.参数说明--configYAML 格式的配置文件用于覆盖默认配置即conf/default.yaml--train-metadata、--dev-metadata应为dump目录下train/norm与dev/norm子目录中的metadata.jsonl--output-dir实验结果保存目录checkpoint 保存在其中的checkpoints/子目录--ngpu使用的 GPU 数量为 0 时使用 CPU。训练过程中的 checkpoint 命名形如snapshot_iter_5000.pdz、snapshot_iter_10000.pdz与save_interval_steps: 5000对应。4.2 训练原理源码级从源码结构看HiFiGAN 的实现位于 paddlespeech/t2s/models/hifigan/hifigan.py生成器/判别器网络与 paddlespeech/t2s/models/hifigan/hifigan_updater.py训练更新逻辑。其训练采用典型的 GAN 对抗范式生成器Generator接收 80 维 mel 频谱通过upsample_scales: [5, 5, 4, 3]的转置卷积逐级上采样每一级后接多组resblock_kernel_sizes: [3, 7, 11]的多感受野残差块Multi-Receptive Field Fusion, MRF最终输出 24kHz 单声道波形判别器Discriminator由 3 个多尺度判别器与 5 个多周期判别器组成分别从不同时间分辨率与不同周期性视角判别真假损失由三部分组成对抗损失lambda_adv: 1.0、mel 频谱损失lambda_aux: 45.0作为辅助监督稳定训练、特征匹配损失lambda_feat_match: 2.0。五、波形合成5.1 合成脚本与参数训练完成后使用 local/synthesize.sh 从metadata.jsonl合成波形CUDA_VISIBLE_DEVICES${gpus} ./local/synthesize.sh ${conf_path} ${train_output_path} ${ckpt_name}脚本调用paddlespeech/t2s/exps/gan_vocoder/synthesize.py并设置FLAGS_allocator_strategynaive_best_fit、FLAGS_fraction_of_gpu_memory_to_use0.01限制显存占用以便多进程推理。其默认使用测试集元数据dump/test/norm/metadata.jsonlcheckpoint 路径为${train_output_path}/checkpoints/${ckpt_name}输出到${train_output_path}/test。synthesize.py的完整帮助信息如下usage: synthesize.py [-h] [--generator-type GENERATOR_TYPE] [--config CONFIG] [--checkpoint CHECKPOINT] [--test-metadata TEST_METADATA] [--output-dir OUTPUT_DIR] [--ngpu NGPU] Synthesize with GANVocoder. optional arguments: -h, --help show this help message and exit --generator-type GENERATOR_TYPE type of GANVocoder, should in {pwgan, mb_melgan, style_melgan, } now --config CONFIG GANVocoder config file. --checkpoint CHECKPOINT snapshot to load. --test-metadata TEST_METADATA dev data. --output-dir OUTPUT_DIR output dir. --ngpu NGPU if ngpu 0, use cpu.参数说明--config配置文件必须与训练时使用同一份配置--checkpoint要加载的 checkpoint从训练输出目录的checkpoints/中选择--test-metadata测试集元数据使用dump中dev/norm子目录的metadata.jsonl--output-dir合成音频的保存目录--ngpu使用的 GPU 数量为 0 时使用 CPU。5.2 合成原理源码级从 synthesize.py 源码可见其推理流程通过--generator-type在class_maphifigan → HiFiGANGenerator、mb_melgan → MelGANGenerator、pwgan → PWGGenerator、style_melgan → StyleMelGANGenerator中查找对应生成器类使用config[generator_params]实例化生成器加载 checkpoint 中的generator_params权重调用generator.remove_weight_norm()将权重归一化参数折叠进卷积权重推理部署前的必要步骤并切换到eval()模式通过DataTable读取测试集metadata.jsonl中的utt_id与feats归一化 mel 频谱逐条前向推理得到波形并保存为音频文件。六、预训练模型与导出格式6.1 预训练权重官方在 VCTK 上训练好的 HiFiGAN 权重可通过以下压缩包获取对应文档给出的下载链接格式说明hifigan_vctk_ckpt_0.2.0.zip训练 checkpointhifigan_vctk_static_1.1.0.zip静态图模型hifigan_vctk_static_pir_1.1.0.zipPIR 静态图模型需设置FLAGS_enable_pir_api1且仅支持 paddlepaddle3.0.0b2hifigan_vctk_onnx_1.1.0.zipONNX 模型hifigan_vctk_pdlite_1.3.0.zipPaddle-Lite 模型6.2 训练效果文档给出该配置在默认超参下的评估指标单 GPU 训练 250 万步ModelStepeval/generator_losseval/mel_losseval/feature_matching_lossdefault1(gpu) x 250000058.0920.123424.3846.3 checkpoint 内容hifigan_vctk_ckpt_0.2.0.zip解压后包含hifigan_vctk_ckpt_0.2.0 ├── default.yaml # default config used to train hifigan ├── feats_stats.npy # statistics used to normalize spectrogram when training hifigan └── snapshot_iter_2500000.pdz # generator parameters of hifigandefault.yaml训练 HiFiGAN 使用的默认配置feats_stats.npy训练时用于频谱归一化的统计量推理时输入也必须按此归一化snapshot_iter_2500000.pdz训练 250 万步时的生成器参数。七、Acknowledgement本示例的部分代码改编自 ParallelWaveGAN预训练/特征提取/归一化/合成等公共脚本位于 paddlespeech/t2s/exps/gan_vocoder 目录可与本示例对照阅读以深入理解实现细节。赞分享人工智能语音音频NLP媒体生成【免费下载链接】PaddleSpeechEasy-to-use Speech Toolkit including Self-Supervised Learning model, SOTA/Streaming ASR with punctuation, Streaming TTS with text frontend, Speaker Verification System, End-to-End Speech Translation and Keyword Spotting. Won NAACL2022 Best Demo Award.项目地址https://gitcode.com/paddlepaddle/PaddleSpeech点击查看免费下载相关推荐PaddleSpeech 实战Parallel WaveGAN 声码器在 VCTK 上的数据预处理、训练与合成全流程PaddleSpeech 实战Parallel WaveGAN 声码器在 VCTK 上的数据预处理、训练与合成全流程 本文以 examples/vctk/vo人工智能语音音频MooTool二维码生成与解析自定义尺寸、Logo与高级纠错功能MooTool二维码生成与解析自定义尺寸、Logo与高级纠错功能 在数字化时代二维码已成为我们生活中不可或缺的一部分。无论是支付、分享链接还是身份验证二维人工智能语音音频PaddleSpeech WaveFlow 声码器训练模块源码级解析从数据预处理到分布式训练与波形合成PaddleSpeech WaveFlow 声码器训练模块源码级解析从数据预处理到分布式训练与波形合成 WaveFlow 是 PaddleSpeech 中基于人工智能语音音频NLP媒体生成上一篇如何永久保存微信聊天记录WeChatMsg完整指南下一篇NextDNS CLI企业级部署方案大规模网络环境下的DNS管理最佳实践创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑