我目前正在探索和学习机器学习的音乐/音频生成,我已经失败的第一步。我的想法是在音频上使用基于图像的学习算法。要做到这一点,我想把音频转换成MEL谱图,然后应用机器学习的东西。然后,当模型被训练时,它显然应该再次产生音乐,这将是梅尔谱图。所以我得把梅尔谱转换回音频。
使用pytorch的torchaudio框架直接生成MEL谱图:
waveform, _ = torchaudio.load(os.path.join(folder, "drums.mp3"), normalize=True, format="mp3")
waveform = waveform.to(device)
mel_spectrogram_transform = torchaudio.transforms.MelSpectrogram(sample_rate=44100, hop_length=512, n_fft=2048, n_mels=512, f_max=16384).to(device)
mel_spectrogram = mel_spectrogram_transform(waveform)为了能够将光谱图保存为图像,还有更多的预处理步骤,但为了简洁起见,我跳过这里。让我头疼的是逆步。torchaudio有一个函数,InverseMelScale。但这是非常缓慢的。以下是代码:
inverse_melscale_transform = torchaudio.transforms.InverseMelScale(sample_rate=44100, n_mels=512, n_stft=2048 // 2 + 1).to(device)
mel_spectrogram = mel_spectrogram.to(device)
spectrogram = inverse_melscale_transform(mel_spectrogram)同样,我在这里省略了更多的步骤,例如,使用GriffinLim从spectrogram获取实际的音频。
以下是我迄今为止所做的工作:我在我的MacBook Pro (英特尔)上运行了代码,它花费了很长时间。然后我在带有256个内核的AMD Ryzen服务器上进行了测试,在那里我能够在几分钟内得到结果。现在我的想法是利用GPU,一个土卫六XP,以获得更快的结果,但即使经过30分钟的计算,100%的GPU利用率,没有看到任何结果。
我做错了什么?为什么AMD Ryzen要快得多?
发布于 2022-12-04 02:00:23
目前,InverseMelScale是使用SGD实现的推理,即在InverseMelScale内部定义丢失函数,并运行优化器。
这种实现不仅效率低下,而且也不准确。
由于选择此实现的原因,您可以查看https://github.com/pytorch/audio/pull/366。
建议采用L B优化器https://github.com/pytorch/audio/issues/2643。
https://stackoverflow.com/questions/74447735
复制相似问题