ARTICLE DETAIL

资讯详情

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

PaddleSpeech 基于 GE2E 的 Speaker Encoder 训练与推理实践:从声纹验证到说话人嵌入提取

PaddleSpeech 基于 GE2E 的 Speaker Encoder 训练与推理实践:从声纹验证到说话人嵌入提取 人工智能语音音频【免费下载链接】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点击查看免费下载导读本文以 examples/other/ge2e 为主线系统讲解 PaddleSpeech 中如何以「说话人验证Speaker Verification」为任务训练一个 Speaker Encoder声纹编码器并借助 GE2E-softmax 损失完成多说话人语料的预训练与 utterance embedding语句级说话人嵌入提取。该模型是多说话人语音合成Voice Cloning链路的第一环——在 examples/aishell3/vc0 中正是用训练好的 GE2E 编码器为每句话生成说话人嵌入作为 Tacotron2 的额外输入实现「从说话人验证到多说话人 TTS」的迁移学习。读完本文你将掌握该实验的完整流水线数据准备、预处理、模型训练、推理提取嵌入以及如何复用官方预训练模型。实验定位说话人验证驱动的迁移学习PaddleSpeech 将声纹编码器的训练独立成一个实验examples/other/ge2e其核心动机来自两篇论文Generalized End-to-end Loss for Speaker Verification提出 GE2EGeneralized End-to-End损失本文模型即采用该损失GE2E-softmax lossTransfer Learning from Speaker Verification to Multispeaker Text-To-Speech Synthesis将声纹验证任务训练出的编码器迁移到多说话人 TTS用其提取的说话人嵌入为合成器提供说话人身份信息。在 examples/aishell3/vc0/README.md 的三步流程中Speaker Encoder 是第一步用说话人验证任务训练编码器且训练数据不需要文本标注因此可以聚合更多语料第二步用训练好的编码器为 AISHELL-3 的每句话生成 speaker embedding该嵌入会与 Tacotron2 编码器输出拼接第三步用 Parallel WaveGAN 声码器合成波形。模型结构LSTM 声纹编码器与 GE2E 损失网络主体模型定义在 paddlespeech/vector/models/lstm_speaker_encoder.py 的LSTMSpeakerEncoder中输入语谱图序列mel 频谱形状[B, T, C]一个多层的nn.LSTM(n_mels, hidden_size, num_layers)编码时序特征取最后一层 LSTM 的最终隐状态h[-1]经nn.Linear(hidden_size, output_size)映射后接ReLU再做 L2 归一化得到说话人嵌入两个可学习参数similarity_weight初始 10.0与similarity_bias初始 -5.0用于缩放和偏移相似度分数。默认配置见 paddlespeech/vector/exps/ge2e/config.pynum_layers3、hidden_size256、embedding_size256即输出 256 维说话人嵌入。GE2E 损失与 EERforward接收一个 batch 的说话人-语句两级数据reshape 为[speakers_per_batch, utterances_per_speaker, embed_dim]后计算损失similarity_matrix源码同时计算包含自身的中心点inclusive centroid与排除自身的中心点exclusive centroid得到每个语句与各说话人中心点的相似度矩阵损失定义为对该相似度矩阵的交叉熵nn.CrossEntropyLoss使每条语句与自己说话人的中心点相似度最高即 GE2E-softmax 损失每个 batch 还会在paddle.no_grad()下基于 ROC 曲线计算EER等错误率作为监控指标训练日志会同时打印loss与err见 train.py。embed_utterance源码是推理时提取整句嵌入的入口对语句的多个 partial 片段嵌入取平均后再次归一化得到该语句的单一嵌入向量。数据准备支持的多说话人数据集本实验只使用语音、不使用文本标注因此可以合并多个多说话人数据集以扩大训练量。当前preprocess.py支持以下 5 个数据集对应处理函数见 paddlespeech/vector/exps/ge2e/preprocess.py#L92-L98数据集名称--dataset_names用逗号分隔语种说明librispeech_other英语仅使用train-other-500子集voxceleb1英语需下载 Dev A ~ Dev D 音频并合并解压voxceleb2英语需下载 Dev A ~ Dev H 音频并合并解压aidatatang_200zh中文普通话爱迪声 200 小时中文数据集magicdata中文普通话MagicData 中文数据集这些数据集均需从各自官方渠道如 OpenSLR下载并解压到同一根目录。只要语料满足「多说话人、每个说话人有多条语句」的要求你也可以按同样格式加入其它数据集。假设datasets_root为~/datasets/GE2E其结构为GE2E ├── LibriSpeech └── (other datasets)快速开始run.sh 与 stage 机制run.shexamples/other/ge2e/run.sh定义了三个阶段stage 0 预处理、stage 1 训练、stage 2 推理。直接执行会按顺序跑完全流程./run.sh只运行某一阶段例如仅预处理./run.sh --stage 0 --stop-stage 0run.sh中的关键默认变量可通过--key value覆盖解析逻辑来自仓库根目录utils/parse_options.sh变量默认值含义gpus0训练/推理使用的 GPU 编号datasets_root~/datasets/GE2E原始数据集根目录preprocess_pathdump预处理输出目录dataset_nameslibrispeech_other参与预处理的数据集列表逗号分隔train_output_pathoutput训练结果输出目录infer_inputinfer_input推理输入目录infer_outputinfer_output推理输出目录ckpt_namestep-10000推理所用 checkpoint 名不含扩展名三个 local 脚本的实际调用链为run.sh→./local/preprocess.sh/./local/train.sh/./local/inference.sh→${BIN_DIR}下的 Python 程序。BIN_DIR由 path.sh 指向paddlespeech/vector/exps/ge2e运行前需先source path.sh以设置环境run.sh已自动处理。数据预处理转成两层级目录结构的 mel 频谱./local/preprocess.shexamples/other/ge2e/local/preprocess.sh调用${BIN_DIR}/preprocess.py./local/preprocess.sh ${datasets_root} ${preprocess_path} ${dataset_names}preprocess.pypaddlespeech/vector/exps/ge2e/preprocess.py的参数--datasets_root包含多个已解压数据集的根目录--output_dir预处理结果保存目录即preprocess_path--dataset_names待预处理的数据集名多个用逗号连接如librispeech_other,voxceleb1,voxceleb2--skip_existing跳过已存在的同名输出文件适合中断后续跑--no_trim不进行静音裁剪不推荐。默认会强制检查webrtcvad包用于噪声/静音去除。预处理核心逻辑使用SpeakerVerificationPreprocessoraudio_processor.py对每条语句做音量归一化、VAD 静音裁剪、分帧并提取40 维 mel 频谱以.npy格式按「说话人目录 → 语句文件」两级结构保存dataset_root ├── dataset01_speaker01/ │ ├── utterance01.npy │ ├── utterance02.npy │ └── utterance03.npy ├── dataset01_speaker02/ │ ├── utterance01.npy │ ├── utterance02.npy │ └── utterance03.npy ├── dataset02_speaker01/ │ ├── utterance01.npy │ ├── utterance02.npy │ └── utterance03.npy └── dataset02_speaker02/ ├── utterance01.npy ├── utterance02.npy └── utterance03.npy数据集被组织为**两级分层speaker-utterance**结构。由于多个数据集合并训练为避免说话人 id 冲突数据集名会作为前缀拼接到说话人 id 上如dataset01_speaker01。预处理相关默认配置config.py配置项默认值说明sampling_rate16000 Hz音频采样率audio_norm_target_dBFS-30音量归一化目标vad_window_length30 msVAD 窗口长度仅支持 10/20/30msvad_moving_average_width8VAD 滑动平均帧数vad_max_silence_length6一个片段允许的最大连续静音帧数mel_window_length25 msmel 窗长mel_window_step10 msmel 帧移n_mels40mel 频带数partial_n_frames160约 1600ms训练时随机裁剪的部分片段帧数min_pad_coverage0.75部分片段中至少 75% 音频有效partial_overlap_ratio0.5相邻 partial 片段的重叠比例预处理完成后dump目录即可直接作为训练数据输入。模型训练GE2E 编码器训练./local/train.shexamples/other/ge2e/local/train.sh调用${BIN_DIR}/train.pyCUDA_VISIBLE_DEVICES${gpus} ./local/train.sh ${preprocess_path} ${train_output_path}train.pypaddlespeech/vector/exps/ge2e/train.py的参数--data预处理后的数据集路径preprocess_path--output结果保存目录通常为runs的子目录。内含 visualdl 日志、文本日志、config 文件以及checkpoints目录保存参数文件与优化器状态文件。若--output已存在训练结果训练前会自动加载最近的参数与优化器状态继续训练自动恢复--ngpu使用的 GPU 数量ngpu 0时使用 CPUngpu 1时通过dist.spawn启动多进程分布式训练见 train.py#L104-L108CUDA_VISIBLE_DEVICES环境变量用于指定可见 GPU 设备。其余参数train.py与inference.py通用--config一个.yaml配置文件用于覆盖默认配置默认配置编码在config.py中--opts命令行级配置覆盖必须以KEY VALUE键值对形式作为最后一个命令行参数传入--checkpoint_path训练前加载的 checkpoint 路径不含扩展名同名.pdparams参数与.pdopt优化器状态会被一并加载。该选项优先级高于--output目录的自动恢复。数据采样与训练循环训练数据集由MultiSpeakerMelDatasetspeaker_verification_dataset.py读取两级目录中的.npymel 频谱MultiSpeakerSampler源码按「先随机采样 N 个说话人、再为每个说话人随机采样 M 条语句」的方式构造 batch——这正是 GE2E 训练所需的 N×M 结构。Collate中的RandomClip会对每条语句随机裁剪partial_n_frames160帧保证片段长度一致并增加数据多样性。训练默认配置config.py配置项默认值说明learning_rate_init1e-4初始学习率Adam 优化器梯度全局范数裁剪为 3speakers_per_batch64每个 batch 的说话人数 Nutterances_per_speaker10每个说话人的语句数 Mmax_iteration1560000最大迭代步数save_interval10000每多少步保存一次 checkpoint如step-10000valid_interval10000验证间隔每个训练 step 会同时记录train/loss、train/eer以及可学习的similarity_weight/similarity_bias到 visualdl便于监控收敛train.py#L83-L91。此外do_gradient_ops会对相似度参数w、b的梯度乘以 0.01 做收缩防止这两个尺度参数被优化得过快。推理为每条语句生成说话人嵌入./local/inference.shexamples/other/ge2e/local/inference.sh调用${BIN_DIR}/inference.pyCUDA_VISIBLE_DEVICES${gpus} ./local/inference.sh ${infer_input} ${infer_output} ${train_output_path} ${ckpt_name}inference.pypaddlespeech/vector/exps/ge2e/inference.py的参数--input用于推理的数据集音频文件夹路径--output结果保存目录与输入保持相同的文件结构输入中的每条语句对应一个*.npy嵌入文件--checkpoint_path要加载的 checkpoint 路径不含扩展名实际读取*.pdparams--pattern过滤音频文件的通配符默认为*.wav--ngpuGPU 数量ngpu 0时使用 CPU。推理流程为SpeakerVerificationPreprocessor对每条 wav 做预处理并切分 mel partial →LSTMSpeakerEncoder.embed_utterance在paddle.no_grad()下输出 256 维嵌入 →np.save保存到与输入路径对应的.npyinference.py#L26-L50。预训练模型与下游应用官方预训练模型ge2e_ckpt_0.3.zip的训练过程为先在Librispeech-other-500 与 VoxCeleb1上训练至 1560k 步再在aidatatang_200zh 与 magicdata上继续训练至 3000k 步即 checkpoint 名为step-3000000。下载解压后目录中包含.pdparams参数文件等在 examples/aishell3/vc0/run.sh 中ge2e_ckpt_path./ge2e_ckpt_0.3/step-3000000且ge2e_params_path${ge2e_ckpt_path}.pdparams。该模型在多说话人 TTS 中的典型用法见 examples/aishell3/vc0/README.md生成嵌入vc0 的local/preprocess.sh直接调用本实验的paddlespeech/vector/exps/ge2e/inference.py为 AISHELL-3 每句话生成 speaker embedding输出到dump/embed与 wav 同结构、.npy格式拼接输入训练 Tacotron2 时设置--voice-cloningTrue将这些嵌入与编码器输出拼接使合成器感知说话人身份克隆推理local/voice_cloning.sh通过--ge2e_params_path传入 GE2E 参数给定任意参考音频即可提取说话人嵌入并合成对应音色的语音。由此完成「说话人验证 → 多说话人 TTS」的迁移学习闭环本实验产出的声纹编码器正是整条 Voice Cloning 链路可用的说话人身份提取器。参考Generalized End-to-end Loss for Speaker VerificationarXiv:1710.10467Transfer Learning from Speaker Verification to Multispeaker Text-To-Speech SynthesisarXiv:1806.04558赞分享人工智能语音音频【免费下载链接】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点击查看免费下载相关推荐FanControl中文界面实操4步完成3套散热曲线的完整配置FanControl中文界面实操4步完成3套散热曲线的完整配置 FanControl 是一款 Windows 平台的免费风扇控制软件实时读取 CPU、GPU人工智能语音音频NLP媒体生成PaddleSpeech GE2E 说话人验证训练模块解析从 Ge2eExperiment 到 GE2E-Softmax 损失的完整训练链路PaddleSpeech GE2E 说话人验证训练模块解析从 Ge2eExperiment 到 GE2E Softmax 损失的完整训练链路 本文以 Padd人工智能语音音频PowerShell 7.0 发布周期全解从 preview.1 到 7.0.13 的 LTS 长期服务版演进实录PowerShell 7.0 发布周期全解从 preview.1 到 7.0.13 的 LTS 长期服务版演进实录 本文基于仓库中的 CHANGELOG/7.人工智能语音音频NLP媒体生成上一篇终极Mihon字体渲染优化指南7个技巧让漫画文字更清晰下一篇XposedRimetHelperAndroid Hook机制下的钉钉虚拟定位技术深度剖析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表