gpt4 book ai didi

audio - 是否有一种标准方法可以在 tensorflow 中动态加载/处理(音频)数据?

转载 作者:行者123 更新时间:2023-12-02 22:10:19 26 4
gpt4 key购买 nike

我正在使用 the Nsynth dataset 构建网络.它有大约 22 Gb 的数据。现在我正在将所有内容加载到 RAM但这带来了一些(明显的)问题。

这是一个音频数据集,我想对信号进行窗口化并生成更多示例,例如更改跃点大小,但因为我没有无限数量的 RAM在我用完之前,我可以做的事情很少(我实际上只使用数据集的一个很小的子集, don't tell google how I live )。

这是我现在正在使用的一些代码:

代码:

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))

我想我可以只加载文件名,对它们进行混洗,然后产生 X 加载的结果以获得更动态的方法,但在这种情况下,我仍然会在那些 X 加载的结果中使用所有不同的窗口来发出声音,给我一个非常好的随机化。

我也调查过 TFRecords但我认为这不会改善我在最后一段中提出的建议。

那么,对于一个明确的问题:是否有一种标准方法可以在 tensorflow 中动态加载/处理(音频)数据?

如果响应是针对我在开始训练之前预处理我的数据集所解决的特定问题而定制的,我将不胜感激。

如果答案是预处理数据并将其保存到 TFRecord 然后加载 TFRecord,我也会接受它,但我认为这有点矫枉过正。

最佳答案

前几个月和一些大学讨论过,现在觉得标准确实是用TFRecords .在制作了一些并了解如何使用它们之后,我发现将它们与音频一起使用时有几个优点和一些缺点。

好处:

  • 它们完全将问题排入队列,对 RAM 的压力最小。
  • solutions to load examples randomly .您加载了多少示例 RAM将取决于您想要访问 HD 的频率以及每次访问时要加载多少信息。
  • 它们很容易共享,并且预处理(通常)已经合并。您可以让多个流程使用它们,也可以让不同大洲的几个人使用它们,并确定你们都在使用相同的数据。当使用原始音频并动态处理它时,情况并非如此,因为不同的软件可能会以不同的方式应用计算(即 stft 实现 may change soon )。

  • 缺点:
  • 它们太静态了。如果您想以任何方式更改数据集,则需要创建一个新数据集。没有办法修改每个或任何示例。例如,经过几次迭代后,我决定丢弃低幅度的张量。我可以在加载批次后在代码中处理它,但唯一明智的方法是每次发现异常值时丢弃整个批次。
  • 创建它们是一个繁琐而缓慢的过程。在 TFRecord 完成之前,无法开始使用它。此外,如果您决定更改张量的大小或数据类型,您将不得不对代码进行额外的更改并测试它们,因为某些错误(例如数据类型)只是静默传递。
  • 大上HD .由于 TFRecords 的示例直接输入您的网络,因此它们不等同于原始音频文件,您无法删除它们。并且因为 TFRecord 中的一些示例是数据增强技术的产物,所以它们往往比原始文件大。 (最后一个可能只是处理大数据集的正常结果)。

  • 总而言之,我认为即使它们不是为音频量身定制的,而且它们一开始也不太容易实现,但它们非常方便和有用。这可能是大多数使用大型数据集的人以及我问过这个问题的人说他们使用它们的原因。

    关于audio - 是否有一种标准方法可以在 tensorflow 中动态加载/处理(音频)数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47889014/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com