用于手势识别的HMM算法

时间:2013-01-28 22:32:44

标签: algorithm kinect gesture-recognition gestures hidden-markov-models

我想使用Kinect和hidden Markov models开发一个用于手势识别的应用。我在这里看了一个教程:HMM lecture

但我不知道如何开始。什么是状态集以及如何规范化数据以实现HMM学习?我知道(或多或少)应该如何处理信号和简单的“从左到右”的情况,但3D空间让我有点困惑。任何人都可以描述它应该如何开始吗?

有人能描述一下这些步骤吗?特别是我需要知道如何做模型以及HMM算法的步骤应该是什么。

2 个答案:

答案 0 :(得分:10)

将HMM应用于手势识别的一组方法是应用与语音识别常用的类似架构。

HMM不会在空间上,而是随着时间的推移,并且每个视频帧(或来自帧的一组提取的特征)将是来自HMM状态的发射。

不幸的是,基于HMM的语音识别是一个相当大的领域。已经编写了许多书籍和论文来描述不同的架构。我建议从Jelinek的“语音识别统计方法”(http://books.google.ca/books?id=1C9dzcJTWowC&pg=PR5#v=onepage&q&f=false)开始,然后按照那里的参考文献开始。另一个资源是CMU sphinx网页(http://cmusphinx.sourceforge.net)。

要记住的另一件事是基于HMM的系统可能不如条件随机字段或最大边距识别器(例如SVM-struct)等判别方法准确。

对于基于HMM的识别器,整个培训过程通常类似于以下内容:

1)对原始数据执行某种信号处理

  • 对于语音,这将涉及将原始音频转换为mel-cepstrum格式,而对于手势,这可能涉及提取图像功能(SIFT,GIST等)

2)对处理后的数据应用矢量量化(VQ)(也可以使用其他降维技术)

  • 每个群集质心通常与任务的基本单位相关联。例如,在语音识别中,每个质心可以与音素相关联。对于手势识别任务,每个VQ质心可以与姿势或手部配置相关联。

3)手动构建HMM,其状态转换捕获手势中不同姿势的序列。

  • 这些HMM状态的发射分布将以第2步的VQ向量为中心。

  • 在语音识别中,这些HMM是根据音素词典构建的,这些词典为每个单词提供音素序列。

4)构建包含每个单独手势HMM之间的转换的单个HMM(或者在语音识别的情况下,每个音素HMM)。然后,使用手势视频训练复合HMM。

  • 此时还可以在联合训练步骤之前单独训练每个手势HMM。这个额外的训练步骤可能会产生更好的识别器。

对于识别过程,应用信号处理步骤,找到每帧最近的VQ条目,然后找到通过HMM的高评分路径(维特比路径,或来自A *搜索的一组路径之一) )给定量化矢量。此路径在视频中提供预测的手势。

答案 1 :(得分:1)

我为Coursera PGM课程实现了这个2d版本,该课程以kinect手势作为最终单元。

https://www.coursera.org/course/pgm

基本上,我们的想法是你不能使用HMM来实际决定姿势。在我们的单元中,我使用了K-means的一些变体来将姿势分成概率类别。 HMM用于实际确定哪些姿势序列实际上可行作为手势。但是,任何在一组姿势上运行的聚类算法都是一个很好的候选者 - 即使你不知道它们是什么样的姿势或类似的东西。

从那里你可以创建一个模型,该模型根据每个kinect数据点的每个可能姿势的总概率进行训练。

我知道这是一次稀疏的采访。该课程对现有技术进行了很好的概述,但一般来说问题有点难以简化为简单的答案。 (如果你对这个领域感兴趣,我建议你在四月份参加)