记录Binaural Audio Generation via Multi-task Learning的h5文件制作过程
- 源h5文件
这篇论文是使用的Gao等人在《2.5D Visual Sound》中提出的Fair-Play数据集。该数据集提供了10种训练/验证/测试的数据划分方式,每一种划分方式下均使用h5文件记录的对应音频地址及序号,如下图所示

讯享网
但是,值得注意的是,发表在2021年CVPR《 Vsually Informed Binaural Audio Generation without Binaural Audios》中提到,“Fair-Play数据集提供的划分方式,其训练和测试中的场景重叠,可能来自相同的记录,这会导致严重的过拟合问题。模型可能会学习房间的布局,而不是我们想要的视觉立体关联。”为了解决这一问题,这篇论文的作者“通过重建原始视频并重新分割它们来重新组织 FAIR-Play 数据集”,最终提供了5种划分方式的txt文件,文件内容为对应的“视频序号.mp3"。
2.复现遇见的h5文件问题
在复现时,需要把数据路径更改为复现者自己的路径。这就需要修改包含具体音视频地址和序号的h5文件。上网查找h5文件的修改,有尝试过使用HDFView,但是只读出了h5文件内容,并没有搞清楚如何修改并保存。因此,经过一番探索,我找到了使用正确划分方式并成功生成对应h5文件的方法。
(1)获取新划分方式new_splits
(2)将txt文件内容改为自己所需内容
源txt文件:

使用代码:

import os import numpy as np #.txt文件的路径 path = 'E:\\split1\\test.txt' #open(path)打开.txt文件 with open(path) as f1: cNames = f1.readlines() #.readlines()读取.txt文件的每行 for i in range(0,len(cNames)): cNames[i] = "/home/rootname/binaural16k/"+cNames[i].strip().rstrip('mp3')+'wav'+'\n' #.strip()用于移除字符串头尾指定的字符(默认为空格或换行符) #open(path,'w')以可写方式打开.txt文件,将处理过的cNames写入新的文件中 with open(path,'w') as f2: f2.writelines(cNames)
讯享网
即可得到txt每行格式为/home/rootname/binaural16k/音频序号.wav
(3)改写h5文件
首先需要确定h5文件内容,即读取源h5文件
讯享网import h5py f=h5py.File('train.h5','r')#与h5文件放在同一文件夹下 print(f) for group in f.keys(): print(group) a=f['audio'] for line in a: print(line) print(a.shape) print(a.dtype) f.keys() f.close()
注意打印dtype和shape,以便之后编写自己对应的h5文件。
由结果可知对应的dtype为|S71,shape为(number,)
最后编写对应txt文件
# -*- coding: utf-8 -*- import h5py import numpy as np import os f=h5py.File("train.h5","w") txt=[] with open("/home/rootname/splits/split1/train.txt") as a: a1=a.readlines() for i in range(0,len(a1)): a1[i]=a1[i].strip() print(a1[i]) txt.append(a1[i]) f.create_dataset("audio", (1497,) ,dtype='|S71',data=txt) for key in f.keys(): print(f[key].name) print(f[key].shape) print(f[key].dtype) f.close()

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/28272.html