ARTICLE DETAIL

资讯详情

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

环境音识别 30 分钟实战:用 Transformers 微调 Wav2Vec2 完成环境声音分类

环境音识别 30 分钟实战:用 Transformers 微调 Wav2Vec2 完成环境声音分类 环境音识别 30 分钟实战用 Transformers 微调 Wav2Vec2 完成环境声音分类【免费下载链接】transformers Transformers: the model-definition framework for state-of-the-art machine learning models in text, vision, audio, and multimodal models, for both inference and training.项目地址: https://gitcode.com/GitHub_Trending/tra/transformers想在厨房、工地或机房里听懂非人声环境音识别是绕不开的一步。Transformers 项目把这条链路做成了现成脚本基于 Wav2Vec2 这类自监督音频模型微调一个分类头配合 pipeline 接口从数据准备到出预测结果基本不需要手写模型代码。先跑通一个最小 Demo先让读者和你的机器看到效果不训练直接用官方 pipeline 加载一个已微调好的音频分类模型。from transformers import pipeline classifier pipeline( audio-classification, modelfacebook/wav2vec2-conformer-finetuned-speech-emotion-recognition ) result classifier(kitchen_ambience.wav) print(result) # [{label: neutral, score: 0.41}, ...]三行代码就能拿到{label, score}列表。两点说明从本地文件读音频依赖系统里的 ffmpeg报错ffmpeg was not found时先apt install ffmpeg示例里用的是情绪识别模型只是借它演示接口换成自己微调后的环境音模型见下文接口完全一样。能打印出带分数的标签列表说明推理链路已经通了。为什么是 Wav2Vec2以及它的适用边界原理一句话Wav2Vec2、HuBERT 这类模型在海量无标注音频上自监督预训练学好了通用的声学表征环境声音分类要做的是在它上面接一个分类头用少量标注数据微调。这正是 docs/source/en/model_doc/wav2vec2.md 里模型支持的下游任务之一。适用边界也要说清楚适合短片段、离散类别的识别门窗开关、警报、机器异响、交通噪声输入会被统一重采样到模型要求的采样率wav2vec2-base 为 16kHz超长音频需要裁剪或切段类别数由你的标签集决定不需要碰预训练权重本身改动很小。主线实操从数据到可用模型完整流程在 examples/pytorch/audio-classification/run_audio_classification.py 里下面按顺序走一遍。准备数据先 clone 仓库并装上音频依赖git clone https://gitcode.com/GitHub_Trending/tra/transformers cd transformers pip install .[audio]准备两份 CSV每行一个音频文件两列即可音频路径 类别标签。path,category ./data/raw/door_001.wav,door_open ./data/raw/vacuum_001.wav,vacuum_cleaner类别不用刻意多5~10 个、每类几十条起步就能验证流程。跑通训练流程python examples/pytorch/audio-classification/run_audio_classification.py \ --model_name_or_path facebook/wav2vec2-base \ --train_file ./data/train.csv \ --eval_file ./data/eval.csv \ --audio_column_name path \ --label_column_name category \ --do_train --do_eval \ --max_length_seconds 10 \ --num_train_epochs 10 \ --learning_rate 3e-5 \ --per_device_train_batch_size 8 \ --output_dir ./env_sound_model脚本内部干的事就四步源码里都能直接对应feature_extractor AutoFeatureExtractor.from_pretrained(facebook/wav2vec2-base) model AutoModelForAudioClassification.from_pretrained( facebook/wav2vec2-base, num_labelslen(labels), label2idlabel2id, id2labelid2label ) model.freeze_feature_encoder() # 冻结声学编码器只训分类头 trainer Trainer( modelmodel, argstraining_args, train_datasettrain_ds, eval_dataseteval_ds, compute_metricscompute_metrics, processing_classfeature_extractor, ) trainer.train()值得留意的一个细节训练时每条音频会用random_subsample随机裁出固定长度的片段由--max_length_seconds控制验证时则用完整波形。这套随机裁剪既是数据增强也天然解决了样本长短不一的问题。评估指标默认是 accuracyevaluate.load(accuracy)eval 日志里的 accuracy 达到你预期的可用水平比如 0.9这一环节就算成功。官方示例里 wav2vec2-base 在 SUPERB 关键词 spotting 子集上单卡 V100 约 14 分钟跑到 98% 准确率小数据场景下量级可以参照。迁移到真实场景换成自己的场景通常只改三处数据列名--audio_column_name/--label_column_name对齐你的 CSV片段时长实时监控场景把--max_length_seconds调到 10 甚至更短延迟更低标签体系类别增减直接反映在 CSV 的 category 列里num_labels会自动跟随无需改代码。训完后用开头的 pipeline 代码把模型路径换成./env_sound_model能对新采集的音频输出合理标签主线就全部跑通了。关键参数与模型选型训练时真正要调的参数不多集中在一张表里参数说明建议--model_name_or_path基座模型facebook/wav2vec2-base默认--max_length_seconds训练随机裁剪长度默认 20实时监控调到 10--freeze_feature_encoder是否冻结声学编码器默认 True数据少时保持冻结更稳--learning_rate学习率冻结编码器 3e-5全量微调 3e-4--num_train_epochs训练轮数5~10--per_device_train_batch_size单卡批次显存够就 8~32--attention_mask分类前是否按 mask 平均池化短音频可试 False--ignore_mismatched_sizes分类头维度不匹配时强制加载换数据集标签数变化时加上基座模型按数据量和速度需求选facebook/wav2vec2-base12 层通用基线先跑它ntu-spml/distilhubert2 层蒸馏版小数据集上几分钟出结果facebook/hubert-base-ls960Wav2Vec2 的对照项效果接近可互换asapp/sew-mid-100k24 层更重数据充足时上限略高。部署与常见坑部署按环境选一种本地/API 服务直接pipeline(audio-classification, model./env_sound_model)封装进 FastAPI输入路径或字节流都能喂给它共享模型脚本加--push_to_hub训练完直接推到 Hub别处一行加载边缘设备用transformers.onnx.export导出 ONNX 再压缩体积和延迟都会明显下降。几个高频问题症状处理ffmpeg was not found安装 ffmpegpipeline 从文件读音频依赖它样本长短不一交给--max_length_seconds的随机裁剪别自己硬填零类别不平衡给少样本类别加噪声/裁剪增强或在compute_metrics里按类看 precision/recall 定位问题准确率上不去先加数据再调参其次试--attention_mask False、换更大基座过拟合开--load_best_model_at_end配 early stopping减少 epoch下一步建议先跑一次max_length_seconds1、5 个 epoch 的快速试验确认链路再上完整配置然后把compute_metrics从 accuracy 扩成按类的 precision/recall部署前就知道哪一类最不可靠。环境音识别的门槛基本被这套工具链抹平了数据齐了就微调微调完就是一个可上线的分类器。想深入可以看 examples/pytorch/audio-classification/README.md 里的完整调参示例、src/transformers/pipelines/audio_classification.py 的推理实现以及 src/transformers/generation/ 之外同级的 src/transformers/models/ 下 wav2vec2 的模型定义源码。【免费下载链接】transformers Transformers: the model-definition framework for state-of-the-art machine learning models in text, vision, audio, and multimodal models, for both inference and training.项目地址: https://gitcode.com/GitHub_Trending/tra/transformers创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表