处理好的mel_spectrograms 都放到内存中,方便下次使用

首先,在导入部分添加以下内容:

import torch.multiprocessing as mp

__main__ 部分的开始处,使用 mp.Value 创建一个列表,然后将其传递给 Dataset 类:

if __name__ == "__main__":
    mel_spectrograms = mp.Manager().list()
    
    train_dataset = Dataset('train', mel_spectrograms)
    test_dataset = Dataset('val', mel_spectrograms)
    # ...

然后,修改 Dataset 类的 __init__ 方法,以便它接受一个额外的参数 mel_spectrograms

class Dataset(object):
    def __init__(self, split, mel_spectrograms):
        self.all_videos = get_image_list(args.data_root, split)
        self.mel_spectrograms = mel_spectrograms

最后,将 Dataset 类中所有引用 mel_spectrograms 全局变量的地方替换为 self.mel_spectrograms

这样,所有子进程都将使用同一个 mel_spectrograms 列表,从而避免了覆盖已计算值的问题。此外,使用 torch.multiprocessing 模块应该比使用 Manager 类具有更好的性能。

请注意,由于我们现在使用的是列表而不是字典,您需要相应地更新 __getitem__ 方法中与 mel_spectrograms 相关的代码。您可以将 vidname 作为键添加到 mel_spectrograms 列表中,以便在需要时检索它。

        try:
            wavpath = join(vidname, "audio.wav")
            found = False
            for item in self.mel_spectrograms:
                if item[0] == vidname:
                    orig_mel = item[1]
                    found = True
                    break

            if not found:
                wav = audio.load_wav(wavpath, hparams.sample_rate)
                orig_mel = audio.melspectrogram(wav).T
                self.mel_spectrograms.append((vidname, orig_mel))

 except Exception as e:
            continue
          
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值