尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

PaddleSpeech FastSpeech2 VCTK 多说话人语音合成实战:从数据准备到模型部署全流程解析

PaddleSpeech FastSpeech2 VCTK 多说话人语音合成实战:从数据准备到模型部署全流程解析 人工智能语音音频【免费下载链接】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/vctk/tts3 示例为主线完整讲解如何基于开源英文多说话人数据集 VCTK 训练 FastSpeech2 声学模型并使用 Parallel WaveGAN / HiFiGAN 神经声码器将梅尔频谱合成为波形。读完本文你将掌握VCTK 语料与 MFA 对齐数据的获取与预处理、FastSpeech2 训练配置的逐项含义、从metadata.jsonl与纯文本两种途径合成语音的方法以及如何复用预训练模型并导出为静态图、ONNX、Paddle-Lite 等部署形态。示例概览tts3 的定位与完整实验流水线在 PaddleSpeech 的 TTS 体系中tts3表示以 FastSpeech2 为声学模型的完整训练示例。VCTK 是一个包含 100 英文说话人的多说话人数据集因此该示例训练的是多说话人 FastSpeech2——模型输入中除音素序列外还引入说话人 embedding 以区分不同音色这正是examples/vctk/tts3区别于单说话人示例如examples/csmsc/tts3、examples/ljspeech/tts3的关键所在。整个示例由 run.sh 驱动它将实验划分为 9 个可独立执行的 stageStage功能对应脚本0数据预处理MFA 时长提取、特征抽取、统计量计算、归一化./local/preprocess.sh1模型训练./local/train.sh2从metadata.jsonl合成测试集波形./local/synthesize.sh3从纯文本文件端到端合成波形./local/synthesize_e2e.sh4静态图推理./local/inference.sh5导出 ONNX 模型需安装 paddle2onnx./local/paddle2onnx.sh6ONNX Runtime 推理./local/ort_predict.sh7导出 Paddle-Lite 模型./local/export2lite.sh8Paddle-Lite 推理./local/lite_predict.sh一条命令即可跑完整个流程./run.sh也可以只执行其中的一段区间例如仅做数据预处理./run.sh --stage 0 --stop-stage 0run.sh顶部集中定义了关键变量gpus0,1默认双卡、conf_pathconf/default.yaml配置文件、train_output_pathexp/default实验输出目录、ckpt_namesnapshot_iter_331.pdz合成阶段加载的 checkpoint 名称。需要特别说明的是合成阶段的最后一个参数是声码器开关0使用 Parallel WaveGANpwgan1使用 HiFiGANhifigan两个 synthesize.sh 与 synthesize_e2e.sh 脚本内都内置了这两套分支。FastSpeech2 的整体架构可以用仓库文档中的架构图直观理解音素序列经 Embedding 与位置编码后进入 Transformer 编码器核心的Variance Adaptor方差适配器由时长预测器、音高预测器、能量预测器三个子模块构成负责将编码器输出扩展到与语音帧对齐的长度再送入 Mel-spectrogram Decoder 生成梅尔频谱。数据集准备VCTK 语料与 MFA 对齐下载并解压 VCTK-0.92从 VCTK 官方站点下载 VCTK-0.92 版本解压到~/datasets目录下最终数据位于~/datasets/VCTK-Corpus-0.92。VCTK 语料中每位说话人同时提供*_mic1.flac与*_mic2.flac两种麦克风录音本示例在预处理时统一使用音质更佳的*_mic2.flac录音。获取 MFA 对齐结果FastSpeech2 的训练离不开音素级时长标注duration本示例使用蒙特利尔强制对齐工具 MFAMontreal Forced Aligner从音频与文本的对齐中获取每个音素的起止时间。有两种获取方式直接下载现成对齐结果仓库官方 CDN 提供 VCTK-Corpus-0.92 的vctk_alignment.tar.gz对齐包下载后解压到示例目录下的vctk_alignment文件夹与 README 中./vctk_alignment的假设路径一致。自行训练 MFA 模型参考仓库中的 examples/other/mfa 示例该目录下的reorganize_vctk.py脚本负责对 VCTK 进行说话人筛选重组。需要说明的是示例作者在预处理阶段移除了 VCTK-0.92 中的三位说话人p315该说话人没有对应的文本标注p280与p362这两位说话人缺少*_mic2.flac录音在仅有*_mic1.flac的情况下音频质量不满足要求。预处理脚本对_mic2后缀的处理逻辑也可以在源码中得到印证preprocess.py 中process_sentence函数会对以_mic2结尾的 utterance id 截掉后缀从而与文本标注中的 id 对齐。数据预处理从原始音频到归一化特征数据预处理由./local/preprocess.sh完成调用方式为./local/preprocess.sh ${conf_path}它内部细分为 4 个阶段逐步产出模型训练所需的全部特征文件。Stage 0从 MFA 对齐结果生成 durations.txtpython3 ${MAIN_ROOT}/utils/gen_duration_from_textgrid.py \ --inputdir./vctk_alignment \ --output durations.txt \ --config${config_path}该脚本解析 MFA 输出的 TextGrid 文件汇总每个音素的时长信息。Stage 1抽取语音特征python3 ${BIN_DIR}/preprocess.py \ --datasetvctk \ --rootdir~/datasets/VCTK-Corpus-0.92/ \ --dumpdirdump \ --dur-filedurations.txt \ --config${config_path} \ --num-cpu20 \ --cut-silTrue这里传入的是原始音频根目录与上一步生成的时长文件--cut-silTrue表示利用 MFA 对齐结果裁掉音频首尾的静音段。特征抽取依赖 paddlespeech/t2s/datasets/get_feats.py 中的LogMelFBank对数梅尔滤波器组、Pitch基频、Energy能量三个抽取器分别产出 FastSpeech2 需要的三类输入特征。Stage 2计算训练集的均值/方差统计量python3 ${MAIN_ROOT}/utils/compute_statistics.py \ --metadatadump/train/raw/metadata.jsonl \ --field-namespeech # 同理对 pitch、energy 各执行一次Stage 3归一化并建立 phone/speaker 词典python3 ${BIN_DIR}/normalize.py \ --metadatadump/train/raw/metadata.jsonl \ --dumpdirdump/train/norm \ --speech-statsdump/train/speech_stats.npy \ --pitch-statsdump/train/pitch_stats.npy \ --energy-statsdump/train/energy_stats.npy \ --phones-dictdump/phone_id_map.txt \ --speaker-dictdump/speaker_id_map.txt注意一个关键约束dev 与 test 集必须复用 train 集的统计量进行归一化不能各自重新计算否则训练与评估的特征分布不一致。因此脚本对dump/dev/raw与dump/test/raw调用normalize.py时传入的--*-stats仍指向dump/train/下的统计文件。dump 目录结构与特征语义预处理完成后当前目录下会生成dump文件夹dump ├── dev │ ├── norm │ └── raw ├── phone_id_map.txt ├── speaker_id_map.txt ├── test │ ├── norm │ └── raw └── train ├── energy_stats.npy ├── norm ├── pitch_stats.npy ├── raw └── speech_stats.npy数据集被划分为train、dev、test三部分每部分各含raw与norm两个子目录raw存放每条语句未经归一化的 speech对数梅尔频谱、pitch基频、energy能量特征norm存放使用训练集统计量归一化后的特征dump/train/*_stats.npy从训练集计算出的三种特征的均值与标准差供归一化与推理时反归一化使用。每个子目录下都有一份metadata.jsonl这是一种表格化的逐行记录文件每条 utterance 包含phones音素 id 序列、text_lengths、speech_lengths、durations音素时长、speech/pitch/energy 特征的存储路径、speaker、id 等字段。它既是训练数据集的索引也是合成阶段的输入来源。配置文件逐项解读conf/default.yamlexamples/vctk/tts3/conf/default.yaml 是本示例的核心配置训练时可通过--config传入以覆盖内置默认值。下面按配置分区逐项说明特征提取设置fs: 24000 # 采样率 (Hz) n_fft: 2048 # FFT 点数 n_shift: 300 # 帧移 (samples)约 12.5ms win_length: 1200 # 窗长 (samples)约 50ms若为 null 则与 fft 点数相同 window: hann # 窗函数类型 fmin: 80 # Mel 滤波器组最小频率 (Hz) fmax: 7600 # Mel 滤波器组最大频率 (Hz) n_mels: 80 # Mel 频带数 f0min: 80 # 基频提取下限 (Hz) f0max: 400 # 基频提取上限 (Hz)VCTK 示例采用 24kHz 采样率FFT 点数 2048、帧移 300 点12.5ms、窗长 1200 点50ms输出 80 维对数梅尔频谱。fmin/fmax与f0min/f0max分别限定 Mel 滤波器组与基频提取的频率范围其中基频范围针对英语语音设定80–400Hz。数据加载设置batch_size: 64 num_workers: 2模型结构设置model: adim: 384 # 注意力维度 aheads: 2 # 注意力头数 elayers: 4 # 编码器层数 eunits: 1536 # 编码器 FFN 隐藏单元数 dlayers: 4 # 解码器层数 dunits: 1536 # 解码器 FFN 隐藏单元数 positionwise_layer_type: conv1d # position-wise 层类型卷积 positionwise_conv_kernel_size: 3 # position-wise 卷积核大小 duration_predictor_layers: 2 # 时长预测器层数 duration_predictor_chans: 256 # 时长预测器通道数 duration_predictor_kernel_size: 3 # 时长预测器卷积核大小 postnet_layers: 5 # postnet 层数 postnet_filts: 5 # postnet 卷积核大小 postnet_chans: 256 # postnet 通道数 use_scaled_pos_enc: True # 是否使用可学习的缩放位置编码 encoder_normalize_before: True # 编码器是否在残差连接前做层归一化 decoder_normalize_before: True # 解码器是否在残差连接前做层归一化 reduction_factor: 1 # 帧缩减因子 init_type: xavier_uniform # 参数初始化方式 init_enc_alpha: 1.0 # 编码器缩放位置编码的 alpha 初值 init_dec_alpha: 1.0 # 解码器缩放位置编码的 alpha 初值 transformer_enc_dropout_rate: 0.2 # 编码器层 dropout transformer_enc_positional_dropout_rate: 0.2 # 编码器位置编码 dropout transformer_enc_attn_dropout_rate: 0.2 # 编码器注意力 dropout transformer_dec_dropout_rate: 0.2 # 解码器层 dropout transformer_dec_positional_dropout_rate: 0.2 # 解码器位置编码 dropout transformer_dec_attn_dropout_rate: 0.2 # 解码器注意力 dropout pitch_predictor_layers: 5 # 音高预测器卷积层数 pitch_predictor_chans: 256 # 音高预测器通道数 pitch_predictor_kernel_size: 5 # 音高预测器卷积核大小 pitch_predictor_dropout: 0.5 # 音高预测器 dropout pitch_embed_kernel_size: 1 # 音高嵌入卷积核大小 pitch_embed_dropout: 0.0 # 音高嵌入后 dropout stop_gradient_from_pitch_predictor: True # 是否阻断音高预测器到编码器的梯度 energy_predictor_layers: 2 # 能量预测器卷积层数 energy_predictor_chans: 256 # 能量预测器通道数 energy_predictor_kernel_size: 3 # 能量预测器卷积核大小 energy_predictor_dropout: 0.5 # 能量预测器 dropout energy_embed_kernel_size: 1 # 能量嵌入卷积核大小 energy_embed_dropout: 0.0 # 能量嵌入后 dropout stop_gradient_from_energy_predictor: False # 是否阻断能量预测器到编码器的梯度 spk_embed_dim: 256 # 说话人 embedding 维度 spk_embed_integration_type: concat # 说话人 embedding 融合方式拼接这些参数与 fastspeech2.py 中FastSpeech2类的构造参数一一对应——例如adim/aheads/elayers/eunits对应 Transformer 编码器duration_predictor_*、pitch_predictor_*、energy_predictor_*对应 Variance Adaptor 的三个预测器spk_embed_dim与spk_embed_integration_type则对应多说话人支持。其中spk_embed_integration_type: concat表示说话人 embedding 以拼接方式融入音素编码而非加法。更新器 / 优化器 / 训练 / 随机种子设置updater: use_masking: True # 计算 loss 时是否对 padding 部分做掩码 optimizer: optim: adam # 优化器类型 learning_rate: 0.001 # 学习率 max_epoch: 200 num_snapshots: 5 # 最多保留的 checkpoint 快照数 seed: 10086 # 随机种子模型训练多卡训练与多说话人机制数据预处理完成后即可启动训练CUDA_VISIBLE_DEVICES${gpus} ./local/train.sh ${conf_path} ${train_output_path}train.sh 最终调用paddlespeech/t2s/exps/fastspeech2/下的train.py其完整参数如下usage: train.py [-h] [--config CONFIG] [--train-metadata TRAIN_METADATA] [--dev-metadata DEV_METADATA] [--output-dir OUTPUT_DIR] [--ngpu NGPU] [--phones-dict PHONES_DICT] [--speaker-dict SPEAKER_DICT] [--voice-cloning VOICE_CLONING] Train a FastSpeech2 model. optional arguments: -h, --help show this help message and exit --config CONFIG fastspeech2 config file. --train-metadata TRAIN_METADATA training data. --dev-metadata DEV_METADATA dev data. --output-dir OUTPUT_DIR output dir. --ngpu NGPU if ngpu0, use cpu. --phones-dict PHONES_DICT phone vocabulary file. --speaker-dict SPEAKER_DICT speaker id map file for multiple speaker model. --voice-cloning VOICE_CLONING whether training voice cloning model.参数约定如下--config为 yaml 格式的覆盖配置即 conf/default.yaml--train-metadata与--dev-metadata应指向dump目录中train/norm与dev/norm子目录下的metadata.jsonl归一化后的特征数据--output-dir为实验输出目录checkpoint 保存在其中的checkpoints/子目录下--phones-dict为音素词汇表文件路径--speaker-dict为多说话人模型的说话人 id 映射文件路径本示例必须提供--voice-cloning用于开启声音克隆训练模式本示例未使用。从 train.py 源码可以看到多说话人分支的完整逻辑当传入--speaker-dict时程序打印multiple speaker fastspeech2!采用fastspeech2_multi_spk_batch_fn作为 collate 函数读取说话人映射文件计算spk_num并在训练字段中追加spk_id而单说话人场景则使用fastspeech2_single_spk_batch_fn且不会包含说话人信息。对应的 batch 组织实现在 am_batch_fn.py 中——多说话人版本会在 batch 中额外携带spk_id若启用 voice cloning 则优先携带spk_emb说话人 embedding。此外train.py会根据--ngpu自动选择设备ngpu 0且 Paddle 编译支持 CUDA 时用 GPUngpu 0时用 CPU并调用seed_everything(config.seed)保证多进程训练时随机种子一致。波形合成声学模型 神经声码器两段式生成FastSpeech2 输出的是梅尔频谱还需要神经声码器将其转换为波形。本示例默认使用 examples/vctk/voc1 中训练的Parallel WaveGANpwgan作为声码器同时也支持 HiFiGANhifigan通过脚本最后一个参数0/1切换。使用预训练 Parallel WaveGAN下载官方提供的 Parallel WaveGAN 预训练模型pwg_vctk_ckpt_0.1.1.zip并解压到当前目录unzip pwg_vctk_ckpt_0.1.1.zip其内容包含三个文件pwg_vctk_ckpt_0.1.1 ├── default.yaml # 训练 parallel wavegan 时使用的默认配置 ├── snapshot_iter_1500000.pdz # parallel wavegan 的生成器参数 └── feats_stats.npy # 训练时用于归一化频谱的统计量方式一从 metadata.jsonl 合成逐句回放测试集CUDA_VISIBLE_DEVICES${gpus} ./local/synthesize.sh ${conf_path} ${train_output_path} ${ckpt_name} 0该脚本调用paddlespeech/t2s/exps/下的synthesize.py从dump/test/norm/metadata.jsonl读取每条 utterance 的特征并合成为波形输出到${train_output_path}/test。其完整参数如下usage: synthesize.py [-h] [--am {speedyspeech_csmsc,fastspeech2_csmsc,fastspeech2_ljspeech,fastspeech2_aishell3,fastspeech2_vctk,tacotron2_csmsc,tacotron2_ljspeech,tacotron2_aishell3}] [--am_config AM_CONFIG] [--am_ckpt AM_CKPT] [--am_stat AM_STAT] [--phones_dict PHONES_DICT] [--tones_dict TONES_DICT] [--speaker_dict SPEAKER_DICT] [--voice-cloning VOICE_CLONING] [--voc {pwgan_csmsc,pwgan_ljspeech,pwgan_aishell3,pwgan_vctk,mb_melgan_csmsc,wavernn_csmsc,hifigan_csmsc,hifigan_ljspeech,hifigan_aishell3,hifigan_vctk,style_melgan_csmsc}] [--voc_config VOC_CONFIG] [--voc_ckpt VOC_CKPT] [--voc_stat VOC_STAT] [--ngpu NGPU] [--test_metadata TEST_METADATA] [--output_dir OUTPUT_DIR] Synthesize with acoustic model vocoder optional arguments: -h, --help show this help message and exit --am {speedyspeech_csmsc,fastspeech2_csmsc,fastspeech2_ljspeech,fastspeech2_aishell3,fastspeech2_vctk,tacotron2_csmsc,tacotron2_ljspeech,tacotron2_aishell3} Choose acoustic model type of tts task. --am_config AM_CONFIG Config of acoustic model. --am_ckpt AM_CKPT Checkpoint file of acoustic model. --am_stat AM_STAT mean and standard deviation used to normalize spectrogram when training acoustic model. --phones_dict PHONES_DICT phone vocabulary file. --tones_dict TONES_DICT tone vocabulary file. --speaker_dict SPEAKER_DICT speaker id map file. --voice-cloning VOICE_CLONING whether training voice cloning model. --voc {pwgan_csmsc,pwgan_ljspeech,pwgan_aishell3,pwgan_vctk,mb_melgan_csmsc,wavernn_csmsc,hifigan_csmsc,hifigan_ljspeech,hifigan_aishell3,hifigan_vctk,style_melgan_csmsc} Choose vocoder type of tts task. --voc_config VOC_CONFIG Config of voc. --voc_ckpt VOC_CKPT Checkpoint file of voc. --voc_stat VOC_STAT mean and standard deviation used to normalize spectrogram when training voc. --ngpu NGPU if ngpu 0, use cpu. --test_metadata TEST_METADATA test metadata. --output_dir OUTPUT_DIR output dir.方式二从文本文件端到端合成真实使用场景CUDA_VISIBLE_DEVICES${gpus} ./local/synthesize_e2e.sh ${conf_path} ${train_output_path} ${ckpt_name} 0该脚本调用synthesize_e2e.py直接从文本合成语音TTS 的实际应用形态文本默认来自paddlespeech/t2s/assets/sentences_en.txt内含 9 句经典英文台词如 Life was like a box of chocolates... 等。其完整参数如下usage: synthesize_e2e.py [-h] [--am {speedyspeech_csmsc,speedyspeech_aishell3,fastspeech2_csmsc,fastspeech2_ljspeech,fastspeech2_aishell3,fastspeech2_vctk,tacotron2_csmsc,tacotron2_ljspeech}] [--am_config AM_CONFIG] [--am_ckpt AM_CKPT] [--am_stat AM_STAT] [--phones_dict PHONES_DICT] [--tones_dict TONES_DICT] [--speaker_dict SPEAKER_DICT] [--spk_id SPK_ID] [--voc {pwgan_csmsc,pwgan_ljspeech,pwgan_aishell3,pwgan_vctk,mb_melgan_csmsc,style_melgan_csmsc,hifigan_csmsc,hifigan_ljspeech,hifigan_aishell3,hifigan_vctk,wavernn_csmsc}] [--voc_config VOC_CONFIG] [--voc_ckpt VOC_CKPT] [--voc_stat VOC_STAT] [--lang LANG] [--inference_dir INFERENCE_DIR] [--ngpu NGPU] [--text TEXT] [--output_dir OUTPUT_DIR] Synthesize with acoustic model vocoder optional arguments: -h, --help show this help message and exit --am {speedyspeech_csmsc,speedyspeech_aishell3,fastspeech2_csmsc,fastspeech2_ljspeech,fastspeech2_aishell3,fastspeech2_vctk,tacotron2_csmsc,tacotron2_ljspeech} Choose acoustic model type of tts task. --am_config AM_CONFIG Config of acoustic model. --am_ckpt AM_CKPT Checkpoint file of acoustic model. --am_stat AM_STAT mean and standard deviation used to normalize spectrogram when training acoustic model. --phones_dict PHONES_DICT phone vocabulary file. --tones_dict TONES_DICT tone vocabulary file. --speaker_dict SPEAKER_DICT speaker id map file. --spk_id SPK_ID spk id for multi speaker acoustic model --voc {pwgan_csmsc,pwgan_ljspeech,pwgan_aishell3,pwgan_vctk,mb_melgan_csmsc,style_melgan_csmsc,hifigan_csmsc,hifigan_ljspeech,hifigan_aishell3,hifigan_vctk,wavernn_csmsc} Choose vocoder type of tts task. --voc_config VOC_CONFIG Config of voc. --voc_ckpt VOC_CKPT Checkpoint file of voc. --voc_stat VOC_STAT mean and standard deviation used to normalize spectrogram when training voc. --lang LANG Choose model language. zh or en --inference_dir INFERENCE_DIR dir to save inference models --ngpu NGPU if ngpu 0, use cpu. --text TEXT text to synthesize, a utt_id sentence pair per line. --output_dir OUTPUT_DIR output dir.参数使用要点--am为声学模型类型格式为{model_name}_{dataset}VCTK 示例对应fastspeech2_vctk--am_config、--am_ckpt、--am_stat、--phones_dict、--speaker_dict是声学模型的 5 个参数分别对应 FastSpeech2 预训练模型解压目录中的 5 个文件--voc为声码器类型同样遵循{model_name}_{dataset}格式对应pwgan_vctk或hifigan_vctk--voc_config、--voc_ckpt、--voc_stat对应 Parallel WaveGAN 预训练模型中的 3 个文件--lang为模型语言可取zh或en本示例为en--test_metadata应指向dump/test/norm下的metadata.jsonl--text为待合成的文本文件每行格式为utt_id sentence对--output_dir为合成音频输出目录--ngpu为使用的 GPU 数为 0 时使用 CPU--spk_id为多说话人模型的说话人 id用于选择合成时使用的音色。复用预训练模型FastSpeech2 Parallel WaveGAN 一键合成若不想从头训练官方提供了去除音频边缘静音的 FastSpeech2 VCTK 预训练模型fastspeech2_vctk_ckpt_1.2.0.zip解压后目录结构如下fastspeech2_vctk_ckpt_1.2.0 ├── default.yaml # 训练 fastspeech2 时使用的默认配置 ├── energy_stats.npy # 训练时用于归一化 energy 的统计量 ├── phone_id_map.txt # 训练时的音素词汇表 ├── pitch_stats.npy # 训练时用于归一化 pitch 的统计量 ├── snapshot_iter_66200.pdz # 模型参数与优化器状态 ├── speaker_id_map.txt # 多说话人 fastspeech2 的说话人 id 映射 └── speech_stats.npy # 训练时用于归一化频谱的统计量使用预训练 FastSpeech2 与 Parallel WaveGAN对仓库内置英文测试句 sentences_en.txt 进行端到端合成的完整命令如下source path.sh FLAGS_allocator_strategynaive_best_fit \ FLAGS_fraction_of_gpu_memory_to_use0.01 \ python3 ${BIN_DIR}/../synthesize_e2e.py \ --amfastspeech2_vctk \ --am_configfastspeech2_vctk_ckpt_1.2.0/default.yaml \ --am_ckptfastspeech2_vctk_ckpt_1.2.0/snapshot_iter_66200.pdz \ --am_statfastspeech2_vctk_ckpt_1.2.0/speech_stats.npy \ --vocpwgan_vctk \ --voc_configpwg_vctk_ckpt_0.1.1/default.yaml \ --voc_ckptpwg_vctk_ckpt_0.1.1/snapshot_iter_1500000.pdz \ --voc_statpwg_vctk_ckpt_0.1.1/feats_stats.npy \ --langen \ --text${BIN_DIR}/../../assets/sentences_en.txt \ --output_direxp/default/test_e2e \ --phones_dictfastspeech2_vctk_ckpt_1.2.0/phone_id_map.txt \ --speaker_dictfastspeech2_vctk_ckpt_1.2.0/speaker_id_map.txt \ --spk_id0 \ --inference_direxp/default/inference其中FLAGS_allocator_strategynaive_best_fit与FLAGS_fraction_of_gpu_memory_to_use0.01是 Paddle 的内存分配策略与显存占用上限设置可在显存受限的环境下稳定运行推理。--spk_id0指定使用第 0 号说话人的音色--inference_dir指定导出静态推理模型供后续部署阶段使用的目录。部署形态静态图、ONNX 与 Paddle-Literun.sh的 stage 4–8 覆盖了从动态图模型到多种部署形态的完整转换链路这也是在嵌入式/移动端落地多说话人 TTS 的关键环节。Stage 4静态图推理./local/inference.sh ${train_output_path}调用inference.py使用 stage 3 生成的exp/default/inference静态模型目录完成 Paddle 静态图推理输出到${train_output_path}/pd_infer_out同时提供 pwgan 与 hifigan 两个声码器分支Stage 5ONNX 导出先执行pip install paddle2onnx --upgrade安装转换工具然后对 fastspeech2 与声码器分别执行 paddle2onnx.sh该脚本调用paddle2onnx将.pdmodel/.pdiparams转换为.onnxopset 11注释中建议考虑到速度与质量的平衡优先使用 hifigan 作为声码器Stage 6ONNX Runtime 推理./local/ort_predict.sh调用ort_predict_e2e.py在 CPU 上以 onnxruntime 执行端到端合成--devicecpu --cpu_threads2Stage 7Paddle-Lite 导出export2lite.sh 调用paddle_lite_opt按x86目标平台将静态模型优化为 Paddle-Lite 格式.nbStage 8Paddle-Lite 推理./local/lite_predict.sh调用lite_predict.py基于导出的 Paddle-Lite 模型完成端到端合成输出到${train_output_path}/lite_infer_out。小结通过examples/vctk/tts3示例PaddleSpeech 提供了一条从 VCTK 语料、MFA 对齐、特征预处理、多说话人 FastSpeech2 训练到 Parallel WaveGAN/HiFiGAN 波形合成再到静态图 / ONNX / Paddle-Lite 部署的完整多说话人英文 TTS 流水线。掌握该示例后你可以在此基础上替换自己的英文或结合 examples/csmsc/tts3、examples/aishell3/tts3 了解中文单/多说话人方案数据集与配置快速搭建可落地的语音合成系统。赞分享人工智能语音音频【免费下载链接】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 多说话人语音合成实战基于 VCTK 语料训练 FastSpeech2 声学模型PaddleSpeech 多说话人语音合成实战基于 VCTK 语料训练 FastSpeech2 声学模型 本指南以 PaddleSpeech 仓库中 exam人工智能语音音频NLP媒体生成PaddleSpeech VCTK 多说话人语音合成与语音转换实战指南TTS、声码器、ERNIE-SAT 与 StarGANv2-VC 全流程PaddleSpeech VCTK 多说话人语音合成与语音转换实战指南TTS、声码器、ERNIE SAT 与 StarGANv2 VC 全流程 导读 VCTK人工智能语音音频fairseq S² 多说话人语音合成实战基于 VCTK 数据集构建与评测 Transformer TTS 模型fairseq S² 多说话人语音合成实战基于 VCTK 数据集构建与评测 Transformer TTS 模型 导读 本文以 fairseq S²Spe人工智能深度学习预训练NLP语音上一篇3大策略彻底攻克1Panel面板OpenResty部署难题下一篇从Caffe到Minerva5分钟实现模型迁移与多GPU加速训练的完整指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表