And*_*oti 6 audio deep-learning tensorflow
我正在使用Nsynth dataset构建网络。它有大约 22 Gb 的数据。现在我正在加载所有内容,RAM但这会带来一些(明显的)问题。
这是一个音频数据集,我想对信号进行窗口化并生成更多示例来更改跃点大小,但是因为我没有无限量的数据,RAM所以在用完它之前我可以做的事情很少(我'我实际上只使用数据集的一个很小的子集,不要告诉谷歌我是怎么生活的)。
这是我现在正在使用的一些代码:
代码:
def generate_audio_input(audio_signal, window_size):
audio_without_silence_at_beginning_and_end = trim_silence(audio_signal, frame_length=window_size)
splited_audio = windower(audio_without_silence_at_beginning_and_end, window_size, hop_size=2048)
return splited_audio
start = time.time()
audios = StrechableNumpyArray()
window_size = 5120
pathToDatasetFolder = 'audio/test'
time_per_loaded = []
time_to_HD = []
for file_name in os.listdir(pathToDatasetFolder):
if file_name.endswith('.wav'):
now = time.time()
audio, sr = librosa.load(pathToDatasetFolder + '/' + file_name, sr=None)
time_to_HD.append(time.time()-now)
output = generate_audio_input(audio, window_size)
audios.append(np.reshape(output, (-1)))
time_per_loaded.append(time.time()-now)
audios = audios.finalize()
audios = np.reshape(audios, (-1, window_size))
np.random.shuffle(audios)
end = time.time()-start
print("wow, that took", end, "seconds... might want to change that to mins :)")
print("On average, it took", np.average(time_per_loaded), "per loaded file")
print("With an standard deviation of", np.std(time_per_loaded))
Run Code Online (Sandbox Code Playgroud)
我想我可以只加载文件名,打乱它们,然后产生 X 加载的结果以获得更动态的方法,但在这种情况下,我仍然会在那些 X 加载的结果中使用所有不同的窗口来发出声音,给我一个非常好的随机化。
我还研究了TFRecords,但我认为这不会改善我在最后一段中提出的任何内容。
那么,对于一个明确的问题:是否有一种标准方法可以在 tensorflow 中动态加载/处理(音频)数据?
如果响应是针对我在开始训练之前预处理我的数据集所解决的特定问题而定制的,我将不胜感激。
如果答案是预处理数据并将其保存到 TFRecord 然后加载 TFRecord,我也会接受它,但我认为这有点矫枉过正。
经过过去几个月与一些大学的讨论,我现在认为标准确实是使用TFRecords。在制作了一些并了解如何使用它们之后,我发现了将它们与音频一起使用时的一些优点和一些缺点。
优点:
RAM取决于您访问的频率HD以及每次访问时要加载的信息量。缺点:
HD. 由于 TFRecord 具有直接馈送到您的网络中的示例,因此它们并不等同于原始音频文件,并且您无法删除它们。由于 TFRecord 中的一些示例是数据增强技术的产物,因此它们往往比原始文件大。(最后一个可能只是使用大数据集的正常结果)。总而言之,我认为尽管它们不是为音频量身定制的,而且一开始也不太容易实现,但它们非常方便和有用。这可能就是为什么大多数使用大数据集的人以及我问过这个问题的人说他们使用它们的原因。
| 归档时间: |
|
| 查看次数: |
754 次 |
| 最近记录: |