MP_SENet是一种基于深度学习的音频降噪方法,该方法不仅具有较小的模型参数量(2M)还具有当前(论文发布时间之前)最好的音频降噪性能。关于它的特性细节,请前往源repo查看:https://github.com/yxlu-0102/MP-SENet 。本例程对MP_SENet进行移植,使之能在SOPHON BM1684X上进行推理测试,实现优秀的音频降噪效果。
BM1684X系列:该例程支持在V24.04.01(release时间在2024.11.10后)及以上的SDK上运行,支持在插有1684X加速卡(SC7系列)的x86主机上运行,也可以在1684X SoC设备(如SE7)上运行。
- 支持BM1684X(x86 PCIe、SoC)
- 支持FP32 BF16模型编译和推理
- 支持基于SAIL推理的Python例程
如果您在x86平台安装了PCIe加速卡(如SC系列加速卡),并使用它作为运行环境,您需要安装libsophon以及sophon-mw,除此之外,您还需要编译并安装sophon-sail(release时间在2024.11.10后),以上安装步骤具体请参考x86-pcie平台的开发和运行环境搭建。 这里特别提供了开发和运行环境搭建所需得SDK文件和sophon-sail源码(release时间在2024.11.10后)的下载链接:
pip3 install dfss -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade
python3 -m dfss [email protected]:sophon-demo/MP_SENet/PCIE/sophon_SDK.tar.gz
python3 -m dfss [email protected]:sophon-demo/MP_SENet/PCIE/sophon_sail.tar.gz
这里特别提供SE7即BM1684X(SOC)刷机包V24.04.01(release时间在2024.11.10后),刷机包地址如下:
pip3 install dfss -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade
python3 -m dfss [email protected]:sophon-demo/MP_SENet/SOC/sdcard.tgz
刷机方式可以参考刷机问题
此外,也提供刷机包对应SDK版本的sophon-sail(python)包,可以直接通过pip3安装,下载地址如下:
python3 -m dfss [email protected]:sophon-demo/MP_SENet/SOC/sophon_arm-3.9.0-py3-none-any.whl
pip3 install sophon_arm-3.9.0-py3-none-any.whl
完成刷机和whl包安装即完成SOC的运行环境搭建。
该模型目前支持在bm1684X上运行,已提供编译好的bmodel。
本例程在scripts
目录下提供了下载脚本download.sh
chmod -R +x scripts/
./scripts/download.sh
执行下载脚本后,当前目录下的文件如下:
.
├── datasets
│ └── test.wav #音频测试数据(带噪)
├── docs
│ └── MP_SENet_Export_Guide.md # MP_SENet ONNX导出和 bmodel 编译指南
├── models # download.sh下载的 bmodel
│ └── BM1684X
│ ├── mpsenet_vb_1b_fp32.bmodel
│ ├── mpsenet_vb_1b_bf16.bmodel
│ ├── mpsenet_dns_1b_fp32.bmodel
│ └── mpsenet_dns_1b_bf16.bmodel
├── python
│ ├── image.png #流程图
│ ├── README.md # python 例程执行指南
│ ├── requirements.txt # python 例程的依赖模块
│ └── mp_senet_sail.py # MP_SENet python 推理脚本
├── README.md # MP_SENet 例程指南
├── scripts
│ ├── auto_test.sh # 自动测试脚本
│ ├── download.sh # 下载脚本
│ ├── gen_fp32bmodel_mlir.sh # FP32 bmodel编译脚本
│ └── gen_bf16bmodel_mlir.sh # BF16 bmodel编译脚本
└── tools
├── configs
│ └── config.json
├── model_onnx.py # MP_SENet ONNX导出脚本
└── requirements_model.txt # ONNX导出的依赖模块
此部分请参考MP_SENet模型导出与编译
使用bmrt_test测试模型的理论性能:
# 请根据实际情况修改要测试的bmodel路径和devid参数
bmrt_test --bmodel models/BM1684X/mpsenet_vb_1b_bf16.bmodel
测试结果中的calculate time
就是模型推理的时间。
测试各个模型的理论推理时间,结果如下:
测试模型 | calculate time(ms) |
---|---|
BM1684X/mpsenet_vb_1b_bf16.bmodel | 1397.35 |
BM1684X/mpsenet_vb_1b_fp32.bmodel | 2772.37 |
- 测试说明
- 性能测试结果具有一定的波动性;
calculate time
为固定输入大小(1,201,640)的推理时间;- SoC和PCIe的测试结果基本一致。
例程测试后能在终端看到前处理时间、推理时间、后处理时间,以及从数据载入到生成降噪音频文件的总时间(测试音频长度为12秒)
测试平台 | 测试程序 | 测试模型 | preprocess_time(ms) | inference_time(ms) | postprocess_time(ms) |
---|---|---|---|---|---|
SE7-32 | mp_senet_sail.py | mpsenet_vb_1b_bf16.bmodel | 167.36 | 2883.84 | 51.60 |
SE7-32 | mp_senet_sail.py | mpsenet_vb_1b_fp32.bmodel | 210.82 | 8641.61 | 74.51 |
- 测试说明
- 性能测试结果具有一定的波动性,建议多次测试取平均值;
- SE7-32(BM1684X) SDK版本:V24.04.01(release时间在2024.11.10后);
- SE7-32的主控处理器为8核[email protected],PCIe上的性能由于处理器的不同可能存在较大差异;