【问题标题】:Classification sequence 4D array data with RNN-LSTM使用 RNN-LSTM 分类序列 4D 数组数据
【发布时间】:2019-05-07 09:17:03
【问题描述】:

我目前正在从事一个项目,我正在尝试创建一个能够对视频中的动作进行分类的机器学习模型。我已经创建了一个脚本,它能够检测视频中的人并根据身体部位的运动生成数据。这会生成一个具有以下输入形状的 4D 数组:

(nframes, nperson, nbodyparts, 每个身体部位 3 个坐标)

仅 1 个持续时间为 3 秒且以 60fps/s 拍摄的视频(2 个人)的输入形状如下所示: (180, 2, 25, 3)

每个视频的 4D 数组都保存为一个 numpy 文件,所以如果我处理 400 个视频。我会得到 400 个 numpy 文件。

下一步是创建一个 keras 或 tensorflow RNN-LSTM 模型,该模型能够在 400 个 numpy 文件上进行训练,并能够处理每个视频的 4D 数组,但我真的不知道如何获得这个去工作。我已经搜索了一些解决方案,但我唯一可以做的就是 Keras 只能使用 3D 数组。

非常感谢您的帮助和对我如何解决这个问题的看法,希望有一个示例代码。

国王的问候,

【问题讨论】:

  • 一种可能的方法是将nbodypartscoordinates 合并到一个维度中,这样输入形状将是(180, 2, 75)。然而,对我来说,将最后三个轴合并为一个轴更有意义,因为它们的顺序并不重要。
  • 你有没有机会知道关于如何重塑数组的教程,所以我可以通过合并 nbodyparts 和坐标来将数组重塑为 (180,2,75)。

标签: python tensorflow keras lstm recurrent-neural-network


【解决方案1】:

我假设您使用的是numpy.array。可以通过np.resahpe() 将 4d 数组重新整形为 3d。可以在here 找到文档。

例子:

import numpy as np

# create a sample 4d array data of shape (10, 2, 25, 3) 
data = np.arange(10*2*25*3).reshape((10, 2, 25, 3))

# condense the 4d array to 3d array by explicitly stating the shape.
data_reshaped = data.reshape((10, 2, 75))

# or you can use -1 to ask numpy infer the dimension
data_reshaped2 = data.reshape((10, 2, -1))

# you can also reshape your data into 2d of shape (10, 150)
data_reshaped3 = data.reshape((10, -1))

然后,您可以按照在线教程来构建模型。示例教程可以是this

注意:您提到“Keras 只能使用 3D 数组”。我认为其中一个维度是为batch_size 保留的。所以,我建议你应该把你的 4d 数组转换成 2d。

【讨论】:

  • 非常感谢您采用这种方法。我会测试它并尽快让你知道。 :)
猜你喜欢
  • 2021-11-03
  • 2016-07-04
  • 2017-09-26
  • 2019-11-25
  • 2020-02-08
  • 2020-07-14
  • 2020-11-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多