Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

如何生成训练数据? #25

Open
haha010508 opened this issue Apr 10, 2024 · 24 comments
Open

如何生成训练数据? #25

haha010508 opened this issue Apr 10, 2024 · 24 comments

Comments

@haha010508
Copy link

haha010508 commented Apr 10, 2024

请问一下,我目前只有LDC93S6A这个数据集,在运行 sms_wsj 的make时总是出错,所以只生成了wsj_8k_zeromean(里面是wav文件)和wsj_8k_zermean.json(这文件里的性别,转录文本都是空的,我的kaldi跑不通)这两个文件,我的最终目标是把这个模型应用到2mic的阵列上,进行降噪。我要如何才能跑通这个例子呀?是不是只需要有干净数据就行了?有没有一步一步的操作步骤呀?

@quancs
Copy link
Member

quancs commented Apr 10, 2024

生成SMS-WSJ的步骤请参考这个仓库 https://github.com/fgnt/sms_wsj

@haha010508
Copy link
Author

请问一下,那个数据集生成训练数据相对方便一点呀?

@quancs
Copy link
Member

quancs commented Apr 11, 2024

其实 SMS-WSJ 算是比较方便的了

@haha010508
Copy link
Author

请问一下,WHAMR! 这个数据是不是按照生成方式生产完了就可以直接训练了?是不是要生成立体声数据?

@quancs
Copy link
Member

quancs commented Apr 15, 2024

是的,这个数据集使用的就是原WHAMR!数据集,没有做额外的操作

@haha010508
Copy link
Author

haha010508 commented Apr 29, 2024

请问我训练时的误差突然变成这个了,学习率出问题了吗?
si_sdr 从11突然变到了32,
这是我的训练代码:

python SharedTrainer.py fit
--config=configs/SpatialNet.yaml
--config=configs/datasets/sms_wsj_plus.yaml
--model.channels=[0,1,2,3,4,5]
--model.arch.dim_input=12
--model.arch.dim_output=4
--model.arch.num_freqs=129
--trainer.precision=bf16-mixed
--model.compile=true
--data.batch_size=[2,4]
--trainer.devices=0,
--trainer.max_epochs=100

Epoch 62 metrics: val/neg_si_sdr=-11.5534 val/metric=11.5534 val/sdr=14.1095 val/nb_pesq=2.8877
Epoch 63 metrics: val/neg_si_sdr=-11.5530 val/metric=11.5530 val/sdr=14.0554 val/nb_pesq=2.8877
Epoch 64 metrics: val/neg_si_sdr=-11.5635 val/metric=11.5635 val/sdr=14.1285 val/nb_pesq=2.9130
Epoch 65 metrics: val/neg_si_sdr=-11.5392 val/metric=11.5392 val/sdr=14.1616 val/nb_pesq=2.9130
Epoch 66 metrics: val/neg_si_sdr=-11.6123 val/metric=11.6123 val/sdr=14.1467 val/nb_pesq=2.9130
Epoch 67 metrics: val/neg_si_sdr=-11.5472 val/metric=11.5472 val/sdr=14.0926 val/nb_pesq=2.9130
Epoch 68 metrics: val/neg_si_sdr=-11.5318 val/metric=11.5318 val/sdr=14.1027 val/nb_pesq=2.9130
Epoch 69 metrics: val/neg_si_sdr=-11.6058 val/metric=11.6058 val/sdr=14.1100 val/nb_pesq=2.9208
Epoch 70 metrics: val/neg_si_sdr=-11.6708 val/metric=11.6708 val/sdr=14.1268 val/nb_pesq=2.9208
Epoch 71 metrics: val/neg_si_sdr=-11.6770 val/metric=11.6770 val/sdr=14.1461 val/nb_pesq=2.9208
Epoch 72 metrics: val/neg_si_sdr=-11.7158 val/metric=11.7158 val/sdr=14.2619 val/nb_pesq=2.9208
Epoch 73 metrics: val/neg_si_sdr=32.6677 val/metric=-32.6677 val/sdr=-11.5814 val/nb_pesq=2.9208
Epoch 74 metrics: val/neg_si_sdr=33.5684 val/metric=-33.5684 val/sdr=-11.7089 val/nb_pesq=1.3021
Epoch 75 metrics: val/neg_si_sdr=33.5379 val/metric=-33.5379 val/sdr=-11.7073 val/nb_pesq=1.3021
Epoch 76 metrics: val/neg_si_sdr=33.4594 val/metric=-33.4594 val/sdr=-11.7612 val/nb_pesq=1.3021
Epoch 77 metrics: val/neg_si_sdr=33.5735 val/metric=-33.5735 val/sdr=-11.7613 val/nb_pesq=1.3021
Epoch 78 metrics: val/neg_si_sdr=33.6384 val/metric=-33.6384 val/sdr=-11.6898 val/nb_pesq=1.3021
Epoch 79 metrics: val/neg_si_sdr=32.3899 val/metric=-32.3899 val/sdr=-11.1878 val/nb_pesq=1.3845
Epoch 80 metrics: val/neg_si_sdr=33.2831 val/metric=-33.2831 val/sdr=-11.5233 val/nb_pesq=1.3845
Epoch 81 metrics: val/neg_si_sdr=33.7293 val/metric=-33.7293 val/sdr=-11.7670 val/nb_pesq=1.3845
Epoch 82 metrics: val/neg_si_sdr=32.7420 val/metric=-32.7420 val/sdr=-11.4137 val/nb_pesq=1.3845
Epoch 83 metrics: val/neg_si_sdr=32.3384 val/metric=-32.3384 val/sdr=-11.1690 val/nb_pesq=1.3845
Epoch 84 metrics: val/neg_si_sdr=23.6844 val/metric=-23.6844 val/sdr=-8.5213 val/nb_pesq=1.3123
Epoch 85 metrics: val/neg_si_sdr=26.0809 val/metric=-26.0809 val/sdr=-9.8542 val/nb_pesq=1.3123

@quancs
Copy link
Member

quancs commented Apr 29, 2024

大概是训练梯度出了问题,可能是半精度训练导致的,你试试从出问题前的一个epoch使用32精度继续训练

@haha010508
Copy link
Author

haha010508 commented Apr 30, 2024

请问训练在线模型这样写训练代码是对的吗?

python SharedTrainer.py fit
--config=configs/onlineSpatialNet.yaml
--config=configs/datasets/sms_wsj_plus.yaml
--model.channels=[0,1,2,3,4,5]
--model.arch.dim_input=12
--model.arch.dim_output=4
--model.arch.num_freqs=129
--trainer.precision=bf16-mixed
--model.compile=true
--data.batch_size=[2,4]
--trainer.devices=0,
--trainer.max_epochs=100

但是我这里报了一个错误:
error: Parser key "model.stft":
Problem with given class_path 'models.io.stft.STFT':
Validation failed: Key "n_fft" is required but not included in config object or its value is None.

我查看onlineSpatialNet.yaml 这个文件注释掉了,是为啥呀?
stft:
class_path: models.io.stft.STFT
init_args: {} # by default set to {} to avoid using wrong stft config
#n_fft: 256
#n_hop: 128

@quancs
Copy link
Member

quancs commented Apr 30, 2024

你把{}删掉,把stft的参数设置为合适的就行。注释掉的原因是想使用者自行设置stft参数,因为不同数据集的参数不一样,因此无法给一个通用的

@haha010508
Copy link
Author

haha010508 commented Apr 30, 2024

多谢您的回复,现在训练起来了!

再请教一下:
如果要训练2 channel的直接把 onlineSpatialNet.yaml 文件里的
channels: [0, 1, 2, 3, 4, 5]
ref_channel: 0
换成
channels: [0, 3]
ref_channel: 0
可以吗?

@quancs
Copy link
Member

quancs commented Apr 30, 2024

可以的

@haha010508
Copy link
Author

haha010508 commented May 10, 2024

请问一下:我的训练到这里就崩了,前面有这样一个错误,但是能训练,请问是怎么回事?

[2024-05-08 18:49:23,275] [5/31] torch._dynamo.variables.higher_order_ops: [ERROR] unimplemented(f"comparison {typestr(left)} {op} {typestr(right)}")
[2024-05-08 18:49:23,275] [5/31] torch._dynamo.variables.higher_order_ops: [ERROR] File "/home/byd/anaconda3/envs/nbss2/lib/python3.10/site-packages/torch/_dynamo/exc.py", line 193, in unimplemented
[2024-05-08 18:49:23,275] [5/31] torch._dynamo.variables.higher_order_ops: [ERROR] raise Unsupported(msg)
[2024-05-08 18:49:23,275] [5/31] torch._dynamo.variables.higher_order_ops: [ERROR] torch._dynamo.exc.Unsupported: comparison PythonModuleVariable() ConstantVariable(NoneType)
Epoch 0 metrics: val/neg_snr=-0.7955 val/metric=0.7955 val/sdr=-1.0523 val/neg_si_sdr=7.9343 val/nb_pesq=1.4077
...
Epoch 19 metrics: val/neg_snr=-2.4728 val/metric=2.4728 val/sdr=1.7709 val/neg_si_sdr=2.4059 val/nb_pesq=1.6122
Epoch 20 metrics: val/neg_snr=-2.6547 val/metric=2.6547 val/sdr=2.4562 val/neg_si_sdr=1.7932 val/nb_pesq=1.6122
Epoch 21 metrics: val/neg_snr=283.0917 val/metric=-283.0917 val/sdr=-10.3441 val/neg_si_sdr=34.2788 val/nb_pesq=1.6122
我的训练代码是这样的:
python SharedTrainer.py fit
--config=configs/onlineSpatialNet.yaml
--config=configs/datasets/sms_wsj_plus.yaml
--model.channels=[0,3]
--model.arch.dim_input=4
--model.arch.dim_output=4
--model.arch.num_freqs=129
--trainer.precision=32-true
--model.compile=true
--data.batch_size=[2,4]
--trainer.devices=0,
--trainer.max_epochs=100

@Ezreal11
Copy link

请问一下,我目前只有LDC93S6A这个数据集,在运行 sms_wsj 的make时总是出错,所以只生成了wsj_8k_zeromean(里面是wav文件)和wsj_8k_zermean.json(这文件里的性别,转录文本都是空的,我的kaldi跑不通)这两个文件,我的最终目标是把这个模型应用到2mic的阵列上,进行降噪。我要如何才能跑通这个例子呀?是不是只需要有干净数据就行了?有没有一步一步的操作步骤呀?

请问您最后使用了哪个数据集呢?如何获取wsj0?在官网上注册了说要等管理员接受。

@haha010508
Copy link
Author

请问一下,我目前只有LDC93S6A这个数据集,在运行 sms_wsj 的make时总是出错,所以只生成了wsj_8k_zeromean(里面是wav文件)和wsj_8k_zermean.json(这文件里的性别,转录文本都是空的,我的kaldi跑不通)这两个文件,我的最终目标是把这个模型应用到2mic的阵列上,进行降噪。我要如何才能跑通这个例子呀?是不是只需要有干净数据就行了?有没有一步一步的操作步骤呀?

请问您最后使用了哪个数据集呢?如何获取wsj0?在官网上注册了说要等管理员接受。

wsj0,这个数据要下载,得是会员

@Ezreal11
Copy link

请问一下,我目前只有LDC93S6A这个数据集,在运行 sms_wsj 的make时总是出错,所以只生成了wsj_8k_zeromean(里面是wav文件)和wsj_8k_zermean.json(这文件里的性别,转录文本都是空的,我的kaldi跑不通)这两个文件,我的最终目标是把这个模型应用到2mic的阵列上,进行降噪。我要如何才能跑通这个例子呀?是不是只需要有干净数据就行了?有没有一步一步的操作步骤呀?

请问您最后使用了哪个数据集呢?如何获取wsj0?在官网上注册了说要等管理员接受。

wsj0,这个数据要下载,得是会员

感谢,我等等回复

@quancs
Copy link
Member

quancs commented May 13, 2024

请问一下:我的训练到这里就崩了,前面有这样一个错误,但是能训练,请问是怎么回事?

[2024-05-08 18:49:23,275] [5/31] torch._dynamo.variables.higher_order_ops: [ERROR] unimplemented(f"comparison {typestr(left)} {op} {typestr(right)}") [2024-05-08 18:49:23,275] [5/31] torch._dynamo.variables.higher_order_ops: [ERROR] File "/home/byd/anaconda3/envs/nbss2/lib/python3.10/site-packages/torch/_dynamo/exc.py", line 193, in unimplemented [2024-05-08 18:49:23,275] [5/31] torch._dynamo.variables.higher_order_ops: [ERROR] raise Unsupported(msg) [2024-05-08 18:49:23,275] [5/31] torch._dynamo.variables.higher_order_ops: [ERROR] torch._dynamo.exc.Unsupported: comparison PythonModuleVariable() ConstantVariable(NoneType) Epoch 0 metrics: val/neg_snr=-0.7955 val/metric=0.7955 val/sdr=-1.0523 val/neg_si_sdr=7.9343 val/nb_pesq=1.4077 ... Epoch 19 metrics: val/neg_snr=-2.4728 val/metric=2.4728 val/sdr=1.7709 val/neg_si_sdr=2.4059 val/nb_pesq=1.6122 Epoch 20 metrics: val/neg_snr=-2.6547 val/metric=2.6547 val/sdr=2.4562 val/neg_si_sdr=1.7932 val/nb_pesq=1.6122 Epoch 21 metrics: val/neg_snr=283.0917 val/metric=-283.0917 val/sdr=-10.3441 val/neg_si_sdr=34.2788 val/nb_pesq=1.6122 我的训练代码是这样的: python SharedTrainer.py fit --config=configs/onlineSpatialNet.yaml --config=configs/datasets/sms_wsj_plus.yaml --model.channels=[0,3] --model.arch.dim_input=4 --model.arch.dim_output=4 --model.arch.num_freqs=129 --trainer.precision=32-true --model.compile=true --data.batch_size=[2,4] --trainer.devices=0, --trainer.max_epochs=100

抱歉,我没有遇到过这个错误,所以我的经验也不多

@Ezreal11
Copy link

请问一下,我目前只有LDC93S6A这个数据集,在运行 sms_wsj 的make时总是出错,所以只生成了wsj_8k_zeromean(里面是wav文件)和wsj_8k_zermean.json(这文件里的性别,转录文本都是空的,我的kaldi跑不通)这两个文件,我的最终目标是把这个模型应用到2mic的阵列上,进行降噪。我要如何才能跑通这个例子呀?是不是只需要有干净数据就行了?有没有一步一步的操作步骤呀?

请问您最后使用了哪个数据集呢?如何获取wsj0?在官网上注册了说要等管理员接受。

wsj0,这个数据要下载,得是会员

请问只有wsj0的话您是如何处理的?直接make的话会报错

@haha010508
Copy link
Author

请问一下:我训练了一个2通道实时的模型,训练代码如下:

python SharedTrainer.py fit
--config=configs/onlineSpatialNet.yaml
--config=configs/datasets/sms_wsj_plus.yaml
--model.channels=[0,3]
--model.arch.dim_input=4
--model.arch.dim_output=4
--model.arch.num_freqs=129
--trainer.precision=32-true
--model.compile=false
--data.batch_size=[2,4]
--trainer.devices=0,
--trainer.max_epochs=100

但是获得的训练结果如下:

Epoch 93 metrics: val/neg_snr=-6.6020 val/metric=6.6020 val/sdr=7.8546 val/neg_si_sdr=-5.0815 val/nb_pesq=2.1652
Epoch 94 metrics: val/neg_snr=-6.6473 val/metric=6.6473 val/sdr=7.7673 val/neg_si_sdr=-5.1107 val/nb_pesq=2.1775
Epoch 95 metrics: val/neg_snr=-6.6564 val/metric=6.6564 val/sdr=7.8172 val/neg_si_sdr=-5.1415 val/nb_pesq=2.1775
Epoch 96 metrics: val/neg_snr=-6.6518 val/metric=6.6518 val/sdr=7.7476 val/neg_si_sdr=-5.0943 val/nb_pesq=2.1775
Epoch 97 metrics: val/neg_snr=-6.6727 val/metric=6.6727 val/sdr=7.8652 val/neg_si_sdr=-5.1982 val/nb_pesq=2.1775
Epoch 98 metrics: val/neg_snr=-6.6566 val/metric=6.6566 val/sdr=7.8480 val/neg_si_sdr=-5.1465 val/nb_pesq=2.1775
Epoch 99 metrics: val/neg_snr=-6.6429 val/metric=6.6429 val/sdr=7.8766 val/neg_si_sdr=-5.1091 val/nb_pesq=2.1734

这个SDR远远低于您论文里披露的24+,这是学习率的问题吗?我应该怎样调整呢?谢谢

@quancs
Copy link
Member

quancs commented May 21, 2024

...
--config=configs/datasets/sms_wsj_plus.yaml
...
--model.channels=[0,3]
...
这个SDR远远低于您论文里披露的24+,这是学习率的问题吗?我应该怎样调整呢?谢谢

您好,您这个训练是基于2通道的SMS-WSJ-Plus数据集的?该数据集比SMS-WSJ更难,结果更差是正常的。SMS-WSJ-Plus六通道的结果对应于文章中Table I。

@haha010508
Copy link
Author

请问一下,我只关注降噪,不关注分离,就是我只希望输出单通道数据,应该怎样改这个架构呢?谢谢

@Ezreal11
Copy link

请问一下,我只关注降噪,不关注分离,就是我只希望输出单通道数据,应该怎样改这个架构呢?谢谢

我当时把--model.arch.dim_output改成2跑的,相当于输出一个语音

@haha010508
Copy link
Author

请问一下,我只关注降噪,不关注分离,就是我只希望输出单通道数据,应该怎样改这个架构呢?谢谢

我当时把--model.arch.dim_output改成2跑的,相当于输出一个语音

多谢,那个dataset也要改吧?你用的是configs/datasets/sms_wsj_plus.yaml 这个配置文件吗?

@Ezreal11
Copy link

Ezreal11 commented Aug 8, 2024

请问一下,我只关注降噪,不关注分离,就是我只希望输出单通道数据,应该怎样改这个架构呢?谢谢

我当时把--model.arch.dim_output改成2跑的,相当于输出一个语音

多谢,那个dataset也要改吧?你用的是configs/datasets/sms_wsj_plus.yaml 这个配置文件吗?

我用pyroomacoustics模拟的多通道,只包含一个说话人的语音,但是training_loss变NAN了,后面我就没管了😢

@zhixingheyixsh
Copy link

请问一下,我目前只有LDC93S6A这个数据集,在运行 sms_wsj 的make时总是出错,所以只生成了wsj_8k_zeromean(里面是wav文件)和wsj_8k_zermean.json(这文件里的性别,转录文本都是空的,我的kaldi跑不通)这两个文件,我的最终目标是把这个模型应用到2mic的阵列上,进行降噪。我要如何才能跑通这个例子呀?是不是只需要有干净数据就行了?有没有一步一步的操作步骤呀?

没有wsj0数据集,我用aishell里wav文件改成wsj0的文件名和目录,用sms_wsj 里make生成的总报错,该怎么获取wsj0数据集呢?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants