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

未完待续。。。

 

posted on 2022-02-17 16:45  冰冻五尺  阅读(356)  评论(0编辑  收藏  举报

导航