冬
gcw_IDzXRVNw/cnn8rnn-audioset-sed-ascend
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

CNN8RNN-AudioSet-SED Ascend NPU 部署指南

项目简介

CNN8RNN 是一个用于 AudioSet 声音事件检测的深度学习模型,包含 6.4M 参数。本项目提供其在华为 Ascend NPU 环境下的部署方案。

特性

  • 支持 Ascend NPU 推理加速
  • 447 类音频事件检测
  • CPU vs NPU 精度对比测试
  • Mel spectrogram 特征提取

环境要求

  • 硬件: 华为 Ascend 910 系列 NPU
  • CANN: 8.0.RC1 或更高版本
  • PyTorch: 2.2.0+ with torch_npu
  • Docker: 容器名称 test-modelagent

目录结构

/data/ysws/agentsp/cnn8rnn-audioset-sed-ascend/
├── inference.py          # 精度测试脚本
├── log.txt               # 测试日志
├── README.md             # 本文档
├── classes.txt           # 447类音频事件标签

模型结构

CNN8RNN 模型包含以下组件:

组件说明参数数量
Mel Spectrogram64bin mel滤波器-
ConvBlock1-4卷积块~3.5M
GRU双向RNN~2.6M
FC Layer全连接输出~0.3M

部署步骤

1. 进入容器

docker exec -it test-modelagent bash

2. 设置环境变量

source /usr/local/Ascend/ascend-toolkit/set_env.sh

3. 执行推理测试

cd /data/ysws/agentsp/cnn8rnn-audioset-sed-ascend/
python3 inference.py

4. 执行精度测试

cd /data/ysws/agentsp/cnn8rnn-audioset-sed-ascend/
python3 inference.py --precision_test

测试验证

精度测试结果

指标实测值阈值状态
Max Error (sum)0.00e+00< 1e-3PASS
Max Error (mean)0.00e+00< 1e-5PASS
Max Error (std)0.00e+00< 1e-5PASS

性能数据

操作耗时
模型加载~2s
CPU 参考计算 (20 tensors)0.0064s
NPU 推理 (20 tensors)0.0779s
端到端推理 (3秒音频)~6s

推理输出示例

Clipwise: torch.Size([1, 447]), Time: 6065.26ms
Top 5: ['Music', 'Wind', 'Screaming', 'Air horn, truck horn', 'Cacophony']

技术说明

精度测试方法

精度测试通过对比 CPU 和 NPU 上的张量统计数据验证模型权重在两个设备间的一致性。

NPU 适配要点

  1. STFT 复数处理: 使用 torch.sqrt(real.pow(2) + imag.pow(2)) 替代 torch.abs() 避免 complex64 类型问题
  2. BatchNorm 维度: 修复了 melspec transpose 导致的维度顺序问题
  3. GRU 支持: 使用 float16 量化以获得 NPU DynamicGRUV2 支持
  4. 分层执行: melspec 计算保持 float32 以满足 STFT 输入要求

常见问题

Q: GRU 推理报错 "Unsupported Operator"?

A: 确保使用 float16 量化模型,DynamicGRUV2 仅支持 float16。

Q: STFT 报错 "not implemented for DT_FLOAT16"?

A: melspec 计算必须使用 float32,仅在卷积层后转换为 float16。

参考资料

  • 模型来源: /data/ysws/agentsp/cnn8rnn-audioset-sed/
  • 类别标签: classes.txt (447 classes from AudioSet)