DeepFilterNet ONNX 导出:一条命令搞定跨平台部署
【免费下载链接】DeepFilterNetNoise supression using deep filtering项目地址: https://gitcode.com/GitHub_Trending/de/DeepFilterNet
DeepFilterNet 是一套用深度滤波做语音降噪的工具,而 ONNX(可理解为模型的通用交换格式)正是它打通桌面、移动端、服务端的桥梁。本文带你走通 ONNX 导出、导出后自检和跨平台部署的完整链路,读完你就能把降噪模型部署到任意目标平台。
一、先认清导出产物
导出后你拿到的不是单个大模型,而是一组各司其职的组件 🧩:
- enc.onnx(编码器):对输入音频做特征提取,输出中间表示;
- erb_dec.onnx(ERB 解码器):处理 ERB 频带特征,负责粗粒度降噪决策;
- df_dec.onnx(DF 解码器):生成最终用于重构干净音频的滤波系数;
- config.ini:模型运行配置,推理端靠它初始化参数;
- version.txt:记录模型版本,便于升级管理。
这种模块化拆分是刻意为之:在资源受限的设备上,你可以只加载需要的组件(例如只用编码器 + 轻量解码器),按需分配内存和算力。
二、一条命令完成导出
先装依赖,核心是 PyTorch 加上 onnx 和 onnxsim(后者用于简化模型图):
pip install -r requirements.txt pip install onnx onnxsim然后执行导出命令:
python DeepFilterNet/df/scripts/export.py --simplify ./onnx_export命令里的 export.py 是导出脚本,两个参数说明如下:
--simplify:导出后自动调用 onnxsim 简化模型图,体积更小、推理更快;./onnx_export:导出目录,不存在会自动创建。
脚本跑完后会自动做两件事:逐组件比对 PyTorch 与 ONNX 输出,确认一致;再把所有产物打包成 tar.gz,方便你直接分发。
三、导出后先自检
脚本内置验证机制:对每个组件分别跑 PyTorch 和 onnxruntime 推理,比对输出并检查均方误差是否在容差范围内,超差会直接报错。发布前建议再手动验证一次,最小推理示例如下:
import onnxruntime as ort, numpy as np sess = ort.InferenceSession("enc.onnx", providers=["CPUExecutionProvider"]) x = np.random.randn(1, 1, 128, 100).astype(np.float32) sess.run(None, {"feat_erb": x})输入张量形状请对照 config.ini 里的实际维度调整。能正常返回输出,说明模型图完整可用。
四、部署选型
三条路线各有适用场景,按你的目标环境选即可:
| 路线 | 入口 | 集成要点 | 适用场景 |
|---|---|---|---|
| 桌面 | demo/ 下的 Rust 演示程序 | 直接编译 demo,接入麦克风/声卡即可实时降噪 | 本地实时通话、会议降噪 |
| 移动端 | ONNX Runtime Mobile | 模型文件放入 assets,用 Java/Kotlin 加载并逐帧推理 | Android/iOS 离线降噪 |
| 服务端 | libDF/ 的 C API,或配合 TensorRT 加速 | C API 便于嵌入任意服务框架;TensorRT 提升吞吐 | 高并发降噪服务、GPU 集群 |
五、卡住了怎么排查
- 导出失败:先确认 PyTorch 版本不低于 1.8,再升级 onnx 和 onnxsim:
pip install --upgrade onnx onnxsim; - 推理偏慢:提高 ONNX opset 版本(
--opset参数)、尝试模型量化、为目标平台选对 ONNX Runtime 执行提供者; - 模型版本怎么选:models/ 下已有预训练 ONNX 包,
DeepFilterNet2_onnx.tar.gz是标准版,DeepFilterNet2_onnx_ll.tar.gz是低延迟(ll)版,DeepFilterNet3_onnx.tar.gz则是新版架构,按延迟需求和精度要求挑选即可。
结尾
到这里,DeepFilterNet 的 ONNX 导出、自检与三平台部署路径都走通了:产物是五个模块化的组件文件,流程是一条命令加自动校验。掌握这套方法后,你可以把它扩展到实时音频流处理的方向,让降噪效果覆盖直播与通话场景。
【免费下载链接】DeepFilterNetNoise supression using deep filtering项目地址: https://gitcode.com/GitHub_Trending/de/DeepFilterNet
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考