ARTICLE DETAIL

资讯详情

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

PaddleSpeech 实战:用 TransformerTTS 在 LJSpeech 数据集上完成语音合成训练与推理

PaddleSpeech 实战:用 TransformerTTS 在 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/tts1示例为核心的端到端实操指南完整覆盖从 LJSpeech-1.1 数据集下载、特征预处理、模型训练、WaveFlow 声码器波形合成到使用官方预训练模型直接合成语音的完整链路。读完本文你将能够独立跑通 TransformerTTS基于 Transformer 网络的端到端语音合成在单说话人英文语料上的训练与推理流程并理解其配置文件、训练脚本与底层实现之间的对应关系。一、示例概览tts1 在 LJSpeech 示例族中的位置在 PaddleSpeech 的 LJSpeech 示例目录 中ljspeech数据族按「声学模型 声码器」拆分为多个独立 recipetts0 - Tacotron2tts1 - TransformerTTS本文主题tts2 - SpeedySpeechtts3 - FastSpeech2voc0 - WaveFlowvoc1 - Parallel WaveGANvoc2 - MelGANvoc3 - MultiBand MelGANtts1的目标是用 Transformer 网络把「音素序列」映射为「Mel 频谱序列」声学模型再借助 WaveFlow 声码器把频谱还原为可听波形。示例目录结构如下examples/ljspeech/tts1/ ├── conf/ │ └── default.yaml # TransformerTTS 训练与特征配置 ├── local/ │ ├── preprocess.sh # 数据预处理 │ ├── train.sh # 模型训练 │ ├── synthesize.sh # 基于 metadata.jsonl 批量合成 │ └── synthesize_e2e.sh # 基于文本文件端到端合成 ├── path.sh # 环境变量与 BIN_DIR 定位 ├── run.sh # 一键流程入口 └── README.md所有脚本最终都调用paddlespeech/t2s/exps/transformer_tts/下的 Python 入口train.py、preprocess.py、normalize.py、synthesize.py、synthesize_e2e.pyBIN_DIR由 path.sh 导出为${MAIN_ROOT}/paddlespeech/t2s/exps/transformer_tts。二、数据集准备下载并解压 LJSpeech-1.1TransformerTTS 训练使用的是LJSpeech-1.1单说话人英文朗读数据集约 13,100 条音频由一位女性播音员朗读公共领域书籍片段。下载并解压到~/datasets# 从 LJSpeech 官方网站下载 LJSpeech-1.1解压后目录为 ~/datasets/LJSpeech-1.1 unzip LJSpeech-1.1.zip -d ~/datasets解压后数据集根目录包含wavs/音频文件与metadata.csv每行一条id|transcription|normalized_transcription的文本标注后续预处理脚本正是依赖这两个部分完成特征提取与音素映射。三、快速开始run.sh 一键流程与 stage 控制进入示例目录后直接运行 run.sh 即可按阶段依次执行source 环境 → 数据预处理 → 模型训练 → 波形合成./run.sh脚本顶部定义了各阶段默认参数gpus0,1 stage0 stop_stage100 conf_pathconf/default.yaml train_output_pathexp/default ckpt_namesnapshot_iter_403.pdz各阶段含义如下stage脚本功能0./local/preprocess.sh ${conf_path}特征提取、统计量计算与归一化生成dump/目录1CUDA_VISIBLE_DEVICES${gpus} ./local/train.sh ${conf_path} ${train_output_path}训练 TransformerTTScheckpoint 保存在exp/default/checkpoints/2./local/synthesize.sh ${conf_path} ${train_output_path} ${ckpt_name}从metadata.jsonl测试集批量合成波形3./local/synthesize_e2e.sh ${conf_path} ${train_output_path} ${ckpt_name}从文本文件端到端合成波形run.sh通过source ${MAIN_ROOT}/utils/parse_options.sh支持--stage/--stop-stage参数精确控制执行范围。例如只跑数据预处理./run.sh --stage 0 --stop-stage 0该机制同样适用于其他阶段组合如只训练--stage 1 --stop-stage 1、只合成--stage 2 --stop-stage 2等方便在已有产出物上增量执行避免重复计算。四、数据预处理从 wav 到归一化 Mel 频谱预处理由 local/preprocess.sh 执行内部按 stage 依次调用三个 Python 入口4.1 特征提取python3 ${BIN_DIR}/preprocess.py \ --datasetljspeech \ --rootdir~/datasets/LJSpeech-1.1/ \ --dumpdirdump \ --config-pathconf/default.yaml \ --num-cpu8从源码 preprocess.py 可以看到其关键行为使用English前端paddlespeech/t2s/frontend/en_frontend.py解析metadata.csv得到每条语句的音素序列生成dump/phone_id_map.txt音素→ID 映射与dump/speaker_id_map.txt说话人→ID 映射按train/dev/test 12900/100/剩余的比例切分数据num_train 12900, num_dev 100使用LogMelFBank提取 log-Mel 频谱特征paddlespeech/t2s/datasets/get_feats.py其n_fft、hop_length、win_length、n_mels、fmin、fmax等参数全部来自conf/default.yaml以--num-cpu指定并行进程数加速。4.2 计算统计量python3 ${MAIN_ROOT}/utils/compute_statistics.py \ --metadatadump/train/raw/metadata.jsonl \ --field-namespeech在训练集 raw 特征上计算每个 Mel 频带维度的均值与标准差输出dump/train/speech_stats.npy。该统计量是归一化的依据且dev / test 必须沿用训练集的统计量以保证特征分布一致。4.3 归一化与音素 ID 化python3 ${BIN_DIR}/normalize.py \ --metadatadump/train/raw/metadata.jsonl \ --dumpdirdump/train/norm \ --speech-statsdump/train/speech_stats.npy \ --phones-dictdump/phone_id_map.txt \ --speaker-dictdump/speaker_id_map.txtdev 与 test 以同样的方式分别归一化--speech-stats均指向训练集统计量normalize.py内部使用sklearn.preprocessing.StandardScaler完成标准化并把文本替换为音素 ID 序列。4.4 dump 目录结构与 metadata.jsonl预处理完成后当前目录下生成dump/目录结构如下dump ├── dev │ ├── norm │ └── raw ├── phone_id_map.txt ├── speaker_id_map.txt ├── test │ ├── norm │ └── raw └── train ├── norm ├── raw └── speech_stats.npyraw/每条语句的原始 Mel 特征.npynorm/使用训练集统计量归一化后的特征dump/train/speech_stats.npy训练集统计量每个子目录内都有一个metadata.jsonl它是表格化索引文件逐行记录该条语句的音素序列text、文本长度text_lengths、语音特征路径speech、语音帧长speech_lengths、说话人speaker与 IDid。训练与合成阶段均以metadata.jsonl作为数据入口训练脚本通过DataTable与np.load按路径字段加载.npy特征见 train.py。五、核心配置解析conf/default.yamlconf/default.yaml 是 TransformerTTS 训练与特征提取的唯一配置源可按区块拆解如下。5.1 音频与特征区fs : 22050 # Hz, 采样率 n_fft : 1024 # FFT 大小样本数 win_length : 1024 # 窗长样本数约 46.4ms n_shift : 256 # 帧移样本数约 11.6ms fmin : 0 # Hz, 转 Mel 的最低频率 fmax : 8000 # Hz, 转 Mel 的最高频率 n_mels : 80 # Mel 频带数 window: hann # 窗函数n_mels 80直接决定模型的输出维度odim config.n_melsfs/n_fft/n_shift决定频谱的时间分辨率与帧数进而影响文本长度与语音帧长之间的对齐关系。5.2 数据加载区batch_size: 16 num_workers: 2batch_size用于构建训练/验证 DataLoadernum_workers为 DataLoader 的并行加载进程数。训练脚本中以DistributedBatchSamplershuffleTrue, drop_lastTrue组织训练批配合transformer_single_spk_batch_fn作为 collate 函数见 train.py。5.3 模型结构区model块tts: transformertts # 模型架构 model: embed_dim: 0 # 编码器 prenet 中字符嵌入维度0 表示使用默认 512 eprenet_conv_layers: 0 # 编码器 prenet 卷积层数0 表示不使用编码器 prenet eprenet_conv_filts: 0 # 编码器 prenet 卷积核大小 eprenet_conv_chans: 0 # 编码器 prenet 卷积通道数 dprenet_layers: 2 # 解码器 prenet 层数 dprenet_units: 256 # 解码器 prenet 单元数 adim: 512 # 注意力维度 aheads: 8 # 多头注意力头数 elayers: 6 # 编码器层数 eunits: 1024 # 编码器 FFN 单元数 dlayers: 6 # 解码器层数 dunits: 1024 # 解码器 FFN 单元数 positionwise_layer_type: conv1d # position-wise 层类型 positionwise_conv_kernel_size: 1 # position-wise 卷积核大小 postnet_layers: 5 # postnet 层数 postnet_filts: 5 # postnet 卷积核大小 postnet_chans: 256 # postnet 通道数 use_scaled_pos_enc: True # 是否使用可学习缩放的位置编码 encoder_normalize_before: True # 编码器输入前是否做 LayerNorm decoder_normalize_before: True # 解码器输入前是否做 LayerNorm reduction_factor: 1 # 帧规约因子 init_type: xavier_uniform # 参数初始化方式 init_enc_alpha: 1.0 # 编码器缩放位置编码 alpha 初值 init_dec_alpha: 1.0 # 解码器缩放位置编码 alpha 初值 eprenet_dropout_rate: 0.0 # 编码器 prenet dropout dprenet_dropout_rate: 0.5 # 解码器 prenet dropout postnet_dropout_rate: 0.5 # postnet dropout transformer_enc_dropout_rate: 0.1 transformer_enc_positional_dropout_rate: 0.1 transformer_enc_attn_dropout_rate: 0.1 transformer_dec_dropout_rate: 0.1 transformer_dec_positional_dropout_rate: 0.1 transformer_dec_attn_dropout_rate: 0.1 transformer_enc_dec_attn_dropout_rate: 0.1 num_heads_applied_guided_attn: 2 # 施加引导注意力损失的头数 num_layers_applied_guided_attn: 2 # 施加引导注意力损失的层数这些超参数与 transformer_tts.py 中TransformerTTS.__init__的形参一一对应训练脚本以TransformerTTS(idimvocab_size, odimodim, **config[model])方式实例化模型train.py。要点embed_dim/eprenet_*均为 0 时编码器直接以音素 ID 嵌入作为输入不使用卷积 prenet编码器/解码器各 6 层、每层 1024 维 FFN、8 头注意力adim512是论文《Neural Speech Synthesis with Transformer Network》的典型配置use_scaled_pos_encTrue时使用可训练的缩放因子alpha训练过程中 updater 会记录encoder_alpha/decoder_alpha供可视化监控解码器 prenet 与 postnet 的 dropout 为 0.5Transformer 各子层 dropout 为 0.1。5.4 损失与更新器区updater块updater: use_masking: True # 损失计算时是否对 padding 部分做掩码 loss_type: L1 use_guided_attn_loss: True # 是否使用引导注意力损失 guided_attn_loss_sigma: 0.4 # 引导注意力损失中的 sigma guided_attn_loss_lambda: 10.0 # 引导注意力损失权重 lambda modules_applied_guided_attn: [encoder-decoder] # 施加引导注意力损失的模块 bce_pos_weight: 5.0 # 二分类交叉熵中正样本权重对应 transformer_tts_updater.py 中TransformerTTSUpdater/TransformerTTSEvaluator的实现频谱损失按loss_type组合after_outspostnet 输出与before_outspostnet 前输出的 L1/L2 损失并与 stop token 的 BCE 损失相加loss l1_loss bce_lossuse_guided_attn_lossTrue时用GuidedMultiHeadAttentionLoss对指定模块默认encoder-decoder交叉注意力的注意力权重施加对角化引导σ0.4、λ10.0以缓解 Transformer TTS 常见的注意力发散/对齐错误问题use_maskingTrue时对 padding 部分掩码bce_pos_weight5.0平衡 stop token 正负样本。5.5 优化器、训练与杂项区optimizer: optim: adam # 优化器类型 learning_rate: 0.001 # 学习率 max_epoch: 500 num_snapshots: 5 seed: 10086optimizer由build_optimizers解析构建train.pymax_epoch: 500为最大训练轮数num_snapshots: 5为Snapshot扩展保留的最大 checkpoint 数量滚动覆盖旧快照seed: 10086在训练开始时通过seed_everything(config.seed)固定随机种子多进程训练时保证可复现性。六、模型训练train.py 参数与执行方式训练命令由 local/train.sh 封装CUDA_VISIBLE_DEVICES${gpus} ./local/train.sh ${conf_path} ${train_output_path}其内部调用${BIN_DIR}/train.py即 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] Train a TransformerTTS model with LJSpeech TTS dataset. optional arguments: -h, --help show this help message and exit --config CONFIG TransformerTTS 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. --phones-dict PHONES_DICT phone vocabulary file.参数说明与使用要点--configyaml 格式配置文件覆盖默认配置即conf/default.yaml--train-metadata/--dev-metadata分别指向dump/train/norm/metadata.jsonl与dump/dev/norm/metadata.jsonl必须使用归一化子目录--output-dir实验结果保存目录checkpoint 保存在其内部checkpoints/子目录--ngpuGPU 数量ngpu 0时使用 CPUngpu 1时通过dist.spawn启动多卡并行训练train.py--phones-dict音素词典文件路径dump/phone_id_map.txt。train.sh中实际使用的参数为--train-metadatadump/train/norm/metadata.jsonl、--dev-metadatadump/dev/norm/metadata.jsonl、--configconf/default.yaml、--output-direxp/default、--ngpu2、--phones-dictdump/phone_id_map.txt。训练过程中的工程细节均可在 train.py 中印证模型词汇表大小由phone_id_map.txt行数确定vocab_size len(phn_id)输出维度为n_mels 80每个 epoch 结束后执行一次验证集评估trainer.extend(evaluator, trigger(1, epoch))每轮迭代通过 VisualDL 记录指标trigger(1, iteration)每个 epoch 保存一次快照最多保留num_snapshots份Snapshot(max_sizeconfig.num_snapshots)训练日志写入output_dir/worker_{rank}.log损失指标loss、l1_loss、l2_loss、bce_loss、各注意力损失、encoder_alpha/decoder_alpha逐项记录transformer_tts_updater.py。训练完成后checkpoint 以snapshot_iter_{N}.pdz命名run.sh默认引用snapshot_iter_403.pdz位于exp/default/checkpoints/下。七、波形合成TransformerTTS WaveFlow 声码器TransformerTTS 输出的是 Mel 频谱必须借助神经声码器还原为可听波形。tts1示例选用 WaveFlow 声码器示例仓库内对应ljspeech/voc0recipe作为配套声码器。7.1 下载 WaveFlow 预训练模型# 下载 waveflow_ljspeech_ckpt_0.3.zipresidual channel 128并解压 unzip waveflow_ljspeech_ckpt_0.3.zip解压后目录结构waveflow_ljspeech_ckpt_0.3 ├── config.yaml # 训练 waveflow 时使用的默认配置 └── step-2000000.pdparams # waveflow 模型参数7.2 从 metadata.jsonl 批量合成local/synthesize.sh 调用${BIN_DIR}/synthesize.py从测试集metadata.jsonl合成波形CUDA_VISIBLE_DEVICES${gpus} ./local/synthesize.sh ${conf_path} ${train_output_path} ${ckpt_name}--output-dir默认为${train_output_path}/test。synthesize.py完整帮助信息如下usage: synthesize.py [-h] [--transformer-tts-config TRANSFORMER_TTS_CONFIG] [--transformer-tts-checkpoint TRANSFORMER_TTS_CHECKPOINT] [--transformer-tts-stat TRANSFORMER_TTS_STAT] [--waveflow-config WAVEFLOW_CONFIG] [--waveflow-checkpoint WAVEFLOW_CHECKPOINT] [--phones-dict PHONES_DICT] [--test-metadata TEST_METADATA] [--output-dir OUTPUT_DIR] [--ngpu NGPU] Synthesize with transformer tts waveflow. optional arguments: -h, --help show this help message and exit --transformer-tts-config TRANSFORMER_TTS_CONFIG transformer tts config file. --transformer-tts-checkpoint TRANSFORMER_TTS_CHECKPOINT transformer tts checkpoint to load. --transformer-tts-stat TRANSFORMER_TTS_STAT mean and standard deviation used to normalize spectrogram when training transformer tts. --waveflow-config WAVEFLOW_CONFIG waveflow config file. --waveflow-checkpoint WAVEFLOW_CHECKPOINT waveflow checkpoint to load. --phones-dict PHONES_DICT phone vocabulary file. --test-metadata TEST_METADATA test metadata. --output-dir OUTPUT_DIR output dir. --ngpu NGPU if ngpu 0, use cpu.7.3 从文本文件端到端合成local/synthesize_e2e.sh 调用${BIN_DIR}/synthesize_e2e.py直接从纯文本合成无需测试集特征适合新句子推理CUDA_VISIBLE_DEVICES${gpus} ./local/synthesize_e2e.sh ${conf_path} ${train_output_path} ${ckpt_name}其默认文本为${BIN_DIR}/../../assets/sentences_en.txt即仓库 assets/sentences_en.txt内含 Life was like a box of chocolates, ... 等经典例句--output-dir默认为${train_output_path}/test_e2e。synthesize_e2e.py完整帮助信息如下usage: synthesize_e2e.py [-h] [--transformer-tts-config TRANSFORMER_TTS_CONFIG] [--transformer-tts-checkpoint TRANSFORMER_TTS_CHECKPOINT] [--transformer-tts-stat TRANSFORMER_TTS_STAT] [--waveflow-config WAVEFLOW_CONFIG] [--waveflow-checkpoint WAVEFLOW_CHECKPOINT] [--phones-dict PHONES_DICT] [--text TEXT] [--output-dir OUTPUT_DIR] [--ngpu NGPU] Synthesize with transformer tts waveflow. optional arguments: -h, --help show this help message and exit --transformer-tts-config TRANSFORMER_TTS_CONFIG transformer tts config file. --transformer-tts-checkpoint TRANSFORMER_TTS_CHECKPOINT transformer tts checkpoint to load. --transformer-tts-stat TRANSFORMER_TTS_STAT mean and standard deviation used to normalize spectrogram when training transformer tts. --waveflow-config WAVEFLOW_CONFIG waveflow config file. --waveflow-checkpoint WAVEFLOW_CHECKPOINT waveflow checkpoint to load. --phones-dict PHONES_DICT phone vocabulary file. --text TEXT text to synthesize, a utt_id sentence pair per line. --output-dir OUTPUT_DIR output dir. --ngpu NGPU if ngpu 0, use cpu.两组参数语义归纳--transformer-tts-config、--transformer-tts-checkpoint、--transformer-tts-stat、--phones-dict对应 TransformerTTS 预训练模型的 4 个文件配置、checkpoint、归一化统计量、音素词典--waveflow-config、--waveflow-checkpoint对应 WaveFlow 预训练模型的 2 个文件--test-metadatadump/test/norm/metadata.jsonl测试集归一化特征索引--text待合成文本文件格式为每行一条utt_id sentence如001 Life was like a box of chocolates.合成后以utt_id命名输出音频--output-dir合成音频保存目录--ngpuGPU 数量0表示 CPU。两个合成脚本在调用前都设置了显存控制环境变量见 synthesize.shFLAGS_allocator_strategynaive_best_fit \ FLAGS_fraction_of_gpu_memory_to_use0.01 \其中FLAGS_fraction_of_gpu_memory_to_use0.01将每卡预占显存比例压到 1%配合naive_best_fit分配策略允许同卡并行多个推理进程。合成阶段由 synthesize.py 解析两个 yaml 配置并加载TransformerTTSInferencetransformer_tts.py 中的推理封装与 WaveFlow 模型完成前向。八、使用预训练模型快速合成若不想自行训练可直接下载官方预训练 TransformerTTS 模型与 WaveFlow 模型组合使用。8.1 下载 TransformerTTS 预训练模型# 下载 transformer_tts_ljspeech_ckpt_0.4.zip 并解压 unzip transformer_tts_ljspeech_ckpt_0.4.zip解压后目录结构transformer_tts_ljspeech_ckpt_0.4 ├── default.yaml # 训练 transformer_tts 时使用的默认配置 ├── phone_id_map.txt # 训练时的音素词典文件 ├── snapshot_iter_201500.pdz # 模型参数与优化器状态 └── speech_stats.npy # 训练时用于频谱归一化的统计量8.2 端到端合成命令以下命令使用预训练 TransformerTTS 与 WaveFlow对仓库内置英文例句文件进行合成需要先source path.sh加载环境source path.sh FLAGS_allocator_strategynaive_best_fit \ FLAGS_fraction_of_gpu_memory_to_use0.01 \ python3 ${BIN_DIR}/synthesize_e2e.py \ --transformer-tts-configtransformer_tts_ljspeech_ckpt_0.4/default.yaml \ --transformer-tts-checkpointtransformer_tts_ljspeech_ckpt_0.4/snapshot_iter_201500.pdz \ --transformer-tts-stattransformer_tts_ljspeech_ckpt_0.4/speech_stats.npy \ --waveflow-configwaveflow_ljspeech_ckpt_0.3/config.yaml \ --waveflow-checkpointwaveflow_ljspeech_ckpt_0.3/step-2000000.pdparams \ --text${BIN_DIR}/../../assets/sentences_en.txt \ --output-direxp/default/test_e2e \ --phones-dicttransformer_tts_ljspeech_ckpt_0.4/phone_id_map.txt要点--transformer-tts-stat必须是训练阶段使用的speech_stats.npy推理时对模型输出的频谱做反向归一化保证与训练特征分布一致两个预训练包分别对应「声学模型 声码器」两个组件可独立替换例如换成 Parallel WaveGAN 等其他 vocoder 配置合成文本每行utt_id sentence成对出现输出音频以utt_id命名存放于--output-dir。九、从示例到自定义路径与工程要点回顾数据路径硬编码preprocess.sh 中--rootdir~/datasets/LJSpeech-1.1/为默认数据集路径更换数据集位置时需同步修改path.sh的环境导出MAIN_ROOT指向仓库根目录通过realpath ${PWD}/../../../计算PYTHONPATH注入仓库根目录确保paddlespeech包可被 Python 直接导入BIN_DIR指向paddlespeech/t2s/exps/transformer_ttscheckpoint 命名与快照训练产物为snapshot_iter_{N}.pdzrun.sh中的ckpt_name需与exp/default/checkpoints/下实际存在的快照对齐声码器依赖合成阶段强依赖 WaveFlow 预训练模型文件存在于工作目录waveflow_ljspeech_ckpt_0.3/这也是合成前必须先执行下载解压步骤的原因多卡训练train.sh固定--ngpu2实际 GPU 由run.sh中的gpus环境变量控制ngpu 1时train.py使用dist.spawn启动多进程分布式训练。十、总结通过examples/ljspeech/tts1这一 recipe可以完整体验 PaddleSpeech 中「数据预处理 → 声学模型训练 → 声码器合成」的标准 TTS 流程conf/default.yaml集中管理特征与模型超参数run.sh以 stage 机制串联各阶段脚本train.py/synthesize.py/synthesize_e2e.py分别承担训练与两类合成任务而TransformerTTS模型transformer_tts.py与引导注意力损失transformer_tts_updater.py则从源码层面保证了 Transformer 序列到序列结构在语音合成场景下的对齐质量。无论是复现论文结果、研究 TTS 模型结构还是快速搭建英文语音合成 demo本示例都是一条可直接落地的基线路径。赞分享人工智能语音音频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点击查看免费下载相关推荐MooTool二维码生成与解析自定义尺寸、Logo与高级纠错功能MooTool二维码生成与解析自定义尺寸、Logo与高级纠错功能 在数字化时代二维码已成为我们生活中不可或缺的一部分。无论是支付、分享链接还是身份验证二维人工智能语音音频PaddleSpeech TransformerTTS 数据预处理全解析从 LJSpeech 语料到可训练特征PaddleSpeech TransformerTTS 数据预处理全解析从 LJSpeech 语料到可训练特征 导读 本文深入解析 PaddleSpeech人工智能语音音频NLP媒体生成Unreal Engine动画工作流加速UnrealEditorPythonScripts批量处理技巧Unreal Engine动画工作流加速UnrealEditorPythonScripts批量处理技巧 在Unreal Engine开发中动画资源的管理和优人工智能语音音频NLP媒体生成上一篇【亲测免费】 FTPServer 教程从零开始搭建FTP服务器下一篇深度解读 Bevy bevy_reflect compile-fail 测试用编译错误断言锁定反射系统的编译期契约创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表