news 2026/10/2 8:14:02

Amphion Vocoder 全流程实战指南:从 HiFi-GAN 到 DiffWave 的训练与推理

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Amphion Vocoder 全流程实战指南:从 HiFi-GAN 到 DiffWave 的训练与推理
  • 音频
  • 语音
  • 媒体生成
  • 深度学习

【免费下载链接】Amphion

Amphion (/æmˈfaɪən/) is a toolkit for Audio, Music, and Speech Generation. Its purpose is to support reproducible research and help junior researchers and engineers get started in the field of audio, music, and speech generation research and development.

项目地址:https://gitcode.com/GitHub_Trending/am/Amphion
点击查看免费下载

导读

本文以 egs/vocoder/README.md 为骨架,系统讲解 Amphion 神经声码器(Neural Vocoder)体系:它如何用 GAN、Flow、Diffusion、自回归等四类架构,将梅尔频谱等声学表征重建成可听波形,并给出从数据准备、特征提取到训练、推理的完整四步配方(Recipe)。读完本文,你将掌握 Amphion 统一 Vocoder 配方的调用方式、GAN 与 Diffusion 两类已落地配方的关键配置含义,以及 GAN 家族中官方实现的 MS-SB-CQTD(多尺度子带常数 Q 变换判别器)HiFi-GAN 高保真声码器的实战用法。

一、Vocoder 在 Amphion 中的定位与支持模型总览

声码器(Vocoder)负责从声学表征生成可听波形,是当前音频生成系统(TTS、SVC、VC)的关键一环。Amphion 按架构类型对声码器做了统一封装,每一类都提供独立的 Recipe 目录与配置模板:

类型已支持模型仓库配方目录状态
GAN-basedMelGAN、HiFi-GAN、NSF-HiFiGAN、BigVGAN、APNetegs/vocoder/gan/✅ 提供统一 Recipe
Diffusion-basedDiffWave(训练/推理策略为 DDPM)egs/vocoder/diffusion/✅ 提供统一 Recipe
Flow-basedWaveGlow开发中(👨💻)⏳
Auto-regressiveWaveNet、WaveRNN开发中(👨💻)⏳

其中 GAN 家族各模型的独立示例位于 egs/vocoder/gan/ 下的apnet、bigvgan、hifigan、melgan、nsfhifigan、tfr_enhanced_hifigan等目录,每个目录内含exp_config.json与run.sh;Diffusion 家族的 DiffWave 示例位于 egs/vocoder/diffusion/diffwave/。

无论是哪类架构,Amphion 都遵循同一条四阶段流水线,你可以在任意架构上搭配任意数据集:

  1. 数据准备(Data Preparation)
  2. 特征提取(Feature Extraction)
  3. 训练(Training)
  4. 推理(Inference)

注意:所有 Recipe 命令都必须在Amphion仓库根目录下执行,即先cd Amphion再运行后续命令。

二、GAN 声码器统一配方:生成器 × 多判别器的对抗训练

GAN 声码器由生成器与多个判别器构成,其整体架构如下:

2.1 已支持的生成器与判别器

生成器方面,Amphion 已实现 MelGAN、HiFi-GAN、NSF-HiFiGAN、BigVGAN、APNet 五种,对应源码分别位于 models/vocoders/gan/generator/ 下的melgan.py、hifigan.py、nsfhifigan.py、bigvgan.py、apnet.py。从源码结构看,每个生成器都实现了__init__、forward与remove_weight_norm等标准接口,方便在推理时移除权重归一化。

判别器方面,Amphion 支持五种,对应源码位于 models/vocoders/gan/discriminator/:

  • Multi-Scale Discriminator(MSD):msd.py
  • Multi-Period Discriminator(MPD):mpd.py
  • Multi-Resolution Discriminator(MRD):mrd.py
  • Multi-Scale Short-Time Fourier Transform Discriminator(MS-STFTD):msstftd.py
  • Multi-Scale Sub-Band Constant-Q Transform Discriminator(MS-SB-CQTD,Amphion 原创):mssbcqtd.py

判别器可以按需任意组合。以 egs/vocoder/gan/exp_config_base.json 为例:

"model": { "discriminators": [ "msd", "mpd", "msstftd", "mssbcqtd" ], "mpd": { "mpd_reshapes": [2, 3, 5, 7, 11], "use_spectral_norm": false, "discriminator_channel_mult_factor": 1 }, "mssbcqtd": { "hop_lengths": [512, 256, 256], "filters": 32, "max_filters": 1024, "filters_scale": 1, "dilations": [1, 2, 4], "in_channels": 1, "out_channels": 1, "n_octaves": [9, 9, 9], "bins_per_octaves": [24, 36, 48] } }

其中mpd_reshapes决定 MPD 将 1D 波形重塑为 2D 时使用的周期因子,use_spectral_norm控制判别器是否施加谱归一化;MS-SB-CQTD 的hop_lengths对应多个时间分辨率的跳窗长度,n_octaves与bins_per_octaves分别控制 CQT 的倍频程数与每倍频程频带数,dilations则控制卷积感受野的膨胀系数。

2.2 第一步:数据准备

在exp_config_base.json中指定dataset列表与每个数据集的dataset_path。Amphion 支持的开源数据集清单见 egs/datasets/README.md,包括 csd、kising、m4singer、nus48e、opencpop、opensinger、opera、pjs、popbutfy、popcs、ljspeech、vctk、libritts 等:

"dataset": [ "csd", "kising", "m4singer", "nus48e", "opencpop", "opensinger", "opera", "pjs", "popbutfy", "popcs", "ljspeech", "vctk", "libritts" ], "dataset_path": { // TODO: 填入你的数据集路径 "csd": "[dataset path]", "kising": "[dataset path]", "m4singer": "[dataset path]", "nus48e": "[dataset path]", "opencpop": "[dataset path]", "opensinger": "[dataset path]", "opera": "[dataset path]", "pjs": "[dataset path]", "popbutfy": "[dataset path]", "popcs": "[dataset path]", "ljspeech": "[dataset path]", "vctk": "[dataset path]", "libritts": "[dataset path]" }

dataset_path中未被启用的数据集可以留空,训练时只会加载dataset列表中列出的项。

2.3 第二步:特征提取

声码器所需特征由各模型目录内部决定,通常无需额外修改配置。只需在exp_config_base.json中指定输出日志目录与处理后的数据目录:

// TODO: 填入输出日志路径,默认值为 "Amphion/ckpts/vocoder" "log_dir": "ckpts/vocoder", "preprocess": { // TODO: 填入输出数据路径,默认值为 "Amphion/data" "processed_dir": "data", "extract_mel": true, "extract_audio": true, "extract_pitch": false, "extract_uv": false, "use_mel": true, "use_audio": true, "n_mel": 100, "sample_rate": 24000 }

extract_*开关控制“是否提取该声学特征”,use_*开关控制“该特征是否参与模型训练”。GAN 声码器默认只使用梅尔谱(n_mel: 100,采样率24000Hz)与原始音频;若使用 NSF-HiFiGAN 这类基频条件模型,则需要开启 pitch 相关开关。

以预处理阶段运行 Recipe(--stage 1):

sh egs/vocoder/gan/{vocoder_name}/run.sh --stage 1

注意:CUDA_VISIBLE_DEVICES默认设置为"0",可通过--gpu "1"等参数在运行run.sh时修改。

从 egs/vocoder/gan/_template/run.sh 可以看到,--stage 1实际调用的是bins/vocoder/preprocess.py:

CUDA_VISIBLE_DEVICES=$gpu python "${work_dir}"/bins/vocoder/preprocess.py \ --config $exp_config \ --num_workers 8

2.4 第三步:训练

默认超参数在exp_config_base.json中给出,可在单张 NVIDIA 24GB 显存 GPU 上运行,也可按需调整:

"train": { "batch_size": 32, "max_epoch": 1000000, "save_checkpoint_stride": [20], "adamw": { "lr": 2.0e-4, "adam_b1": 0.8, "adam_b2": 0.99 }, "exponential_lr": { "lr_decay": 0.999 } }
  • batch_size:单卡批大小,可结合显存调整;
  • max_epoch:最大训练轮数(默认极大值,实际训练时长由显存与数据量决定,并配合save_checkpoint_stride按间隔保存 checkpoint);
  • adamw:AdamW 优化器参数,学习率2.0e-4,动量系数b1=0.8、b2=0.99;
  • exponential_lr:指数衰减调度,每个 step 学习率乘以0.999。

运行训练阶段(--stage 2),并指定实验名:

sh egs/vocoder/gan/{vocoder_name}/run.sh --stage 2 --name [YourExptName]

TensorBoard 日志与 checkpoints 会保存到Amphion/ckpts/vocoder/[YourExptName]目录。底层调用链见 bins/vocoder/train.py(由run.sh通过accelerate launch拉起)。

如需从预训练模型恢复或微调,使用resume_type与checkpoint参数:

sh egs/vocoder/gan/{vocoder_name}/run.sh --stage 2 \ --name [YourExptName] \ --resume_type ["resume" 为恢复全部训练状态;"finetune" 为仅加载模型权重] \ --checkpoint Amphion/ckpts/vocoder/[YourExptName]/checkpoint

注意:多 GPU 训练时main_process_port默认值为29500,可通过--main_process_port 29501修改避免端口冲突;也可用--gpu "0,1,2,3"指定多卡。

2.5 第四步:推理

推理阶段(--stage 3)提供三种模式:infer_from_dataset、infer_from_feature、infer_from_audio。统一入口为:

sh egs/vocoder/gan/{vocoder_name}/run.sh --stage 3 \ --infer_mode [Your chosen inference mode] \ --infer_datasets [Datasets you want to inference, needed when infer_from_dataset] \ --infer_feature_dir [Your path to your predicted acoustic features, needed when infer_from_feature] \ --infer_audio_dir [Your path to your audio files, needed when infer_from_audio] \ --infer_expt_dir Amphion/ckpts/vocoder/[YourExptName] \ --infer_output_dir Amphion/ckpts/vocoder/[YourExptName]/result

三种模式的差异如下:

a. 从数据集推理:直接使用--infer_datasets "libritts vctk ljspeech"指定数据集,适合在训练集/测试集上批量合成评测音频。

b. 从特征推理:将待合成的声学特征按如下目录结构存放,适用于将 TTS 模型预测的梅尔谱送入声码器:

┣ {infer_feature_dir} ┃ ┣ mels ┃ ┃ ┣ sample1.npy ┃ ┃ ┣ sample2.npy ┃ ┣ f0s ┃ ┃ ┣ sample1.npy ┃ ┃ ┣ sample2.npy

其中f0s仅在选用 NSF-HiFiGAN 时需要。命令示例:

sh egs/vocoder/gan/{vocoder_name}/run.sh --stage 3 \ --infer_mode infer_from_feature \ --infer_feature_dir [Your path to your predicted acoustic features] \ --infer_expt_dir Amphion/ckpts/vocoder/[YourExptName] \ --infer_output_dir Amphion/ckpts/vocoder/[YourExptName]/result

c. 从音频推理:用于快速的分析-合成(analysis-synthesis)验证,将 wav 放入如下结构后执行:

┣ audios ┃ ┣ sample1.wav ┃ ┣ sample2.wav
sh egs/vocoder/gan/{vocoder_name}/run.sh --stage 3 \ --infer_mode infer_from_audio \ --infer_audio_dir [Your path to your audio files] \ --infer_expt_dir Amphion/ckpts/vocoder/[YourExptName] \ --infer_output_dir Amphion/ckpts/vocoder/[YourExptName]/result

从 egs/vocoder/gan/_template/run.sh 可知,三种模式最终都调用 bins/vocoder/inference.py,仅传入参数不同:infer_from_dataset传--infer_datasets,infer_from_feature传--feature_folder,infer_from_audio传--audio_folder;--infer_output_dir缺省时默认为$infer_expt_dir/result。

三、新手配方:MS-SB-CQTD 增强 HiFi-GAN(官方论文实现)

egs/vocoder/gan/tfr_enhanced_hifigan/README.md 是官方提供的新手入门配方(beginner recipe),用于在 LibriTTS、VCTK、LJSpeech 三个数据集上训练高质量的 HiFi-GAN 声码器。它是论文Multi-Scale Sub-Band Constant-Q Transform Discriminator for High-Fidelity Vocoder(arXiv:2311.14957)的官方实现,即通过组合多种基于时频表征的判别器(TFR-based Discriminators)来提升 HiFi-GAN 的重建保真度:

3.1 配置要点(tfr_enhanced_hifigan)

该配方的配置文件为 egs/vocoder/gan/tfr_enhanced_hifigan/exp_config.json,它继承egs/vocoder/gan/exp_config_base.json,并做以下关键设置:

  • 数据集仅启用ljspeech、vctk、libritts三个;
  • 生成器选用hifigan,并配置 HiFi-GAN 网络结构:resblock: "1"、上采样率[8, 4, 2, 2, 2]、上采样核[16, 8, 4, 4, 4]、初始通道768、ResBlock 核尺寸[3, 5, 7]、膨胀尺寸[[1,3,5],[1,3,5],[1,3,5]];
  • 同时启用msd、mpd、mssbcqtd、msstftd四个判别器(MPD 的mpd_reshapes扩展为[2, 3, 5, 7, 11, 17, 23, 37]);
  • 训练损失组合criterions为["feature", "discriminator", "generator", "mel"],即在标准 GAN 对抗损失之外,还叠加了特征匹配损失(feature)与梅尔谱损失(mel),这也是高保真重建的关键;
  • 推理阶段batch_size设为 1。

3.2 预训练模型

项目方使用约 685 小时语音数据训练了 HiFi-GAN checkpoint,预训练权重说明见 pretrained/hifigan/README.md,可直接用于推理或作为微调起点。

3.3 运行四阶段

该配方同样分为四个阶段,命令与 GAN 统一配方一致,仅替换脚本路径:

# 特征提取 sh egs/vocoder/gan/tfr_enhanced_hifigan/run.sh --stage 1 # 训练 sh egs/vocoder/gan/tfr_enhanced_hifigan/run.sh --stage 2 --name [YourExptName] # 恢复/微调 sh egs/vocoder/gan/tfr_enhanced_hifigan/run.sh --stage 2 \ --name [YourExptName] \ --resume_type ["resume" / "finetune"] \ --checkpoint Amphion/ckpts/vocoder/[YourExptName]/checkpoint # 推理(三种模式) sh egs/vocoder/gan/tfr_enhanced_hifigan/run.sh --stage 3 \ --infer_mode infer_from_dataset \ --infer_datasets "libritts vctk ljspeech" \ --infer_expt_dir Amphion/ckpts/vocoder/[YourExptName] \ --infer_output_dir Amphion/ckpts/vocoder/[YourExptName]/result

由于 HiFi-GAN 训练只需梅尔谱与输出音频,特征提取阶段无需修改额外配置,extract_pitch与extract_uv均为false。

四、Diffusion 声码器配方:DiffWave + DDPM

Diffusion 声码器利用扩散过程生成音频,Amphion 目前支持 DiffWave 模型,训练与推理策略采用 DDPM:

DiffWave 的配置位于 egs/vocoder/diffusion/diffwave/exp_config.json,其模型部分如下:

"model": { "generator": "diffwave", "diffwave": { "residual_channels": 64, "residual_layers": 30, "dilation_cycle_length": 10, "noise_schedule_factors": [1.0e-4, 0.05, 50], "inference_noise_schedule": [0.0001, 0.001, 0.01, 0.05, 0.2, 0.5], "upsample_factors": [16, 16] } }
  • residual_channels/residual_layers:残差通道数与残差层数,共同决定模型容量;
  • dilation_cycle_length:膨胀率的循环长度(10 层一组循环);
  • noise_schedule_factors:训练噪声调度的构造因子[起始, 终止, 步数];
  • inference_noise_schedule:推理阶段的离散噪声调度,直接决定采样步数与音质/速度权衡;
  • upsample_factors:梅尔谱到波形的上采样倍数([16, 16],对应24000Hz / 16 / 16 ≈ 93.75帧率量级)。

Diffusion 配方的数据准备、特征提取、训练与推理步骤与 GAN 配方完全对应,仅脚本路径与配置继承关系不同(基础配置为 egs/vocoder/diffusion/exp_config_base.json,模型类型为DiffusionVocoder),命令示例:

sh egs/vocoder/diffusion/diffwave/run.sh --stage 1 # 特征提取 sh egs/vocoder/diffusion/diffwave/run.sh --stage 2 --name [YourExptName] # 训练 sh egs/vocoder/diffusion/diffwave/run.sh --stage 3 \ --infer_mode infer_from_audio \ --infer_audio_dir [Your path to your audio files] \ --infer_expt_dir Amphion/ckpts/vocoder/[YourExptName] \ --infer_output_dir Amphion/ckpts/vocoder/[YourExptName]/result

Diffusion 配方从特征推理时无需f0s(DiffWave 不以基频为条件),因此特征目录只需mels子目录。

五、统一配置模板与底层入口

所有 Vocoder Recipe 共享同一套命令参数解析逻辑,模板见 egs/vocoder/gan/_template/run.sh,支持:

  • 通用参数:--config(实验配置文件,缺省为脚本同目录的exp_config.json)、--name(实验名)、--stage(1/2/3)、--gpu(缺省"0");
  • 训练专用:--checkpoint、--resume_type(resume恢复全部状态,finetune仅加载权重)、--main_process_port(缺省29500);
  • 推理专用:--infer_mode、--infer_datasets、--infer_feature_dir、--infer_audio_dir、--infer_expt_dir、--infer_output_dir(缺省为$infer_expt_dir/result)。

三个阶段对应的底层 Python 入口分别为:

  • bins/vocoder/preprocess.py(--stage 1)
  • bins/vocoder/train.py(--stage 2,经accelerate launch启动)
  • bins/vocoder/inference.py(--stage 3)

模型实现上,公共基础配置 config/vocoder.json 定义了声学特征提取的默认参数(如n_mel: 100、win_size: 1024、hop_size: 256、sample_rate: 24000、fmin: 0、fmax: 12000等)与训练器通用设置(随机种子114514、gradient_accumulation_step: 1、TensorBoard tracker 等),各 Recipe 的exp_config_base.json通过base_config字段逐层继承,实现“通用默认值 + 任务定制化”的配置体系。

六、快速上手小结

  1. 选择配方:GAN 家族从 egs/vocoder/gan/ 选择模型目录(新手建议tfr_enhanced_hifigan);Diffusion 使用 egs/vocoder/diffusion/diffwave/。
  2. 改配置:在对应exp_config.json(或exp_config_base.json)中填入数据集路径、log_dir、processed_dir,并按需调整dataset列表、判别器组合与训练超参。
  3. 跑四步:在仓库根目录依次执行--stage 1(特征提取)、--stage 2 --name [YourExptName](训练)、--stage 3(按需选择三种推理模式之一)。
  4. 复用与扩展:判别器、生成器均为可插拔模块,新增判别器只需在discriminators列表追加名称并补充对应配置段;源码级实现可继续深入 models/vocoders/ 目录查阅。
  • 音频
  • 语音
  • 媒体生成
  • 深度学习

【免费下载链接】Amphion

Amphion (/æmˈfaɪən/) is a toolkit for Audio, Music, and Speech Generation. Its purpose is to support reproducible research and help junior researchers and engineers get started in the field of audio, music, and speech generation research and development.

项目地址:https://gitcode.com/GitHub_Trending/am/Amphion
点击查看免费下载

相关推荐

上一篇:如何在Blender中实现3MF文件无缝导入导出:3D打印工作流完整教程
下一篇:RePKG:Wallpaper Engine壁纸资源终极解包指南

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/2 8:11:11

Python + Neo4j 知识图谱上传实战:从 CSV 到可查图谱的完整链路

简介:本资源为基于Python与Neo4j的知识图谱上传与处理设计源码,面向希望掌握图数据库应用、数据上传与图查询分析的开发者与研究人员,可作为课程设计、毕业项目或工程实践的参考方案。压缩包共25个文件,约27.84MB,以12…

作者头像 李华
网站建设 2026/10/2 8:10:52

Claude Code卡顿真相:UI线程阻塞与Spinner诊断指南

1. 这不是Bug,是UI线程在喊救命:Claude Code卡顿的本质真相你点下“生成”按钮,光标转成那个不停旋转的小圆圈——Spinner——然后它就停在那里,一动不动。三秒、五秒、十秒……你开始怀疑是不是网络断了,是不是API密钥…

作者头像 李华
网站建设 2026/10/2 8:10:25

学术表达的语病怎么搭?按语病类型拆解

学术表达读起来不地道,多数时候不是词汇量不够,而是句子里藏着可以命名的结构毛病。把这些毛病按类型拆开——搭配失当、成分冗余、指代含混、口语化、语序错位、逻辑断裂——逐类换搭法,比通篇推倒重写省力得多。下面按这六类逐层拆解&#…

作者头像 李华
网站建设 2026/10/2 8:08:44

Windows 下 Codex CLI 与 Claude Code 安装配置全攻略

每次在技术群里看到有人晒 Codex CLI 和 Claude Code 的操作视频,底下总有 Windows 用户哀嚎“又用不了”。其实这俩工具在 Windows 上没那么难搞,只是默认会遇到几个坑:Node 版本不对、PowerShell 执行策略挡脚本、终端编码乱掉、环境变量不…

作者头像 李华