从零开始跑espnet语音分离

本文记录熟悉espnet,从零开始跑脚本的过程。

前情提要

espnet2已安装,了解enh.sh的13个stage,了解运行pipeline。

详见espnet的enh.sh的分析

现在开始上手跑具体代码,并通过单步调试等方法熟悉具体流程。

具体操作

数据准备阶段

先跑第一个stage做数据准备

1
./run.sh --stage 1 --stop-stage 1

报错,发现要在db.sh中填入WSJ0 和 WSJ1的数据集路径

将本地下载的数据集路径填入,报错“matlab not found”

由于历史遗留问题,混合音频生成脚本需要使用matlab,如果已有WSJ0_MIX数据,可在/local/data.sh中注释掉

1
2
# local/wsj0_create_mixture.sh ${wsj_2mix_scripts} ${WSJ0} ${wsj_full_wav} \
# ${wsj_2mix_wav} || exit 1;

然后在对应的data目录中加入混合数据集,将本地WSJ0_MIX中2speakers的部分链接过来。

再跑!报错:

1
2
2025-03-17T21:51:16 (data.sh:74:main) local/wsj_data_prep.sh /mnt/rdata/wsj/WSJ0/??-{?,??}.? /mnt/rdata/wsj/WSJ1/??-{?,??}.?
Could not find (or execute) the sph2pipe program at sph2pipe

怀疑是环境配置问题,利用espnet/tools目录下的环境配置脚本配环境,已经安装conda的话会方便一些

根据脚本安装环境总是碰到错误

1
2
3
ERROR: Requested lightning from https://files.pythonhosted.org/packages/84/21/4a6ca0f7d0679794cc209da282728839d3296337d3759f86048eb4f1d027/lightning-1.8.3.post2-py3-none-any.whl has invalid metadata: .* suffix can only be used with `==` or `!=` operators
torch (>=1.9.*)
~~~~~~^

反复挣扎无果,选择手动安装包

1
./installers/install_transformers.sh

终于可以开跑了,不过stage1后生成了一堆奇怪的数据……

丝滑跑到stage4完成数据准备工作。

训练阶段

开始跑stage5,报错,鉴定为环境问题

于是重开espnet2环境,根据espnet/tools目录下readme的具体指示,用make重新配置环境

中途碰到报错:

1
2
3
4
5
6
Using cached lightning-1.8.0.post1-py3-none-any.whl.metadata (22 kB)
WARNING: Ignoring version 1.8.0.post1 of lightning since it has invalid metadata:
Requested lightning from https://files.pythonhosted.org/packages/89/dc/93c33bb378c0674855c5f1aef24317a9cb37c9cec9235334b6ceb712c662/lightning-1.8.0.post1-py3-none-any.whl has invalid metadata: .* suffix can only be used with `==` or `!=` operators
torch (>=1.9.*)
~~~~~~^
Please use pip<24.1 if you need to use this version.

看上去是各个包之间版本依赖问题,和copilot纠缠许久,未解决,最后寻求lcd老师帮助

由于这个基础代码都是他写的,只是后期经过一些魔改,也许新加的功能造成了一些环境不适配,最后他在espnet目录下使用

1
pip install -e ./

应该是调用了setup.py为espnet2环境配置好

但是跑stage5仍然报错,显示:

1
OSError: /home/xxx/anaconda3/envs/espnet2/lib/python3.8/site-packages/torchaudio/lib/libtorchaudio.so: undefined symbol: _ZNK5torch8autograd4Node4nameEv

这真的很让人心烦,只好问copilot,它说因为torch和torchaudio版本不适配

好好好,一同操作,又把espnet2环境搞炸了

于是重开espnet3环境,这次直接使用pip install -e ./安装,结果还是报错,手动安装torchaudio后,torch和torchaudio版本号一样,于是再次陷入崩溃

这次找了学长zx,他一开始也很懵逼,检查一阵子,发现是tools/activate_python.sh脚本中仍然激活的是espnet2的环境,所以会报版本不一致的错误

修改后,报错未导包,好好好仍旧是环境问题,这次注释掉makefile中关于torch的安装部分,重新make,终于是圆满成功运行,跑完stage5.至此耗时3h,,,