ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

PaddleSpeech WaveFlow 声码器实战指南:基于 LJSpeech 数据集的预处理、训练与波形合成

PaddleSpeech WaveFlow 声码器实战指南:基于 LJSpeech 数据集的预处理、训练与波形合成 人工智能语音音频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/ljspeech/voc0 示例完整讲解 WaveFlow 声码器vocoder在 LJSpeech 英文单说话人语料上的落地流程从数据集下载、环境初始化、数据预处理到模型训练、多卡分布式训练再到从 mel 频谱合成.wav波形与预训练模型的使用。读完本文你将能够独立复现./run.sh全流程并掌握preprocess.py、train.py、synthesize.py三个核心脚本与默认配置参数的真实含义。一、示例概述WaveFlow 与 LJSpeechvoc0是 PaddleSpeech 在ljspeech数据集目录下提供的第一个声码器示例对应的声码器模型是WaveFlow。WaveFlow 是一种基于流的生成式声码器normalizing-flow based vocoder其核心思想是通过可逆变换将真实波形分布映射为标准高斯分布训练时学习该可逆映射并最大化似然推理时从噪声中逐步还原出波形。在 TTS 链路中WaveFlow 扮演神经声码器角色将前端声学模型如 Tacotron2见 examples/ljspeech/tts0预测出的 mel 频谱还原为可听的原始波形。本示例的完整脚本集如下脚本/文件作用run.sh阶段化入口串联预处理、训练、合成三个 stagepath.sh初始化环境变量与PYTHONPATH定位BIN_DIRlocal/preprocess.sh调用preprocess.py完成数据预处理local/train.sh调用train.py启动模型训练local/synthesize.sh调用synthesize.py从 mel 合成波形模型实现位于 paddlespeech/t2s/models/waveflowConditionalWaveFlow模型与WaveFlowLoss损失函数实验代码位于 paddlespeech/t2s/exps/waveflow。二、数据集下载与目录规划示例使用LJSpeech-1.1数据集约 13 小时、22050 Hz 单声道英文女性朗读语音。下载并解压到~/datasets后数据集位于~/datasets/LJSpeech-1.1该目录应包含wavs/原始音频、metadata.csv文件名/文本/时长映射表等 LJSpeech 标准文件。文中后续所有命令均假设数据集路径为~/datasets/LJSpeech-1.1。说明LJSpeech 原始数据只含音频与文本本示例训练所需的 mel 频谱与波形样本由预处理阶段从音频计算生成详见第四节而合成阶段输入的真实 mel 频谱来自 Tacotron2tts0 示例的输出目录../tts0/output/test这正是声学模型 → 声码器的 TTS 串联链路。三、环境初始化与脚本入口3.1 path.sh环境变量path.sh 完成环境初始化export MAIN_ROOTrealpath ${PWD}/../../../ # 仓库根目录 export PATH${MAIN_ROOT}:${MAIN_ROOT}/utils:${PATH} export LC_ALLC export PYTHONDONTWRITEBYTECODE1 export PYTHONIOENCODINGUTF-8 export PYTHONPATH${MAIN_ROOT}:${PYTHONPATH} MODELwaveflow export BIN_DIR${MAIN_ROOT}/paddlespeech/t2s/exps/${MODEL}要点MAIN_ROOT指向仓库根目录后续所有 Python 脚本均可通过PYTHONPATH直接导入paddlespeech包BIN_DIR被解析为paddlespeech/t2s/exps/waveflow即preprocess.py、train.py、synthesize.py所在目录LC_ALLC与PYTHONIOENCODINGUTF-8组合避免终端编码问题。3.2 run.sh阶段化一键执行run.sh 是示例的总入口默认参数如下gpus0,1 stage0 stop_stage100 preprocess_pathpreprocessed_ljspeech train_output_pathoutput input_mel_path${preprocess_path}/mel_test # 由 Tacotron2 生成的 mel ckpt_namestep-10000直接运行./run.sh会依次执行stage 0./local/preprocess.sh ${preprocess_path}预处理数据集stage 1CUDA_VISIBLE_DEVICES${gpus} ./local/train.sh ${preprocess_path} ${train_output_path}训练模型stage 2先从preprocess_path/mel/中拷贝LJ050-001*.npy到mel_test/作为验证 mel再执行./local/synthesize.sh合成波形。run.sh通过source ${MAIN_ROOT}/utils/parse_options.sh支持--stage/--stop-stage参数控制执行范围。例如仅运行数据预处理./run.sh --stage 0 --stop-stage 0该机制同样支持跳过前面阶段、只跑训练/合成例如./run.sh --stage 2 --stop-stage 2只做波形合成前提是已有训练好的 checkpoint 与mel_test目录。四、数据预处理从原始音频生成 mel 与波形样本预处理阶段调用 local/preprocess.sh./local/preprocess.sh ${preprocess_path}其内部执行python3 ${BIN_DIR}/preprocess.py \ --input~/datasets/LJSpeech-1.1 \ --output${preprocess_path}预处理产物写入preprocess_path默认preprocessed_ljspeech主要包括metadata.csv、mel/*.npy对数幅度 mel 频谱与wav/*.npy波形样本。这些产物随后被训练脚本消费。从源码看训练时的数据加载由 paddlespeech/t2s/exps/waveflow/ljspeech.py 中的LJSpeech数据集类完成它读取预处理目录下的metadata.csv制表符分隔、表头为fname/frames/samples为每一行记录构造mel/{fname}.npy与wav/{fname}.npy路径对LJSpeechClipCollector则在每个 batch 内对 mel 随机裁剪clip_frames帧默认 65 帧并同步裁剪对应的波形片段帧数 ×hop_length默认 256实现 mel 与波形的时间对齐采样。五、模型训练5.1 启动命令local/train.sh 调用${BIN_DIR}/train.pyCUDA_VISIBLE_DEVICES${gpus} ./local/train.sh ${preprocess_path} ${train_output_path}脚本实际执行python3 ${BIN_DIR}/train.py \ --data${preprocess_path} \ --output${train_output_path} \ --ngpu1train.py见 paddlespeech/t2s/exps/waveflow/train.py的核心命令行参数参数说明--data训练数据集路径预处理输出目录--output输出目录checkpoint 保存于{output}/checkpoints/日志与可视化记录也写入该目录--ngpu使用的 GPU 数量ngpu 0时使用 CPUngpu 1时触发多卡分布式训练--config可选额外的 yaml 配置文件用于覆盖默认配置config.merge_from_file--opts可选的KEY VALUE键值对命令行直接覆盖配置项注意分布式训练仅支持 GPU。从 train.py 的main()可见当args.ngpu 1时通过dist.spawn(main_sp, args(config, args), nprocsargs.ngpu)拉起多个进程每进程使用DistributedBatchSampler按world_size/rank切分数据。若想使用 4 卡训练设置--ngpu4即可。5.2 默认训练配置解析默认超参数定义于 paddlespeech/t2s/exps/waveflow/config.pyyacsCfgNode三类配置如下data数据相关参数默认值含义batch_size8batch 大小valid_size16数据集前 N 条样本保留作为验证集dataset.split(dataset, valid_size)sample_rate22050采样率Hz与 LJSpeech 一致n_fft1024FFT 帧大小win_length1024窗长hop_length256帧移相邻帧间隔fmin/fmax0 / 8000mel 转换的频率范围下限/上限Hzn_mels80mel 频带数clip_frames65训练时随机裁剪的 mel 帧数model模型结构参数默认值含义upsample_factors[16, 16]上采样倍数与n_group16配合将频谱上采样到波形长度n_flows8WaveFlow 中 flow 的层数n_layers8每个 flow 内卷积块数量n_group16音频与频谱的折叠因子channels128每个 flow 的残差通道数即 README 所说的 residual channelkernel_size[3, 3]卷积块核大小sigma1.0随机噪声的标准差用于WaveFlowLosstraining训练策略参数默认值含义lr2e-4Adam 学习率valid_interval1000每 N 步执行一次验证save_interval10000每 N 步保存一次 checkpointmax_iteration3000000最大训练步数从 train.py 的setup_model可以看出模型装配方式ConditionalWaveFlow(upsample_factors, n_flows, n_layers, n_group, channels, n_mels, kernel_size) Adam 优化器学习率 2e-4WaveFlowLoss(sigma)多卡时用paddle.DataParallel包裹。训练循环中前向计算z, log_det_jocobian model(wav, mel)再以WaveFlowLoss计算负对数似然损失并反向更新。checkpoint 默认以step-{迭代数}命名对应run.sh中ckpt_namestep-10000保存于{train_output_path}/checkpoints/。5.3 训练产物训练完成后train_output_path默认output下会生成checkpoints/.pdparams参数文件与训练日志验证集损失通过visualizer.add_scalar(valid/loss, ...)记录。这些 checkpoint 将直接用于下一节波形合成。六、波形合成从 mel 频谱生成 wav6.1 启动命令合成阶段由 local/synthesize.sh 调用${BIN_DIR}/synthesize.pyCUDA_VISIBLE_DEVICES${gpus} ./local/synthesize.sh ${input_mel_path} ${train_output_path} ${ckpt_name}脚本实际执行python ${BIN_DIR}/synthesize.py \ --input${input_mel_path} \ --output${train_output_path}/wavs/ \ --checkpoint_path${train_output_path}/checkpoints/${ckpt_name} \ --ngpu16.2 输入输出约定对应 README 要点对照 synthesize.py 的源码输入输出约定如下--input一个目录内含若干.npy格式的 mel 频谱对数幅度脚本用mel_dir.glob(*.npy)遍历目录中所有.npy文件--output输出目录脚本自动mkdir(parentsTrue, exist_okTrue)生成与 mel 同名的.wav文件如LJ050-0011.npy→LJ050-0011.wav写入采样率为配置中的 22050 Hz--checkpoint_path待加载的参数文件.pdparams路径注意不包含扩展名.pdparamsREADME 原文此处有笔误实际参数文件扩展名为.pdparams脚本通过ConditionalWaveFlow.from_pretrained(config, args.checkpoint_path)加载--ngpu使用的 GPU 数量ngpu 0时使用 CPUpaddle.set_device(cpu)。6.3 推理链路从 synthesize.py 可见完整推理流程根据--ngpu设置设备GPU 或 CPUConditionalWaveFlow.from_pretrained(config, args.checkpoint_path)加载预训练参数layer_tools.recursively_remove_weight_norm(model)移除权重归一化weight norm这是推理前必须的模型整理步骤model.eval()切换为推理模式对每个.npymel在paddle.amp.auto_cast()下执行model.predict(mel)得到音频张量用soundfile.write(audio_path, audio, config.data.sample_rate)写出 22050 Hz 的.wav并打印[synthesize] 源路径 - 输出路径。在run.sh的 stage 2 中测试 mel 取自preprocess_path/mel_test/由 stage 2 开头从mel/拷贝LJ050-001*.npy生成若你已有 Tacotron2tts0的输出 mel也可像 README 所述直接指定../tts0/output/test作为--input即可将声学模型预测的 mel 一步还原为语音波形。七、预训练模型仓库提供了在 LJSpeech 上训练好的 WaveFlow 预训练模型残差通道数residual channel为 128与默认配置model.channels128一致waveflow_ljspeech_ckpt_0.3.zip下载解压后将解压出的.pdparams参数文件放入{train_output_path}/checkpoints/目录即可跳过训练阶段./run.sh --stage 2 --stop-stage 2直接用预训练权重做波形合成。若要微调也可在预训练权重基础上继续训练。八、完整实战流程回顾综上所述在 PaddleSpeech 仓库中复现 WaveFlow 声码器训练与推理的最小步骤为# 1. 进入示例目录 cd examples/ljspeech/voc0 # 2. 一键跑完整流程预处理 训练 合成 ./run.sh # 或分阶段执行 ./run.sh --stage 0 --stop-stage 0 # 仅预处理 ./run.sh --stage 1 --stop-stage 1 # 仅训练 ./run.sh --stage 2 --stop-stage 2 # 仅合成需已有 checkpoint数据流~/datasets/LJSpeech-1.1→preprocess.py→preprocessed_ljspeech/{metadata.csv, mel, wav}→train.py→output/checkpoints/step-*.pdparams→synthesize.py→output/wavs/*.wav关键配置入口config.py 统一定义数据、模型、训练三组默认超参训练与合成脚本均支持--config/--opts覆盖上下游衔接声学模型Tacotron2examples/ljspeech/tts0输出的 mel 频谱目录可直接作为synthesize.py --input构成完整的文本 → mel → 波形 TTS 合成链路。赞分享人工智能语音音频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 WaveFlow 声码器训练模块源码级解析从数据预处理到分布式训练与波形合成PaddleSpeech WaveFlow 声码器训练模块源码级解析从数据预处理到分布式训练与波形合成 WaveFlow 是 PaddleSpeech 中基于人工智能语音音频NLP媒体生成PaddleSpeech WaveFlow 声码器 LJSpeech 数据模块全解析从数据预处理到训练合成的完整流水线PaddleSpeech WaveFlow 声码器 LJSpeech 数据模块全解析从数据预处理到训练合成的完整流水线 本文聚焦 PaddleSpeech 中人工智能语音音频PaddleSpeech WaveFlow 声码器实验包paddlespeech.t2s.exps.waveflow配置、预处理、训练与合成实战指南PaddleSpeech WaveFlow 声码器实验包paddlespeech.t2s.exps.waveflow配置、预处理、训练与合成实战指南 本篇人工智能语音音频NLP媒体生成上一篇Delta模拟器在iOS设备上重温经典游戏的终极解决方案下一篇Respond.js的错误监控实时追踪生产环境中的问题创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表