ARTICLE DETAIL

资讯详情

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

PaddleSpeech TESS 音频情绪分类实战:基于 PANNs CNN14 微调与 paddle.audio 特征/后端模块验证

PaddleSpeech TESS 音频情绪分类实战:基于 PANNs CNN14 微调与 paddle.audio 特征/后端模块验证 人工智能语音音频【免费下载链接】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点击查看免费下载TESSToronto Emotional Speech Set音频情绪分类是 PaddleSpeech 仓库中的经典入门示例其核心目的有两个一是演示如何基于 PANNsPANNs: Large-Scale Pretrained Audio Neural Networks for Audio Pattern Recognition基于 AudioSet 预训练的 CNN14 模型进行 7 分类情绪识别微调二是借这一任务系统性地校验 paddle.audio 的 feature、backend 等底层音频模块。读完本文你将掌握 PaddleSpeech 中从数据加载、特征提取、模型微调到 5-fold 评估的完整训练流程并理解四个特征配置mfcc / logmelspectrogram / melspectrogram / spectrogram的差异与调参要点。背景与实验定位本实验对应仓库路径 examples/tess采用 PaddleSpeech 提供的 PANNs CNN14 预训练模型在 TESS 数据集上进行 finetune完成音频情绪分类Audio Classification任务。从目录结构看这是一个独立的 cls 示例工程examples/tess/ ├── README.md # 实验说明本文主体 └── cls0/ ├── conf/ # 4 套特征配置 yaml ├── local/ # train.py / train.sh 等训练脚本 ├── path.sh # 环境变量与路径配置 └── run.sh # 多 stage 入口脚本需要特别说明的是本实验同时承担着校验与测试paddle.audio的 feature、backend 等模块的任务。训练脚本中显式执行了paddle.audio.backends.set_backend(soundfile)见 train.py并依赖paddle.audio.datasets:TESS数据集类完成数据下载、5-fold 划分与在线特征提取是理解 PaddleSpeech 音频工具链的典型入口。数据集TESS 情绪语音集TESSToronto emotional speech set是一个面向情绪识别研究的英文语音数据集包含200 个目标词每个词的语音时长为23 秒由两位女演员24 岁与 64 岁录制覆盖7 种情绪愤怒angry、恶心disgust、害怕fear、高兴happy、惊喜pleasant surprise、伤心sad、平淡neutral总计 2800 条语音刺激。在 PaddleSpeech 中该数据集被封装为paddle.audio.datasets:TESS实现在 audio/paddleaudio/datasets/tess.py。从源码可以确认以下关键实现事实自动下载与解压首次使用时若本地不存在数据会自动从对象存储下载TESS_Toronto_emotional_speech_set.zipmd5 校验值1465311b24d1de704c4c63e4ccc470c7并解压到DATA_HOME目录7 类标签顺序label_list [angry, disgust, fear, happy, neutral, ps, sad]其中ps表示 pleasant surprise文件名即元信息音频文件名格式为speaker_word_emotion通过_get_meta_info解析出说话人、目标词与情绪三类元信息5-fold 划分机制构造函数接收modetrain/dev、n_folds默认 5、split指定 dev 所在的 fold默认 1与seed默认 0用于先打乱样本再切分modetrain取除 split 之外的所有 foldmodedev仅取 split 指定的 fold。训练与 dev 使用相同 seed 保证划分一致。模型PANNs CNN14 与 SoundClassifier 分类头PANNs 是基于 AudioSet 大规模数据集训练的声音分类/识别模型预训练后可以用于提取音频的 embedding。本示例使用其 CNN14 结构进行迁移学习CNN14 主要由12 个卷积层 2 个全连接层构成具体为 6 个卷积块ConvBlock每块含 2 个 3×3 卷积通道数依次为 64 → 128 → 256 → 512 → 1024 → 2048模型参数量约79.6Membedding 维度为 2048。对应实现位于 paddlespeech/cls/models/panns/panns.py。源码层面可以补充的细节每个卷积块后使用平均池化pool_typeavg前五块pool_size(2, 2)最后一块(1, 1)并在各块间施加p0.2的 dropout全局特征聚合采用mean(axis3)后叠加max mean的时序池化策略再经fc1投影到 2048 维 embeddingextract_embeddingTrue时输出 embedding供下游分类头使用否则走fc_audioset输出 AudioSet 的 527 类 sigmoid 预测模型类属性emb_size 2048供分类头直接读取输入维度。微调时train.py 以backbone_class(pretrainedTrue, extract_embeddingTrue)实例化 CNN14再包一层SoundClassifier见 paddlespeech/cls/models/panns/classifier.pybackbone 输出经nn.Dropout(0.1)后接一个nn.Linear(2048, num_class)全连接层映射到 7 个情绪类别交叉熵损失 Adam 优化器端到端微调。模型指标5-fold 微调 dev 准确率根据 TESS 提供的 fold 信息对数据集进行5-fold的 fine-tune 训练与评估不同特征类型的 dev 准确率对比如下来自 examples/tess/README.md| Model | feat_type | Acc | note | |--|--|--| -- | | CNN14 | mfcc | 0.9929 | 3 epoch | | CNN14 | logmelspectrogram | 0.9983 | 3 epoch | | CNN14 | spectrogram | 0.95 | 11 epoch | | CNN14 | melspectrogram | 0.9375 | 17 epoch |从表中可以观察到两个重要结论其一CNN14 在本任务上整体准确率都很高0.94 以上说明 AudioSet 预训练 embedding 对情绪分类具有很强的可迁移性其二不同特征在收敛速度与最终精度上存在差异——logmelspectrogram 以 3 epoch 取得 0.9983 的 dev 准确率是该任务上效果最好且收敛最快的特征组合。需注意表格中的 epoch 数来自 README 记录的历史实验配置仓库内当前配置文件的 epochs 值见下节与之不完全一致实际复现时应以配置文件为准。快速开始run.sh 四阶段脚本训练入口为 examples/tess/cls0/run.sh通过 stage 参数控制流程支持 4 个阶段| stage | 功能 | 参数 | |--|--|--| | 1 | 训练train |./run.sh 1 conf.yaml| | 2 | 推理infer |./run.sh 2 conf.yaml| | 3 | 模型导出export |./run.sh 3 ckpt output_dir| | 4 | 静态模型推理static_model_infer |./run.sh 4 infer_device graph_dir audio_file|原文档给出的训练启动命令需先在examples/tess/cls0目录下执行$ CUDA_VISIBLE_DEVICES0 ./run.sh 1 conf/panns_mfcc.yaml $ CUDA_VISIBLE_DEVICES0 ./run.sh 1 conf/panns_logmelspectrogram.yaml $ CUDA_VISIBLE_DEVICES0 ./run.sh 1 conf/panns_melspectrogram.yaml $ CUDA_VISIBLE_DEVICES0 ./run.sh 1 conf/panns_spectrogram.yaml脚本会先source path.sh加载环境path.sh将仓库根目录及其utils目录加入PATH与PYTHONPATH并把MODELpanns对应的paddlespeech/cls/exps/panns目录设为BIN_DIR同时设置LC_ALLC、PYTHONIOENCODINGUTF-8以避免中文环境下的解码问题。GPU 数量由CUDA_VISIBLE_DEVICES环境变量自动推断ngpu$(echo $CUDA_VISIBLE_DEVICES | awk -F , {print NF})当ngpu 0时train.sh 通过python3 -m paddle.distributed.launch --gpus $CUDA_VISIBLE_DEVICES local/train.py启动分布式多卡训练否则直接单进程运行python3 local/train.py见 train.sh。配置文件详解四种特征方案四个配置文件共享同一套结构差异仅在feature段的特征类型与关键参数。以 panns_mfcc.yaml 为例完整配置如下data: dataset: paddle.audio.datasets:TESS num_classes: 7 train: mode: train split: 1 feat_type: mfcc dev: mode: dev split: 1 feat_type: mfcc model: backbone: paddlespeech.cls.models:cnn14 feature: n_fft: 1024 hop_length: 320 window: hann win_length: 1024 f_min: 50.0 f_max: 14000.0 n_mfcc: 64 n_mels: 64 training: epochs: 5 learning_rate: 0.0005 num_workers: 2 batch_size: 128 checkpoint_dir: ./checkpoint_mfcc save_freq: 1 log_freq: 1四个配置的要点对比| 配置项 | panns_mfcc | panns_logmelspectrogram | panns_melspectrogram | panns_spectrogram | |--|--|--|--|--| | feat_type | mfcc | logmelspectrogram | melspectrogram | spectrogram | | n_fft | 1024 | 1024 | 1024 |126| | hop_length | 320 | 320 | 320 | 320 | | window | hann | hann | hann | hann | | win_length | 1024 | 1024 | 1024 | — | | f_min / f_max | 50.0 / 14000.0 | 50.0 / 14000.0 | 50.0 / 14000.0 | — | | n_mfcc / n_mels | 64 / 64 | — / 64 | — / 64 | — | | epochs | 5 | 5 | 10 | 10 |对参数的源码级解读dataset: paddle.audio.datasets:TESS与backbone: paddlespeech.cls.models:cnn14采用dynamic_import字符串寻址机制见 paddlespeech/utils/dynamic_import.py训练脚本据此动态加载数据集类与模型类无需修改代码即可切换组件split: 1对应 5-fold 中的第 1 折作为 dev其余 4 折用于训练可通过更换 split 值或 n_folds 参数做交叉验证n_fft / hop_length / win_length / window是 STFT 参数1024 点 FFT、320 点 hop、hann 窗。spectrogram 配置的n_fft: 126明显小于其他方案对应更短的频谱帧这也解释了其需要更多 epochREADME 记录为 11 epoch才能达到 0.95 的准确率f_min / f_max为 mel 滤波器组的频率范围50 Hz14 kHz仅对 mfcc / mel 类特征生效n_mels: 64同时是 mel 滤波器组数量和 CNN14 输入通道数——从源码可见 CNN14 第一层bn0 BatchNorm2D(64)、conv_block1输入通道为 1即 mel 频谱的 64 个频带经 unsqueeze 后作为单通道输入n_mfcc: 64指定 mfcc 的倒谱系数个数四个配置均把特征维数对齐到 64保证与预训练模型输入分布一致training段统一使用learning_rate: 0.0005、batch_size: 128、num_workers: 2checkpoint_dir按特征类型区分如./checkpoint_mfccsave_freq: 1表示每个 epoch 保存一次 checkpointlog_freq: 1表示每个 batch 打印一次训练日志。训练实现解析从数据加载到评估train.py 是完整的主训练脚本其核心流程与 paddle.audio / paddle 生态的对接点包括后端设置paddle.audio.backends.set_backend(soundfile)指定音频解码后端需保证 paddleaudio 版本 1.0.2这是本实验校验 backend 模块的关键一步数据集与特征数据集类在构造时即按feat_type在线提取特征mfcc / logmelspectrogram / melspectrogram / spectrogramfeat_conf中的 STFT 与 mel 参数直接透传给数据类变长 batch 处理_collate_features将(n_mels, length)的特征转置为(length, n_mels)按最长样本 pad 到相同长度返回(feats, labels, lengths)三元组供模型按(N, length, n_mels)输入分布式采样使用paddle.io.DistributedBatchSamplershuffleTrue, drop_lastFalse构造 train_loader多卡场景下paddle.distributed.init_parallel_env()初始化并行环境模型经paddle.DataParallel包装训练循环Adamlr0.0005 CrossEntropyLoss每个 batch 计算logits - loss - backward - step并累计acc num_corrects / num_samples按log_freq输出 loss、acc、lr 与 step/sec、ETA周期评估与保存每个save_freq的 epoch 结束时在 dev 集上评估并打印dev_acc随后将模型参数与优化器状态分别保存为model.pdparams/model.pdopt到checkpoint_dir/epoch_{n}/目录。小结TESS 示例以极小的数据集2800 条、23 秒语音完整走通了 PaddleSpeech 音频分类的数据下载 → 特征提取 → 预训练模型微调 → 5-fold 评估全链路既是 PANNs CNN14 迁移学习的低成本验证平台也是 paddle.audio 特征与后端模块的回归测试载体。若要在实际项目中使用可直接复用 examples/tess/cls0 的脚本与配置结构将dataset替换为 paddle.audio 支持的其他分类数据集如 ESC-50、GTZAN 等并参考 paddlespeech/cls 目录下 exp 与 models 的组织方式扩展自己的分类任务。赞分享人工智能语音音频【免费下载链接】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点击查看免费下载相关推荐Play Integrity Fix终极指南3步轻松修复Android设备认证问题Play Integrity Fix终极指南3步轻松修复Android设备认证问题 你是否遇到过银行应用突然闪退、支付软件无法使用或热门游戏提示设备不兼容的情人工智能语音音频NLP媒体生成PaddleSpeech 中的 PANNs 音频分类骨干网络CNN14/CNN10/CNN6 源码解析与实战PaddleSpeech 中的 PANNs 音频分类骨干网络CNN14/CNN10/CNN6 源码解析与实战 导读 本文聚焦飞桨 PaddleSpeech 音人工智能语音音频NLP媒体生成PaddleSpeech 中的 PANNs 音频分类模型panns 模块架构解析与训练部署实战PaddleSpeech 中的 PANNs 音频分类模型panns 模块架构解析与训练部署实战 导读 本文围绕 PaddleSpeech 音频分类Audio人工智能语音音频上一篇完整指南mermaid-ascii Diagram 接口设计深析——Parse/Render/Type 三方法如何搞定终端绘图下一篇如何轻松下载快手无水印视频面向新手的完整指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表