DeepFilterNet
一个低复杂度的全频带音频(48kHz)语音增强框架,基于深度过滤技术。
作为虚拟噪声抑制麦克风的PipeWire集成请参见这里。
演示
https://github.com/Rikorose/DeepFilterNet/assets/16517898/79679fd7-de73-4c22-948c-891927c7d2ca
要运行演示(仅限Linux),使用:
cargo +nightly run -p df-demo --features ui --bin df-demo --release
新闻
-
新的DeepFilterNet演示:DeepFilterNet: 感性驱动的实时语音增强
-
新的多帧过滤论文:Deep Multi-Frame Filtering for Hearing Aids
-
实时版本和LADSPA插件
-
DeepFilterNet2论文:DeepFilterNet2: 趋向于嵌入式设备的实时语音增强,全频带音频
-
原始DeepFilterNet论文:DeepFilterNet: 一个低复杂度的全频带音频语音增强框架,基于深度过滤
使用方法
deep-filter
从发布页面下载预编译的deep-filter二进制文件。
你可以使用deep-filter
在嘈杂的.wav音频文件中抑制噪音。目前,仅支持采样率为48kHz的wav文件。
使用方法:
deep-filter [OPTIONS] [FILES]...
参数:
<FILES>...
选项:
-D, --compensate-delay
补偿STFT和模型前瞻的延迟
-h, --help
打印帮助信息
-m, --model <MODEL>
模型tar.gz路径。默认为DeepFilterNet2。
-o, --out-dir <OUT_DIR>
[默认: out]
--pf
启用后滤波器
-v, --verbose
日志详细程度
-V, --version
打印版本信息
如果你想使用PyTorch后端,例如进行GPU处理,请参见下面的Python用法。
DeepFilterNet框架
这个框架支持Linux、MacOS和Windows。训练仅在Linux下测试过。框架结构如下:
libDF
包含用于数据加载和增强的Rust代码。DeepFilterNet
包含DeepFilterNet代码训练、评估和可视化以及预训练模型权重。pyDF
包含libDF STFT/ISTFT处理循环的Python封装。pyDF-data
包含libDF数据集功能的Python封装,并提供PyTorch数据加载器。ladspa
包含一个用于实时噪声抑制的LADSPA插件。models
包含在DeepFilterNet(Python)或libDF/deep-filter(Rust)中使用的预训练模型。
DeepFilterNet Python: PyPI
通过pip安装DeepFilterNet Python轮:
# 安装来自pytorch.org的cpu/cuda pytorch(>=1.9)依赖,例如:
pip install torch torchaudio -f https://download.pytorch.org/whl/cpu/torch_stable.html
# 安装DeepFilterNet
pip install deepfilternet
# 或安装包括数据加载功能的DeepFilterNet进行训练(仅限Linux)
pip install deepfilternet[train]
使用DeepFilterNet增强嘈杂的音频文件
# 使用--output-dir [OUTPUT_DIR]指定输出目录
deepFilter path/to/noisy_audio.wav
手动安装
通过rustup安装cargo。建议使用conda
或virtualenv
。
请阅读注释并仅执行你需要的命令。
安装Python依赖和libDF:
cd path/to/DeepFilterNet/ # 进入仓库目录
# 推荐:安装或激活一个Python环境
# 必须:从pytorch.org安装cpu/cuda pytorch(>=1.8)依赖,例如:
pip install torch torchaudio -f https://download.pytorch.org/whl/cpu/torch_stable.html
# 安装用于编译libdf和DeepFilterNet Python轮的构建依赖
pip install maturin poetry
# 安装其余DeepFilterNet Python依赖
# *选项A:* 在你的环境中全局安装DeepFilterNet Python轮。如果你希望按现有方式使用此仓库且不在此仓库内开发,请执行此操作。
poetry -C DeepFilterNet install -E train -E eval
# *选项B:* 如果你希望在本仓库内开发,仅安装依赖并使用仓库版本
poetry -C DeepFilterNet install -E train -E eval --no-root
export PYTHONPATH=$PWD/DeepFilterNet # 并正确设置Python路径
# 构建并安装enhance.py所需的libdf Python包
maturin develop --release -m pyDF/Cargo.toml
# *可选*: 安装带有数据集和数据加载功能的libdfdata Python包以进行训练
# 需要的构建依赖:HDF5头文件(例如Ubuntu: libhdf5-dev)
maturin develop --release -m pyDF-data/Cargo.toml
# 如果你遇到HDF5问题,可以尝试静态构建和链接HDF5:
maturin develop --release --features hdf5-static -m pyDF-data/Cargo.toml
从命令行使用DeepFilterNet
使用DeepFilterNet增强嘈杂的音频文件
$ python DeepFilterNet/df/enhance.py --help
使用方法: enhance.py [-h] [--model-base-dir MODEL_BASE_DIR] [--pf] [--output-dir OUTPUT_DIR] [--log-level LOG_LEVEL] [--compensate-delay]
noisy_audio_files [noisy_audio_files ...]
位置参数:
noisy_audio_files 噪音文件列表,与干净的语音文件混合。
可选参数:
-h, --help 显示此帮助信息并退出
--model-base-dir MODEL_BASE_DIR, -m MODEL_BASE_DIR
包含检查点和配置的模型目录。
要加载预训练模型,你可以只提供模型名称,例如`DeepFilterNet`。
默认情况下,加载预训练的DeepFilterNet2模型。
--pf 在非常嘈杂的部分稍微过度衰减的后滤波器。
--output-dir OUTPUT_DIR, -o OUTPUT_DIR
增强音频文件将被存储的目录。
--log-level LOG_LEVEL
日志详细程度。可以是(debug,info,error,none)之一。
--compensate-delay, -D
添加一些填充以补偿实时STFT/ISTFT实现引入的延迟。
# 使用原始DeepFilterNet增强音频
python DeepFilterNet/df/enhance.py -m DeepFilterNet path/to/noisy_audio.wav
# 使用DeepFilterNet2增强音频
python DeepFilterNet/df/enhance.py -m DeepFilterNet2 path/to/noisy_audio.wav
在你的Python脚本中使用DeepFilterNet
from df import enhance, init_df
模型, df_state, _ = init_df() # 加载默认模型
增强音频 = enhance(模型, df_state, 嘈杂音频)
参见 此处 获取完整示例。
训练
入口点是 DeepFilterNet/df/train.py
。它需要一个包含 HDF5 数据集和数据集配置 JSON 文件的数据目录。
因此,您首先需要以 HDF5 格式创建数据集。每个数据集通常仅包含噪声、语音或房间脉冲响应的训练集、验证集或测试集。
# 安装创建数据集的额外依赖
pip install h5py librosa soundfile
# 进入 DeepFilterNet Python 包
cd path/to/DeepFilterNet/DeepFilterNet
# 准备包含 .wav 文件路径的文本文件(例如名为 training_set.txt)
#
# 用法:prepare_data.py [-h] [--num_workers NUM_WORKERS] [--max_freq MAX_FREQ] [--sr SR] [--dtype DTYPE]
# [--codec CODEC] [--mono] [--compression COMPRESSION]
# type audio_files hdf5_db
#
# 其中:
# type: 可以是 `speech`、`noise`、`rir` 之一
# audio_files: 包含要包含在数据集中的音频文件路径的文本文件
# hdf5_db: 输出 HDF5 数据集。
python df/scripts/prepare_data.py --sr 48000 speech training_set.txt TRAIN_SET_SPEECH.hdf5
所有数据集应在一个数据集文件夹中以供训练脚本使用。
数据集配置文件应包含 3 个条目:"train"(训练)、"valid"(验证)、"test"(测试)。每个条目包含一个数据集列表(例如语音、噪声和房间脉冲响应数据集)。您可以使用多个语音或噪声数据集。可以选择性地指定采样因子,用于过采样或欠采样数据集。例如,您有一个带有短暂噪声的特定数据集,并希望通过过采样来增加非稳态噪声的数量。在大多数情况下,您希望将此因子设置为 1。
数据集配置示例:
dataset.cfg
{
"train": [
[
"TRAIN_SET_SPEECH.hdf5",
1.0
],
[
"TRAIN_SET_NOISE.hdf5",
1.0
],
[
"TRAIN_SET_RIR.hdf5",
1.0
]
],
"valid": [
[
"VALID_SET_SPEECH.hdf5",
1.0
],
[
"VALID_SET_NOISE.hdf5",
1.0
],
[
"VALID_SET_RIR.hdf5",
1.0
]
],
"test": [
[
"TEST_SET_SPEECH.hdf5",
1.0
],
[
"TEST_SET_NOISE.hdf5",
1.0
],
[
"TEST_SET_RIR.hdf5",
1.0
]
]
}
最后,启动训练脚本。训练脚本可能会创建一个模型 base_dir
,用于记录日志、存储一些音频样本、模型检查点和配置。如果没有找到配置文件,它将创建一个默认配置文件。参见
DeepFilterNet/pretrained_models/DeepFilterNet
获取配置文件。
# 用法: train.py [-h] [--debug] data_config_file data_dir base_dir
python df/train.py path/to/dataset.cfg path/to/data_dir/ path/to/base_dir/
引用指南
为了重现任何指标,我们建议使用通过 pip install deepfilternet
安装的 Python 实现。
如果您使用此框架,请引用:DeepFilterNet: A Low Complexity Speech Enhancement Framework for Full-Band Audio based on Deep Filtering
@inproceedings{schroeter2022deepfilternet,
title={{DeepFilterNet}: A Low Complexity Speech Enhancement Framework for Full-Band Audio based on Deep Filtering},
author = {Schröter, Hendrik and Escalante-B., Alberto N. and Rosenkranz, Tobias and Maier, Andreas},
booktitle={ICASSP 2022 IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP)},
year={2022},
organization={IEEE}
}
如果您使用 DeepFilterNet2 模型,请引用:DeepFilterNet2: Towards Real-Time Speech Enhancement on Embedded Devices for Full-Band Audio
@inproceedings{schroeter2022deepfilternet2,
title = {{DeepFilterNet2}: Towards Real-Time Speech Enhancement on Embedded Devices for Full-Band Audio},
author = {Schröter, Hendrik and Escalante-B., Alberto N. and Rosenkranz, Tobias and Maier, Andreas},
booktitle={17th International Workshop on Acoustic Signal Enhancement (IWAENC 2022)},
year = {2022},
}
如果您使用 DeepFilterNet3 模型,请引用:DeepFilterNet: Perceptually Motivated Real-Time Speech Enhancement
@inproceedings{schroeter2023deepfilternet3,
title = {{DeepFilterNet}: Perceptually Motivated Real-Time Speech Enhancement},
author = {Schröter, Hendrik and Rosenkranz, Tobias and Escalante-B., Alberto N. and Maier, Andreas},
booktitle={INTERSPEECH},
year = {2023},
}
如果您使用多帧波束成形算法,请引用 Deep Multi-Frame Filtering for Hearing Aids
@inproceedings{schroeter2023deep_mf,
title = {Deep Multi-Frame Filtering for Hearing Aids},
author = {Schröter, Hendrik and Rosenkranz, Tobias and Escalante-B., Alberto N. and Maier, Andreas},
booktitle={INTERSPEECH},
year = {2023},
}
许可证
DeepFilterNet 是免费且开源的!此存储库中的所有代码均采用以下双重许可:
- MIT 许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
- Apache 许可证,版本 2.0 (LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
您可以选择您喜欢的许可证!
除非您另行明确声明,您有意提交包含在此工作中的任何贡献,按照 Apache-2.0 许可证定义的,应如上双重许可,无需任何附加条款或条件。