ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

使用 ESPnet 复现 ICASSP 2022 DNS Challenge 4 语音增强:DNS4 配方实战指南

使用 ESPnet 复现 ICASSP 2022 DNS Challenge 4 语音增强:DNS4 配方实战指南 人工智能语音音频深度学习NLP【免费下载链接】espnetEnd-to-End Speech Processing Toolkit项目地址https://gitcode.com/gh_mirrors/es/espnet点击查看免费下载本指南以 ESPnet 仓库中egs2/dns_icassp22/enh1配方为核心完整讲解如何在 ESPnet 环境下复现 ICASSP 2022 深度噪声抑制Deep Noise Suppression, DNS挑战赛第 4 轮DNS Challenge 4, 实时主赛道的语音增强系统。读者将掌握 DNS4 数据集下载与混合仿真、Kaldi 风格数据目录构建、基于卷积编码器/解码器与 TCN 分离器的单通道增强模型训练以及 STOI/SDR/SI-SNR 等指标的自动评估全流程。DNS Challenge 4 与 ESPnet 增强配方概览DNS Challenge 4 是微软发起的 ICASSP 2022 深度噪声抑制挑战赛的实时Real-Time主赛道目标是构建低延迟的语音增强前端从带噪语音中恢复清晰语音。ESPnet 在egs2/dns_icassp22/enh1目录下提供了完整的 Recipe覆盖数据下载、噪声-语音混合仿真、模型训练、推理增强与客观指标评测。该配方与 ESPnet 其他增强任务如egs2/libri2mix/enh1、egs2/wsj0_2mix/enh1遵循同一套enh.sh主流程但其特殊性在于使用 48 kHz 全频带fullband音频而非常用的 16 kHz训练数据全部由官方脚本在线合成clean noise 混音无需手工准备标注面向实时赛道模型设计为因果causal结构支持流式推理。配方目录结构如下核心文件egs2/dns_icassp22/enh1/ ├── run.sh # 顶层入口调用 enh.sh ├── enh.sh # 增强任务主脚本stage 1-12 ├── conf/tuning/train.yaml # 模型与训练配置 ├── local/ │ ├── data.sh # 数据准备三阶段调度 │ ├── download_dns4_dataset.sh │ ├── dns_create_mixture.sh # 混合仿真 │ ├── dns_data_prep.sh # 生成 Kaldi 数据目录 │ └── noisyspeech_synthesizer.py └── scripts/utils/show_enh_score.sh # 结果汇总脚本复现环境原 README 记录的本配方复现环境如下来自 README.md 的 Environments 部分date:Wed Sep 14 09:01:46 UTC 2022python version:3.9.12 (main, Jun 1 2022, 11:38:51) [GCC 7.5.0]espnet version:espnet 202207pytorch version:pytorch 1.12.1cu102Git hash:13db69d3befc3c82a5ff5a11e28bf79d5030603fCommit date:Mon Aug 29 13:44:35 2022 0000需要说明的是上述环境信息只是配方作者当时的运行环境记录当前仓库已随 ESPnet 版本演进只要安装满足 installation.md 要求的 ESPnet含 espnet2 增强模块、torch-complex 依赖即可运行该配方训练 48 kHz 全频带数据建议配备 GPU。数据准备下载、混合仿真与数据目录构建local/data.sh将数据准备拆成三个 stage通过run.sh中的--local_data_opts --total_hours 150 --nj 8 --fs 48k传入参数控制# local/data.sh 支持参数节选 Usage: $0 [--stage stage] [--stop_stage stop_stage] [--total_hours total_hours] [--nj nj] [--fs] fs --total_hours: 合成带噪语音的时长小时默认150DNS4 英文朗读语音约 600 小时 建议设在此值以下以避免数据重复 --nj: 合成带噪数据的并行任务数默认1 --fs: 合成带噪数据的采样率默认48000其中DNS4数据根目录变量定义在 db.shDNS4downloads即数据默认下载到downloads目录若使用data.sh请确认该变量已正确填写。Stage 0数据集下载local/download_dns4_dataset.sh改编自 DNS-Challenge 官方仓库的下载脚本原始许可证为 CC-BY 4.0。脚本从微软 Azure Blobdns4public.blob.core.windows.net拉取数据并解压需要注意以下几点存储开销巨大解压后全部数据约 892G含各语种语音、噪声、冲激响应等归档压缩态约 550GB下载前务必确认磁盘空间默认仅下载英文朗读语音与全频带噪声脚本中BLOB_NAMES数组默认启用了read_speech_000~039共 40 个分片约 299G与noise_fullbandaudioset 7 个分片 freesound 2 个分片约 58G法语/德语/意大利语/俄语/西语/情感语音/VocalSet/VCTK 等分片默认注释可按需取消注释下载完成后脚本还会克隆 DNS-Challenge 官方仓库并git checkout 5582dcf5ba43155621de72a035eb54a7d233af14将noisyspeech_synthesizer.cfg、audiolib.py、utils.py复制到配方local/目录作为后续混合仿真的依赖。Stage 1混合仿真Data Simulationlocal/dns_create_mixture.sh通过sed改写官方noisyspeech_synthesizer.cfg中的输入/输出路径与参数生成新的训练配置data/noisyspeech_synthesizer.cfg随后调用local/noisyspeech_synthesizer.py并行合成带噪语音# 关键路径改写节选见 local/dns_create_mixture.sh noise_dir${dns}/datasets_fullband/noise_fullband speech_dir${dns}/datasets_fullband/clean_fullband/read_speech # 输出 noisy_wav${dns_wav}/noisy clean_wav${dns_wav}/clean noise_wav${dns_wav}/noise默认不使用歌唱语音、中文语音与情感语音use_singing_data0、use_mandarin_data0、use_emotion_data0如需引入可在脚本中开启。脚本执行后会生成noisy/、clean/、noise/三个 wav 目录文件名带相同的fileid_N编号用于后续对齐。Stage 2数据准备Data Preparationlocal/dns_data_prep.sh将混合仿真产物转换为 ESPnet/Kaldi 标准数据目录最终生成tr_synthetic、cv_synthetic、tt_synthetic三个集合扫描noisy/下全部 wav按 80%/10%/10% 比例切分为训练/验证/测试对应tr/cv/tt为每个集合生成wav.scp、utt2spk、spk2utt、text通过sed正则替换路径生成噪声参考noise1.scp与干净语音参考spk1.scp例如将带噪路径映射为clean_fileid_N.wav与noise_fileid_N.wav。注意该配方在训练时不使用噪声与去混响参考见下文run.sh中--use_dereverb_ref false --use_noise_ref false但noise1.scp/spk1.scp仍被生成其中spk1.scp正是增强训练的监督信号clean 参考。顶层入口 run.sh 解读run.sh 是本配方的唯一入口核心调用如下sample_rate48k train_settr_synthetic valid_setcv_synthetic test_setscv_synthetic tt_synthetic ./enh.sh \ --lang en \ --train_set ${train_set} \ --valid_set ${valid_set} \ --test_sets ${test_sets} \ --fs ${sample_rate} \ --ngpu 1 \ --ref_num 1 \ --local_data_opts --total_hours 150 --nj 8 --fs ${sample_rate} \ --enh_config ./conf/tuning/train.yaml \ --use_dereverb_ref false \ --use_noise_ref false \ --max_wav_duration 31 \ --inference_model valid.loss.best.pth \ --nj 8 \ $参数语义--fs 48k全频带采样率--max_wav_duration 31训练时过滤掉超过 31 秒的样本DNS 官方混合片段约 30 秒量级--ref_num 1单说话人增强任务只有一个干净参考通道spk1.scp--enh_config ./conf/tuning/train.yaml训练配置文件原 README 中写为./conf/train.yaml实际位于conf/tuning/下--inference_model valid.loss.best.pth推理时选取验证 loss 最优的模型权重末尾$允许用户在命令行追加--stage、--stop_stage等覆盖参数。训练配置详解enh_train_raw原 README 的enh_train_raw小节即对应 conf/tuning/train.yaml。该配置可分为训练策略与模型架构两大部分训练策略optim: adam init: xavier_uniform max_epoch: 100 batch_type: folded batch_size: 32 num_workers: 4 optim_conf: lr: 5.0e-04 eps: 1.0e-08 weight_decay: 1.0e-7 patience: 10 val_scheduler_criterion: - valid - loss best_model_criterion: - - valid - si_snr - max - - valid - loss - min keep_nbest_models: 1 scheduler: reducelronplateau scheduler_conf: mode: min factor: 0.7 patience: 1优化器为 Adam初始学习率5.0e-04权重衰减1.0e-7参数采用 Xavier Uniform 初始化训练 100 个 epochbatch_type: folded表示按折叠方式批处理batch_size: 32学习率调度采用reducelronplateau以验证集 loss 为监控指标连续 1 个 epoch 无改善则乘以factor: 0.7整体早停patience: 10模型挑选标准best_model_criterion同时考虑验证集 SI-SNR越大越好与 loss越小越好keep_nbest_models: 1仅保留最优权重。模型架构卷积编码器/解码器 TCN 分离器encoder: conv encoder_conf: channel: 512 kernel_size: 960 # 20ms for 48k sample rate stride: 480 # 10ms for 48k sample rate decoder: conv decoder_conf: channel: 512 kernel_size: 960 # 20ms for 48k sample rate stride: 480 # 10ms for 48k sample rate separator: tcn separator_conf: num_spk: 1 layer: 8 stack: 3 bottleneck_dim: 128 hidden_dim: 512 kernel: 3 causal: True norm_type: gLN nonlinear: relu编码器ConvEncoder实现见 espnet2/enh/encoder/conv_encoder.py512 个卷积通道kernel_size: 960在 48 kHz 下对应 20 ms 窗长stride: 480对应 10 ms 帧移——这是典型的时域 Conv-TasNet 风格前端将波形映射为 512 维特征序列解码器ConvDecoder见 espnet2/enh/decoder/conv_decoder.py与编码器对称将掩蔽后的特征重建为波形分离器TCNSeparator见 espnet2/enh/separator/tcn_separator.py8 层 × 3 栈的时间卷积网络bottleneck 128 维、隐藏 512 维、卷积核 3causal: True是面向实时赛道的关键设置TCN 采用因果卷积配合流式接口forward_streaming可实现逐帧低延迟推理norm_type: gLN全局层归一化掩码非线性为 ReLU采用掩蔽式masking增强而非映射式mapping——从TCNSeparator.forward源码可见网络输出各说话人掩码后与输入特征逐元素相乘得到增强结果。训练目标criterions: # The first criterion - name: si_snr conf: eps: 1.0e-7 wrapper: fixed_order wrapper_conf: weight: 1.0训练损失为尺度不变信噪比SI-SNReps: 1.0e-7用于数值稳定fixed_order包装器以固定顺序匹配参考与估计权重 1.0。这与 README 中评估表格的SI_SNR指标一致即用什么训练、用什么评测。enh.sh 全流程从数据到模型发布的 12 个 Stageenh.sh 是 ESPnet 增强任务的通用主脚本本配方通过 run.sh 传入参数驱动。其核心阶段如下Stage内容说明1数据准备调用local/data.sh完成下载/混合/切分2速度扰动本配方未启用speed_perturb_factors为空3格式化 wav.scp将 scp 指向的音频按--fs 48k重采样为dump/raw下的标准格式并生成spk1.scp、utt2num_samples4过滤短/长音频依据--min_wav_duration默认 0.1s与--max_wav_duration 31过滤训练/验证集5统计收集espnet2.bin.enh_train --collect_stats true并行计算形状文件6模型训练espnet2.bin.launch拉起分布式训练输出到exp/enh_train_raw由--enh_config推导的 tag7推理增强espnet2.bin.enh_inference对验证/测试集输出增强语音spk1.scp8指标评分espnet2.bin.enh_scoring计算 STOI/SAR/SDR/SIR/SI_SNR并调用show_enh_score.sh生成RESULTS.md9-10可选ASR 评测使用预训练 ASR 计算 WER/CER11模型打包espnet2.bin.pack生成可发布 zip12上传 HuggingFace需配置hf_repo与 git-lfs其中 Stage 3 的format_wav_scp.sh会把wav.scp可能含管道命令转换为真实音频文件并统一采样率Stage 8 评分时对观测信号observation与增强信号各评一次最终增强结果的 Markdown 表格由 scripts/utils/show_enh_score.sh 自动汇总生成——README 中的结果表格即由此脚本产出。常用运行方式从数据准备开始全流程执行或在已有数据上从训练阶段开始# 在 egs2/dns_icassp22/enh1 目录下 ./run.sh --stage 1 --stop_stage 12 # 全流程 ./run.sh --stage 5 --stop_stage 8 # 数据已就绪只做训练与评测 ./run.sh --stage 7 --stop_stage 8 # 模型已训练只做推理与评分评估结果与指标解读原 README 记录的训练配置enh_train_raw在 DNS4 合成验证集上的客观指标如下datasetSTOISARSDRSIRSI_SNRenhanced_cv_synthetic91.1415.7615.760.0015.56指标说明与espnet2.bin.enh_scoring实现一致STOI91.14短时客观可懂度衡量增强语音的可懂性越接近 100 越好SAR15.76/ SDR15.76信号到伪影比 / 信号失真比SDR 是整体分离质量的综合指标SIR0.00信号到干扰比。由于本配方是单通道单说话人纯降噪任务ref_num1无其他说话人干扰干扰项基本为 0故 SIR 为 0.00这是正常现象而非缺陷SI_SNR15.56尺度不变信噪比与训练目标一致反映降噪前后信噪比提升程度。需要说明的是上述数值是配方作者在 2022 年环境下的复现结果不同数据子集、训练随机性与硬件条件下重新运行会略有浮动该表格可通过show_enh_score.sh在本地复现后对比。实战要点与注意事项磁盘与带宽是首要瓶颈仅默认子集read_speech noise_fullband解压后即超过 350G务必在 download_dns4_dataset.sh 中按需裁剪BLOB_NAMES例如实验量较小时可只保留少量read_speech分片混合时长控制--total_hours 150远低于 DNS4 朗读语音总量约 600 小时意在避免训练与官方测试集数据重叠加大该值可提升数据多样性但会线性增加合成时间因果模型与流式推理causal: True保证低延迟实时可用TCNSeparator提供了forward_streaming接口支撑逐帧处理若追求非因果的更高离线指标可将其改为false需同步调整 kernel/stride 配置评测口径Stage 8 会分别输出观测信号dump/raw/RESULTS.md与增强信号exp/.../RESULTS.md的评分对比两者可量化模型带来的增益从 Model Zoo 直接推理enh.sh支持--download_model选项从 ESPnet Model Zoo 拉取预训练增强模型并直接推理评分适合不想从零训练的用户。小结egs2/dns_icassp22/enh1是 ESPnet 中面向 48 kHz 全频带、因果实时语音增强的完整范本官方数据下载与在线混合仿真解决了训练数据来源问题conf/tuning/train.yaml给出了 Conv-TasNet 风格卷积编码/解码 因果 TCN的紧凑配置enh.sh则把数据格式化、统计、训练、推理、评分、打包串联为可复现的流水线。读者既可端到端复现 README 中记录的 STOI 91.14 / SI-SNR 15.56 结果也可在此基础上调整--total_hours、--fs、causal等参数快速迁移到自己的降噪任务。赞分享人工智能语音音频深度学习NLP【免费下载链接】espnetEnd-to-End Speech Processing Toolkit项目地址https://gitcode.com/gh_mirrors/es/espnet点击查看免费下载相关推荐ESPnet DNS Interspeech 2020 语音增强 Recipe 实战指南从 BLSTM 到 TFGridNet 的完整复现与评分解读ESPnet DNS Interspeech 2020 语音增强 Recipe 实战指南从 BLSTM 到 TFGridNet 的完整复现与评分解读 本指南以人工智能语音音频深度学习NLPESPnet2 复现 DNS ICASSP 2021 语音增强enh1recipe 实战从数据仿真到 TCN 降噪与结果评测ESPnet2 复现 DNS ICASSP 2021 语音增强enh1recipe 实战从数据仿真到 TCN 降噪与结果评测 本文以 egs2/dns_i人工智能语音音频深度学习NLPESPnet2 MS-SNSD 语音增强 Recipe 实战指南基于 TF-GridNet 的增强基线复现ESPnet2 MS SNSD 语音增强 Recipe 实战指南基于 TF GridNet 的增强基线复现 本指南以 egs2/ms_snsd/enh1/RE人工智能语音音频深度学习NLP上一篇终极指南StofDoctrineExtensionsBundle 常见问题快速解决方案下一篇基于 MCP 构建 Microsoft 365 Copilot 声明式 Agentmcp-m365-agent-expert 实战指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表