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),仅供参考

相关新闻

E-Hentai Downloader 用户脚本:批量下载与 ZIP 打包实操指南

E-Hentai Downloader 用户脚本:批量下载与 ZIP 打包实操指南

1. 从零理解 E-Hentai Downloader 的定位与核心价值E-Hentai Downloader 是一个运行在浏览器里的用户脚本(UserScript),专门用来把 E-Hentai 画廊里的图片批量抓取下来,打包成 ZIP 压缩包保存到本地。它的核心价值在于把原本需要一…

2026/9/25 13:24:48 阅读更多 →
Python-列表与序列

Python-列表与序列

一、什么是序列?序列(Sequence) 有序、可按索引访问的数据类型。Python 中常见的序列:类型可变?语法字符串 str❌hello列表 list✅[1, 2, 3]元组 tuple❌(1, 2, 3)序列通用操作(str、list、tuple 都支持&a…

2026/9/25 13:24:48 阅读更多 →
UE5 Niagara粒子系统:GPU模拟、数据接口与性能优化实战

UE5 Niagara粒子系统:GPU模拟、数据接口与性能优化实战

1. Niagara 粒子系统的核心架构与设计思路Niagara 是 UE5 里负责粒子特效和视觉模拟的核心模块,它跟老一代的 Cascade 完全不是一个量级的东西。Cascade 本质上是一个固定管线的粒子编辑器,你只能在预设的模块里调参数;Niagara 则把整个系统拆…

2026/9/25 13:24:48 阅读更多 →

最新新闻

AI时代开发者进化论:用TaoToken统一Key打通Claude Code与Agent工作流,像CEO一样指挥“一人军队”

AI时代开发者进化论:用TaoToken统一Key打通Claude Code与Agent工作流,像CEO一样指挥“一人军队”

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/25 14:02:21 阅读更多 →
openclaw 接入 minimax 的 config.toml 骨架与 TaoToken 统一 Key 配置

openclaw 接入 minimax 的 config.toml 骨架与 TaoToken 统一 Key 配置

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/25 14:02:21 阅读更多 →
EasyClick AI全自动编程,AI IDE选型真难?TaoToken统一Key接入配置实战

EasyClick AI全自动编程,AI IDE选型真难?TaoToken统一Key接入配置实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/25 14:02:20 阅读更多 →
如何让 LLM 通过反思提升 SQL 正确率:以 Gemini + sqlite 为例,配 TaoToken 统一 Key 跑通 Agent Reflection

如何让 LLM 通过反思提升 SQL 正确率:以 Gemini + sqlite 为例,配 TaoToken 统一 Key 跑通 Agent Reflection

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/25 14:02:20 阅读更多 →
2026 国际写作竞赛盘点:用 TaoToken 统一 Key 打通 AI 辅助写作工作流

2026 国际写作竞赛盘点:用 TaoToken 统一 Key 打通 AI 辅助写作工作流

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/25 14:02:20 阅读更多 →
Linux下Eclipse安装与TaoToken配置:从环境准备到settings.json骨架

Linux下Eclipse安装与TaoToken配置:从环境准备到settings.json骨架

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/25 14:01:20 阅读更多 →

日新闻

AI元人文:从工具使用到思维重构的深度探索

AI元人文:从工具使用到思维重构的深度探索

最近半年我一直在琢磨一件事:AI元人文到底是什么?说白了,就是“用元视角重新审视人与AI的关系”,也在“探索AI如何反向逼着我们发现自己的思考边界”。标题里的“元探索”,在我看就是一层套一层的追问——当你用AI解决…

2026/9/25 0:00:41 阅读更多 →
Python+CNN车牌识别实战:从数据预处理到模型训练与部署

Python+CNN车牌识别实战:从数据预处理到模型训练与部署

简介:基于Python与卷积神经网络的车牌识别项目,面向计算机视觉初学者及智能交通开发者,目标是帮助用户掌握从数据预处理、模型构建到实际部署的完整流程。压缩包共25个文件,包含jpg/png图像样本、py训练脚本、md说明文档、dat数据…

2026/9/25 0:00:41 阅读更多 →
Vim基础操作全攻略:保存退出、模式切换与高频命令实战

Vim基础操作全攻略:保存退出、模式切换与高频命令实战

1. 项目概述1.1 核心需求解析今天聊聊Vim。写这个题目的原因是:几乎每个后端开发者、运维人员、数据工程师某天都会遇到一个场景——深夜加班,服务器登录界面只有黑底白字,编辑器只有vi/vim,你必须在五分钟内完成一次配置修改并保…

2026/9/25 0:00:41 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/24 14:34:13 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/25 11:15:26 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/24 14:33:56 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/24 12:50:34 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/24 14:33:48 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/24 12:49:17 阅读更多 →