hyli666 / DNN-SpeechEnhancement

54 stars 27 forks source link

Data files format #3

Closed jomangy closed 6 years ago

jomangy commented 7 years ago

Hi, Good job for converting the project to TF. Can you upload your scrips for generating the data matlab files, or give a short explanation on what is in each file. I tried to figgure jt out, and this is what i think hoing in there, please correct me if somthing is wrong: the train data+label is pre normalized. The label is 2572 = clean data + original noise The data is 2578 = 3 past + present+3 future+ noise estimation The validation part is loaded in different format, as raw spectrogram, and in the code normalize+add noise estimation = 8257 And validation label is original clean data + original noise = 2572

Thanks.

hyli666 commented 7 years ago

Hi, Sorry for my late relpy. I have uploaded my script used to generate both raw and context training data.

I cannot understand what you said “The label is 2572 = clean data + original noise The data is 2578 = 3 past + present+3 future+ noise estimation”

What I did is: First, original noise is added to the clean data in waveform, then we get noisy data. Second, 512-hamming window is used to window and frame the noisy speech. So the number of feature dimensions is 512/2+1=257 for raw noisy data. For context data: 3past+present+3future+noise estimation = 257*8 = 2056 For label: Log Power Spectrum of clean data(257 dims) is calculated in advance.

You can have a check. ^_^

cfwang3 commented 6 years ago

Hi, 非常感谢你能将环境共享出来,我在运行该环境时有以下几个疑问:

  1. STFT函数缺失,该函数对短时傅里叶变换的参数是不是对结果有影响?
  2. 该环境的语音的采样率有没有要求,对什么采样率比较友好8k?16k?
  3. 可否提供制作mvn_store.mat的工具呀,我目前不知道mvn_store.mat中的global_mean和global_std是怎么得到?
  4. RawData_Part888.mat是任意一个语音.mat来初始化的,还是有什么特殊要求呀;

最后非常感谢作者百忙之间抽出时间看到我的信息!!!

hyli666 commented 6 years ago

@cfwang3

你好!

1)STFT函数与ISTFT已经上传。该函数的内部参数包括帧长,帧移已经所用窗函数种类。其中帧长的影响DNN的输入维度。 2)没有要求。不同的采样率下应选择的帧长,在我的STFT函数中选择512点,对应的是16k语音的32ms 3)mvn_store就是把所有的训练样本(noisy feature)保存下来后,计算每个维度的均值与标准差。用来归一化训练数据,使训练时每个维度都近似服从N(0,1) 可参考徐博士的论文(README中)。我计算的mvn_store也已上传。 4)RawData_Part888.mat是我随便保存的一个训练数据以及对应label,用来作为validation set

祝你实验成功-v-

cfwang3 commented 6 years ago

@hyli666 @非常感谢你用心的回答了我这些问题,非常的详细,感觉我的一些困惑都解开了; 有几个问题我要跟讨论: 1)关于问题4)我想跟你确认一下,我的理解就是用RawData_Part888.mat这个训练数据用当前训练的模型来打出一个分数来评估当前训练的模型的好坏,是这样子的么? 2)如果作者样的方便的话,可否上传一下你那边的检测部分以及重建部分的工具或者源码?

hyli666 commented 6 years ago

@cfwang3

1) 对的! 2) 不好意思哈 重建的代码是用matlab写的,因为参考了Wang老师主页里DNN_toolbox的代码,感觉上传他人的代码不大好!你有需要的话可以自行去老师的主页里下载参考。here 具体做法是把训练好的模型参数保存下来后(对应.mat格式),生成net结构体,然后输入noisy信号的频谱幅值,进行DNN的前向计算得到估计的频谱幅值,再结合相位信息通过ISTFT得到增强后的时域信号。

cfwang3 commented 6 years ago

@hyli666 非常感谢你热心的提供资料链接!!

cfwang3 commented 6 years ago

@hyli666 Hi,hyli666: 不好意思,又来打扰了 我这边通过你提供的思路来实现语音处理和重建部分,具体做法如下: 1)我这边是将DNN_sgd_lps.py里面的验证当前模型部分的代码来进行语音的处理的,主要是加载训练好的模型DNN_full_sgd_lr0002_next_model,调用DNN结构处理语音,然后f_props函数会返回一个y值; 2)将y值和相位结合通过ISTFT得到时域信号;

(1)请问我上述的实现的过程是否漏掉了哪个步骤? (2)DNN计算出来的y值是什么?跟最终重建需要的幅值是什么关系(因为我看DNN的输入是3 past + present+3 future+ noise estimation) (3)你那边训练的效果比较好的情况下,验证的Validation cost:一般是多大?

hyli666 commented 6 years ago

@cfwang3

你好! 1) 应该没有错。可能需要注意下y的维度和ISTFT里是否差了个转置。另外训练时用的语音数据是定点格式(short)。 2) DNN预测的y是 当前(present)帧对应的纯净幅度谱 3) 我这边Validation cost 在训练好的情况下最后大概在60~70之间

cfwang3 commented 6 years ago

@hyli666 我转置做了,和最后出来除以32768都做了,我定位出的问题是在检测出来y所对应的N*257的纯净幅度谱不对,0--N所有维度的值是一样的,会不会跟我训练出来的模型参数值不对有关; 请教得太频繁了,每一次在这上面问有点不太方便,方不方便私下联系一下,如果可以的话544589916是我的qq号加我一下