尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

ESPnet2 TTS2 中文多说话人离散语音合成实战:基于 AISHELL3 语料库的 FastSpeech2 + HuBERT 离散单元 Recipe 全解析

发布时间:2026/9/25 2:44:21

资讯中心
01
ARTICLE

ESPnet2 TTS2 中文多说话人离散语音合成实战:基于 AISHELL3 语料库的 FastSpeech2 + HuBERT 离散单元 Recipe 全解析

ESPnet2 TTS2 中文多说话人离散语音合成实战:基于 AISHELL3 语料库的 FastSpeech2 + HuBERT 离散单元 Recipe 全解析
人工智能语音音频深度学习NLP【免费下载链接】espnetEnd-to-End Speech Processing Toolkit项目地址https://gitcode.com/gh_mirrors/es/espnet点击查看免费下载本文以 ESPnet 官方 AISHELL3 多说话人 TTS2 recipeegs2/aishell3/tts2/README.md为骨架系统讲解如何用离散声学单元替代连续声学特征训练中文多说话人语音合成系统从 MFA/Teacher 模型生成音素时长、cn_hubert 离散单元提取、k-means 聚类到离散 FastSpeech2 训练、HiFiGAN vocoder 训练、推理与客观评估。读完本文你将掌握一条完整可复现的文本 → 离散单元 → 波形TTS2 流水线并理解 ESPnet2 recipe 的分阶段脚本机制与关键配置项。一、TTS2 是什么离散声学单元驱动的非自回归语音合成tts2与经典的tts1相比核心差异体现在两个层面特征层面tts1使用 mel 谱、fbank 等连续声学特征作为建模目标而tts2使用由自监督语音模型如 HuBERT输出再经 k-means 聚类得到的离散声学单元discrete acoustic units / pseudo labels。当前 TEMPLATE 支持的是离散 FastSpeech2模型的训练。数据层面FastSpeech2 是典型的非自回归Non-AR模型需要额外的**音素时长duration**信息。这些时长来自 Speech-Text Alignment 工具——可以是注意力自回归模型如 Tacotron2 teacher 模型也可以是 Montreal Forced AlignerMFA。按 FastSpeech2 论文的结论MFA 产出的时长对齐质量通常更高。整体合成链路为文本拼音音素→ FastSpeech2 预测离散单元序列与时长 → 离散 vocoderHiFiGAN将离散单元还原为波形。AISHELL3 是一个大规模中文多说话人语料库OpenSLR 93说话人数量多且存在未知说话人样本非常适合验证多说话人离散 TTS 的说话人嵌入与单元建模能力。在仓库中该 recipe 位于 egs2/aishell3/tts2其目录结构包括run.sh/run_train_teacher.sh面向语料的任务入口脚本封装并调用tts2.sh/tts.shtts2.sh/tts.sh由 TEMPLATE 派生的通用分阶段执行脚本数据准备、离散单元提取、统计收集、训练、解码、打包上传conf/训练与解码配置文件train_fastspeech2.yaml、train_teacher.yaml、decode_fastspeech2.yaml、decode_teacher.yaml等local/语料相关脚本data.sh、data_prep.py、run_mfa.sh、download_and_untar.shscripts/、pyscripts/、steps/、sid/、utils/通用工具与 Kaldi 风格脚本MFA、VAD、x-vector、数据目录操作等。注意recipe 中大部分 bash 脚本是从 egs2/TEMPLATE/tts2 符号链接过来的后续提交可能因其他语料而更新模板脚本因此运行前务必核对并自定义参数。二、整体执行流程总览官方 README 给出的基本执行顺序如下./local/run_mfa.sh生成音素词典与 MFA 对齐时长来源可选替代 teacher 解码./run_train_teacher.sh跑到 stage 8解码时必须开启 teacher forcing训练 Tacotron2 teacher 模型并生成音素时长伪标签./run_train_teacher.sh仅 stage 6提取能量energy与基频pitch./run.sh跑到 stage 8使用自定义中文 hubertlarge 模型取 layer 17训练离散 FastSpeech2在 ParallelWaveGAN 仓库的egs/aishell3/hubert_voc1训练离散 HiFiGAN vocoder本 recipe 使用离散 hifigan./run.sh仅 stage 9调用 vocoder 直接生成波形使用 ESPnet 评估脚本评测生成 wavMCD、Log F0 RMSE、CER、UTMOS 等。流程的核心脚本参数可先通过 run.sh 一览fs24000 n_fft2048 n_shift480 win_length1200 train_configconf/train_fastspeech2.yaml inference_configconf/decode_fastspeech2.yaml # 官方提供的音素文本质量更优 train_settrain_no_dev_phn valid_setdev_phn test_setstest_phn g2pnone vocoder_filevocoder/checkpoint-180000steps.pkl ./tts2.sh \ --lang zh \ --feats_type raw \ --fs ${fs} \ --n_fft ${n_fft} \ --n_shift ${n_shift} \ --win_length ${win_length} \ --src_token_type phn \ --cleaner none \ --g2p ${g2p} \ --train_config ${train_config} \ --inference_config ${inference_config} \ --train_set ${train_set} \ --valid_set ${valid_set} \ --test_sets ${test_sets} \ --srctexts data/${train_set}/text \ --use_spk_embed true \ --vocoder_file ${vocoder_file} \ ${opts} $关键约定本 recipe 采样率fs24000、FFT 点数n_fft2048、帧移n_shift480对应 hop size 480、窗长win_length1200数据与模型均采用feats_typeraw直接使用原始波形不预抽取 fbankg2pnone表示直接使用 AISHELL3 官方提供的拼音音素文本*_phn数据集而不是运行时做字音转换说话人条件使用 speaker embedding--use_spk_embed true而非 speaker id。三、数据准备下载、静音裁剪与音素词典数据准备阶段的核心工作包括下载 AISHELL-3 数据集trainset 与 testset仓库中下载入口为 local/download_and_untar.sh 与db.sh裁剪静音trim silencescripts/audio/trim_silence.sh使用 VAD 去除句首句尾静音既提升训练效率也通过切掉噪声潜在提升生成波形质量生成初始音素词典得到{dset}_phn数据集音素化文本从训练集切分出 250 条样本作为 devset。{dset}/text与{dset}_phn/text的样本格式如下//{dset}/text sample SSB00050353 深交所副总经理周明指出 //{dset}_phn/text sample SSB00050353 shen1 jiao1 suo3 fu4 zong3 jing1 li3 zhou1 ming2 zhi3 chu1关于静音裁剪参数trim_silence.sh中的fs、n_fft等参数不必与run.sh中保持一致——它们只影响静音裁剪的精度不同参数组合在语料含最少静音上得到的裁剪结果大致相同。run_train_teacher.sh中同样给出了字音转换的两种模式对应run.sh内注释pypinyin_g2p卡尔普陪外孙玩滑梯 → ka3 er3 pu3 pei2 wai4 sun1 wan2 hua2 ti1pypinyin_g2p_phone更细粒度的音素序列k a3 er3 p u3 p ei2 uai4 s un1 uan2 h ua2 t i1。本 recipe 因使用官方_phn文本而设置g2pnone若使用汉字文本训练则需显式指定上述 g2p 方案。四、训练 Tacotron2 Teacher 模型并生成时长伪标签FastSpeech2 需要每个音素的时长作为监督。本 recipe 采用Tacotron2 作为 teacher 模型沿用tts1的做法利用其注意力对齐来预测音素时长为 FastSpeech2 生成durations软目标/伪标签。4.1 运行前注意事项音频格式建议audio_formatwavwav 可直接用于 x-vector 等下游处理若使用flac则需参考egs2/librispeech/asr1/local/data.sh中 uttid path-to-utt 的写法。帧移一致性至关重要teacher 模型与 student 模型FastSpeech2的fs采样率、hop_size帧移必须保持一致否则 teacher 生成的时长软目标无法与 FastSpeech2 的输入对齐。本 recipe 中两者均为fs24000, n_shift480。4.2 训练 teacher 模型# 训练 teacher 模型建议总步数 100k ./run_train_teacher.sh --stage 2 --stop_stage 7其中 run_train_teacher.sh 使用与run.sh相同的声学参数并调用 tts.sh--train_config conf/train_teacher.yaml --token_type phn --use_spk_embed true。注意test_set不需要经历这里的所有处理因为只需要train_set与valid_set的伪标签跳过 test_set 上的部分步骤如 mfa、teacher forcing 解码是可行的。不过建议在 stage 1-3 中仍然指定--test_sets原因有二其一test set 的音素文本是 MFA 训练出新 g2p 模型后由字形转音素得到的stage 2 产出的wav.scp可复用于 vocoder 部分其二stage 3 提取的spk_emb可用于整体解码测试。Teacher 模型配置见 conf/train_teacher.yamlTacotron2 架构embed_dim512、编码器 1 层 BLSTM 512 单元 3 层卷积、location-sensitive attentionadim512、解码器 2 层 LSTM 1024 单元、prenet 2×256、postnet 5 层×512 通道启用 GSTuse_gsttrue4 头注意力、16 个 style token与说话人嵌入spk_embed_dim192add方式融合并使用 guided attention loss 加速对角注意力学习use_guided_attn_losstruesigma0.4lambda1.0。优化器为 Adamlr1e-3max_epoch100batch_bins3750000。4.3 用 teacher forcing 生成时长伪标签# 解码时使用 teacher forcing ./run_train_teacher.sh --stage 8 --stop_stage 8 \ --tts_exp exp/tts_train_teacher_raw_phn_none \ --test_sets train_no_dev_phn dev_phn \ --inference_args --use_teacher_forcing true \ --inference_model 50epoch.pth解码配置见 conf/decode_teacher.yaml其中use_teacher_forcing: false为默认值此处通过--inference_args --use_teacher_forcing true覆盖为 true。teacher forcing 解码输出将被保存在exp/tts_train_teacher_raw_phn_none/decode_teacher_use_teacher_forcingtrue_50epoch/目录名由 inference_config 与 inference_model 自动拼接详见 tts.sh 中inference_tag的构造逻辑。五、提取附加特征能量与基频pitchFastSpeech2 在音素时长之外还需要pitch基频与 energy能量作为辅助预测目标。这一步仍复用 teacher 流程tts1的统计收集阶段但显式指定 FastSpeech2 的训练配置与 teacher 的解码输出目录./run_train_teacher.sh --stage 6 --stop_stage 6 \ --train_config conf/train_fastspeech2.yaml \ --teacher_dumpdir exp/tts_train_teacher_raw_phn_none/decode_teacher_use_teacher_forcingtrue_50epoch \ --tts_stats_dir exp/tts_train_teacher_raw_phn_none/decode_teacher_use_teacher_forcingtrue_50epoch/stats \ --write_collected_feats true要点--write_collected_feats true在统计收集时落盘pitch 与 energy 特征collect_feats/下的pitch.scp、energy.scp后续训练阶段检测到这些文件后会直接以 npy 形式读取显著降低训练期的计算开销对应 tts2.sh stage 7/8 中对collect_feats的判断逻辑pitch/energy 的提取与归一化参数由 conf/train_fastspeech2.yaml 控制pitch_extract: dio、pitch_normalize: global_mvn、energy_extract: energy、energy_normalize: global_mvn提取时的声学参数fs、n_fft、hop_length、f0min/f0max、win_length由脚本以--pitch_extract_conf/--energy_extract_conf形式自动注入见 tts2.sh。六、训练离散 FastSpeech2中文 HuBERT 单元 k-means此时数据集的每个 utterance 已具备text音素序列、durationsteacher 时长、speech原始波形、discrete speech离散单元序列、pitch、energy、spkembs说话人嵌入。离散单元使用cn_hubert在中文上预训练的 HuBERT提取本 recipe 使用 large 模型的layer 17特征。6.1 处理 test_set 的离散单元vocoder 训练需要 test_set 的离散单元pseudo labels因此先对 test_set 单独跑一遍离散化流程修改 bash 文件避免重复处理 train_set./local/data.sh --stage 1 --stop_stage 1 ./run.sh --stage 2 --stop_stage 26.2 离散单元提取与训练# 建议修改 tts2.sh将英文 hubert 切换为中文 hubert以适配 aishell3 ./run.sh --stage 5 --stop_stage 6 --s3prl_upstream_name hf_hubert_custom --feature_layer 17 ./run.sh --stage 8 --stop_stage 8 --s3prl_upstream_name hf_hubert_custom --feature_layer 17 \ --teacher_dumpdir exp/tts_train_teacher_raw_phn_none/decode_teacher_use_teacher_forcingtrue_50epoch \ --tts2_stats_dir exp/tts_train_teacher_raw_phn_none/decode_teacher_use_teacher_forcingtrue_50epoch/stats \ --tts2_exp exp/tts_fastspeech2_raw_phn_none_cn_hubert6.3 底层实现stage 5-6 的离散化流水线在 tts2.sh 中Stage 5L563-L591由srctexts生成源端音素词典src_tokens.txt通过espnet2.bin.tokenize_textblank:0、oov:1、sos/eos:-1并同时构建目标端离散单元词典tgt_tokens.txt即auido_token_1到auido_token_{feature_num_clusters}的符号序列Stage 6L593-L637调用scripts/feats/perform_kmeans.sh完成 SSL 特征抽取与 k-means 聚类。默认参数下s3prl_upstream_namehubert、feature_layer6、feature_num_clusters500、clustering_portion0.1仅用 10% 数据训练聚类器、storage_save_modetrue边提取边聚类、节省存储聚类结果保存为dump/{km_tag}/下的pseudo_labels_km{num}.txt并拷贝到各数据集的text.km.{km_tag}km_tag 默认为${s3prl_upstream_name}_layer${feature_layer}_${feature_num_clusters}。代码中给出了中文 HuBERT 的推荐配置tts2.sh 注释# (zh hubert)aishell3 上使用的参数 s3prl_conf{upstream${s3prl_upstream_name},path_or_urlTencentGameMate/chinese-hubert-large} kmeans_feature_types3prl kmeans_feature_conf{type${kmeans_feature_type},conf{s3prl_conf${s3prl_conf},download_dirckpt,multilayer_featureFalse,layer${feature_layer}}}Stage 7L647-L774collect stats——并行抽取 speech 波形、text、discrete_speech 的 shape并注入 pitch/energy 提取配置、teacher durations 与说话人嵌入数据路径输出到tts2_stats_dirStage 8L777-L958训练阶段分为两种情形未指定teacher_dumpdir→AR 模型训练CASE 1此处不适用指定teacher_dumpdir→Non-AR 模型训练CASE 2将text、durations、speech、text.km.${km_tag}discrete_speech作为多路输入通过espnet2.bin.tts2_train启动训练tts2_tasktts2。6.4 离散 FastSpeech2 训练配置解析conf/train_fastspeech2.yaml 是离散 FastSpeech2 的核心配置官方注明单张 12 GB 显存 GPU 即可训练Titan V 上约需 4 天。要点如下配置项值说明ttsfastspeech2模型架构tts_conf.adim / aheads384 / 2注意力维度与头数tts_conf.elayers / eunits4 / 1536编码器层数与 FFN 单元数tts_conf.dlayers / dunits4 / 1536解码器层数与 FFN 单元数tts_conf.duration_predictor_*layers2, chans256, kernel3时长预测器结构tts_conf.postnet_*layers5, filts5, chans256后处理网络结构tts_conf.spk_embed_dim192说话人嵌入维度与提取端一致tts_conf.spk_embed_integration_typeadd说话人嵌入融合方式pitch_predictor_*layers5, chans256, kernel5, dropout0.5基频预测器energy_predictor_*layers2, chans256, kernel3, dropout0.5能量预测器optim / optim_confadam / lr1.0配合 Noam 调度器使用scheduler / scheduler_confnoamlr / model_size384, warmup_steps4000Noam 学习率调度num_iters_per_epoch / max_epoch2000 / 100迭代与轮数batch_bins / batch_type24000000 / numel按元素数打包raw 特征best_model_criterionvalid.loss min / train.loss min最优模型筛选依据配置注释还说明了两处与原始 FastSpeech2 论文的差异本实现采用token 级平均的 pitch/energy同 FastPitch 做法且不使用量化的 pitch/energy。七、训练离散 HiFiGAN Vocoder把离散单元还原为波形由于 tts2 的目标不是mel → wav这样的规则式 vocoder而是把离散 HuBERT 单元直接映射为波形的独特 vocoder因此需要一个针对 aishell3 离散特征定制的 vocoder。本 recipe 使用 ParallelWaveGAN 仓库中的egs/aishell3/hubert_voc1离散 HiFiGAN具体步骤克隆 ParallelWaveGAN 仓库进入ParallelWaveGAN/egs/aishell3/hubert_voc1将 hubert 文本收集到单个文件cat path/to/train_hubert.txt path/to/dev_hubert.txt path/to/test_hubert.txt path/to/newfile_all.txt修改./run.sh中的hubert_text按 stage 0 的说明符号链接经静音裁剪的数据。wav格式在 Kaldi ark reader 中比flac支持更好由于 aishell3 存在未知说话人vocoder 侧不使用 sid修改conf/hifigan_hubert_24k.v1.yaml中的关键参数num_embs等于 k-means 聚类数即离散单元数batch_max_steps按配置注释建议设置以及其他自定义参数从 stage 1 开始执行特征提取与训练。八、推理端到端生成波形训练好 FastSpeech2 与 vocoder 后在 ESPnet2 recipe 中直接执行推理阶段即可生成波形stage 9 会加载vocoder_file完成离散单元 → 波形./run.sh --stage 9 --stop_stage 9 --tts2_exp exp/tts_fastspeech2_raw_phn_none_cn_hubert解码细节tts2.sh对每个 test set 并行调用espnet2.bin.tts2_inference通过--data_path_and_name_and_type注入 text、spembs说话人嵌入等输入--vocoder_file指向 HiFiGAN 权重run.sh 中默认为vocoder/checkpoint-180000steps.pkl若设为none则退化为 Griffin-Lim输出 wav 汇总到{tts2_exp}/{inference_tag}/{dset}/wav/wav.scp。解码配置见 conf/decode_fastspeech2.yamlspeed_control_alpha: 1 # 语速控制1 alpha 变慢1 alpha 变快 use_teacher_forcing: false # 是否使用真实时长 真实 pitch/energy做 teacher forcinguse_teacher_forcing: true可用于诊断声学模型本身的质量排除时长预测误差正式推理通常保持 false。九、客观评估与基线成绩生成 wav 后可参照 TEMPLATE tts1 的评估脚本仓库内对应实现见 scripts/utils/show_tts_results.sh、pyscripts/utils/evaluate_mcd.py、pyscripts/utils/evaluate_f0.py、pyscripts/utils/evaluate_pseudomos.py计算客观指标。本 recipe 作为Discrete Speech Challenge 基线给出的 cn_hubert-large-layer17 结果如下ModelMCD ⬇️Log F0 RMSE ⬇️CER ⬇️UTMOS ⬆️cn_hubert-large-layer178.5473 ± 0.94070.3032 ± 0.135442.31.7565 ± 0.3628其中 CER 使用 openai-whisper-large 模型并以汉字Chinese characters计算。MCD 越小表示谱失真越小、Log F0 RMSE 越小表示基频拟合越准、CER 越小表示合成语音可懂度越高、UTMOS 越大表示自然度评分越高↑/↓ 表示指标方向。十、多说话人条件为什么选 Speaker Embedding 而非 Speaker ID多说话人 TTS2 场景下--use_spk_embed说话人嵌入或--use_sid说话人 ID都能帮助模型更好地区分说话人。但AISHELL3 并非固定说话人语料库——存在未知 ID 的说话人样本因此本 recipe 选择说话人嵌入方案--use_spk_embed true。ESPnet 支持多种说话人嵌入来源kaldi x-vector、speechbrain、espnet_spk 等本 recipe 选用espnet_spk。在 tts2.sh 与 tts.sh 中的对应默认配置为use_spk_embedfalse # 本 recipe 通过 run.sh 显式置为 true spk_embed_tagespnet_spk # 嵌入目录标签兼容旧版可设为 xvector spk_embed_toolespnet # 嵌入工具speechbrain / rawnet / espnet / kaldi spk_embed_modelespnet/voxcelebs12_rawnet3 # 预训练嵌入模型提取流程发生在 stage 3.1tts2.sh对每个数据集调用pyscripts/utils/extract_spk_embed.py输出{dumpdir}/espnet_spk/{dset}/espnet_spk.scp若使用 Kaldi x-vector则走 MFCC VAD sid/nnet3/xvector/extract_xvectors.sh的传统链路需 Kaldi 环境并下载 x-vector 预训练模型训练与解码阶段通过--data_path_and_name_and_type .../espnet_spk.scp,spembs,kaldi_ark将嵌入注入模型对应 tts2.sh 与 stage 8、stage 9 中的 spembs 数据路径。若改用--use_sid则脚本会在 stage 3.2 从utt2spk生成spk2sidunk保留为 id 0与utt2sid——这正是 aishell3 因未知说话人而回避的路径。十一、MFA 对齐时长来源的另一种选择除 teacher 模型外也可用Montreal Forced Aligner (MFA)生成音素时长。README 指出teacherTacotron2与 MFA 二选一即可MFA 的时长质量通常更优。11.1 准备 MFA 环境cd ../../../tools make mfa.done cd -即在仓库根目录的 tools/Makefile 中安装 MFA 相关依赖。11.2 运行 MFA 入口脚本常规 recipe 中 stage 1 会调用local/data.sh但此处不运行 stage 1改用 local/run_mfa.sh./local/run_mfa.sh该脚本是入口会调用 scripts/utils/mfa.sh进而调用local/data.sh。其核心参数如下./scripts/utils/mfa.sh \ --language pypinyin_phone \ --train true \ --cleaner tacotron \ --acoustic_model mandarin_mfa \ --dictionary mandarin_china_mfa \ --g2p_model pypinyin_g2p_phone \ --samplerate 24000 \ --hop-size 480 \ --clean_temp true \ --split_sets train_no_dev dev test \ --stage 0 \ --stop_stage 5行为约定--train false下载预训练的 g2p 与声学模型--train true生成对齐结果生成结果保存在split_sets_phn词典lexicon中。对于 AISHELL3recipe 在mandarin_china_mfa词典上重新训练了新的 G2P 模型并生成词典然后训练语音-文本对齐 MFA。11.3 使用 MFA 时长继续训练若希望使用 MFA 提取的时长继续主流程训练则从 stage 2 开始此处--teacher_dumpdir data即指向 MFA 产物所在目录原文命令中的run_.sh即主脚本run.sh./run.sh --stage 2 --stop_stage 2 --teacher_dumpdir data十二、源码级数据流小结综合 tts2.sh 的分阶段实现可以将整条 TTS2 流水线映射为清晰的 stage 图谱便于复现与排查Stage内容关键产物1数据准备local/data.shdata/{train_no_dev_phn,dev_phn,test_phn}/2格式化 wav.scpscripts/audio/format_wav_scp.shdump/raw/{dset}/wav.scp3说话人嵌入 / sid / liddump/espnet_spk/{dset}/espnet_spk.scp4过滤过长过短样本dump/raw/{train,valid}/去除长尾5源端音素词典 目标端离散单元词典dump/src_token_list/phn_none/src_tokens.txt、dump/{km_tag}/tgt_tokens.txt6SSL 特征抽取 k-means 聚类dump/raw/{dset}/text.km.{km_tag}7collect statspitch/energy/shape{tts2_stats_dir}/train|valid/8离散 FastSpeech2 训练espnet2.bin.tts2_train{tts2_exp}/config.yaml、train.loss.ave.pth9推理espnet2.bin.tts2_inference vocoder{tts2_exp}/{inference_tag}/{dset}/wav/10-12打包模型并上传Zenodo / Hugging Face{tts2_exp}/xxx.zip与此对应teacher 流程tts.sh的 stage 编号略有偏移stage 6 为 collect statspitch/energy 提取、stage 7 为 Tacotron2 训练、stage 8 为 teacher forcing 解码产出 durations。十三、常见问题与调参建议teacher 与 student 声学参数不一致导致时长错位务必保持fs与n_shifthop size在run_train_teacher.sh与run.sh中一致本 recipe 均为 24000 / 480。中文 vs 英文 HuBERT默认tts2.sh使用英文hubertlayer 6AISHELL3 应切换为中文 huberthf_hubert_custom--feature_layer 17对应TencentGameMate/chinese-hubert-large见 tts2.sh 注释并在训练与解码阶段保持一致。离散单元数不匹配vocoder 的num_embs必须等于 FastSpeech2 侧feature_num_clusters默认 500以及 k-means 聚类数否则嵌入维度会失配。记忆体不足文本解析遇到内存问题时可将num_splits设为大于 1将语料切分为多个子集逐个训练对应 stage 8 中espnet2.bin.split_scps--multiple_iterator true分支见 tts2.sh。断点续跑每个阶段都会在输出目录生成run.sh如{tts2_exp}/run.sh可直接复用其参数从指定 stage 恢复执行。语速控制推理时通过speed_control_alpha调整语速大于 1 变慢、小于 1 变快无需重新训练。通过以上步骤即可在 ESPnet2 中完整复现 AISHELL3 中文多说话人离散语音合成TTS2系统从文本与波形出发借助 teacher/MFA 得到时长以中文 HuBERT 离散单元为建模目标训练 FastSpeech2再用离散 HiFiGAN 恢复波形最终以 MCD、Log F0 RMSE、CER、UTMOS 等指标客观评估合成质量。该流水线与仓库中 egs2/TEMPLATE/tts2 的通用实现一一对应可直接迁移到其他语料。赞分享人工智能语音音频深度学习NLP【免费下载链接】espnetEnd-to-End Speech Processing Toolkit项目地址https://gitcode.com/gh_mirrors/es/espnet点击查看免费下载相关推荐基于 ESPnet2 tts2 Recipe 训练离散单元 TTSLJSpeech 单说话人 FastSpeech2 实战指南基于 ESPnet2 tts2 Recipe 训练离散单元 TTSLJSpeech 单说话人 FastSpeech2 实战指南 本文以 ESPnet 仓库中的人工智能语音音频深度学习NLPEF Core Native AOT 测试工程解析逐文件生成 AOT 发布工程并约定返回码 100 的验证机制EF Core Native AOT 测试工程解析逐文件生成 AOT 发布工程并约定返回码 100 的验证机制 EF Core 仓库中的 EFCore.Nat人工智能语音音频深度学习NLPfairseq unit2speech 实战指南基于离散语音单元Unit合成语音fairseq unit2speech 实战指南基于离散语音单元Unit合成语音 本文以 fairseq 仓库中 unit2speech 示例 https人工智能深度学习预训练NLP语音上一篇Llama 3备份恢复数据备份与灾难恢复方案下一篇告别色彩偏差Hyprland色彩校正全指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。