
人工智能语音音频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/voxceleb/sv0 示例为主线完整讲解如何在 VoxCeleb1/VoxCeleb2 数据集上从数据处理、模型训练到说话人验证Speaker Verification评测的端到端流程。读完本文你将掌握run.sh各阶段脚本的用法、ECAPA-TDNN 模型与 AAM-Softmax 损失的核心配置、Cosine S-Norm 打分机制并能够基于预训练模型复现公开评测结果。示例总览sv0 的三阶段流水线该示例的核心脚本是run.sh全部训练、测试逻辑都由它串联。脚本通过stage与stop_stage两个变量控制执行区间共包含三个功能阶段Stage功能0数据处理下载 VoxCeleb1 / VoxCeleb2 数据集将 VoxCeleb2 的 m4a 转为 wav生成 train、development、test 数据集的 manifest 文件下载 RIR Noise 数据集并生成用于数据增强的噪声 manifest 文件1训练说话人识别模型ECAPA-TDNN2使用 VoxCeleb trial 文件评测说话人验证指标EER从run.sh的源码可以看到三个阶段分别调用local/data.sh、local/train.sh和local/test.shif [ $stage -le 0 ] [ ${stop_stage} -ge 0 ]; then # stage 0: data prepare for vox1 and vox2, vox2 must be converted from m4a to wav bash ./local/data.sh ${dir} ${conf_path}|| exit -1; fi if [ $stage -le 1 ] [ ${stop_stage} -ge 1 ]; then # stage 1: train the speaker identification model CUDA_VISIBLE_DEVICES${gpus} bash ./local/train.sh ${dir} ${exp_dir} ${conf_path} fi if [ $stage -le 2 ] [ ${stop_stage} -ge 2 ]; then # stage 2: get the speaker verification scores with cosine function CUDA_VISIBLE_DEVICES0 bash ./local/test.sh ${dir} ${exp_dir} ${conf_path} fi如果你想同时执行 stage 1 和 stage 2可运行bash run.sh --stage 1 --stop_stage 2如果只想运行某一个阶段将stage与stop_stage设为相同值即可。例如只做数据处理bash run.sh --stage 0 --stop_stage 0注意run.sh头部注释提示VoxCeleb2 数据集以 m4a 格式存储需要自行将音频从 m4a 转换为 wav并放置到${MAIN_ROOT}/datasets/vox2脚本会在${MAIN_ROOT}/datasets/vox1/{dev,test}/wav与${MAIN_ROOT}/datasets/vox2/wav中查找音频。run.sh中还预留了 stage 3提取训练嵌入以训练 LDA/PLDA 打分器的注释位目前尚未实现现阶段仅支持 Cosine 打分。环境准备path.sh 与 parse_options.sh运行任何脚本之前需要先加载环境变量。path.sh负责设置 PaddleSpeech 根目录、PATH 与 PYTHONPATHsource 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} export LD_LIBRARY_PATH${LD_LIBRARY_PATH}:/usr/local/lib/ MODELecapa_tdnn export BIN_DIR${MAIN_ROOT}/paddlespeech/vector/exps/${MODEL}MAIN_ROOT被解析为 PaddleSpeech 仓库根目录相对examples/voxceleb/sv0向上三级BIN_DIR指向paddlespeech/vector/exps/ecapa_tdnn其中存放着train.py、test.py、extract_emb.py三个入口脚本同时需要加载参数解析工具source ${MAIN_ROOT}/utils/parse_options.sh它让所有 shell 脚本支持--variable value形式的命令行传参如--stage 1 --stop_stage 2。局部变量如何控制本次实验run.sh顶部定义了一批局部变量它们既可以直接修改也可以在命令行通过--key value覆盖变量含义默认值gpus使用的 GPU 编号设为空字符串gpus表示仅用 CPU0,1,2,3stage实验起始阶段编号0stop_stage实验结束阶段编号50dir数据信息存放目录data/exp_dir实验目录如exp/ecapa-tdnn-vox12-big/checkpoint 保存在此exp/ecapa-tdnn-vox12-big/conf_path模型配置文件路径conf/ecapa_tdnn.yaml例如指定使用两块 GPU 训练bash run.sh --gpus 0,1run.sh执行时会自动mkdir -p ${exp_dir}创建实验目录。Stage 0数据处理全流程数据处理是训练的前提。local/data.sh内部又细分为 8 个子阶段内部stage从 0 到 7并接受两个位置参数data-dir数据信息目录与conf-path配置文件用法如bash ./local/data.sh ./data/ conf/ecapa_tdnn.yaml各内部阶段的作用如下stage 1 — 下载 VoxCeleb1 并生成 manifest调用${MAIN_ROOT}/dataset/voxceleb/voxceleb1.py指定--manifest_prefix${dir}/vox1/manifest与--target_dir生成manifest.dev148642 条与manifest.test4847 条stage 2 — 下载 VoxCeleb2调用voxceleb2.py --download将 m4a 文件下载到${TARGET_DIR}/voxceleb/vox2/{dev,test}stage 3 — m4a 转 wav调用bash local/convert.sh ${TARGET_DIR}/voxceleb/vox2/转换后保留原始 m4a 文件stage 4 — 生成 VoxCeleb2 manifest调用voxceleb2.py --generate由于 VoxCeleb2 全部用于训练所有数据汇总为一个manifest.vox2文件stage 5 — 生成 CSV 数据集调用local/make_vox_csv_dataset_from_json.py将 JSON 格式 manifest 转为训练系统直接消费的 CSV 格式分别生成train.csv、dev.csv、enroll.csv、test.csvstage 6 — 生成 RIR Noise manifest调用${TARGET_DIR}/rir_noise/rir_noise.py生成manifest.pointsource_noises、manifest.real_rirs_isotropic_noises、manifest.simulated_rirsstage 7 — 生成 RIR Noise CSV调用local/make_rirs_noise_csv_dataset_from_json.py生成noise.csv与rir.csv供数据增强流水线使用。数据处理完成后data目录结构如下data/ ├── rir_noise │ ├── csv │ │ ├── noise.csv │ │ └── rir.csv │ ├── manifest.pointsource_noises │ ├── manifest.real_rirs_isotropic_noises │ └── manifest.simulated_rirs ├── vox │ ├── csv │ │ ├── dev.csv │ │ ├── enroll.csv │ │ ├── test.csv │ │ └── train.csv │ └── meta │ └── label2id.txt └── vox1 ├── list_test_all2.txt ├── list_test_all.txt ├── list_test_hard2.txt ├── list_test_hard.txt ├── manifest.dev ├── manifest.test ├── veri_test2.txt ├── veri_test.txt ├── voxceleb1.dev.meta └── voxceleb1.test.meta如果只想处理数据可以单独执行source path.sh bash ./local/data.shStage 1ECAPA-TDNN 模型训练local/train.sh接收三个参数data-dir、exp-dir、conf-path。它会根据CUDA_VISIBLE_DEVICES自动统计 GPU 数量并决定训练设备当use_gputrue且有 GPU 时通过paddle.distributed.launch启动多卡训练否则回退到 CPU 单进程训练if $use_gpu; then python3 -m paddle.distributed.launch --gpus$CUDA_VISIBLE_DEVICES \ ${BIN_DIR}/train.py --device ${device} --checkpoint-dir ${exp_dir} \ --data-dir ${dir} --config ${conf_path} else python3 \ ${BIN_DIR}/train.py --device ${device} --checkpoint-dir ${exp_dir} \ --data-dir ${dir} --config ${conf_path} fi训练好的模型参数会以软链接形式出现在${exp_dir}/model.pdparams日志存放在exp/log目录。训练入口与数据流训练入口是 paddlespeech/vector/exps/ecapa_tdnn/train.py其关键流程为paddle.set_device(args.device)设置 CPU/GPU 设备并调用paddle.distributed.init_parallel_env()初始化分布式环境通过seed_everything(config.seed)设置随机种子保证多进程训练可复现使用CSVDataset加载data/vox/csv/train.csv与dev.csv配合label2id.txt完成说话人 ID 映射若配置augment: True则通过build_augment_pipeline(target_dirargs.data_dir)构建噪声与 RIR 增强流水线对应 stage 0 中生成的rir_noise数据实例化骨干网络EcapaTdnn(**config.model)构建SpeakerIdetification训练实例使用AdditiveAngularMarginAAM-Softmax损失与LogSoftmaxWrapper封装使用CyclicLRScheduler循环学习率调度器进行训练。ECAPA-TDNN 模型结构模型实现位于 paddlespeech/vector/models/ecapa_tdnn.py。EcapaTdnn类注释明确引用论文《ECAPA-TDNN: Emphasized Channel Attention, Propagation and Aggregation in TDNN Based Speaker Verification》arXiv:2005.07143。从构造函数与forward可以看出其完整的结构层次初始 TDNN 层TDNNBlock(input_size, channels[0], kernel_sizes[0], dilations[0])将 80 维 fbank 特征映射到首层通道SE-Res2Net 层对channels[1:-1]逐层构建SERes2NetBlock每个块内部包含 Res2Net 多尺度卷积与 SESqueeze-Excitation通道注意力卷积采用 reflect padding 的same填充多层特征聚合MFA将各 block 输出paddle.concat(xl[1:], axis1)后送入TDNNBlock实现跨层特征融合注意力统计池化ASPAttentiveStatisticsPooling在时间维上加权聚合均值与标准差输出维度翻倍后经BatchNorm1d最终线性变换Conv1d(channels[-1]*2, emb_size, kernel_size1)输出固定维度的说话人嵌入形状为(N, emb_size, 1)。该实现中还封装了自定义Conv1d在 NPU 设备上强制使用constant填充模式因为 NPU 目前仅支持该模式体现了对不同硬件后端的适配。损失函数AAM-Softmax训练使用加性角度间隔损失。paddlespeech/vector/modules/loss.py中的AdditiveAngularMargin在余弦相似度基础上减去 margin 再乘 scale配合LogSoftmaxWrapper计算带 log-softmax 的损失对应配置中的margin: 0.2与scale: 30。训练配置详解训练所依赖的完整配置见 conf/ecapa_tdnn.yaml各参数说明如下数据相关参数值说明augmentTrue是否启用 RIR/噪声数据增强batch_size32训练 batch 大小num_workers2DataLoader 工作进程数num_speakers7205训练说话人数VoxCeleb1 1211 VoxCeleb2 5994测试说话人 41shuffleTrue是否打乱数据split_ratio0.9训练/验证集切分比例chunk_duration3.0每个训练样本的音频时长秒random_chunkTrue是否随机截取音频片段verification_filedata/vox1/veri_test2.txt说话人验证 trial 文件路径特征提取当前仅支持 fbank参数值说明sr16000采样率n_mels80Mel 滤波器组数量window_size400窗长 25ms400 25 × 16000 / 1000hop_size160帧移 10ms160 10 × 16000 / 1000模型结构对应EcapaTdnn.__init__的默认参数参数值说明input_size80输入特征维度与n_mels一致channels[1024, 1024, 1024, 1024, 3072]各层通道数kernel_sizes[5, 3, 3, 3, 1]各层卷积核大小dilations[1, 2, 3, 4, 1]各层膨胀率attention_channels128注意力统计池化的注意力维度lin_neurons192说话人嵌入维度训练超参数参数值说明seed1986随机种子与 SpeechBrain 配置一致epochs10训练轮数save_interval10保存 checkpoint 的间隔log_interval10打印日志的间隔learning_rate1e-8循环学习率下限max_lr1e-3循环学习率峰值step_size140000学习率循环步长损失函数参数值说明margin0.2AAM-Softmax 的角度间隔scale30余弦相似度的缩放因子若硬件资源有限仓库还提供了轻量版配置 conf/ecapa_tdnn_small.yaml其区别在于num_speakers为 1211仅使用 VoxCeleb1 训练channels缩小为[512, 512, 512, 512, 1536]epochs增至 100适合在单一数据集上快速验证。Stage 2说话人验证评测local/test.sh同样接收三个参数data-dir、exp-dir、conf-path调用 paddlespeech/vector/exps/ecapa_tdnn/test.py 完成评测python3 ${BIN_DIR}/test.py \ --data-dir ${dir} \ --load-checkpoint ${exp_dir} \ --config ${conf_path} \ --device ${device}test.py的核心评测逻辑计算嵌入遍历 trial 涉及的 enroll/test 数据通过model.backbone(feats, lengths)提取(N, emb_size, 1)的说话人嵌入并 squeeze 成(N, emb_size)全局嵌入归一化若配置global_embedding_norm: True则通过InputNormalization对嵌入做均值-方差归一化——注释指出该操作可使 EER 相对降低约 10%Cosine 打分读取verification_file每行格式为label enroll_id test_id使用paddle.nn.CosineSimilarity计算注册语音与测试语音的余弦相似度得分S-Norm 打分归一化当配置score_norm: s-norm时用cohort_size: 20000个冒名imposter语句构成的 cohort 计算归一化统计量对得分进行对称归一化EER 计算基于sklearn.metrics.roc_curve计算等错误率Equal Error RateEER输出最终的说话人验证指标。测试相关配置项说明参数值说明global_embedding_normTrue是否做全局嵌入归一化embedding_mean_normTrue是否做均值归一化embedding_std_normFalse是否做标准差归一化score_norms-norm打分归一化方式cohort_size20000归一化 cohort 中的冒名语句数量n_train_snts400000计算归一化统计量使用的训练语句数预训练模型与结果复现下载与解压预训练模型列表见 released_model.md其中 ECAPA-TDNNVoxCeleb对应的模型包为sv0_ecapa_tdnn_voxceleb12_ckpt_0_2_1.tar.gz。下载解压后即可评测wget https://paddlespeech.cdn.bcebos.com/vector/voxceleb/sv0_ecapa_tdnn_voxceleb12_ckpt_0_2_1.tar.gz tar -xvf sv0_ecapa_tdnn_voxceleb12_ckpt_0_2_1.tar.gz source path.sh # 若已完成数据处理并生成 manifest 文件可跳过下面两步中的数据处理步骤 CUDA_VISIBLE_DEVICES bash ./local/test.sh ./data sv0_ecapa_tdnn_voxceleb12_ckpt_0_2_1/model/ conf/ecapa_tdnn.yaml注意local/test.sh的位置参数依次是data-dir、exp-dir、conf-path解压后的模型目录即作为实验目录传入。评测结果仓库在 examples/voxceleb/sv0/RESULT.md 中给出了已发布模型的性能ModelNumber of ParamsReleaseConfigdimTest setCosineCosine S-NormECAPA-TDNN85M0.2.1conf/ecapa_tdnn.yaml192test0.81880.7815表中 EER 为百分比值越小越好在 test 集上纯 Cosine 打分的 EER 为 0.8188%叠加 S-Norm 后降至 0.7815%验证了 S-Norm 对说话人验证性能的提升效果。小结examples/voxceleb/sv0提供了一条完整、可复现的 ECAPA-TDNN 声纹识别链路run.sh通过 stage 机制将「数据准备 → 模型训练 → 说话人验证评测」串成流水线conf/ecapa_tdnn.yaml集中了特征、模型、训练、损失与打分归一化的全部可调参数训练与测试分别由 train.py 与 test.py 驱动。无论是从零训练、微调还是直接加载预训练模型做推理验证都可以在本示例基础上快速展开。赞分享人工智能语音音频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点击查看免费下载相关推荐SpeechBrain 说话人识别与验证实战基于 VoxCeleb 训练 X-Vector、ECAPA-TDNN 与 ResNet 嵌入SpeechBrain 说话人识别与验证实战基于 VoxCeleb 训练 X Vector、ECAPA TDNN 与 ResNet 嵌入 本篇技术指南以 Sp人工智能深度学习语音音频NLP预训练Llama-3.2-1B部署全攻略从云端GPU到Android设备的无缝迁移方案Llama 3.2 1B部署全攻略从云端GPU到Android设备的无缝迁移方案 Llama 3.2 1B作为Meta推出的轻量级开源大语言模型凭借12.3人工智能语音音频PaddleSpeech 声纹识别实战使用 ECAPA-TDNN 提取说话人嵌入PaddleSpeech 声纹识别实战使用 ECAPA TDNN 提取说话人嵌入 声纹识别Speaker Verification是一项用计算机程序自动提人工智能语音音频NLP媒体生成上一篇ncmdumpGUI三步解锁网易云加密音乐实现跨平台播放自由下一篇CowAgent 微信公众号 Channel 实战部署、被动回复缓存机制与多媒体交互全解析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考