人工智能语音音频【免费下载链接】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/gh_mirrors/pa/PaddleSpeech点击查看免费下载本指南以 PaddleSpeech 仓库中的 examples/opencpop/voc1 示例为主线完整讲解如何用中文普通话歌唱数据集 Opencpop 训练 Parallel WaveGAN并行波网声码器并覆盖数据预处理、模型训练、波形合成、动转静与量化部署的端到端流程。读完本文你将掌握该示例的run.sh流水线各阶段用法、conf/default.yaml 中全部超参数的语义与调参要点以及train.py/synthesize.py的底层实现原理能够独立复现一个面向歌声合成SVS场景的高质量声码器。一、背景为什么歌声合成需要 Parallel WaveGAN在 PaddleSpeech 的歌声合成Singing Voice Synthesis, SVS技术栈中声码器Vocoder承担着将声学特征通常是梅尔频谱还原为时域波形的关键角色。Parallel WaveGAN 是一种基于对抗生成思路的并行神经声码器与自回归声码器相比它可以在一次前向传播中并行生成整段波形显著降低合成耗时同时通过多分辨率 STFT 损失与对抗损失的联合优化保持高音质。该模型由 kan-bayashi/ParallelWaveGAN 项目提出PaddleSpeech 在 paddlespeech/t2s/models/parallel_wavegan/parallel_wavegan.py 中提供了 Paddle 实现文件头部注明 Modified from espnet本示例 Acknowledgement 部分也说明参考了原实现。本示例对应的核心代码路径为训练脚本paddlespeech/t2s/exps/gan_vocoder/parallelwave_gan/train.py模型定义paddlespeech/t2s/models/parallel_wavegan/parallel_wavegan.py预处理与合成paddlespeech/t2s/exps/gan_vocoder/preprocess.py、paddlespeech/t2s/exps/gan_vocoder/synthesize.py该示例位于 examples/opencpop/voc1与同目录下的歌声合成器示例 examples/opencpop/svs1 配套使用svs1 负责训练歌声合成器生成梅尔频谱voc1 负责训练声码器将梅尔频谱还原为歌声波形。二、数据集准备下载与目录结构Opencpop 是用于中文歌声合成研究的普通话歌唱数据集由 WeNet 社区发布。按 README 说明从其官网下载数据集后解压到~/datasets得到数据集根目录~/datasets/Opencpop。预处理脚本 examples/opencpop/voc1/local/preprocess.sh 中实际使用的数据路径为--rootdir~/datasets/Opencpop/segments/存放分句后的歌声片段音频的目录wavs子目录--dur-file~/datasets/Opencpop/segments/transcriptions.txt音素时长标注文件同时提供说话人信息从预处理源码 paddlespeech/t2s/exps/gan_vocoder/preprocess.pymain()函数中args.dataset opencpop分支可以看到 Opencpop 特有的数据划分逻辑音频从rootdir / wavs读取训练集由train.txt中的 utt 列表确定测试集由test.txt确定其中test.txt的前 106 条被划为dev其余归入test。因此请确保解压后的Opencpop目录中包含segments/wavs、segments/transcriptions.txt、train.txt、test.txt等文件。三、一键流水线run.sh 的阶段控制进入示例目录注意path.sh会通过MAIN_ROOT定位仓库根目录并设置BIN_DIR指向paddlespeech/t2s/exps/gan_vocoder/parallelwave_gancd examples/opencpop/voc1 ./run.shrun.sh使用 utils/parse_options.sh 解析--stage与--stop-stage参数默认配置为gpus0、conf_pathconf/default.yaml、train_output_pathexp/default、ckpt_namesnapshot_iter_100000.pdz。各阶段含义如下源码见 examples/opencpop/voc1/run.shStage行为调用脚本0数据预处理特征提取、统计量计算、归一化./local/preprocess.sh1训练模型checkpoint 保存在exp/default/checkpoints/./local/train.sh2用测试集合成波形./local/synthesize.sh3动态图转静态图推理模型./local/dygraph_to_static.sh4静态图 PTQ 量化并导出 ONNX 格式./local/PTQ_static.sh只需运行预处理阶段./run.sh --stage 0 --stop-stage 0当你想从某个阶段继续或只执行特定阶段时均可用--stage N --stop-stage N精确控制这与 parse_options.sh 的通用约定一致。四、数据预处理从歌声片段到梅尔频谱特征预处理脚本的完整调用方式./local/preprocess.sh ${conf_path}脚本内部按三个阶段执行见 examples/opencpop/voc1/local/preprocess.sh特征提取调用python3 ${BIN_DIR}/../preprocess.py参数包括--rootdir~/datasets/Opencpop/segments/、--datasetopencpop、--dumpdirdump、--dur-file、--config、--cut-silFalse、--num-cpu20。此处--cut-silFalse表示不对歌声片段做边缘静音切除歌唱数据通常已由数据集切分好--num-cpu20表示使用 20 线程并行处理。统计量计算调用${MAIN_ROOT}/utils/compute_statistics.py --metadatadump/train/raw/metadata.jsonl --field-namefeats从训练集原始特征计算均值和标准差保存为dump/train/feats_stats.npy。归一化调用normalize.py三次分别对 train、dev、test 的 raw 特征做归一化注意dev 与 test 必须复用 train 的统计量以保证与训练时特征分布一致。处理完成后当前目录生成dump文件夹dump ├── dev │ ├── norm │ └── raw ├── test │ ├── norm │ └── raw └── train ├── norm ├── raw └── feats_stats.npy从源码 paddlespeech/t2s/exps/gan_vocoder/preprocess.py 的process_sentence()可以看出特征提取细节读取音频后先按config.fs24000 Hz重采样将样本对齐到num_frames * n_shift的整数倍随后用LogMelFBank其参数取自配置文件的fs / n_fft / n_shift / win_length / window / n_mels / fmin / fmax提取对数梅尔频谱。每个音频产出两个.npy文件{utt_id}_feats.npy形状为(num_frames, n_mels)的对数梅尔频谱{utt_id}_wave.npy形状为(num_samples,)的对齐后的时域波形raw子目录存放的就是这些未归一化的频谱对数梅尔频谱norm子目录存放经feats_stats.npy归一化后的频谱。每个子目录内还有一个metadata.jsonl它是表状的记录文件每行包含utt_id、num_samples、num_frames、feats特征文件路径、wave波形文件路径等字段供训练与合成阶段的数据加载器DataTable直接读取。五、模型训练train.py 参数与配置深度解析训练命令CUDA_VISIBLE_DEVICES${gpus} ./local/train.sh ${conf_path} ${train_output_path}train.sh 内部设置了FLAGS_cudnn_exhaustive_searchtrue与FLAGS_conv_workspace_size_limit4000两个 Paddle FLAGS然后调用${BIN_DIR}/train.py传入--train-metadatadump/train/norm/metadata.jsonl、--dev-metadatadump/dev/norm/metadata.jsonl、--config、--output-dir与--ngpu1。train.py源码paddlespeech/t2s/exps/gan_vocoder/parallelwave_gan/train.py的完整帮助信息usage: train.py [-h] [--config CONFIG] [--train-metadata TRAIN_METADATA] [--dev-metadata DEV_METADATA] [--output-dir OUTPUT_DIR] [--ngpu NGPU] [--batch-size BATCH_SIZE] [--max-iter MAX_ITER] [--run-benchmark RUN_BENCHMARK] [--profiler_options PROFILER_OPTIONS] Train a ParallelWaveGAN model. optional arguments: -h, --help show this help message and exit --config CONFIG ParallelWaveGAN 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. benchmark: arguments related to benchmark. --batch-size BATCH_SIZE batch size. --max-iter MAX_ITER train max steps. --run-benchmark RUN_BENCHMARK runing benchmark or not, if True, use the --batch-size and --max-iter. --profiler_options PROFILER_OPTIONS The option of profiler, which should be in format key1value1;key2value2;key3value3.参数使用说明--configyaml 格式配置文件用于覆盖默认配置即 conf/default.yaml。--train-metadata、--dev-metadata应使用dump文件夹中 train 与 dev 的norm子目录下的metadata.jsonl。--output-dir实验结果保存目录checkpoint 保存在该目录的checkpoints/子目录中。--ngpu使用的 GPU 数量ngpu 0时使用 CPUngpu 1时train.py会调用dist.spawn启动多卡分布式训练。从源码看训练流程的核心组织如下train_sp()中先按--ngpu决定设备并设置随机种子config.seed默认 42用DataTable读取 train/dev 的wave与feats字段通过Clip批处理函数按batch_max_steps25500与hop_sizen_shift裁剪音频并保持与辅助特征含aux_context_window上下文对齐随后实例化PWGGenerator、PWGDiscriminator损失函数为MultiResolutionSTFTLoss参数取自stft_loss_params加nn.MSELoss()生成器与判别器分别使用独立的 Adam 优化器与StepDecay学习率调度器并挂载ClipGradByGlobalNorm梯度裁剪。训练由Trainer驱动stop_trigger为train_max_steps次迭代并注册了evaluator每eval_interval_steps评估一次、VisualDL可视化、Snapshot每save_interval_steps保存一次最多保留num_snapshots个。5.1 配置文件 default.yaml 全解配置文件 conf/default.yaml 是训练的总开关文件头部注释提示该配置针对 CSMSC 数据集调优迁移到其他数据集时需仔细调整部分参数并注明在 RTX TITAN 上约需 12 GB 显存、约 3 天训练时长该信息为仓库配置文件原文说明。按功能分组解读如下。特征提取设置FEATURE EXTRACTION SETTING参数默认值含义fs24000采样率HzOpencpop 歌声数据的重采样目标n_fft512FFT 大小样本数n_shift128帧移hop size样本数约 12.5 mswin_length512窗长样本数约 50 ms置 null 时与 fft_size 相同windowhann窗函数类型n_mels80梅尔滤波器组数量fmin/fmax30 / 12000梅尔滤波的频率范围Hz这些参数直接决定LogMelFBank提取的特征形态也决定了后续模型的上采样总比例upsample_scales乘积必须等于n_shift。生成器网络结构GENERATOR NETWORK ARCHITECTURE SETTING参数默认值含义in_channels/out_channels1 / 1输入/输出波形通道数单声道kernel_size3膨胀卷积核大小layers30残差块层数stacks3堆叠数即膨胀周期数每组内残差块膨胀率指数增长residual_channels64残差卷积通道数gate_channels128门控卷积通道数skip_channels64跳跃连接卷积通道数aux_channels80辅助特征梅尔频谱卷积通道数必须与 n_mels 相同aux_context_window2辅助特征上下文窗口取 2 时考虑前后各 2 帧dropout0.0残差块 dropout 率biasTrue残差块是否使用偏置use_weight_normTrue是否对全部卷积层应用权重归一化use_causal_convFalse残差块与上采样层是否使用因果卷积upsample_scales[8, 4, 2, 2]上采样倍数序列乘积必须等于 hop size128interpolate_modenearest上采样网络插值方式freq_axis_kernel_size1上采样网络在频率轴上的卷积核大小nonlinear_activation/nonlinear_activation_paramsnull / {}上采样网络中的非线性激活函数及参数这些参数与PWGGenerator的构造签名一一对应见 paddlespeech/t2s/models/parallel_wavegan/parallel_wavegan.py 的类注释。upsample_scales与aux_context_window的配合在训练数据的Clip批处理中尤为关键辅助特征需要按上下文窗口扩展后与波形片段严格对齐。判别器网络结构DISCRIMINATOR NETWORK ARCHITECTURE SETTING参数默认值含义in_channels/out_channels1 / 1输入/输出通道数kernel_size3卷积核大小layers10卷积层数conv_channels64卷积通道数biasTrue卷积是否使用偏置use_weight_normTrue是否使用权重归一化nonlinear_activationleakyrelu每层卷积后的非线性激活nonlinear_activation_params.negative_slope0.2LeakyReLU 的负斜率 αSTFT 损失设置STFT LOSS SETTINGfft_sizes: [1024, 2048, 512]、hop_sizes: [120, 240, 50]、win_lengths: [600, 1200, 240]、window: hann。这是多分辨率 STFT 损失的三组频谱参数分别对应不同的时间/频率分辨率用于约束生成波形与真实波形在多个尺度上的频谱一致性。对抗损失设置ADVERSARIAL LOSS SETTINGlambda_adv: 4.0对抗损失的平衡系数控制 GAN 损失相对 STFT 损失的权重。数据加载设置DATA LOADER SETTINGbatch_size: 8、batch_max_steps: 25500批内每条音频的长度须能被n_shift整除、num_workers: 1DataLoader 工作进程数。优化器与调度器设置OPTIMIZER SCHEDULER SETTING参数默认值含义generator_optimizer_params.epsilon/weight_decay1e-6 / 0.0生成器 Adam 参数generator_scheduler_paramslr1e-4, step_size200000, gamma0.5生成器学习率调度每 step_size 步 lr 乘 gammagenerator_grad_norm10生成器全局梯度范数裁剪阈值discriminator_optimizer_paramsepsilon1e-6, weight_decay0.0判别器 Adam 参数discriminator_scheduler_paramslr5e-5, step_size200000, gamma0.5判别器学习率调度discriminator_grad_norm1判别器梯度裁剪阈值注意判别器学习率5e-5仅为生成器1e-4的一半这是训练 GAN 时常用的不平衡策略。训练间隔设置INTERVAL SETTING参数默认值含义discriminator_train_start_steps100000开始训练判别器的步数前 10 万步仅训练生成器使其先稳定train_max_steps400000总训练步数save_interval_steps5000保存 checkpoint 的间隔eval_interval_steps1000评估间隔其他设置OTHER SETTINGnum_save_intermediate_results: 4保存中间结果的条数、num_snapshots: 10保留的 checkpoint 快照最大数量、seed: 42paddle、random、np.random 的随机种子。训练开始时train.py会把配置文件复制到输出目录output_dir / config_name因此exp/default/default.yaml会随实验一起存档保证可复现性。六、波形合成从梅尔频谱到歌声音频合成命令CUDA_VISIBLE_DEVICES${gpus} ./local/synthesize.sh ${conf_path} ${train_output_path} ${ckpt_name}train.sh 同目录的 synthesize.sh 设置了FLAGS_allocator_strategynaive_best_fit与FLAGS_fraction_of_gpu_memory_to_use0.01低显存占用然后调用${BIN_DIR}/../synthesize.py参数为--config、--checkpoint${train_output_path}/checkpoints/${ckpt_name}、--test-metadatadump/test/norm/metadata.jsonl、--output-dir${train_output_path}/test、--generator-typepwgan。synthesize.py源码paddlespeech/t2s/exps/gan_vocoder/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.参数使用说明--configParallel WaveGAN 配置文件必须与训练时使用同一份配置因为生成器结构由generator_params决定。--checkpoint从训练输出目录checkpoints/中选择一个 checkpoint 加载。源码中通过paddle.load读取后取state_dict[generator_params]赋给生成器并调用remove_weight_norm()后进入eval()模式——这也是预训练模型包中snapshot_iter_100000.pdz即生成器参数的原因。--test-metadata测试集元数据即dump/test/norm/metadata.jsonlREADME 原文写的是 dev/norm 子目录示例脚本实际使用dump/test/norm/metadata.jsonl以仓库实际脚本为准。--output-dir合成音频输出目录每句话保存为{utt_id}.wav。--ngpuGPU 数量为 0 时使用 CPU。合成循环中会对每个 utt 打印耗时与 RTF实时率并在结束时汇总整体生成速度Hz与 RTF方便评估声码器效率。--generator-type支持pwgan / mb_melgan / style_melgan等源码中 class_map 还包含hifigan本示例固定为pwgan。七、预训练模型、动转静与量化部署7.1 预训练模型官方提供面向 Opencpop 训练好的 Parallel WaveGAN 模型可直接下载pwgan_opencpop_ckpt_1.4.0解压后包含三个文件pwgan_opencpop_ckpt_1.4.0 ├── default.yaml # default config used to train parallel wavegan ├── snapshot_iter_100000.pdz # generator parameters of parallel wavegan └── feats_stats.npy # statistics used to normalize spectrogram when training parallel wavegansnapshot_iter_100000.pdz是 10 万步时保存的生成器参数default.yaml即训练配置feats_stats.npy是训练时用于归一化频谱的统计量——三者与训练流程的产物一一对应下载后即可配合synthesize.py直接合成无需重新训练。7.2 动态图转静态图与 PTQ 量化run.sh的阶段 3 与阶段 4 针对推理部署阶段 3 动转静local/dygraph_to_static.sh调用${BIN_DIR}/../../dygraph_to_static.py传入--typevoc、--vocpwgan_opencpop、--voc_config、--voc_ckpt、--voc_statdump/train/feats_stats.npy、--inference_direxp/default/inference/把训练好的动态图模型转换为静态图推理模型输出到exp/default/inference/。阶段 4 PTQ 量化local/PTQ_static.sh调用${BIN_DIR}/../../PTQ_static.py使用dump/dev/raw/metadata.jsonl作为校准数据对inference目录中的静态图模型做后训练量化PTQ模型名为pwgan_opencpop并设置--onnx_formatTrue同时导出 ONNX 格式便于在更多推理框架中部署。这两个阶段与仓库中通用的部署流程一致先动转静保证模型可脱离训练框架执行再 PTQ 降低推理显存/内存占用并导出 ONNX为流式或服务端歌声合成提供轻量化声码器。八、结语至此从 Opencpop 数据下载、dump特征工程、default.yaml超参数体系、train.py训练管线到synthesize.py波形合成再到动转静与 PTQ 量化你已经掌握了 PaddleSpeech 中基于 Opencpop 训练 Parallel WaveGAN 声码器的完整闭环。这套流程与 examples/opencpop/svs1 的歌声合成器示例相互配合即可搭建端到端的中文歌声合成系统。调参时请牢记两条硬约束upsample_scales的乘积必须等于n_shift128aux_channels必须等于n_mels80其余参数均可结合显存与数据规模按上表调整并以dev集的评估与合成听感为准。赞分享人工智能语音音频【免费下载链接】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/gh_mirrors/pa/PaddleSpeech点击查看免费下载相关推荐PaddleSpeech 基于 Opencpop 的 Parallel WaveGAN 歌声合成声码器训练与部署全指南PaddleSpeech 基于 Opencpop 的 Parallel WaveGAN 歌声合成声码器训练与部署全指南 导读 本文以 PaddleSpeech人工智能语音音频NLP媒体生成打破单机游戏限制Nucleus Co-Op如何将任意游戏变成本地多人体验打破单机游戏限制Nucleus Co Op如何将任意游戏变成本地多人体验 想象一下你和朋友们围坐在电脑前准备一起玩一款经典的单机游戏却发现游戏本身只支持人工智能语音音频NLP媒体生成基于 PaddleSpeech 训练 Parallel WaveGAN 声码器AISHELL-3 多说话人 TTS 实战指南基于 PaddleSpeech 训练 Parallel WaveGAN 声码器AISHELL 3 多说话人 TTS 实战指南 导读 本文以 examples/人工智能语音音频NLP媒体生成上一篇终极指南如何将ComfyUI可视化工作流一键转换为可执行Python代码下一篇5步搭建WVP-GB28181-Pro从零掌握国标视频监控平台完整指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
