ARTICLE DETAIL

资讯详情

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

PaddleSpeech 声音分类实战:基于 PANNs 预训练模型在 ESC-50 上完成 Finetune、推理与部署

PaddleSpeech 声音分类实战:基于 PANNs 预训练模型在 ESC-50 上完成 Finetune、推理与部署 人工智能语音音频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/esc50 示例为主线系统讲解如何基于 PANNsPANNs: Large-Scale Pretrained Audio Neural Networks for Audio Pattern Recognition预训练模型完成环境声音分类任务从数据与模型背景、配置解析、单卡/多卡 Finetune 训练到模型预测、动转静导出与 Paddle Inference 部署形成一套可直接复现的完整闭环。读完本文你将掌握 PaddleSpeech 声音分类模块paddlespeech/cls的配置语义、训练流程与部署方法并能在 ESC-50 数据集上复现约 0.95 的分类准确率。声音分类任务与方案选型声音分类Audio/Sound Classification和声音事件检测是声音算法领域的热门研究方向。对于声音分类任务传统机器学习的一个常用做法是首先人工提取音频的时域和频域多种特征并做特征选择、组合、变换等然后基于 SVM 或决策树进行分类而端到端的深度学习则通常利用深度网络如 RNN、CNN 等直接对声音波形waveform或时频特征time-frequency进行特征学习representation learning和分类预测。在大规模预训练数据的加持下基于深度网络的方案已成为主流。在 IEEE ICASSP 2017 大会上谷歌开放了大规模音频数据集 Audioset其中包含 632 类音频类别以及 2,084,320 条人工标记的每段10 秒长度的声音剪辑片段来源于 YouTube 视频目前已达 210 万个已标注视频数据、5800 小时音频数据经过标记的声音样本的标签类别为 527。PANNs 正是基于 Audioset 数据集训练的声音分类/识别模型经过预训练后模型可以用于提取音频的 embedding。本示例将使用 PANNs 的预训练模型 Finetune 完成声音分类任务这也是预训练 微调范式在音频领域的典型落地路径。PANNs 预训练模型CNN14 / CNN10 / CNN6PaddleSpeech 的音频库 PaddleAudio 提供了 PANNs 的 CNN14、CNN10 和 CNN6 三种预训练模型用户可按任务复杂度和算力约束自行选择。三种模型在结构上与参数量上的差异如下| 模型 | 网络结构 | 参数量 | Embedding 维度 | |--|--|--|--| | CNN14 | 12 个卷积层 2 个全连接层 | 79.6M | 2048 | | CNN10 | 8 个卷积层 2 个全连接层 | 4.9M | 512 | | CNN6 | 4 个卷积层 2 个全连接层 | 4.5M | 512 |从源码 paddlespeech/cls/models/panns/panns.py 可以看到具体实现细节CNN14panns.py由 7 个 ConvBlock 组成每个 Block 内含 2 个 3×3 卷积层共 12 个卷积层emb_size 2048CNN10panns.py由 4 个 ConvBlock 组成每个 Block 内含 2 个 3×3 卷积层共 8 个卷积层emb_size 512CNN6panns.py由 4 个 ConvBlock 组成每个 Block 仅含 1 个 5×5 卷积层共 4 个卷积层emb_size 512。三者共用的前向结构包括输入先经bn0BatchNorm2D通道数 64归一化随后逐级通过卷积块与平均池化接x.max(axis2) x.mean(axis2)的时间维度统计池化最后经过fc1全连接层输出 embedding当extract_embeddingTrue时直接返回 embedding否则经过输出维度为 527Audioset 类别数的fc_audioset层并用 Sigmoid 做多标签预测。预训练权重由cnn14/cnn10/cnn6工厂函数通过load_state_dict_from_url自动下载并加载panns.py下载缓存目录位于MODEL_HOME/panns。在 ESC-50 上的微调实践中CNN14 由于参数量与特征维度最大通常能取得最好精度CNN6 参数最小、训练与推理更快适合资源受限场景。三者可复用同一套训练、预测、导出与部署流程仅需切换配置中的backbone即可。ESC-50 环境声音数据集ESC-50: Dataset for Environmental Sound Classification 是一个包含 2000 个带标签的、时长为5 秒的环境声音样本数据集音频样本为采样率 44,100Hz 的单通道音频文件所有样本按标签划分为 50 个类别每个类别 40 个样本。类别覆盖犬吠、钟表滴答、猫叫、雨声等日常生活中常见的声音事件。在 PaddleSpeech 中该数据集由 paddlespeech/audio/datasets/esc50.py 中的ESC50(AudioClassificationDataset)类实现它继承自通用音频分类数据集基类负责音频文件的加载、重采样与标签映射。在 panns.yaml 中通过data.dataset: paddle.audio.datasets:ESC50以动态导入dynamic import的方式注册num_classes: 50与数据集的 50 个类别一一对应train.modetrain、dev.modedev配合split: 1指定使用 ESC-50 官方提供的 fold 划分fold 1作为训练/开发集这也是 5-fold 交叉验证中的其中一个折。模型指标5-Fold 交叉验证准确率根据 ESC-50 提供的 fold 信息对数据集进行 5-fold 的 fine-tune 训练和评估PaddleSpeech 官方在 examples/esc50/RESULTS.md 中给出的平均准确率如下| Model | Acc | |--|--| | CNN14 | 0.9500 | | CNN10 | 0.8975 | | CNN6 | 0.8825 |其中 CNN14 在 ESC-50 上达到 0.95 的平均分类准确率是当前示例中的推荐配置默认backbone: paddlespeech.cls.models:cnn14。快速开始环境准备与目录结构示例代码位于 examples/esc50/cls0核心脚本结构如下examples/esc50/cls0/ ├── conf/ │ └── panns.yaml # 数据集、模型、特征、训练、预测全部配置 ├── local/ │ ├── train.sh # 单卡/多卡训练入口 │ ├── infer.sh # 预测入口 │ ├── export.sh # 动转静导出入口 │ └── static_model_infer.sh # 静态图部署推理入口 ├── path.sh # 环境变量与 BIN_DIR 设置 └── run.sh # stage 驱动的总入口path.sh 将MAIN_ROOT设置为仓库根目录并把PYTHONPATH指向仓库根目录以便导入paddlespeech包同时将BIN_DIR指向 paddlespeech/cls/exps/panns该目录下包含训练、预测、导出与部署的 Python 实现train.py模型训练脚本predict.py模型预测脚本export_model.py动转静导出脚本deploy/predict.py基于 Paddle Inference 的静态图部署脚本在运行任何命令前请确认已完成 PaddleSpeech 的安装、ESC-50 数据集已下载到本地且path.sh中约定的路径与你的环境一致。模型训练Stage 1运行下面的命令可在训练集上进行模型的 Finetune支持单机的单卡训练和多卡训练。run.sh会根据CUDA_VISIBLE_DEVICES中显卡数量自动计算ngpu大于 0 时通过paddle.distributed.launch启动多卡训练否则以单进程方式训练见 run.sh 与 local/train.sh。启动训练$ CUDA_VISIBLE_DEVICES0 ./run.sh 1 conf/panns.yaml训练的参数可在 conf/panns.yaml 的training中配置其中epochs训练轮次默认为 50。learning_rateFine-tune 的学习率默认为 5e-5。batch_size批处理大小请结合显存情况进行调整若出现显存不足请适当调低这一参数默认为 16。num_workersDataloader 获取数据的子进程数默认为 2README 中描述默认为 0加载数据的流程在主进程执行实际配置文件默认 2可按机器核数调整。checkpoint_dir模型参数文件和 optimizer 参数文件的保存目录默认为./checkpoint。save_freq训练过程中的模型保存频率默认为 10即每 10 个 epoch 保存一次。log_freq训练过程中的信息打印频率默认为 10。从训练源码 paddlespeech/cls/exps/panns/train.py 可以看到训练闭环的实现通过dynamic_import分别动态导入数据集类ESC50与骨干网络类默认cnn14数据集由paddle.io.DistributedBatchSampler分发给各卡特征提取使用paddle.audio.features.LogMelSpectrogram参数由feature配置段提供模型结构为SoundClassifier(backbone, num_class50)即预训练骨干提取 embedding 分类头并包上paddle.DataParallel优化器为 Adam损失函数为CrossEntropyLoss。feature配置段对训练效果影响显著建议与预训练时的配置保持一致sr: 32000重采样目标采样率32kHz。n_fft: 1024FFT 窗口大小。hop_length: 320帧移对应 10ms 帧长。window: hann加窗类型为 Hann 窗。win_length: 1024窗长。f_min: 50.0、f_max: 14000.0Mel 滤波器频带范围50Hz–14kHz。n_mels: 64Mel 频带数。示例代码中使用的预训练模型为 CNN14如果想更换为其他预训练模型可通过修改conf/panns.yaml的model中配置# CNN14 model: backbone: paddlespeech.cls.models:cnn14# CNN10 model: backbone: paddlespeech.cls.models:cnn10# CNN6 model: backbone: paddlespeech.cls.models:cnn6backbone采用模块路径:符号名的字符串形式由dynamic_import机制解析这也是 PaddleSpeech 统一的可插拔模型注册方式。模型预测Stage 2训练完成后即可对单条音频进行预测$ CUDA_VISIBLE_DEVICES0 ./run.sh 2 conf/panns.yaml预测的参数可在conf/panns.yaml的predicting中配置其中audio_file指定预测的音频文件示例默认/audio/dog.wav。top_k预测显示的 top k 标签的得分默认为 1配置文件中默认为 10可按需调整。checkpoint模型参数 checkpoint 文件配置默认./checkpoint/epoch_50/model.pdparams与训练保存路径对应。预测脚本 paddlespeech/cls/exps/panns/predict.py 的实现流程为load_audio按sr读取音频 →LogMelSpectrogram提取特征 →SoundClassifier前向得到 logits →softmax转概率 → 按概率降序取前top_k个类别并打印。输出的预测结果如下[/audio/dog.wav] Dog: 0.9999538660049438 Clock tick: 1.3341237718123011e-05 Cat: 6.579841738130199e-06可以看到模型对狗叫Dog给出了接近 1.0 的概率其余类别概率接近于 0分类置信度非常高。模型部署训练结束后可将动态图模型导出为静态图动转静再借助 Paddle Inference 在 Python 端完成部署推理分为两步。1. 动转静Stage 3模型训练结束后可以将已保存的动态图参数导出成静态图的模型和参数然后实施静态图的部署$ CUDA_VISIBLE_DEVICES0 ./run.sh 3 ./checkpoint/epoch_50/model.pdparams ./exportpaddlespeech/cls/exps/panns/export_model.py 脚本中可支持配置的参数checkpoint模型参数 checkpoint 文件。output_dir导出静态图模型和参数文件的保存目录。导出的静态图模型和参数文件如下$ tree export export ├── inference.pdiparams ├── inference.pdiparams.info └── inference.pdmodel其中inference.pdmodel为静态图网络结构文件inference.pdiparams为参数文件二者即为 Paddle Inference 部署所需的完整模型产物。2. 模型部署和预测Stage 4paddlespeech/cls/exps/panns/deploy/predict.py 脚本使用了paddle.inference模块下的 API提供了 Python 端部署示例$ CUDA_VISIBLE_DEVICES0 ./run.sh 4 cpu ./export /audio/dog.wavpaddlespeech/cls/exps/panns/deploy/predict.py 脚本中可支持配置的主要参数device指定模型预测时使用的设备如cpu或gpu。model_dir导出静态图模型和参数文件的保存目录。wav指定预测的音频文件。四个 stage 的完整调用链由 run.sh 统一编排stage参数 1/2/3/4 分别对应训练、预测、导出、部署每个 stage 内部的 Python 调用由 local 下的脚本承接形成了一键式的示例工作流。从源码理解训练与推理的关键设计动态导入机制数据集的paddle.audio.datasets:ESC50与模型的paddlespeech.cls.models:cnn14都是字符串形式的动态导入目标train.py与predict.py均通过dynamic_import解析新增数据集或模型无需改动训练/推理脚本主体。预训练与微调的分工训练时backbone_class(pretrainedTrue, extract_embeddingTrue)从 URL 加载 Audioset 预训练权重并输出 embeddingSoundClassifier在此基础上新增num_class50的分类头CrossEntropyLoss负责优化整个模型其中分类头学习新类别、骨干网络以 5e-5 的小学习率做微调从而在保持预训练知识的同时适配 ESC-50 的 50 类环境声音。训练/验证数据划分panns.yaml中train.split: 1与dev.split: 1使用 ESC-50 官方 fold 1 作为训练与开发集要复现 5-fold 结果可依次将split改为 1~5 训练并取平均准确率。一键多卡train.sh根据CUDA_VISIBLE_DEVICES中的显卡数量自动决定是否使用paddle.distributed.launchDistributedBatchSampler负责跨卡分片无需额外修改配置即可实现单机多卡扩展。总结与延伸本文完整走通了 PaddleSpeech 声音分类的四大环节选模型CNN14/CNN10/CNN6 按精度与算力取舍、配数据ESC-50 数据集与 fold 划分、做微调50 epoch、5e-5 学习率的 FinetuneCNN14 在 ESC-50 上可达 0.95 准确率、去部署动转静导出 Paddle Inference 推理。所有配置收敛于 conf/panns.yaml 一个文件四个 stage 由 run.sh 统一驱动便于快速复用与二次开发。如果你有自定义的环境声音数据集可将data.num_classes改为自己的类别数、将data.dataset替换为按AudioClassificationDataset规范实现的 Dataset 类并保持feature配置与预训练一致即可沿用本示例的完整训练与部署流程。声音分类作为更复杂任务如声音事件检测、声学场景分析的基础能力在智能家居、安防监控、工业设备故障诊断等场景中都有广泛的应用空间。ReferencePANNs: Large-Scale Pretrained Audio Neural Networks for Audio Pattern RecognitionarXiv:1912.10211ESC-50: Dataset for Environmental Sound Classification赞分享人工智能语音音频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点击查看免费下载相关推荐Acton蓝绿部署无停机部署策略Acton蓝绿部署无停机部署策略 Acton作为TON智能合约开发的完整工具链提供了强大的蓝绿部署能力帮助开发者实现零停机时间的智能合约更新。本文将详细介人工智能语音音频PaddleSpeech 中的 PANNs 音频分类模型panns 模块架构解析与训练部署实战PaddleSpeech 中的 PANNs 音频分类模型panns 模块架构解析与训练部署实战 导读 本文围绕 PaddleSpeech 音频分类Audio人工智能语音音频PaddleSpeech 基于 ESC-50 的声音分类基准PANNs 模型 5-Fold 指标与端到端复现指南PaddleSpeech 基于 ESC 50 的声音分类基准PANNs 模型 5 Fold 指标与端到端复现指南 本文以 PaddleSpeech 仓库中 e人工智能语音音频NLP媒体生成上一篇Web Admin 数据契约实践Omi 管理后台的鉴权网络层与订阅收入指标架构下一篇终极指南使用JUCE框架构建智能音频安防监控系统创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表