
DeepFilterNet ONNX 导出实战3 个模型 1 个 tar.gz 完成跨平台部署【免费下载链接】DeepFilterNetNoise supression using deep filtering项目地址: https://gitcode.com/GitHub_Trending/de/DeepFilterNetDeepFilterNet 的语音增强模型在 PyTorch 里训练好之后想塞进 Rust 推理管线、PipeWire 插件或嵌入式设备.pt 检查点基本动不了——依赖链太长跨平台就是噩梦。ONNX 包是官方为这个目的提供的中间格式一条导出命令产出一套任何 ONNX 运行时都能加载的自包含模型。先看到结果导出目录里到底有什么导出脚本在 DeepFilterNet/df/scripts/export.py。跑完之后目标目录里是三类文件各自的角色先搞清楚后面的部署才不会装错东西。3 个 ONNX 模型各管一段DeepFilterNet 的结构是编码器 两个解码器导出时整网被拆成三个图分别落盘enc.onnx吃 ERB 特征和频谱特征吐出四层编码特征 e0–e3、全局 embeddingemb、首层特征 c0 和 LSNR 估计erb_dec.onnx吃 emb 和 e0–e3输出 ERB 频带增益掩码 mdf_dec.onnx吃 emb 和 c0输出 deep filtering 系数 coefs。拆着导而不是整网导出是因为下游 Rust 运行时libDF只想要纯网络这部分STFT/ISTFT、特征提取、流式状态全部由 Rust 实现。拆完之后 ONNX 包里只剩推理整个压缩包只有 8 MB 左右见 models/ 里 DeepFilterNet3_onnx.tar.gz 的体积。别忽略那批 .npz 文件随模型一起落盘的还有一组输入输出张量enc_input.npz、enc_output.npz、erb_dec_input.npz 等。它们是标准答案——scripts/test_model_tract_cli.sh 会把 npz 输入喂给不同的 ONNX 运行时跑一遍再和答案逐项比对。这是跨平台部署里最容易漏掉的一步ONNX Runtime 跑通不代表你的目标运行时Rust 的 tract、某些移动端 runtime也能跑通。一条命令完成导出3 个参数值得看懂python DeepFilterNet/df/scripts/export.py ./onnx_export --simplify第一个位置参数是导出目录脚本会自动创建。导出前它先喂 1 秒随机音频过一遍模型取真实输入形状——用随机数而不是全零是避免某些权重在死区里算出 NaN 把校验带偏。然后对三个子网络逐一处理先torch.jit.script再torch.onnx.export时间轴设为动态dynamic_axesbatch 固定为 1。--simplify 建议常开带上这个参数onnxsim 会对图做常数量折叠和死节点剔除之后用 onnx.checker 的 full_check 重新验证验证失败会打日志并跳过简化、保留原图不会把模型弄坏。移动端和嵌入式运行时对图结构挑刺更狠简化过的图对它们更友好。opset 为什么默认给 12--opset默认 12不是保守是兼容性下限opset 越高图里越可能出现旧运行时不认识的新算子。目标是桌面纯 CPU 推理可以提到 14export_impl 函数内部默认值目标是移动端或 Rust 运行时就留在 12。导出后自动做的两重自检第一重是 onnx.checker 的图结构检查第二重是推理比对——用 onnxruntime 加载刚导出的模型同一份输入跑一遍和 PyTorch 输出做assert_allclose(rtol1e-6, atol1e-5)哪个输出名不一致日志里会点名。⚠️ 注意float32 在 GPU 和 CPU 上的数值差异本身就在 1e-5 量级单个输出出现微小 mismatch 属正常误差超过 0.1 才是图导出有问题此时应停下查。一个 tar.gz 的 3 种用法脚本收尾时把模型目录的 config.ini 拷进导出目录、写入 version.txt记录模型名和 epoch全部打成模型名_onnx.tar.gz。官方预打包版本就在 models/ 目录。部署路径常见三种。命令行deep-filter 二进制官方实时二进制deep-filter是 Rust 写的、零 Python 依赖直接用-m指向 tar 包deep-filter -m DeepFilterNet3_onnx.tar.gz noisy.wav这条命令是验证自己导出包是否可用的最快路径——它跑通后面大部分管线就不会有问题。塞进实时链路demo 与 PipeWire 虚拟麦demo/ 是 Rust 实时音频演示Linux 下cargo nightly run -p df-demo --features ui --bin df-demo --release即可启动本地加载模型并实时显示频谱和延迟值得跑一次建立帧延迟体感。ladspa/ 的插件则把 DeepFilterNet 挂进 PipeWire 当虚拟麦克风最小延迟 20 msSTFT 帧长决定的下限之后任意 VoIP 软件都能拿到增强后的麦克风filter-chain-configs/ 下的两个配置文件就是现成模板。踩坑清单出问题先查这几处脚本启动就退export.py 开头检查import monkeytype缺了直接 exit(1)报错信息提示pip install MonkeyType很容易被当成环境噪音忽略。整网导出没暴露代码里虽然有 export_full 参数可导出完整单图但 CLI 永远只导三个组件。想要整图 ONNX 得自己 import 后调export(..., export_fullTrue)。_ll 包体积是 4.5 倍models/ 里 DeepFilterNet3_ll_onnx.tar.gz 是 36 MB常规版 8 MB。大模型换来更低的时延预算但目标设备的内存预算要按 4 倍余量算。batch 固定为 1只有时间轴是动态轴。要在服务端做批处理得在外面自己攒批、逐条循环喂。实时状态管理STFT 流式、按帧脉冲、延迟补偿压根不在 ONNX 里全在 Rust 侧的 libDF/——这也是 ONNX 包这么轻、这么能搬的根本原因。接新项目时先拿 scripts/ 里的 npz 比对脚本在目标运行时上跑一遍能省掉后面大量调试时间。【免费下载链接】DeepFilterNetNoise supression using deep filtering项目地址: https://gitcode.com/GitHub_Trending/de/DeepFilterNet创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考