【问题标题】:Processing a long audio signal with Conv1D in Keras在 Keras 中使用 Conv1D 处理长音频信号
【发布时间】:2018-05-10 08:48:41
【问题描述】:

我有一个很长的音频信号x,它是一个包含 100000 个样本的一维列表。

为简单起见,假设我要做的就是将其与长度为 15 的滤波器进行卷积,并最终输出 100000 个样本的目标滤波信号y

所以基本上,我正在尝试使用 1D CNN 来处理 y = conv(x, h),并且要训练过滤器 h

在 Keras 中执行此操作的最佳方法是什么?我发现的所有示例似乎都是“每个样本都是长度为 400 个单词的序列,并且卷积沿着该 400 个单词的序列运行”的形式。由此看来,我唯一的选择似乎是将音频信号分成大小为sequence_length 的块,但我真的宁愿避免这种情况,因为我基本上只有 1 个长度为 100000 的输入序列。

理想情况下,代码应该是这样的

import matplotlib.pylab as P
from keras.models import Model
from keras.layers import Conv1D, Input

x_train = P.randn(100000)
y_train = 2*x_train
x_val = P.randn(10000)
y_val = 2*x_val

batch_size = 64

myinput = Input(shape=(None, 1)) # shape = (BATCH_SIZE, 1D signal)
output = Conv1D(
    1, # output dimension is 1
    15, # filter length is 15
    padding="same")(myinput)

model = Model(inputs=myinput, outputs=output)

model.compile(loss='mse',
              optimizer='rmsprop',
              metrics=['mse'])


model.fit(x_train, y_train,
          batch_size=batch_size, epochs=100, shuffle=False,
          validation_data=(x_val, y_val))

当然,这里最大的问题是正确地塑造事物。

【问题讨论】:

  • 我认为我们可以使用 LSTM 做得更好。如果是语音识别,那么您可以根据间隙将音频信号分成几部分和/或您可以尝试使用噪声消除技术。
  • 这个例子是一个过于简单的例子,只是为了展示我对 Conv1D 的问题。我完全意识到 Conv1D 并不是解决这个问题的最佳方法。我只是想知道如何以这种方式使用Conv1D,这样我就可以实现我的真实网络,它松散地基于WaveNets。
  • 澄清一下,我没有做任何输出离散的语音识别之类的事情。输入是长音频波形,最终输出也会是长音频波形。
  • 将 Conv1D 输出传递给 LSTM。并保持 return_sequences = True。试试看

标签: audio neural-network keras convolution keras-layer


【解决方案1】:

你完全在正确的轨道上。

虽然你有一个声音样本(example*),但 keras 仍然会假设你有很多。解决方案就是在您的输入中添加一个维度。

此外,keras 会期望您的卷积数据具有“通道”。如果您只有一个通道(例如,不是立体声),则为其设置一个值为 1 的维度。

因此,您的输入数据应为:

  • (1, 100000, 1) - 如果使用 data_format='channels_last'(默认)
  • (1, 1, 100000) - 如果使用 data_format='chanels_first'

这意味着:长度为 100000 的信号的 1 个样本和一个通道。

您模型中的所有其余部分似乎都非常适合这项任务。


如果您的内存无法同时支持全部数据,那么您需要将音频分成多个块。否则,你很高兴。 (请注意,在划分时,使用padding='valid' 可能会得到更好的结果,因为“相同”会在剪切中添加大量边框效果)。

您可能有兴趣阅读WaveNet 及其相关文章。

他们使用具有膨胀率的堆叠卷积层。


* - 在 Keras 中,每个“示例”都称为“样本”,尽管在音频处理中,样本通常是时间步长。因此,完整的音频文件将是 Keras 中的“样本”。

【讨论】:

  • 为什么wavenet可以在没有频谱图的情况下工作?我看到的大多数模型都依赖于这种转换
猜你喜欢
  • 1970-01-01
  • 2013-06-07
  • 2012-11-01
  • 2012-11-05
  • 1970-01-01
  • 2014-04-10
  • 1970-01-01
  • 2013-01-16
  • 1970-01-01
相关资源
最近更新 更多