DeepFilterNet:让嘈杂环境里会议听得清的低复杂度降噪框架
【免费下载链接】DeepFilterNetNoise supression using deep filtering项目地址: https://gitcode.com/GitHub_Trending/de/DeepFilterNet
DeepFilterNet 是基于深度滤波(Deep Filtering)的低复杂度语音增强框架,用于嘈杂语音音频的降噪。适合需要批量处理录音、麦克风通话实时降噪、在边缘设备部署语音增强的用户。3 行代码接入,支持 48kHz 全频段音频。
🎯 一、深度滤波降噪是怎么工作的:从带噪输入到干净语音
DeepFilterNet 的输入是 48kHz 采样的带噪语音。框架先用 STFT 把波形转成频谱,网络再分两路处理:高频部分做掩码,预测每个频点是"保留"还是"衰减";低频部分做深度滤波,网络输出一组复数滤波器系数,对原始频谱做滤波。
这个设计的巧妙之处在于省算力。网络不需要"重画"干净频谱,只需要预测滤波器系数,参数量和乘加运算都少,才能在资源受限的设备上实时跑。同时网络会借助 ERB 特征和 GRU 提取时间上下文,区分"这段是背景噪声"还是"说话人正在发声"。
输出是与输入同形状的增强语音。仓库提供 DeepFilterNet、DeepFilterNet2、DeepFilterNet3 三个预训练模型,另有多麦多帧版本,后文展开。
🔧 二、最小可行路径:三步完成降噪环境搭建
- 安装依赖和主包。框架依赖 PyTorch,按顺序装两条命令即可:
pip install torch torchaudio pip install deepfilternet- 命令行一次性降噪。
deepFilter入口随包安装,-m指定预训练模型:
deepFilter -m DeepFilterNet3 path/to/noisy_audio.wav输出默认写入当前目录,用--output-dir指定其他位置;日志会打印每个文件的耗时和 RT factor(处理时间/音频时长)。
- Python 里调用(可选)。集成到自己的流水线只需 3 行:
from df import enhance, init_df model, df_state, _ = init_df() enhanced_audio = enhance(model, df_state, noisy_audio)三、核心能力拆解:选模型、开后置滤波、挂实时插件
三个预训练模型的选择
解决的是降噪程度与算力的不同取舍。用法是在命令里换-m参数:
| 模型 | 定位 | 什么时候选 |
|---|---|---|
| DeepFilterNet | 初版,通用降噪 | 论文指标复现、横向对比 |
| DeepFilterNet2 | 面向嵌入式设备优化 | 边缘设备、实时流水线 |
| DeepFilterNet3 | 感知动机设计,听感优先 | 对音质要求高的场景 |
对稳态背景噪声(空调、风扇)默认配置就够;噪声偏突发时再考虑后置滤波。
--pf后置滤波
解决极噪段仍有可闻残留噪声的问题。用法是命令加--pf,二级滤波会对重噪声段过度衰减。适合离线批处理;实时通话慎用,避免把语音也压掉。
LADSPA 实时插件
解决任意取麦应用的实时噪声抑制。用法是从 ladspa/ 构建libdeep_filter_ladspa.so,配 PipeWire filter-chain 配置(参考 deepfilter-mono-source.conf)创建一个虚拟麦克风。Linux + PipeWire 环境下 Zoom、Discord 直接选这个麦即可;非 PipeWire 系统无法直接接入。
多帧多麦版本
解决助听类多麦克风设备的降噪加波束成形。deepfilternetmf.py 中的多帧算法同时做时间和空间滤波,有多麦硬件才需要用到。
🎧 四、真实用例 walkthrough:会议通话与录音文件批量处理
场景 1:在 Discord/Zoom 里实时降噪麦克风(Linux)
背景:通话时麦克风收进键盘声和电视声。操作:把 LADSPA 插件装到~/.ladspa/,把 filter-chain 配置复制到~/.config/pipewire/filter-chain.conf.d/,再运行pipewire -c filter-chain.conf。结果:应用列表里多出 "DeepFilter Noise Canceling Source",选中后所有走系统音频的应用都听到降噪后的声音,无需逐应用配置。
场景 2:批量处理一个会议录音目录
背景:一个目录里有几十条带噪 wav。用-i指定输入目录、-o指定输出目录:
deepFilter -i path/to/noisy_dir/ -o out/ --pf结果文件名会带模型名后缀(--no-suffix可去掉),每行日志的 RT factor 方便估算整批耗时。
场景 3:把降噪作为 ASR 预处理
仓库自带可运行示例 external_usage.py,流程是init_df→ 读 wav →enhance→ 保存,改几行路径即可套进自己的数据管线。
🛠️ 五、进阶调优与边界:先调衰减上限,再看延迟补偿
用--atten-lim控制降噪上限
该参数按 dB 限制增强信号与原信号的混合程度,例如--atten-lim 12表示最多只压 12dB,保留剩余噪声。LADSPA 配置里的 "Attenuation Limit (dB)" 同理:6-12 为轻度、18-24 为中度、100 为不设限。什么时候改:结果听感"发闷"、有过度抑制痕迹时,调高上限用部分降噪换自然音色。
延迟补偿是默认行为
实时 STFT/ISTFT 引入n_fft - hop个采样点的算法延迟。Python 入口默认开启补偿(可用--no-delay-compensation关闭),Rust 版deep-filter用-D开启,保证输出长度与输入一致。
用--epoch选 checkpoint
best、latest或指定轮次,主要在自训模型上做对比评估时使用。
边界要清楚
deep-filterRust 二进制只支持 48kHz wav;训练流程仅在 Linux 上验证过。实时插件最小延迟 20ms,还有 PipeWire 宿主延迟,不适合要求极低延迟的链路。另外这是噪声抑制而非回声消除:房间回声不会因为它消失,敲击声、突然关门这类非稳态噪声也只能部分压制。
📚 六、资源与下一步
- Python 包主代码(增强、训练、可视化):DeepFilterNet/df/
- 增强入口与全部参数说明:DeepFilterNet/df/enhance.py
- LADSPA 插件与 PipeWire 配置:ladspa/
- Python 集成示例:scripts/external_usage.py
- 预训练模型包:models/
- 训练入口与数据集准备脚本:DeepFilterNet/df/train.py、DeepFilterNet/df/scripts/prepare_data.py
论文方面,三个模型分别对应 ICASSP 2022(初版)、IWAENC 2022(DeepFilterNet2)、INTERSPEECH 2023(DeepFilterNet3)的工作,多麦版本对应 "Deep Multi-Frame Filtering for Hearing Aids"。
下一步建议:先按第二节三步跑通并试听效果,再用-m在同一条音频上 A/B 三个模型,最后调--atten-lim和--pf找到你噪声类型下的平衡点。
【免费下载链接】DeepFilterNetNoise supression using deep filtering项目地址: https://gitcode.com/GitHub_Trending/de/DeepFilterNet
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考