前言
边缘语音交互、工业音频监测等场景对端侧降噪的需求持续增长,云端方案存在延迟高、隐私风险等问题。MP_SENet以仅2M参数量实现了顶尖降噪效果,天然适配边缘部署。本文基于土星云BM1684X架构设备,完整讲解模型原理、环境搭建、Python推理部署与性能实测。
一、MP_SENet模型核心原理
MP_SENet是时频域单通道语音增强模型,核心突破在于同时优化幅度谱与相位谱,在极轻量的参数量下实现高保真降噪。
1.1 整体架构
采用编码器-解码器基础框架,工作流程为:
- 输入带噪语音经STFT转换为复数时频谱,分离幅度谱与相位谱
- 编码器通过卷积下采样提取多尺度时频特征
- 瓶颈处引入MP-SE注意力模块,自适应强化语音特征、抑制噪声
- 双分支解码器分别重建降噪后的幅度谱与相位谱
- 经ISTFT还原为干净时域语音
1.2 核心创新与轻量化设计
**MP-SE多路径压缩激励模块**MP-SE多路径压缩激励模块:针对语音频率特性设计多路径特征处理,通道注意力同时作用于幅度与相位分支,保证降噪一致性;
**极致轻量化**极致轻量化:采用深度可分离卷积优化结构,整体参数量仅2M,支持FP32、BF16多精度部署,适配边缘硬件算力;
二、应用场景与核心优势
2.1 典型场景
智能语音终端、工业音频异响检测、车载语音系统、便携录播设备、安防语音拾音等端侧低延迟音频场景。
2.2 部署优势
- 资源占用极低,内存与算力需求适配边缘设备;
- 降噪性能优异,同时兼顾噪声抑制与语音保真度;
- 相位优化让输出音质更自然,可懂度更高;
- 多精度支持,可根据业务需求灵活权衡性能与精度;
三、边缘部署环境搭建
SoC边缘设备( SE110S 系列)
刷入对应版本固件完成系统初始化
安装SAIL Python推理库:
|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| pip3 install dfss -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade python3 -m dfss --url=open@sophgo.com: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 |
执行`python3 -c "import sophon.sail"`python3 -c "import sophon.sail"验证环境。
四、模型准备
4.1 预编译模型一键获取
|--------------------------------------------|
| chmod -R +x scripts/ ./scripts/download.sh |
下载后得到4款预编译bmodel,涵盖VB/DNS训练集与FP32/BF16精度,可按需选择:
- `mpsenet_vb_1b_bf16.bmodel`mpsenet_vb_1b_bf16.bmodel:通用语音场景,优先推荐;
- `mpsenet_dns_1b_bf16.bmodel`mpsenet_dns_1b_bf16.bmodel:复杂通话噪声场景;
4.2 自定义编译
使用`tools/model_onnx.py`tools/model_onnx.py导出ONNX模型,再通过MLIR工具链执行`scripts/gen_fp32bmodel_mlir.sh`scripts/gen_fp32bmodel_mlir.sh
或
`gen_bf16bmodel_mlir.sh`gen_bf16bmodel_mlir.sh完成编译,详细步骤参考项目文档。
五、Python推理部署实战
5.1 核心流程
|-----------------------------------------------------------------------|
| 带噪WAV -> STFT变换 -> 特征预处理 -> SAIL引擎推理 -> 谱重建 -> ISTFT还原 -> 降噪WAV |
5.2 依赖安装
|----------------------------------------------------------------------------------------|
| cd python pip3 install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple |
5.3 核心代码片段
|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| import sophon.sail as sail import numpy as np from scipy.io import wavfile from scipy.signal import stft, istft # 1. 初始化推理引擎 engine = sail.Engine(bmodel_path, dev_id, sail.IOMode.SYSIO) graph_name = engine.get_graph_names()0 input_name = engine.get_input_names(graph_name)0 # 2. 音频预处理 sr, audio = wavfile.read(input_path) audio = audio.astype(np.float32) / 32768.0 f, t, spec = stft(audio, fs=sr, nperseg=400, noverlap=200) mag_input = np.expand_dims(np.abs(spec), axis=0).astype(np.float32) # 3. 模型推理 output = engine.process(graph_name, {input_name: mag_input}) enhanced_mag = outputengine.get_output_names(graph_name)\[0]0 # 4. 后处理与保存 enhanced_spec = enhanced_mag * np.exp(1j * np.angle(spec)) _, out_audio = istft(enhanced_spec, fs=sr, nperseg=400, noverlap=200) wavfile.write(output_path, sr, (np.clip(out_audio, -1, 1) * 32768).astype(np.int16)) |
5.4 运行推理
|---------------------------------------------------------------------------------------------------------------------------------------------------------|
| python3 mp_senet_sail.py \ --bmodel ../models/BM1684X/mpsenet_vb_1b_bf16.bmodel \ --input ../datasets/test.wav \ --output ./result.wav \ --dev_id 0 |
六、性能实测(SE7-32设备)
6.1 理论推理性能(固定输入1,201,640)
|------|-----------|
| 模型精度 | 单推理耗时 |
| BF16 | 1397.35ms |
| FP32 | 2772.37ms |
6.2 端到端性能(12秒测试音频)
|------|-------|--------|------|--------|
| 模型精度 | 预处理 | 推理 | 后处理 | 总耗时 |
| BF16 | 167ms | 2884ms | 52ms | ~3.1s |
| FP32 | 211ms | 8642ms | 75ms | ~8.9s |
BF16模型实时比超3:1,完全满足实时语音场景需求,是边缘部署的最优选择。
七、总结
MP_SENet以极小的参数量实现了高质量语音降噪,搭配土星云边缘NPU算力,可在低资源占用下完成端侧实时降噪,非常适合各类边缘音频场景落地。后续可通过多线程流水线、INT8量化进一步提升吞吐,或与ASR等模型串联构建完整端侧语音方案。