【问题标题】:HMM algorithm for gesture recognition手势识别的HMM算法
【发布时间】:2013-01-28 22:32:44
【问题描述】:

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

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

谁能描述一下步骤,怎么做?特别是我需要知道如何做模型以及HMM算法的步骤。

【问题讨论】:

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


    【解决方案1】:

    将 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* 搜索的一组路径之一) 给定量化向量。该路径给出了视频中的预测手势。

    【讨论】:

    • "可能不如判别方法准确" -- Wikipedia: "尽管判别模型不需要对观察到的变量的分布进行建模,但它们通常不能表达更复杂的变量之间的关系观察和目标变量。在分类和回归任务中,它们不一定比生成模型表现更好。”。我认为您的观点具有误导性,您能澄清一下吗?我正在考虑使用不同的方法进行骨架化,例如生成和歧视。
    • 机器学习社区普遍接受的是,除非您对可以合并到生成模型中的问题有很强的先验知识,否则判别方法更适合分类和标签等任务,因为我) 判别目标更好地匹配任务,2) 更容易将不同种类的特征类型合并到判别模型中。
    • 这里有一些文献:语音识别 - cseweb.ucsd.edu/~saul/papers/lmb08_cdhmm.pdf(这对不同的训练技术有很好的回顾)、NLP - cs.brown.edu/~th/papers/AltTsoHof-ICML2003.pdf、字符识别、NLP 解析和机器翻译任务 - @987654326 @
    【解决方案2】:

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

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

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

    您可以从那里创建一个模型,该模型针对每个 kinect 数据点的每个可能姿势的聚合概率进行训练。

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

    【讨论】:

    • 我注册了,谢谢。但我仍然会寻找答案并尝试解决我的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多