SepFormer源码阅读笔记
源码位置: recipes/WHAMandWHAMR/separation
WSJ0的数据咱没有呀,研究下怎么自己造数据做实验~
prepare_data
入口 prepare_wham_whamr_csv,根据data路径做了个分流,转到create_wham_whamr_csv
set_types=["tr", "cv", "tt"],会生成3类 csv 文件,【需要看看这三类分别啥意思】,train、valid、test
add_reverb 在 whamr情况下为True,根据代码可以推测 add_reverb 这个动作是之前做好的
s1 = "s1_reverb/", s1 = "s1_anechoic/", s1 = "s1/"; 【anechoic 无混响?和原先的有什么区别,难道做了一次去混响?】(whamr set_type=tr 时候会被赋为anechoic)
mix_path,s1_path,s2_path,noise_path:1、从path的数量来看最终是三条音频mix,2、原先生成好的应该是s1+s2,后续应该会吧noise合进去(猜的,还没看前面的音频整理及后续的操作)。贴上源码:
mix_path = os.path.join(datapath, "wav{}".format(sample_rate), version, set_type, mix_both,) s1_path = os.path.join(datapath, "wav{}".format(sample_rate), version, set_type, s1,) s2_path = os.path.join(datapath, "wav{}".format(sample_rate), version, set_type, s2,) noise_path = os.path.join(datapath, "wav{}".format(sample_rate), version, set_type, "noise/")
files = os.listdir(mix_path)
mix_fl_paths = [mix_path + fl for fl in files]
s1_fl_paths = [s1_path + fl for fl in files]
s2_fl_paths = [s2_path + fl for fl in files]
noise_fl_paths = [noise_path + fl for fl in files]
【最后这段音频全路径的生成我有点不解,mix,s1,s2,noise 路径下的文件名和数量居然一致?】
csv 表头
csv_columns = [ "ID", "duration", "mix_wav", "mix_wav_format", "mix_wav_opts", "s1_wav", "s1_wav_format", "s1_wav_opts", "s2_wav", "s2_wav_format", "s2_wav_opts", "noise_wav", "noise_wav_format", "noise_wav_opts", # "rir_t", # "rir_format", # "rir_opts", ]
csv全路径:os.path.join(savepath, savename + set_type + ".csv")
然后留意一下这些赋值:
"ID": i, "duration": 1.0, "mix_wav_format": "wav", "mix_wav_opts": None, "s1_wav_format": "wav", "s1_wav_opts": None, "s2_wav_format": "wav", "s2_wav_opts": None, "noise_wav_format": "wav", "noise_wav_opts": None,
至此 prepare_wham_whamr_csv 完成。
本以为prepare data到这就完了,没想到yaml的 use_speedperturb都为True;
所以还会做 create_whamr_rir_csv (rir: Room Impulse Responses)
rir 如果不存在就调 create_rirs 直接造,然后 create_whamr_rir_csv:
csv 全路劲: open(savepath + "/whamr_rirs.csv", "w")
csv_columns = ["ID", "duration", "wav", "wav_format", "wav_opts"] "ID": i, "duration": 2.0, "wav": wav_path, "wav_format": "wav", "wav_opts": None,
【粗略 过了一下 create_rirs 没太读懂,回头细看,从duration的默认赋值来看,时长增加了一倍?这个duration是不是真的有用哟?真的都是1.0、2.0?保持疑问】
这个 if 分支添加了以下元素,【后面留意下是否用到】,后续在 compute_forward 里面用到了【又出现一个新疑问,这东西不会影响训练速度吗?为什么不能再data loading 时候做?】:
hparams["reverb"] = sb.processing.speech_augmentation.AddReverb( os.path.join(hparams["save_folder"], "whamr_rirs.csv"))
【还好 dynamic_mixing: False,不然又要多看一大坨 if 分支代码,先跳过这一part~】
dataio_prep
没有什么特别处理,就是正常的 read
separator
没有 pretrained_separator
auto_mix_prec: True
未完待续。。。