使用 RNN (LSTM) 进行手势识别系统

数据挖掘 神经网络 深度学习 喀拉斯 rnn lstm
2021-09-17 06:00:28

我正在尝试构建一个手势识别系统来对ASL(美国手语)手势进行分类,所以我的输入应该是来自相机或视频文件的帧序列,然后它会检测序列并将其映射到对应的上课(睡觉、帮助、吃饭、跑步等)

问题是我已经建立了一个类似的系统,但对于静态图像(不包括运动),它仅对翻译字母很有用,其中构建CNN是一项直接的任务,因为手不会移动太多,而且数据集结构也是可管理的,因为我正在使用keras并且可能仍打算这样做(每个文件夹都包含一组特定标志的图像,文件夹的名称是该标志的类名,例如:A、B、C ,..)

我的问题在这里,我如何组织我的数据集以便能够将其输入到 keras 中的RNN以及我应该使用哪些特定函数来有效地训练我的模型和任何必要的参数,有些人建议使用TimeDistributed类但我不对如何使用它有一个清晰的想法,并考虑到网络中每一层的输入形状。

还考虑到我的数据集将由图像组成,我可能需要一个卷积层,如何将conv层组合到LSTM层中(我的意思是在代码方面)。

例如,我想我的数据集是这样的

数据集结构

名为“运行”的文件夹包含 3 个文件夹 1、2 和 3,每个文件夹对应于其序列中的帧

在此处输入图像描述 在此处输入图像描述 在此处输入图像描述

所以Run_1将包含第一帧的一组图像,第二帧的Run_2和第三帧的Run_3,我的模型的目标是用这个序列训练输出单词Run

1个回答

根据我的理解,这似乎可以归结为一个多类分类问题(每个手势的集合/序列最终对应一个单词/符号)。RNN/LSTM/GRU 架构是一个很好的起点,但计算量大且训练速度慢。但是,您是否绝对需要其中的一个或多个取决于您的数据的结构方式,以及您是否可以将图像视为一组而不是序列。

以下是一些潜在的想法:

  1. dropout首先为每个“RUN_*”文件夹以及和/或flattening在每个层之间设置一个 CNN 层。

  2. 首先设置一个表示序列所有阶段的长向量,然后添加几层 CNN,也可以使用 dropout和/或flattening

这将需要您进行一些探索和调整,以查看最有效的方法,并且您需要选择要优化的评估指标(例如精度/召回率)

我建议使用 CNN 的原因是,在某些情况下,CNN 可以提供与循环模型相似的性能,但成本只是其中的一小部分。不幸的是,很难说几乎没有关于您的数据的信息。