PaddleHub ESC50 环境声音分类数据集 API 详解与源码解析【免费下载链接】PaddleFormersPaddleFormers is an easy-to-use library of pre-trained large language model zoo based on PaddlePaddle.项目地址: https://gitcode.com/gh_mirrors/pa/PaddleFormers本篇技术指南围绕 PaddleHub 内置的paddlehub.datasets.ESC50数据集类展开讲解其在环境声音分类Environmental Sound Classification任务中的定义方式、构造参数、音频特征提取流程并结合 PaddleHub 源码与官方音频分类示例说明如何基于 ESC-50 数据集完成模型 Fine-tune 与推理。读完本文你将掌握 ESC50 数据集的完整使用姿势、Mel 频谱特征的底层生成原理以及它与 PANNs 系列预训练模型的配合方式。ESC50 数据集类概览ESC-50 是一个用于环境声音分类方法基准测试的公开数据集包含2000 条标注过的环境声音录音覆盖 50 个类别每个类别 40 条样本。PaddleHub 将这一数据集封装为ESC50类位于 paddlehub/datasets/esc50.py并统一通过 paddlehub/datasets/init.py 导出因此可以直接使用如下导入方式from paddlehub.datasets import ESC50对应的 API 文档为 docs/docs_ch/api/datasets/esc50.rst其类签名为class paddlehub.datasets.ESC50(mode: str train, feat_type: str mel)该数据集类专为环境声音分类设计数据集描述原文指出ESC-50 是一组带标注的环境声音录音集合适合用作环境声音分类方法的基准测试。构造参数详解ESC50构造函数接受两个可选参数下面结合源码逐一说明。mode数据集模式类型str可选默认值为train取值train、test或dev用于标识当前数据集所处的模式从 paddlehub/datasets/esc50.py 的构造函数实现可以看到def __init__(self, mode: str train, feat_type: str mel): base_path os.path.join(DATA_HOME, esc50) if mode train: data_file train.npz else: data_file dev.npz即modetrain时加载train.npz用于模型训练其余取值包括dev和test统一加载dev.npz用于模型验证或测试。在实际使用中官方音频分类示例demo/audio_classification/train.py正是分别构造训练集与验证集train_dataset ESC50(modetrain) dev_dataset ESC50(modedev)feat_type输入特征类型类型str可选默认值为mel取值mel或rawmelMel 频谱Mel Spectrogram由原始波形在线计算得到raw原始波形直接使用 npz 中存储的波形数据。该参数由基类AudioClassificationDataset消费。在 paddlehub/datasets/base_audio_dataset.py 中定义了支持的特征集合_supported_features [raw, mel]若传入其他取值会在特征转换阶段抛出异常见_convert_examples_to_records中Unknown type of self.feat_type的报错逻辑。数据集内部结构与关键常量ESC50类在类级别定义了若干供模型与训练流程直接引用的常量这些常量是理解数据集与模型衔接的关键常量值含义sample_rate44100音频统一采样率Hzinput_lengthint(sample_rate * 5)即 220500每条样本固定 5 秒时长num_class50类别总数用于配置分类头label_list50 个字符串与类别索引一一对应的标签名其中label_list按语义分组涵盖五类环境声音Animals动物叫声Dog、Rooster、Pig、Cow、Frog、Cat、Hen、Insects (flying)、Sheep、CrowNatural soundscapes water sounds自然与水流声Rain、Sea waves、Crackling fire、Crickets、Chirping birds、Water drops、Wind、Pouring water、Toilet flush、ThunderstormHuman, non-speech sounds人类非语音声音Crying baby、Sneezing、Clapping、Breathing、Coughing、Footsteps、Laughing、Brushing teeth、Snoring、Drinking, sippingInterior/domestic sounds室内/居家声音Door knock、Mouse click、Keyboard typing、Door, wood creaks、Can opening、Washing machine、Vacuum cleaner、Clock alarm、Clock tick、Glass breakingExterior/urban noises室外/城市噪声Helicopter、Chainsaw、Siren、Car horn、Engine、Train、Church bells、Airplane、Fireworks、Hand saw。这些标签在推理阶段用于构建label_map见下文推理部分。数据下载与目录约定ESC50类通过装饰器自动完成数据下载download_data(urlhttps://bj.bcebos.com/paddlehub-dataset/esc50.tar.gz) class ESC50(AudioClassificationDataset):首次实例化时PaddleHub 会自动从该 URL 下载esc50.tar.gz并解压到数据集缓存目录。根据 paddlehub/env.py 的定义DATA_HOME _get_sub_home(dataset)DATA_HOME是 PaddleHub 用于存放自动下载数据集的目录ESC50的数据实际存放于DATA_HOME/esc50下包含train.npz与dev.npz两个 NumPy 压缩包文件。底层数据读取从 npz 到 InputExampleESC50继承自AudioClassificationDatasetpaddlehub/datasets/base_audio_dataset.py后者又继承自BaseAudioDataset与paddle.io.Dataset因此ESC50实例天然是 PaddlePaddle 的 Dataset可直接交给DataLoader或 PaddleHub Trainer 使用。基类的_read_filepaddlehub/datasets/base_audio_dataset.py负责解析 npz 文件dataset np.load(os.path.join(self.data_file), allow_pickleTrue) audio_id 0 for waveform, label in zip(dataset[waveforms], dataset[labels]): example InputExample(guidaudio_id, sourcewaveform, labellabel) audio_id 1 examples.append(example)可以看到npz 文件中包含两个关键数组waveforms原始波形数据一维数组labels对应的类别标签。两者逐条配对被封装为InputExample包含guid、source、label三个字段。目前基类仅支持npz文件类型其他文件类型会触发NotImplementedError。特征提取Mel 频谱的生成原理构造AudioClassificationDataset时ESC50会传入一组特征配置feat_cfgpaddlehub/datasets/esc50.pyfeat_cfg dict( sample_rateself.sample_rate, # 44100 window_size1024, # STFT 窗口大小n_fft hop_size320, # 帧移 mel_bins64, # Mel 滤波器组数量 fmin50, # 最低频率 fmax14000, # 最高频率 windowhann) # 窗函数类型随后基类的_convert_examples_to_recordspaddlehub/datasets/base_audio_dataset.py根据feat_type决定每个样本的最终特征feat_typeraw直接使用原始波形example.sourcefeat_typemel调用extract_melspectrogram在线计算 Mel 频谱其他取值抛出RuntimeError。Mel 频谱的底层实现位于 paddlehub/utils/utils.py其计算流程为短时傅里叶变换STFT调用librosa.stft使用n_fftwindow_size、hop_lengthhop_size、win_lengthwindow_size、windowhann并设置centerTrue、pad_modereflect功率谱计算对 STFT 结果取绝对值后求平方得到功率谱Mel 滤波通过librosa.filters.mel构建 Mel 滤波器组n_melsmel_bins频率范围fminfmax与功率谱做矩阵乘法得到 Mel 频谱分贝换算使用librosa.power_to_db将 Mel 功率谱转换为对数分贝刻度ref1.0、amin1e-10、top_dbNone并做转置最终输出形状为(时间帧, mel_bins)的特征矩阵。需要说明的是该函数依赖librosa及numba库。若环境中未正确安装PaddleHub 会打印提示并抛出导入异常因此使用 ESC50 前请确保安装依赖。最终__getitem__paddlehub/datasets/base_audio_dataset.py返回(特征, 标签)二元组其中标签被转换为int64类型可直接用于 PaddlePaddle 模型训练。实战基于 ESC50 的 Fine-tune 全流程官方示例 demo/audio_classification/README.md 给出了使用 PaddleHub Fine-tune API 完成环境声音分类的四步流程下面结合 demo/audio_classification/train.py 完整演示。Step 1选择预训练模型import paddle import paddlehub as hub from paddlehub.datasets import ESC50 model hub.Module(namepanns_cnn14, version1.0.0, tasksound-cls, num_classESC50.num_class)参数说明name模型名称可选panns_cnn14、panns_cnn10、panns_cnn6详见仓库中 modules/audio/audio_classification/PANNs 目录下的模块说明tasksound-cls表示声音分类任务None表示基于 AudioSet 527 类标签的 Audio Tagging 任务num_class分类任务的类别数这里直接使用ESC50.num_class50实现数据集与分类头的自动对齐。Step 2加载数据集train_dataset ESC50(modetrain) dev_dataset ESC50(modedev)Step 3配置优化器与 Traineroptimizer paddle.optimizer.AdamW(learning_rate5e-5, parametersmodel.parameters()) trainer hub.Trainer(model, optimizer, checkpoint_dir./checkpoint, use_gpuTrue)示例默认超参数可通过命令行覆盖num_epoch50、learning_rate5e-5、batch_size16、save_interval10。Step 4执行训练与评估trainer.train( train_dataset, epochs50, batch_size16, eval_datasetdev_dataset, save_interval10, ) trainer.evaluate(dev_dataset, batch_size16)启动训练的命令为export CUDA_VISIBLE_DEVICES0 python train.py训练完成后验证集上表现最优的模型会保存在${CHECKPOINT_DIR}/best_model/model.pdparams目录下。实战加载微调模型进行预测微调完成后可用 demo/audio_classification/predict.py 中的逻辑对本地 wav 文件进行分类。其核心代码为import librosa import paddlehub as hub from paddlehub.datasets import ESC50 label_map {idx: label for idx, label in enumerate(ESC50.label_list)} model hub.Module( namepanns_cnn14, version1.0.0, tasksound-cls, num_classESC50.num_class, label_maplabel_map, load_checkpoint./checkpoint/best_model/model.pdparams) data [librosa.load(./cat.wav, sr44100)[0]] result model.predict(data, sample_rate44100, batch_size1, feat_typemel, use_gpuTrue)关键点利用ESC50.label_list构建label_map将模型输出的类别索引映射为可读的类别名称如Cat、Dog预测前使用librosa.load以sr44100与ESC50.sample_rate一致读取音频model.predict内部同样使用feat_typemel与数据集训练时保持一致的特征处理管线。命令行推理方式python predict.py --wav ./cat.wav --topk 3输出示例格式为标签与对应得分[./cat.wav] Cat: 0.9123 ...小结ESC50是 PaddleHub 为环境声音分类场景内置的开箱即用数据集类。通过mode与feat_type两个参数即可在训练/验证数据集与原始波形/Mel 频谱特征之间灵活切换其 50 个类别标签、44100Hz 采样率、5 秒定长样本等常量与 PANNs 系列预训练模型天然衔接配合 demo/audio_classification 目录下的训练与预测脚本可以快速搭建一套完整的环境声音分类应用。【免费下载链接】PaddleFormersPaddleFormers is an easy-to-use library of pre-trained large language model zoo based on PaddlePaddle.项目地址: https://gitcode.com/gh_mirrors/pa/PaddleFormers创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
3步搞定电脑全屏截图快捷键,面试原理不再卡壳 3步搞定电脑全屏截图快捷键,面试原理不再卡壳 面试被问原理答不上来?别慌,这不仅是快捷键问题,更是性能优化的底层逻辑。很多开发者在处理截图功能时,只知皮毛不知所以,导致在高频并发场景下出现内存泄漏或UI卡顿。今天咱们不聊虚的,直接拆解【电脑… · 2026/9/23 2:33:00
PHP-CS-Fixer 规则详解:no_whitespace_in_empty_array 清理空数组中的空白 PHP-CS-Fixer 规则详解:no_whitespace_in_empty_array 清理空数组中的空白 【免费下载链接】PHP-CS-Fixer A tool to automatically fix PHP Coding Standards issues 项目地址: https://gitcode.com/gh_mirrors/ph/PHP-CS-Fixer
导读
no_whitespace_in_emp… · 2026/9/23 2:33:00
esey实战项目 面试被问原理答不上来,简历上写的“熟悉分布式系统”瞬间变成笑话。 很多兄弟在写代码时,只管把功能跑通,遇到 esey 这类底层或特定场景的工具,往往只知其然不知其所以然。 别慌,今天咱们不整虚的,直接上 速查手册 ,用实战项目带你把… · 2026/9/23 3:08:53
3个坑让tv115影视项目白干?源码解析与避坑指南 3个坑让tv115影视项目白干?源码解析与避坑指南 语法背得滚瓜烂熟,项目一搭就废。这就是大多数初学者在尝试 tv115影视 这类资源聚合项目时遇到的死局。你懂 Python,懂 Node.js,甚至懂一点… · 2026/9/23 3:08:53
隔离区3实战:新手避坑指南,搞定API变更与从零搭建 隔离区3实战:新手避坑指南,搞定API变更与从零搭建 版本升级后 API 全变了,代码跑不起来,报错满天飞,这是很多应届生入职第一周最崩溃的时刻。别慌,这不仅是你的问题,也是整个行业在技术迭代中的常态痛点。今天我们要聊的【隔离区3】,并不是… · 2026/9/23 3:08:40
AI技能版本锁实战:用Skillbox终结Prompt漂移与协作混乱 你手头有没有遇到过这种局面:上周调好的 AI 技能,今天一跑结果变了,没人动过代码,但输出就是不对。更头疼的是团队里三个人同时在改同一个 prompt,改完也没人记得上一版是什么。我这次用 Skillbox 把 AI 技能从“一个会… · 2026/9/23 3:08:34
3天搞定智慧园区整体解决方案,一文搞懂架构与代码 3天搞定智慧园区整体解决方案,一文搞懂架构与代码 别再对着IDE发呆,学会语法却不知怎么搭项目,这才是90%开发者的死穴。很多兄弟啃完了Python或Java的基础教程,满脑子都是变量和循环,但一接到“智慧园区整体解决方案”这种需求,手就抖… · 2026/9/23 3:08:34
3招搞定手机怎么下载微信面试难题实战项目解析 3招搞定手机怎么下载微信面试难题实战项目解析 面试被问“手机怎么下载微信”背后的原理,90%的人答不上来。别笑,这看似弱智的问题,实则是考察你对移动应用分发机制、安全校验及网络协议理解的试金石。我带过不少校招新人,他们背了八股文,却连一个A… · 2026/9/23 0:00:03
你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 面试被问“高并发下如何保证消息不丢失”,你张口就是“用Redis”,结果面试官追问“如果Redis宕机了怎么办”,你瞬间卡壳。这种场景太常见了,很多新手在背八股文时,只记住了技术名词… · 2026/9/23 0:00:29